@art-md/constructs 0.0.1 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (158) hide show
  1. package/package.json +2 -2
  2. package/src/factories/constructs/Document/factory/createDocument.test.ts +17 -0
  3. package/src/factories/constructs/Document/factory/createDocument.ts +11 -0
  4. package/src/factories/constructs/Document/factory/types.ts +5 -0
  5. package/src/factories/constructs/Document/index.ts +3 -0
  6. package/src/factories/constructs/FieldBlock/factory/createFieldBlock.test.ts +26 -0
  7. package/src/factories/constructs/FieldBlock/factory/createFieldBlock.ts +15 -0
  8. package/src/factories/constructs/FieldBlock/factory/types.ts +8 -0
  9. package/src/factories/constructs/FieldBlock/index.ts +4 -0
  10. package/src/factories/constructs/FieldBlock/types.ts +11 -0
  11. package/src/factories/constructs/FieldInline/factory/createFieldInline.test.ts +26 -0
  12. package/src/factories/constructs/FieldInline/factory/createFieldInline.ts +15 -0
  13. package/src/factories/constructs/FieldInline/factory/types.ts +8 -0
  14. package/src/factories/constructs/FieldInline/index.ts +4 -0
  15. package/src/factories/constructs/FieldInline/types.ts +11 -0
  16. package/src/factories/constructs/NaturalBlock/factory/createNaturalBlock.test.ts +36 -0
  17. package/src/factories/constructs/NaturalBlock/factory/createNaturalBlock.ts +25 -0
  18. package/src/factories/constructs/NaturalBlock/factory/types.ts +13 -0
  19. package/src/factories/constructs/NaturalBlock/index.ts +4 -0
  20. package/src/factories/constructs/NaturalBlock/types.ts +14 -0
  21. package/src/factories/constructs/NaturalExpression/factory/createNaturalExpression.test.ts +22 -0
  22. package/src/factories/constructs/NaturalExpression/factory/createNaturalExpression.ts +13 -0
  23. package/src/factories/constructs/NaturalExpression/factory/types.ts +8 -0
  24. package/src/factories/constructs/NaturalExpression/index.ts +4 -0
  25. package/src/factories/constructs/NaturalExpression/types.ts +9 -0
  26. package/src/factories/constructs/SectionBlock/factory/createSectionBlock.test.ts +30 -0
  27. package/src/factories/constructs/SectionBlock/factory/createSectionBlock.ts +15 -0
  28. package/src/factories/constructs/SectionBlock/factory/types.ts +11 -0
  29. package/src/factories/constructs/SectionBlock/index.ts +4 -0
  30. package/src/factories/constructs/SectionBlock/types.ts +12 -0
  31. package/src/factories/constructs/Tag/factory/createTag.test.ts +10 -0
  32. package/src/factories/constructs/Tag/factory/createTag.ts +7 -0
  33. package/src/factories/constructs/Tag/factory/types.ts +3 -0
  34. package/src/factories/constructs/Tag/index.ts +4 -0
  35. package/src/factories/constructs/Tag/types.ts +6 -0
  36. package/src/factories/index.ts +9 -0
  37. package/src/factories/public.ts +47 -0
  38. package/src/factories/types.ts +36 -0
  39. package/src/index.ts +3 -0
  40. package/src/parser/constructs/FieldBlock/createFieldBlockParser.test.ts +13 -0
  41. package/src/parser/constructs/FieldBlock/createFieldBlockParser.ts +9 -0
  42. package/src/parser/constructs/FieldBlock/index.ts +1 -0
  43. package/src/parser/constructs/FieldBlock/private/helpers/createFieldBlockFromNode.test.ts +63 -0
  44. package/src/parser/constructs/FieldBlock/private/helpers/createFieldBlockFromNode.ts +33 -0
  45. package/src/parser/constructs/FieldBlock/private/helpers/onBeforeConstruct.test.ts +30 -0
  46. package/src/parser/constructs/FieldBlock/private/helpers/onBeforeConstruct.ts +19 -0
  47. package/src/parser/constructs/FieldBlock/private/index.ts +2 -0
  48. package/src/parser/constructs/FieldBlock/private/integrator/createFieldBlockIntegrator.test.ts +23 -0
  49. package/src/parser/constructs/FieldBlock/private/integrator/createFieldBlockIntegrator.ts +13 -0
  50. package/src/parser/constructs/FieldBlock/private/processor/createFieldBlockProcessor.test.ts +63 -0
  51. package/src/parser/constructs/FieldBlock/private/processor/createFieldBlockProcessor.ts +21 -0
  52. package/src/parser/constructs/FieldInline/createFieldInlineParser.test.ts +12 -0
  53. package/src/parser/constructs/FieldInline/createFieldInlineParser.ts +8 -0
  54. package/src/parser/constructs/FieldInline/index.ts +1 -0
  55. package/src/parser/constructs/FieldInline/private/helpers/createFieldInlineFromNode.test.ts +100 -0
  56. package/src/parser/constructs/FieldInline/private/helpers/createFieldInlineFromNode.ts +51 -0
  57. package/src/parser/constructs/FieldInline/private/helpers/trimFieldEdges.test.ts +48 -0
  58. package/src/parser/constructs/FieldInline/private/helpers/trimFieldEdges.ts +18 -0
  59. package/src/parser/constructs/FieldInline/private/index.ts +1 -0
  60. package/src/parser/constructs/FieldInline/private/processor/createFieldInlineProcessor.test.ts +57 -0
  61. package/src/parser/constructs/FieldInline/private/processor/createFieldInlineProcessor.ts +21 -0
  62. package/src/parser/constructs/NaturalBlock/createNaturalBlockParser.test.ts +12 -0
  63. package/src/parser/constructs/NaturalBlock/createNaturalBlockParser.ts +8 -0
  64. package/src/parser/constructs/NaturalBlock/index.ts +1 -0
  65. package/src/parser/constructs/NaturalBlock/private/helpers/createNaturalBlockFromNode.test.ts +101 -0
  66. package/src/parser/constructs/NaturalBlock/private/helpers/createNaturalBlockFromNode.ts +51 -0
  67. package/src/parser/constructs/NaturalBlock/private/index.ts +1 -0
  68. package/src/parser/constructs/NaturalBlock/private/processor/createNaturalBlockProcessor.test.ts +24 -0
  69. package/src/parser/constructs/NaturalBlock/private/processor/createNaturalBlockProcessor.ts +10 -0
  70. package/src/parser/constructs/SectionBlock/createSectionBlockParser.test.ts +13 -0
  71. package/src/parser/constructs/SectionBlock/createSectionBlockParser.ts +9 -0
  72. package/src/parser/constructs/SectionBlock/index.ts +1 -0
  73. package/src/parser/constructs/SectionBlock/private/constants.test.ts +17 -0
  74. package/src/parser/constructs/SectionBlock/private/constants.ts +1 -0
  75. package/src/parser/constructs/SectionBlock/private/helpers/createSectionBlockFromNode.test.ts +58 -0
  76. package/src/parser/constructs/SectionBlock/private/helpers/createSectionBlockFromNode.ts +28 -0
  77. package/src/parser/constructs/SectionBlock/private/helpers/findParentSection.test.ts +44 -0
  78. package/src/parser/constructs/SectionBlock/private/helpers/findParentSection.ts +14 -0
  79. package/src/parser/constructs/SectionBlock/private/index.ts +2 -0
  80. package/src/parser/constructs/SectionBlock/private/integrator/createSectionBlockIntegrator.test.ts +60 -0
  81. package/src/parser/constructs/SectionBlock/private/integrator/createSectionBlockIntegrator.ts +31 -0
  82. package/src/parser/constructs/SectionBlock/private/processor/createSectionBlockProcessor.test.ts +34 -0
  83. package/src/parser/constructs/SectionBlock/private/processor/createSectionBlockProcessor.ts +15 -0
  84. package/src/parser/document/createArtDocumentFromNode.test.ts +23 -0
  85. package/src/parser/document/createArtDocumentFromNode.ts +10 -0
  86. package/src/parser/document/index.ts +1 -0
  87. package/src/parser/fields/constants.test.ts +23 -0
  88. package/src/parser/fields/constants.ts +1 -0
  89. package/src/parser/fields/index.ts +3 -0
  90. package/src/parser/fields/isFieldStrong.test.ts +27 -0
  91. package/src/parser/fields/isFieldStrong.ts +9 -0
  92. package/src/parser/fields/stripStrong.test.ts +38 -0
  93. package/src/parser/fields/stripStrong.ts +12 -0
  94. package/src/parser/index.ts +8 -0
  95. package/src/parser/mdast/index.ts +1 -0
  96. package/src/parser/mdast/rawSlice.test.ts +43 -0
  97. package/src/parser/mdast/rawSlice.ts +8 -0
  98. package/src/parser/naturalExpression/createNaturalExpressionFromNode.test.ts +40 -0
  99. package/src/parser/naturalExpression/createNaturalExpressionFromNode.ts +25 -0
  100. package/src/parser/naturalExpression/index.ts +1 -0
  101. package/src/parser/public.ts +16 -0
  102. package/src/parser/tags/extractTags.test.ts +85 -0
  103. package/src/parser/tags/extractTags.ts +23 -0
  104. package/src/parser/tags/index.ts +1 -0
  105. package/src/parser/types.ts +21 -0
  106. package/src/serializer/constructs/Document/createDocumentToMdast.test.ts +22 -0
  107. package/src/serializer/constructs/Document/createDocumentToMdast.ts +15 -0
  108. package/src/serializer/constructs/Document/index.ts +1 -0
  109. package/src/serializer/constructs/FieldBlock/createFieldBlockToMdast.test.ts +36 -0
  110. package/src/serializer/constructs/FieldBlock/createFieldBlockToMdast.ts +26 -0
  111. package/src/serializer/constructs/FieldBlock/index.ts +1 -0
  112. package/src/serializer/constructs/FieldInline/createFieldInlineToMdast.test.ts +38 -0
  113. package/src/serializer/constructs/FieldInline/createFieldInlineToMdast.ts +27 -0
  114. package/src/serializer/constructs/FieldInline/index.ts +1 -0
  115. package/src/serializer/constructs/NaturalBlock/createNaturalBlockToMdast.test.ts +122 -0
  116. package/src/serializer/constructs/NaturalBlock/createNaturalBlockToMdast.ts +30 -0
  117. package/src/serializer/constructs/NaturalBlock/index.ts +1 -0
  118. package/src/serializer/constructs/NaturalExpression/createNaturalExpressionToMdast.test.ts +29 -0
  119. package/src/serializer/constructs/NaturalExpression/createNaturalExpressionToMdast.ts +15 -0
  120. package/src/serializer/constructs/NaturalExpression/index.ts +1 -0
  121. package/src/serializer/constructs/SectionBlock/createSectionBlockToMdast.test.ts +83 -0
  122. package/src/serializer/constructs/SectionBlock/createSectionBlockToMdast.ts +29 -0
  123. package/src/serializer/constructs/SectionBlock/index.ts +1 -0
  124. package/src/serializer/index.ts +8 -0
  125. package/src/serializer/public.ts +18 -0
  126. package/src/serializer/tags/index.ts +2 -0
  127. package/src/serializer/tags/tagToMdast.test.ts +10 -0
  128. package/src/serializer/tags/tagToMdast.ts +7 -0
  129. package/src/serializer/tags/tagsToMdast.test.ts +19 -0
  130. package/src/serializer/tags/tagsToMdast.ts +10 -0
  131. package/src/serializer/types.ts +10 -0
  132. package/src/test/helpers/constructs/FieldBlock/createFieldBlockFromNodeMock.ts +17 -0
  133. package/src/test/helpers/constructs/FieldBlock/createFieldBlockMock.ts +17 -0
  134. package/src/test/helpers/constructs/FieldBlock/makeFieldBlockFixture.ts +16 -0
  135. package/src/test/helpers/constructs/FieldBlock/makeFieldBlockMock.ts +16 -0
  136. package/src/test/helpers/constructs/FieldInline/createFieldInlineFromNodeMock.ts +17 -0
  137. package/src/test/helpers/constructs/FieldInline/createFieldInlineMock.ts +17 -0
  138. package/src/test/helpers/constructs/FieldInline/makeFieldInlineFixture.ts +16 -0
  139. package/src/test/helpers/constructs/FieldInline/makeFieldInlineMock.ts +16 -0
  140. package/src/test/helpers/constructs/NaturalBlock/createNaturalBlockFromNodeMock.ts +17 -0
  141. package/src/test/helpers/constructs/NaturalBlock/createNaturalBlockMock.ts +17 -0
  142. package/src/test/helpers/constructs/NaturalBlock/makeNaturalBlockFixture.ts +22 -0
  143. package/src/test/helpers/constructs/NaturalBlock/makeNaturalBlockMock.ts +22 -0
  144. package/src/test/helpers/constructs/NaturalExpression/makeNaturalExpressionFixture.ts +18 -0
  145. package/src/test/helpers/constructs/NaturalExpression/makeNaturalExpressionMock.ts +18 -0
  146. package/src/test/helpers/constructs/SectionBlock/createSectionBlockFromNodeMock.ts +17 -0
  147. package/src/test/helpers/constructs/SectionBlock/createSectionBlockMock.ts +17 -0
  148. package/src/test/helpers/constructs/SectionBlock/makeSectionBlockFixture.ts +20 -0
  149. package/src/test/helpers/constructs/Tag/makeTagFixture.ts +10 -0
  150. package/src/test/helpers/constructs/index.ts +14 -0
  151. package/src/test/helpers/index.ts +2 -0
  152. package/src/test/helpers/parsers/fields/stripStrongMock.ts +11 -0
  153. package/src/test/helpers/parsers/index.ts +5 -0
  154. package/src/test/helpers/parsers/mdast/rawSliceMock.ts +9 -0
  155. package/src/test/helpers/parsers/natural-expression/createNaturalExpressionFromNodeMock.ts +16 -0
  156. package/src/test/helpers/parsers/tags/extractTagsMock.ts +12 -0
  157. package/src/test/helpers/parsers/tags/tagToMdastMock.ts +9 -0
  158. package/dist/esm/index.js +0 -3135
