const { default: getParser } = require('../../lib/parser/index.cjs'); test('fenced description', () => { const parsed = getParser({ spacing: 'preserve' })(` /** * @example "" \`\`\`ts @transient() class Foo { } \`\`\` */`); const source = [ { number: 1, source: ' /**', tokens: { start: ' ', delimiter: '/**', postDelimiter: '', tag: '', postTag: '', name: '', postName: '', type: '', postType: '', description: '', end: '', lineEnd: '', }, }, { number: 2, source: ' * @example "" ```ts', tokens: { start: ' ', delimiter: '*', postDelimiter: ' ', tag: '@example', postTag: ' ', name: '""', postName: ' ', type: '', postType: '', description: '```ts', end: '', lineEnd: '', }, }, { number: 3, source: '@transient()', tokens: { start: '', delimiter: '', postDelimiter: '', tag: '', postTag: '', name: '', postName: '', type: '', postType: '', description: '@transient()', end: '', lineEnd: '', }, }, { number: 4, source: 'class Foo { }', tokens: { start: '', delimiter: '', postDelimiter: '', tag: '', postTag: '', name: '', postName: '', type: '', postType: '', description: 'class Foo { }', end: '', lineEnd: '', }, }, { number: 5, source: '```', tokens: { start: '', delimiter: '', postDelimiter: '', tag: '', postTag: '', name: '', postName: '', type: '', postType: '', description: '```', end: '', lineEnd: '', }, }, { number: 6, source: ' */', tokens: { start: ' ', delimiter: '', postDelimiter: '', tag: '', postTag: '', name: '', postName: '', type: '', postType: '', description: '', end: '*/', lineEnd: '', }, }, ]; expect(parsed).toEqual([ { description: '', tags: [ { tag: 'example', name: '', type: '', optional: false, description: '```ts\n@transient()\nclass Foo { }\n```', problems: [], source: source.slice(1), }, ], source, problems: [], }, ]); }); test('fenced one-liner', () => { const parsed = getParser({ spacing: 'preserve' })( '/** @example "" ```ts @transient() class Foo { } ```*/' ); const source = [ { number: 0, source: '/** @example "" ```ts @transient() class Foo { } ```*/', tokens: { start: '', delimiter: '/**', postDelimiter: ' ', tag: '@example', postTag: ' ', name: '""', postName: ' ', type: '', postType: '', description: '```ts @transient() class Foo { } ```', end: '*/', lineEnd: '', }, }, ]; expect(parsed).toEqual([ { description: '', tags: [ { tag: 'example', name: '', type: '', optional: false, description: '```ts @transient() class Foo { } ```', problems: [], source, }, ], source, problems: [], }, ]); }); test('multiple fences', () => { const parsed = getParser({ spacing: 'preserve' })(` /** * @example "" \`\`\`ts @one \`\`\` text \`\`\` @two \`\`\` */`); const source = [ { number: 1, source: ' /**', tokens: { start: ' ', delimiter: '/**', postDelimiter: '', tag: '', postTag: '', name: '', postName: '', type: '', postType: '', description: '', end: '', lineEnd: '', }, }, { number: 2, source: ' * @example "" ```ts', tokens: { start: ' ', delimiter: '*', postDelimiter: ' ', tag: '@example', postTag: ' ', name: '""', postName: ' ', type: '', postType: '', description: '```ts', end: '', lineEnd: '', }, }, { number: 3, source: '@one', tokens: { start: '', delimiter: '', postDelimiter: '', tag: '', postTag: '', name: '', postName: '', type: '', postType: '', description: '@one', end: '', lineEnd: '', }, }, { number: 4, source: '```', tokens: { start: '', delimiter: '', postDelimiter: '', tag: '', postTag: '', name: '', postName: '', type: '', postType: '', description: '```', end: '', lineEnd: '', }, }, { number: 5, source: 'text', tokens: { start: '', delimiter: '', postDelimiter: '', tag: '', postTag: '', name: '', postName: '', type: '', postType: '', description: 'text', end: '', lineEnd: '', }, }, { number: 6, source: '```', tokens: { start: '', delimiter: '', postDelimiter: '', tag: '', postTag: '', name: '', postName: '', type: '', postType: '', description: '```', end: '', lineEnd: '', }, }, { number: 7, source: '@two', tokens: { start: '', delimiter: '', postDelimiter: '', tag: '', postTag: '', name: '', postName: '', type: '', postType: '', description: '@two', end: '', lineEnd: '', }, }, { number: 8, source: '```', tokens: { start: '', delimiter: '', postDelimiter: '', tag: '', postTag: '', name: '', postName: '', type: '', postType: '', description: '```', end: '', lineEnd: '', }, }, { number: 9, source: ' */', tokens: { start: ' ', delimiter: '', postDelimiter: '', tag: '', postTag: '', name: '', postName: '', type: '', postType: '', description: '', end: '*/', lineEnd: '', }, }, ]; expect(parsed).toEqual([ { description: '', tags: [ { tag: 'example', name: '', type: '', optional: false, description: '```ts\n@one\n```\ntext\n```\n@two\n```', source: source.slice(1), problems: [], }, ], source, problems: [], }, ]); }); test('custom fences', () => { const parsed = getParser({ spacing: 'preserve', fence: '###' })(` /** * @example "" ###ts @one ### text ### @two ### */`); const source = [ { number: 1, source: ' /**', tokens: { start: ' ', delimiter: '/**', postDelimiter: '', tag: '', postTag: '', name: '', postName: '', type: '', postType: '', description: '', end: '', lineEnd: '', }, }, { number: 2, source: ' * @example "" ###ts', tokens: { start: ' ', delimiter: '*', postDelimiter: ' ', tag: '@example', postTag: ' ', name: '""', postName: ' ', type: '', postType: '', description: '###ts', end: '', lineEnd: '', }, }, { number: 3, source: '@one', tokens: { start: '', delimiter: '', postDelimiter: '', tag: '', postTag: '', name: '', postName: '', type: '', postType: '', description: '@one', end: '', lineEnd: '', }, }, { number: 4, source: '###', tokens: { start: '', delimiter: '', postDelimiter: '', tag: '', postTag: '', name: '', postName: '', type: '', postType: '', description: '###', end: '', lineEnd: '', }, }, { number: 5, source: 'text', tokens: { start: '', delimiter: '', postDelimiter: '', tag: '', postTag: '', name: '', postName: '', type: '', postType: '', description: 'text', end: '', lineEnd: '', }, }, { number: 6, source: '###', tokens: { start: '', delimiter: '', postDelimiter: '', tag: '', postTag: '', name: '', postName: '', type: '', postType: '', description: '###', end: '', lineEnd: '', }, }, { number: 7, source: '@two', tokens: { start: '', delimiter: '', postDelimiter: '', tag: '', postTag: '', name: '', postName: '', type: '', postType: '', description: '@two', end: '', lineEnd: '', }, }, { number: 8, source: '###', tokens: { start: '', delimiter: '', postDelimiter: '', tag: '', postTag: '', name: '', postName: '', type: '', postType: '', description: '###', end: '', lineEnd: '', }, }, { number: 9, source: ' */', tokens: { start: ' ', delimiter: '', postDelimiter: '', tag: '', postTag: '', name: '', postName: '', type: '', postType: '', description: '', end: '*/', lineEnd: '', }, }, ]; expect(parsed).toEqual([ { description: '', tags: [ { tag: 'example', name: '', type: '', optional: false, description: '###ts\n@one\n###\ntext\n###\n@two\n###', source: source.slice(1), problems: [], }, ], source, problems: [], }, ]); });