@@ -0,0 +1,29 @@
1
+ import { describe, expect, it } from 'vitest';
2
+
3
+ import { makeNaturalExpressionFixture } from '../../../test/helpers';
4
+
5
+ import { createNaturalExpressionToMdast } from './createNaturalExpressionToMdast';
6
+
7
+ describe('createNaturalExpressionToMdast', () => {
8
+ it('WHEN converting a NaturalExpression to an mdast node', () => {
9
+ const toMdast = createNaturalExpressionToMdast();
10
+
11
+ const result = toMdast.toMdast(makeNaturalExpressionFixture() as never, []);
12
+
13
+ expect(result).toEqual({ type: 'text', value: 'hello', children: [] });
14
+ });
15
+
16
+ it('WHEN converting preserves attributes in the mdast node', () => {
17
+ const toMdast = createNaturalExpressionToMdast();
18
+
19
+ const result = toMdast.toMdast(
20
+ makeNaturalExpressionFixture({
21
+ type: 'inlineCode',
22
+ value: 'code',
23
+ attributes: { lang: 'ts' },
24
+ }) as never,
25
+ [],
26
+ );
27
+ expect(result).toEqual({ type: 'inlineCode', value: 'code', lang: 'ts', children: [] });
28
+ });
29
+ });
@@ -0,0 +1,15 @@
1
+ import type { Node } from 'mdast';
2
+
3
+ import type { NaturalExpression } from '../../../factories';
4
+ import type { ConstructSerializer } from '../../types';
5
+
6
+ export function createNaturalExpressionToMdast(): ConstructSerializer {
7
+ return {
8
+ name: 'NaturalExpression',
9
+ toMdast(node, children) {
10
+ const expression = node as unknown as NaturalExpression;
11
+ const attributes = { ...expression.attributes };
12
+ return { type: expression.type, value: expression.value, children, ...attributes } as Node;
13
+ },
14
+ };
15
+ }
@@ -0,0 +1 @@
1
+ export { createNaturalExpressionToMdast } from './createNaturalExpressionToMdast';
@@ -0,0 +1,83 @@
1
+ import { describe, expect, it } from 'vitest';
2
+
3
+ import { makeSectionBlockFixture, makeTagFixture } from '../../../test/helpers';
4
+
5
+ import { createSectionBlockToMdast } from './createSectionBlockToMdast';
6
+
7
+ function stripPositions(node: unknown): unknown {
8
+ if (node === null || typeof node !== 'object') return node;
9
+ if (Array.isArray(node)) return node.map(stripPositions);
10
+ const obj = node as Record<string, unknown>;
11
+ const rest: Record<string, unknown> = {};
12
+ for (const key of Object.keys(obj)) {
13
+ if (key === 'position') continue;
14
+ rest[key] = stripPositions(obj[key]);
15
+ }
16
+ return rest;
17
+ }
18
+
19
+ describe('createSectionBlockToMdast', () => {
20
+ it('WHEN converting a SectionBlock to an mdast heading', () => {
21
+ const toMdast = createSectionBlockToMdast();
22
+
23
+ const result = toMdast.toMdast(
24
+ makeSectionBlockFixture({ name: 'Module', depth: 1 }) as never,
25
+ [],
26
+ );
27
+
28
+ expect(stripPositions(result)).toEqual({
29
+ type: 'heading',
30
+ depth: 1,
31
+ children: [{ type: 'text', value: 'Module' }],
32
+ });
33
+ });
34
+
35
+ it('WHEN not provided defaults depth to 1', () => {
36
+ const toMdast = createSectionBlockToMdast();
37
+
38
+ const result = toMdast.toMdast(makeSectionBlockFixture({ name: 'Section' }) as never, []);
39
+
40
+ expect(stripPositions(result)).toEqual({
41
+ type: 'heading',
42
+ depth: 1,
43
+ children: [{ type: 'text', value: 'Section' }],
44
+ });
45
+ });
46
+
47
+ it('WHEN converting preserves inline formatting in heading names', () => {
48
+ const toMdast = createSectionBlockToMdast();
49
+
50
+ const result = toMdast.toMdast(
51
+ makeSectionBlockFixture({ name: 'Hello _World_! How are **you**?', depth: 1 }) as never,
52
+ [],
53
+ );
54
+ expect(stripPositions(result)).toEqual({
55
+ type: 'heading',
56
+ depth: 1,
57
+ children: [
58
+ { type: 'text', value: 'Hello ' },
59
+ { type: 'emphasis', children: [{ type: 'text', value: 'World' }] },
60
+ { type: 'text', value: '! How are ' },
61
+ { type: 'strong', children: [{ type: 'text', value: 'you' }] },
62
+ { type: 'text', value: '?' },
63
+ ],
64
+ });
65
+ });
66
+
67
+ it('WHEN present includes tags in the heading text', () => {
68
+ const toMdast = createSectionBlockToMdast();
69
+
70
+ const result = toMdast.toMdast(
71
+ makeSectionBlockFixture({ name: 'Hello', depth: 1, tags: [makeTagFixture()] }) as never,
72
+ [],
73
+ );
74
+ expect(stripPositions(result)).toEqual({
75
+ type: 'heading',
76
+ depth: 1,
77
+ children: [
78
+ { type: 'text', value: 'Hello' },
79
+ { type: 'text', value: ' (#test)' },
80
+ ],
81
+ });
82
+ });
83
+ });
@@ -0,0 +1,29 @@
1
+ import type { Node, RootContent } from 'mdast';
2
+ import { fromMarkdown } from 'mdast-util-from-markdown';
3
+
4
+ import type { SectionBlock } from '../../../factories';
5
+ import { tagsToMdast } from '../../tags';
6
+ import type { ConstructSerializer } from '../../types';
7
+
8
+ export function createSectionBlockToMdast(): ConstructSerializer {
9
+ return {
10
+ name: 'SectionBlock',
11
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
12
+ toMdast(node, _children) {
13
+ const section = node as unknown as SectionBlock;
14
+ const depth = section.depth ?? 1;
15
+ const parsed = fromMarkdown(`# ${section.name}`);
16
+ const heading = parsed.children.find(child => child.type === 'heading');
17
+ const tagNode = section.tags?.length ? tagsToMdast(section.tags) : null;
18
+ const children: RootContent[] =
19
+ heading && 'children' in heading
20
+ ? [...heading.children, ...(tagNode ? [tagNode] : [])]
21
+ : [{ type: 'text' as const, value: section.name }, ...(tagNode ? [tagNode] : [])];
22
+ return {
23
+ type: 'heading',
24
+ depth: depth as 1 | 2 | 3 | 4 | 5 | 6,
25
+ children,
26
+ } as Node;
27
+ },
28
+ };
29
+ }
@@ -0,0 +1 @@
1
+ export { createSectionBlockToMdast } from './createSectionBlockToMdast';
@@ -0,0 +1,8 @@
1
+ export * from './constructs/Document';
2
+ export * from './constructs/FieldBlock';
3
+ export * from './constructs/FieldInline';
4
+ export * from './constructs/NaturalBlock';
5
+ export * from './constructs/NaturalExpression';
6
+ export * from './constructs/SectionBlock';
7
+
8
+ export type * from './types';
@@ -0,0 +1,18 @@
1
+ import { createDocumentToMdast } from './constructs/Document';
2
+ import { createFieldBlockToMdast } from './constructs/FieldBlock';
3
+ import { createFieldInlineToMdast } from './constructs/FieldInline';
4
+ import { createNaturalBlockToMdast } from './constructs/NaturalBlock';
5
+ import { createNaturalExpressionToMdast } from './constructs/NaturalExpression';
6
+ import { createSectionBlockToMdast } from './constructs/SectionBlock';
7
+ import type { ConstructSerializerFactory } from './types';
8
+
9
+ export const CONSTRUCT_SERIALIZERS: ConstructSerializerFactory[] = [
10
+ createDocumentToMdast,
11
+ createFieldBlockToMdast,
12
+ createFieldInlineToMdast,
13
+ createNaturalBlockToMdast,
14
+ createNaturalExpressionToMdast,
15
+ createSectionBlockToMdast,
16
+ ];
17
+
18
+ export type * from './types';
@@ -0,0 +1,2 @@
1
+ export { tagToMdast } from './tagToMdast';
2
+ export { tagsToMdast } from './tagsToMdast';
@@ -0,0 +1,10 @@
1
+ import { describe, expect, it } from 'vitest';
2
+
3
+ import { tagToMdast } from './tagToMdast';
4
+
5
+ describe('tagToMdast', () => {
6
+ it('WHEN called returns a text node with the tag name', () => {
7
+ const result = tagToMdast({ construct: 'Tag', name: 'friend' });
8
+ expect(result).toEqual({ type: 'text', value: '(#friend)' });
9
+ });
10
+ });
@@ -0,0 +1,7 @@
1
+ import type { Text } from 'mdast';
2
+
3
+ import type { Tag } from '../../factories';
4
+
5
+ export function tagToMdast(tag: Tag): Text {
6
+ return { type: 'text', value: `(#${tag.name})` };
7
+ }
@@ -0,0 +1,19 @@
1
+ import { describe, expect, it, vi } from 'vitest';
2
+
3
+ import { tagToMdastMock } from '../../test/helpers';
4
+
5
+ import { tagsToMdast } from './tagsToMdast';
6
+
7
+ vi.mock('./tagToMdast', () => {
8
+ return tagToMdastMock();
9
+ });
10
+
11
+ describe('tagsToMdast', () => {
12
+ it('WHEN joining tag values into a text node', async () => {
13
+ const result = tagsToMdast([
14
+ { construct: 'Tag', name: 'a' },
15
+ { construct: 'Tag', name: 'b' },
16
+ ]);
17
+ expect(result).toEqual({ type: 'text', value: ' (#a) (#b)' });
18
+ });
19
+ });
@@ -0,0 +1,10 @@
1
+ import type { Text } from 'mdast';
2
+
3
+ import type { Tag } from '../../factories';
4
+
5
+ import { tagToMdast } from './tagToMdast';
6
+
7
+ export function tagsToMdast(tags: Tag[]): Text {
8
+ const value = tags.map(tag => tagToMdast(tag).value).join(' ');
9
+ return { type: 'text', value: ` ${value}` };
10
+ }
@@ -0,0 +1,10 @@
1
+ import type { Node } from 'mdast';
2
+
3
+ import type { Construct } from '../factories';
4
+
5
+ export type ConstructSerializer = {
6
+ readonly name: string;
7
+ toMdast(node: Construct, children: Node[]): Node;
8
+ };
9
+
10
+ export type ConstructSerializerFactory = () => ConstructSerializer;
@@ -0,0 +1,17 @@
1
+ /**
2
+ * @mocks createFieldBlockFromNode() from `src/constructs/FieldBlock/private/helpers`
3
+ */
4
+
5
+ import { vi } from 'vitest';
6
+
7
+ export const createFieldBlockFromNodeMock = (
8
+ name: string = 'Test',
9
+ ): {
10
+ createFieldBlockFromNode: ReturnType<typeof vi.fn>;
11
+ } => ({
12
+ createFieldBlockFromNode: vi.fn(() => ({
13
+ construct: 'FieldBlock',
14
+ name,
15
+ children: [],
16
+ })),
17
+ });
@@ -0,0 +1,17 @@
1
+ /**
2
+ * @mocks createFieldBlock() from `src/constructs/FieldBlock/private/factory`
3
+ */
4
+
5
+ import { vi } from 'vitest';
6
+
7
+ export const createFieldBlockMock = (
8
+ name: string = 'Test',
9
+ ): {
10
+ createFieldBlock: ReturnType<typeof vi.fn>;
11
+ } => ({
12
+ createFieldBlock: vi.fn(() => ({
13
+ construct: 'FieldBlock',
14
+ name,
15
+ children: [],
16
+ })),
17
+ });
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @fixture FieldBlock of factory`libs/constructs/src/constructs/FieldBlock/factory/createFieldBlock.ts`
3
+ */
4
+
5
+ import type { FieldBlock, Tag } from '../../../../factories';
6
+
7
+ export const makeFieldBlockFixture = (options?: {
8
+ name?: string;
9
+ children?: FieldBlock['children'];
10
+ tags?: Tag[];
11
+ }): FieldBlock => ({
12
+ construct: 'FieldBlock',
13
+ name: options?.name ?? 'Test',
14
+ children: options?.children ?? [],
15
+ ...(options?.tags !== undefined ? { tags: options.tags } : {}),
16
+ });
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @fixture FieldBlock of factory`libs/constructs/src/constructs/FieldBlock/private/factory/createFieldBlock.ts`
3
+ */
4
+
5
+ import type { FieldBlock, Tag } from '../../../../factories';
6
+
7
+ export const makeFieldBlockMock = (options?: {
8
+ name?: string;
9
+ children?: FieldBlock['children'];
10
+ tags?: Tag[];
11
+ }): FieldBlock => ({
12
+ construct: 'FieldBlock',
13
+ name: options?.name ?? 'Test',
14
+ children: options?.children ?? [],
15
+ ...(options?.tags !== undefined ? { tags: options.tags } : {}),
16
+ });
@@ -0,0 +1,17 @@
1
+ /**
2
+ * @mocks createFieldInlineFromNode() from `src/constructs/FieldInline/private/helpers`
3
+ */
4
+
5
+ import { vi } from 'vitest';
6
+
7
+ export const createFieldInlineFromNodeMock = (
8
+ name: string = 'Test',
9
+ ): {
10
+ createFieldInlineFromNode: ReturnType<typeof vi.fn>;
11
+ } => ({
12
+ createFieldInlineFromNode: vi.fn(() => ({
13
+ construct: 'FieldInline',
14
+ name,
15
+ children: [],
16
+ })),
17
+ });
@@ -0,0 +1,17 @@
1
+ /**
2
+ * @mocks createFieldInline() from `src/constructs/FieldInline/private/factory`
3
+ */
4
+
5
+ import { vi } from 'vitest';
6
+
7
+ export const createFieldInlineMock = (
8
+ name: string = 'Test',
9
+ ): {
10
+ createFieldInline: ReturnType<typeof vi.fn>;
11
+ } => ({
12
+ createFieldInline: vi.fn(() => ({
13
+ construct: 'FieldInline',
14
+ name,
15
+ children: [],
16
+ })),
17
+ });
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @fixture FieldInline of factory`libs/constructs/src/constructs/FieldInline/factory/createFieldInline.ts`
3
+ */
4
+
5
+ import type { FieldInline, Tag } from '../../../../factories';
6
+
7
+ export const makeFieldInlineFixture = (options?: {
8
+ name?: string;
9
+ children?: FieldInline['children'];
10
+ tags?: Tag[];
11
+ }): FieldInline => ({
12
+ construct: 'FieldInline',
13
+ name: options?.name ?? 'Test',
14
+ children: options?.children ?? [],
15
+ ...(options?.tags !== undefined ? { tags: options.tags } : {}),
16
+ });
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @fixture FieldInline of factory`libs/constructs/src/constructs/FieldInline/private/factory/createFieldInline.ts`
3
+ */
4
+
5
+ import type { FieldInline, Tag } from '../../../../factories';
6
+
7
+ export const makeFieldInlineMock = (options?: {
8
+ name?: string;
9
+ children?: FieldInline['children'];
10
+ tags?: Tag[];
11
+ }): FieldInline => ({
12
+ construct: 'FieldInline',
13
+ name: options?.name ?? 'Test',
14
+ children: options?.children ?? [],
15
+ ...(options?.tags !== undefined ? { tags: options.tags } : {}),
16
+ });
@@ -0,0 +1,17 @@
1
+ /**
2
+ * @mocks createNaturalBlockFromNode() from `src/constructs/NaturalBlock/private/helpers`
3
+ */
4
+
5
+ import { vi } from 'vitest';
6
+
7
+ export const createNaturalBlockFromNodeMock = (
8
+ value: string = 'hello',
9
+ ): {
10
+ createNaturalBlockFromNode: ReturnType<typeof vi.fn>;
11
+ } => ({
12
+ createNaturalBlockFromNode: vi.fn(() => ({
13
+ construct: 'NaturalBlock',
14
+ value,
15
+ children: [],
16
+ })),
17
+ });
@@ -0,0 +1,17 @@
1
+ /**
2
+ * @mocks createNaturalBlock() from `src/constructs/NaturalBlock/private/factory`
3
+ */
4
+
5
+ import { vi } from 'vitest';
6
+
7
+ export const createNaturalBlockMock = (
8
+ value: string = 'hello',
9
+ ): {
10
+ createNaturalBlock: ReturnType<typeof vi.fn>;
11
+ } => ({
12
+ createNaturalBlock: vi.fn(() => ({
13
+ construct: 'NaturalBlock',
14
+ value,
15
+ children: [],
16
+ })),
17
+ });
@@ -0,0 +1,22 @@
1
+ /**
2
+ * @fixture NaturalBlock of factory`libs/constructs/src/constructs/NaturalBlock/factory/createNaturalBlock.ts`
3
+ */
4
+
5
+ import type { NaturalBlock, Tag } from '../../../../factories';
6
+
7
+ export const makeNaturalBlockFixture = (options?: {
8
+ value?: string;
9
+ type?: string;
10
+ lang?: string | null;
11
+ meta?: string | null;
12
+ children?: NaturalBlock['children'];
13
+ tags?: Tag[];
14
+ }): NaturalBlock => ({
15
+ construct: 'NaturalBlock',
16
+ value: options?.value ?? 'hello',
17
+ children: options?.children ?? [],
18
+ ...(options?.type !== undefined ? { type: options.type } : {}),
19
+ ...(options?.lang !== undefined ? { lang: options.lang } : {}),
20
+ ...(options?.meta !== undefined ? { meta: options.meta } : {}),
21
+ ...(options?.tags !== undefined ? { tags: options.tags } : {}),
22
+ });
@@ -0,0 +1,22 @@
1
+ /**
2
+ * @fixture NaturalBlock of factory`libs/constructs/src/constructs/NaturalBlock/private/factory/createNaturalBlock.ts`
3
+ */
4
+
5
+ import type { NaturalBlock, Tag } from '../../../../factories';
6
+
7
+ export const makeNaturalBlockMock = (options?: {
8
+ value?: string;
9
+ type?: string;
10
+ lang?: string | null;
11
+ meta?: string | null;
12
+ children?: NaturalBlock['children'];
13
+ tags?: Tag[];
14
+ }): NaturalBlock => ({
15
+ construct: 'NaturalBlock',
16
+ value: options?.value ?? 'hello',
17
+ children: options?.children ?? [],
18
+ ...(options?.type !== undefined ? { type: options.type } : {}),
19
+ ...(options?.lang !== undefined ? { lang: options.lang } : {}),
20
+ ...(options?.meta !== undefined ? { meta: options.meta } : {}),
21
+ ...(options?.tags !== undefined ? { tags: options.tags } : {}),
22
+ });
@@ -0,0 +1,18 @@
1
+ /**
2
+ * @fixture NaturalExpression of factory`libs/constructs/src/constructs/NaturalExpression/factory/createNaturalExpression.ts`
3
+ */
4
+
5
+ import type { NaturalExpression } from '../../../../factories';
6
+
7
+ export const makeNaturalExpressionFixture = (options?: {
8
+ type?: string;
9
+ value?: string;
10
+ attributes?: Record<string, unknown>;
11
+ children?: NaturalExpression['children'];
12
+ }): NaturalExpression => ({
13
+ construct: 'NaturalExpression',
14
+ type: options?.type ?? 'text',
15
+ value: options?.value ?? 'hello',
16
+ children: options?.children ?? [],
17
+ ...(options?.attributes !== undefined ? { attributes: options.attributes } : {}),
18
+ });
@@ -0,0 +1,18 @@
1
+ /**
2
+ * @fixture NaturalExpression of factory`libs/constructs/src/constructs/NaturalExpression/private/factory/createNaturalExpression.ts`
3
+ */
4
+
5
+ import type { NaturalExpression } from '../../../../factories';
6
+
7
+ export const makeNaturalExpressionMock = (options?: {
8
+ type?: string;
9
+ value?: string;
10
+ attributes?: Record<string, unknown>;
11
+ children?: NaturalExpression['children'];
12
+ }): NaturalExpression => ({
13
+ construct: 'NaturalExpression',
14
+ type: options?.type ?? 'text',
15
+ value: options?.value ?? 'hello',
16
+ children: options?.children ?? [],
17
+ ...(options?.attributes !== undefined ? { attributes: options.attributes } : {}),
18
+ });
@@ -0,0 +1,17 @@
1
+ /**
2
+ * @mocks createSectionBlockFromNode() from `src/constructs/SectionBlock/private/helpers`
3
+ */
4
+
5
+ import { vi } from 'vitest';
6
+
7
+ export const createSectionBlockFromNodeMock = (
8
+ name: string = 'Test',
9
+ ): {
10
+ createSectionBlockFromNode: ReturnType<typeof vi.fn>;
11
+ } => ({
12
+ createSectionBlockFromNode: vi.fn(() => ({
13
+ construct: 'SectionBlock',
14
+ name,
15
+ children: [],
16
+ })),
17
+ });
@@ -0,0 +1,17 @@
1
+ /**
2
+ * @mocks createSectionBlock() from `src/constructs/SectionBlock/private/factory`
3
+ */
4
+
5
+ import { vi } from 'vitest';
6
+
7
+ export const createSectionBlockMock = (
8
+ name: string = 'Test',
9
+ ): {
10
+ createSectionBlock: ReturnType<typeof vi.fn>;
11
+ } => ({
12
+ createSectionBlock: vi.fn(() => ({
13
+ construct: 'SectionBlock',
14
+ name,
15
+ children: [],
16
+ })),
17
+ });
@@ -0,0 +1,20 @@
1
+ /**
2
+ * @fixture SectionBlock of factory`libs/constructs/src/constructs/SectionBlock/factory/createSectionBlock.ts`
3
+ */
4
+
5
+ import type { SectionBlock, Tag } from '../../../../factories';
6
+
7
+ export const makeSectionBlockFixture = (options?: {
8
+ name?: string;
9
+ depth?: number;
10
+ kind?: string;
11
+ children?: SectionBlock['children'];
12
+ tags?: Tag[];
13
+ }): SectionBlock => ({
14
+ construct: 'SectionBlock',
15
+ name: options?.name ?? 'Test',
16
+ children: options?.children ?? [],
17
+ ...(options?.depth !== undefined ? { depth: options.depth } : {}),
18
+ ...(options?.kind !== undefined ? { kind: options.kind } : {}),
19
+ ...(options?.tags !== undefined ? { tags: options.tags } : {}),
20
+ });
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @fixture Tag of factory`libs/constructs/src/constructs/Tag/factory/createTag.ts`
3
+ */
4
+
5
+ import type { Tag } from '../../../../factories';
6
+
7
+ export const makeTagFixture = (options?: { name?: string }): Tag => ({
8
+ construct: 'Tag',
9
+ name: options?.name ?? 'test',
10
+ });
@@ -0,0 +1,14 @@
1
+ export * from './FieldBlock/createFieldBlockFromNodeMock';
2
+ export * from './FieldBlock/createFieldBlockMock';
3
+ export * from './FieldBlock/makeFieldBlockFixture';
4
+ export * from './FieldInline/createFieldInlineFromNodeMock';
5
+ export * from './FieldInline/createFieldInlineMock';
6
+ export * from './FieldInline/makeFieldInlineFixture';
7
+ export * from './NaturalBlock/createNaturalBlockFromNodeMock';
8
+ export * from './NaturalBlock/createNaturalBlockMock';
9
+ export * from './NaturalBlock/makeNaturalBlockFixture';
10
+ export * from './NaturalExpression/makeNaturalExpressionFixture';
11
+ export * from './SectionBlock/createSectionBlockFromNodeMock';
12
+ export * from './SectionBlock/createSectionBlockMock';
13
+ export * from './SectionBlock/makeSectionBlockFixture';
14
+ export * from './Tag/makeTagFixture';
@@ -0,0 +1,2 @@
1
+ export * from './constructs';
2
+ export * from './parsers';
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @mocks stripStrong() from `src/parsers/fields`
3
+ */
4
+
5
+ import { vi } from 'vitest';
6
+
7
+ export const stripStrongMock = (
8
+ returnValue: string = '',
9
+ ): { stripStrong: ReturnType<typeof vi.fn> } => ({
10
+ stripStrong: vi.fn(() => returnValue),
11
+ });
@@ -0,0 +1,5 @@
1
+ export * from './fields/stripStrongMock';
2
+ export * from './mdast/rawSliceMock';
3
+ export * from './natural-expression/createNaturalExpressionFromNodeMock';
4
+ export * from './tags/extractTagsMock';
5
+ export * from './tags/tagToMdastMock';
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @mocks rawSlice() from `src/parsers/mdast`
3
+ */
4
+
5
+ import { vi } from 'vitest';
6
+
7
+ export const rawSliceMock = (returnValue: string = ''): { rawSlice: ReturnType<typeof vi.fn> } => ({
8
+ rawSlice: vi.fn(() => returnValue),
9
+ });