@stego-labs/engine 1.0.1 → 1.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 (117) hide show
  1. package/README.md +75 -63
  2. package/dist/stego-engine/src/collections/index.d.ts +2 -2
  3. package/dist/stego-engine/src/collections/index.d.ts.map +1 -1
  4. package/dist/stego-engine/src/collections/index.js +1 -1
  5. package/dist/stego-engine/src/collections/index.js.map +1 -1
  6. package/dist/stego-engine/src/collections/internal/grouping.d.ts.map +1 -1
  7. package/dist/stego-engine/src/collections/internal/grouping.js +1 -17
  8. package/dist/stego-engine/src/collections/internal/grouping.js.map +1 -1
  9. package/dist/stego-engine/src/collections/internal/sorting.d.ts +2 -1
  10. package/dist/stego-engine/src/collections/internal/sorting.d.ts.map +1 -1
  11. package/dist/stego-engine/src/collections/public/types.d.ts +1 -10
  12. package/dist/stego-engine/src/collections/public/types.d.ts.map +1 -1
  13. package/dist/stego-engine/src/compile/internal/load-content.d.ts +7 -0
  14. package/dist/stego-engine/src/compile/internal/load-content.d.ts.map +1 -0
  15. package/dist/stego-engine/src/compile/internal/load-content.js +151 -0
  16. package/dist/stego-engine/src/compile/internal/load-content.js.map +1 -0
  17. package/dist/stego-engine/src/compile/public/buildTemplateContext.d.ts.map +1 -1
  18. package/dist/stego-engine/src/compile/public/buildTemplateContext.js +5 -12
  19. package/dist/stego-engine/src/compile/public/buildTemplateContext.js.map +1 -1
  20. package/dist/stego-engine/src/compile/public/compileProject.js +2 -2
  21. package/dist/stego-engine/src/compile/public/compileProject.js.map +1 -1
  22. package/dist/stego-engine/src/compile/public/types.d.ts +4 -4
  23. package/dist/stego-engine/src/compile/public/types.d.ts.map +1 -1
  24. package/dist/stego-engine/src/index.d.ts +5 -3
  25. package/dist/stego-engine/src/index.d.ts.map +1 -1
  26. package/dist/stego-engine/src/index.js +2 -1
  27. package/dist/stego-engine/src/index.js.map +1 -1
  28. package/dist/stego-engine/src/ir/index.d.ts +3 -0
  29. package/dist/stego-engine/src/ir/index.d.ts.map +1 -1
  30. package/dist/stego-engine/src/ir/index.js +3 -0
  31. package/dist/stego-engine/src/ir/index.js.map +1 -1
  32. package/dist/stego-engine/src/ir/nodes/heading.d.ts +2 -2
  33. package/dist/stego-engine/src/ir/nodes/heading.d.ts.map +1 -1
  34. package/dist/stego-engine/src/ir/nodes/heading.js.map +1 -1
  35. package/dist/stego-engine/src/ir/nodes/keep-together.d.ts +3 -0
  36. package/dist/stego-engine/src/ir/nodes/keep-together.d.ts.map +1 -0
  37. package/dist/stego-engine/src/ir/nodes/keep-together.js +7 -0
  38. package/dist/stego-engine/src/ir/nodes/keep-together.js.map +1 -0
  39. package/dist/stego-engine/src/ir/nodes/link.d.ts +6 -0
  40. package/dist/stego-engine/src/ir/nodes/link.d.ts.map +1 -0
  41. package/dist/stego-engine/src/ir/nodes/link.js +10 -0
  42. package/dist/stego-engine/src/ir/nodes/link.js.map +1 -0
  43. package/dist/stego-engine/src/ir/nodes/markdown.d.ts +7 -1
  44. package/dist/stego-engine/src/ir/nodes/markdown.d.ts.map +1 -1
  45. package/dist/stego-engine/src/ir/nodes/markdown.js +3 -2
  46. package/dist/stego-engine/src/ir/nodes/markdown.js.map +1 -1
  47. package/dist/stego-engine/src/ir/nodes/paragraph.d.ts +2 -2
  48. package/dist/stego-engine/src/ir/nodes/paragraph.d.ts.map +1 -1
  49. package/dist/stego-engine/src/ir/nodes/paragraph.js.map +1 -1
  50. package/dist/stego-engine/src/ir/nodes/plain-text.d.ts +9 -0
  51. package/dist/stego-engine/src/ir/nodes/plain-text.d.ts.map +1 -0
  52. package/dist/stego-engine/src/ir/nodes/plain-text.js +8 -0
  53. package/dist/stego-engine/src/ir/nodes/plain-text.js.map +1 -0
  54. package/dist/stego-engine/src/ir/types.d.ts +28 -4
  55. package/dist/stego-engine/src/ir/types.d.ts.map +1 -1
  56. package/dist/stego-engine/src/render/internal/backends/pandoc/lower-to-render-plan.d.ts +2 -1
  57. package/dist/stego-engine/src/render/internal/backends/pandoc/lower-to-render-plan.d.ts.map +1 -1
  58. package/dist/stego-engine/src/render/internal/backends/pandoc/lower-to-render-plan.js +9 -3
  59. package/dist/stego-engine/src/render/internal/backends/pandoc/lower-to-render-plan.js.map +1 -1
  60. package/dist/stego-engine/src/render/internal/backends/pandoc/markdown-writer.d.ts +6 -1
  61. package/dist/stego-engine/src/render/internal/backends/pandoc/markdown-writer.d.ts.map +1 -1
  62. package/dist/stego-engine/src/render/internal/backends/pandoc/markdown-writer.js +198 -19
  63. package/dist/stego-engine/src/render/internal/backends/pandoc/markdown-writer.js.map +1 -1
  64. package/dist/stego-engine/src/render/public/renderDocument.js +1 -1
  65. package/dist/stego-engine/src/render/public/renderDocument.js.map +1 -1
  66. package/dist/stego-engine/src/render/public/types.d.ts +8 -0
  67. package/dist/stego-engine/src/render/public/types.d.ts.map +1 -1
  68. package/dist/stego-engine/src/template/index.d.ts +4 -2
  69. package/dist/stego-engine/src/template/index.d.ts.map +1 -1
  70. package/dist/stego-engine/src/template/index.js +1 -1
  71. package/dist/stego-engine/src/template/index.js.map +1 -1
  72. package/dist/stego-engine/src/template/internal/evaluate-template.d.ts +8 -1
  73. package/dist/stego-engine/src/template/internal/evaluate-template.d.ts.map +1 -1
  74. package/dist/stego-engine/src/template/internal/evaluate-template.js +158 -2
  75. package/dist/stego-engine/src/template/internal/evaluate-template.js.map +1 -1
  76. package/dist/stego-engine/src/template/internal/jsx-runtime.d.ts +2 -2
  77. package/dist/stego-engine/src/template/internal/jsx-runtime.d.ts.map +1 -1
  78. package/dist/stego-engine/src/template/internal/jsx-runtime.js.map +1 -1
  79. package/dist/stego-engine/src/template/internal/normalizeChildren.d.ts +2 -1
  80. package/dist/stego-engine/src/template/internal/normalizeChildren.d.ts.map +1 -1
  81. package/dist/stego-engine/src/template/internal/normalizeChildren.js +9 -0
  82. package/dist/stego-engine/src/template/internal/normalizeChildren.js.map +1 -1
  83. package/dist/stego-engine/src/template/public/authoring.d.ts +3 -1
  84. package/dist/stego-engine/src/template/public/authoring.d.ts.map +1 -1
  85. package/dist/stego-engine/src/template/public/components.d.ts +136 -17
  86. package/dist/stego-engine/src/template/public/components.d.ts.map +1 -1
  87. package/dist/stego-engine/src/template/public/components.js +46 -6
  88. package/dist/stego-engine/src/template/public/components.js.map +1 -1
  89. package/dist/stego-engine/src/template/public/context.d.ts +1 -1
  90. package/dist/stego-engine/src/template/public/context.d.ts.map +1 -1
  91. package/dist/stego-engine/src/template/public/defineTemplate.d.ts +6 -3
  92. package/dist/stego-engine/src/template/public/defineTemplate.d.ts.map +1 -1
  93. package/dist/stego-engine/src/template/public/defineTemplate.js +27 -2
  94. package/dist/stego-engine/src/template/public/defineTemplate.js.map +1 -1
  95. package/dist/stego-engine/src/template/public/types.d.ts +38 -29
  96. package/dist/stego-engine/src/template/public/types.d.ts.map +1 -1
  97. package/dist/stego-engine/src/test/index.d.ts +2 -0
  98. package/dist/stego-engine/src/test/index.d.ts.map +1 -0
  99. package/dist/stego-engine/src/test/index.js +2 -0
  100. package/dist/stego-engine/src/test/index.js.map +1 -0
  101. package/dist/stego-engine/src/test/template-generic-types.test.d.ts +2 -0
  102. package/dist/stego-engine/src/test/template-generic-types.test.d.ts.map +1 -0
  103. package/dist/stego-engine/src/test/template-generic-types.test.js +77 -0
  104. package/dist/stego-engine/src/test/template-generic-types.test.js.map +1 -0
  105. package/package.json +6 -2
  106. package/dist/stego-engine/src/collections/public/createCollection.d.ts +0 -3
  107. package/dist/stego-engine/src/collections/public/createCollection.d.ts.map +0 -1
  108. package/dist/stego-engine/src/collections/public/createCollection.js +0 -31
  109. package/dist/stego-engine/src/collections/public/createCollection.js.map +0 -1
  110. package/dist/stego-engine/src/compile/internal/load-manuscripts.d.ts +0 -3
  111. package/dist/stego-engine/src/compile/internal/load-manuscripts.d.ts.map +0 -1
  112. package/dist/stego-engine/src/compile/internal/load-manuscripts.js +0 -70
  113. package/dist/stego-engine/src/compile/internal/load-manuscripts.js.map +0 -1
  114. package/dist/stego-engine/src/compile/internal/load-spine.d.ts +0 -7
  115. package/dist/stego-engine/src/compile/internal/load-spine.d.ts.map +0 -1
  116. package/dist/stego-engine/src/compile/internal/load-spine.js +0 -92
  117. package/dist/stego-engine/src/compile/internal/load-spine.js.map +0 -1
@@ -0,0 +1,77 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "@stego-labs/engine/jsx-runtime";
2
+ import { defineTemplate, Stego } from "../template/index.js";
3
+ const legacyTemplate = defineTemplate((ctx) => {
4
+ const firstLeaf = ctx.content[0];
5
+ const chapter = firstLeaf?.metadata.chapter;
6
+ const branchLabel = ctx.branches[0]?.metadata.label;
7
+ const projectTitle = ctx.project.metadata.title;
8
+ return (_jsxs(Stego.Document, { page: { size: "6x9", margin: "0.75in" }, children: [_jsx(Stego.PageTemplate, { footer: { right: _jsx(Stego.PageNumber, {}) } }), _jsxs(Stego.KeepTogether, { children: [_jsx(Stego.Heading, { level: 1, children: projectTitle }), _jsx(Stego.Paragraph, { align: "center", children: chapter ?? branchLabel ?? "Untitled" })] }), firstLeaf ? _jsx(Stego.Markdown, { leaf: firstLeaf }) : null] }));
9
+ });
10
+ const printTemplate = defineTemplate({ targets: ["docx", "pdf"] }, (ctx, PrintStego) => {
11
+ const firstLeaf = ctx.content[0];
12
+ return (_jsxs(PrintStego.Document, { page: { size: "6x9", margin: "0.75in" }, children: [_jsx(PrintStego.PageTemplate, { footer: { right: _jsx(PrintStego.PageNumber, {}) } }), _jsxs(PrintStego.KeepTogether, { children: [_jsx(PrintStego.Heading, { level: 1, spaceAfter: 18, children: ctx.project.metadata.title }), _jsx(PrintStego.Paragraph, { align: "center", firstLineIndent: "2em", children: ctx.project.metadata.author ?? "Anonymous" })] }), firstLeaf ? _jsx(PrintStego.Markdown, { leaf: firstLeaf }) : null] }));
13
+ });
14
+ const allPresentationTargetsTemplate = defineTemplate({ targets: ["docx", "pdf", "epub"] }, (_ctx, MultiTargetStego) => {
15
+ // @ts-expect-error epub removes page-template support from the strict intersection
16
+ MultiTargetStego.PageTemplate;
17
+ // @ts-expect-error epub removes keep-together support from the strict intersection
18
+ MultiTargetStego.KeepTogether;
19
+ // @ts-expect-error epub removes align support from the strict intersection
20
+ MultiTargetStego.Paragraph({ align: "center", children: "Body" });
21
+ return (_jsx(MultiTargetStego.Document, { children: _jsx(MultiTargetStego.Paragraph, { children: "Portable body" }) }));
22
+ });
23
+ const epubTemplate = defineTemplate({ targets: ["epub"] }, (_ctx, EpubStego) => {
24
+ // @ts-expect-error epub-only templates do not expose page numbers
25
+ EpubStego.PageNumber;
26
+ // @ts-expect-error epub-only templates do not expose page breaks
27
+ EpubStego.PageBreak;
28
+ // @ts-expect-error epub-only templates do not allow image alignment controls
29
+ EpubStego.Image({ src: "cover.png", align: "center" });
30
+ return (_jsx(EpubStego.Document, { children: _jsx(EpubStego.Paragraph, { children: "EPUB-safe body" }) }));
31
+ });
32
+ const typedLeaf = {
33
+ kind: "leaf",
34
+ id: "CH-ONE",
35
+ format: "markdown",
36
+ path: "/tmp/project/content/100-one.md",
37
+ relativePath: "content/100-one.md",
38
+ titleFromFilename: "One",
39
+ metadata: {
40
+ id: "CH-ONE",
41
+ chapter: "1",
42
+ chapter_title: "One",
43
+ kind: "chapter"
44
+ },
45
+ body: "# One",
46
+ order: 100,
47
+ headings: []
48
+ };
49
+ const typedBranch = {
50
+ kind: "branch",
51
+ key: "",
52
+ name: "content",
53
+ label: "Content",
54
+ depth: 0,
55
+ relativeDir: "content",
56
+ metadata: {
57
+ label: "Content"
58
+ }
59
+ };
60
+ const typedContext = {
61
+ project: {
62
+ id: "demo",
63
+ root: "/tmp/project",
64
+ metadata: {
65
+ title: "Demo"
66
+ }
67
+ },
68
+ content: [typedLeaf],
69
+ branches: [typedBranch]
70
+ };
71
+ legacyTemplate.render(typedContext);
72
+ printTemplate.render(typedContext);
73
+ allPresentationTargetsTemplate.render(typedContext);
74
+ epubTemplate.render(typedContext);
75
+ // @ts-expect-error leaf metadata should be strongly typed
76
+ typedContext.content[0]?.metadata.not_a_real_key;
77
+ //# sourceMappingURL=template-generic-types.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-generic-types.test.js","sourceRoot":"","sources":["../../../../src/test/template-generic-types.test.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stego-labs/engine",
3
- "version": "1.0.1",
3
+ "version": "1.0.3",
4
4
  "type": "module",
5
5
  "description": "Template-driven document engine for Stego.",
6
6
  "license": "Apache-2.0",
@@ -10,6 +10,10 @@
10
10
  "directory": "packages/stego-engine"
11
11
  },
12
12
  "homepage": "https://github.com/matt-gold/stego/tree/main/packages/stego-engine#readme",
13
+ "publishConfig": {
14
+ "access": "public",
15
+ "registry": "https://registry.npmjs.org/"
16
+ },
13
17
  "types": "./dist/stego-engine/src/index.d.ts",
14
18
  "files": [
15
19
  "dist/**",
@@ -42,7 +46,7 @@
42
46
  "check:module-apis": "node scripts/check-module-apis.mjs"
43
47
  },
44
48
  "dependencies": {
45
- "@stego-labs/shared": "^1.0.1",
49
+ "@stego-labs/shared": "^1.0.3",
46
50
  "esbuild": "^0.25.11",
47
51
  "js-yaml": "^4.1.1"
48
52
  },
@@ -1,3 +0,0 @@
1
- import type { Collection } from "./types.ts";
2
- export declare function createCollection<T>(items: T[]): Collection<T>;
3
- //# sourceMappingURL=createCollection.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createCollection.d.ts","sourceRoot":"","sources":["../../../../../src/collections/public/createCollection.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAkD,MAAM,YAAY,CAAC;AAkC7F,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAE7D"}
@@ -1,31 +0,0 @@
1
- import { filterItems } from "../internal/filtering.js";
2
- import { groupItems, splitItems } from "../internal/grouping.js";
3
- import { sortItems } from "../internal/sorting.js";
4
- class EngineCollection {
5
- #items;
6
- constructor(items) {
7
- this.#items = [...items];
8
- }
9
- all() {
10
- return [...this.#items];
11
- }
12
- where(predicate) {
13
- return new EngineCollection(filterItems(this.#items, predicate));
14
- }
15
- sortBy(selector) {
16
- return new EngineCollection(sortItems(this.#items, selector));
17
- }
18
- groupBy(selector) {
19
- return groupItems(this.#items, selector);
20
- }
21
- splitBy(selector) {
22
- return splitItems(this.#items, selector);
23
- }
24
- map(mapper) {
25
- return this.#items.map(mapper);
26
- }
27
- }
28
- export function createCollection(items) {
29
- return new EngineCollection(items);
30
- }
31
- //# sourceMappingURL=createCollection.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createCollection.js","sourceRoot":"","sources":["../../../../../src/collections/public/createCollection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGnD,MAAM,gBAAgB;IACX,MAAM,CAAM;IAErB,YAAY,KAAU;QACpB,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IAC3B,CAAC;IAEM,GAAG;QACR,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IAEM,KAAK,CAAC,SAA+B;QAC1C,OAAO,IAAI,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;IACnE,CAAC;IAEM,MAAM,CAAC,QAAyB;QACrC,OAAO,IAAI,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAChE,CAAC;IAEM,OAAO,CAAC,QAA0B;QACvC,OAAO,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC3C,CAAC;IAEM,OAAO,CAAC,QAA0B;QACvC,OAAO,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC3C,CAAC;IAEM,GAAG,CAAI,MAAsB;QAClC,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;CACF;AAED,MAAM,UAAU,gBAAgB,CAAI,KAAU;IAC5C,OAAO,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC;AACrC,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { ManuscriptRecord } from "../../template/index.ts";
2
- export declare function loadManuscripts(projectRoot: string, manuscriptDir: string, projectMeta: Record<string, unknown>): ManuscriptRecord[];
3
- //# sourceMappingURL=load-manuscripts.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"load-manuscripts.d.ts","sourceRoot":"","sources":["../../../../../src/compile/internal/load-manuscripts.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,wBAAgB,eAAe,CAC7B,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACnC,gBAAgB,EAAE,CAYpB"}
@@ -1,70 +0,0 @@
1
- import fs from "node:fs";
2
- import path from "node:path";
3
- import { parseMarkdownDocument } from "@stego-labs/shared/domain/frontmatter";
4
- import { parseCommentAppendix } from "@stego-labs/shared/domain/comments";
5
- import { rewriteMarkdownImagesForChapter } from "@stego-labs/shared/domain/images";
6
- export function loadManuscripts(projectRoot, manuscriptDir, projectMeta) {
7
- if (!fs.existsSync(manuscriptDir)) {
8
- return [];
9
- }
10
- const files = fs.readdirSync(manuscriptDir, { withFileTypes: true })
11
- .filter((entry) => entry.isFile() && entry.name.endsWith(".md"))
12
- .map((entry) => path.join(manuscriptDir, entry.name))
13
- .sort();
14
- return files.map((filePath) => loadManuscript(projectRoot, filePath, projectMeta))
15
- .sort((a, b) => compareOrders(a.order, b.order) || a.relativePath.localeCompare(b.relativePath));
16
- }
17
- function loadManuscript(projectRoot, filePath, projectMeta) {
18
- const raw = fs.readFileSync(filePath, "utf8");
19
- const parsed = parseMarkdownDocument(raw);
20
- const withoutComments = parseCommentAppendix(parsed.body).contentWithoutComments;
21
- const relativePath = path.relative(projectRoot, filePath);
22
- const basename = path.basename(filePath, ".md");
23
- return {
24
- kind: "manuscript",
25
- path: filePath,
26
- relativePath,
27
- slug: toSlug(basename),
28
- titleFromFilename: toTitleFromFilename(basename),
29
- metadata: parsed.frontmatter,
30
- body: rewriteMarkdownImagesForChapter({
31
- body: withoutComments.trim(),
32
- chapterPath: filePath,
33
- projectRoot,
34
- projectMeta,
35
- frontmatter: parsed.frontmatter
36
- }),
37
- order: parseOrder(basename)
38
- };
39
- }
40
- function parseOrder(basename) {
41
- const match = basename.match(/^(\d+)[-_]/);
42
- return match ? Number(match[1]) : null;
43
- }
44
- function compareOrders(a, b) {
45
- if (a == null && b == null) {
46
- return 0;
47
- }
48
- if (a == null) {
49
- return 1;
50
- }
51
- if (b == null) {
52
- return -1;
53
- }
54
- return a - b;
55
- }
56
- function toSlug(value) {
57
- return value
58
- .replace(/^\d+[-_]?/, "")
59
- .toLowerCase()
60
- .replace(/[^a-z0-9]+/g, "-")
61
- .replace(/^-+|-+$/g, "");
62
- }
63
- function toTitleFromFilename(value) {
64
- const normalized = value.replace(/^\d+[-_]?/, "").replace(/[-_]+/g, " ").trim();
65
- if (!normalized) {
66
- return value;
67
- }
68
- return normalized.replace(/\b\w/g, (letter) => letter.toUpperCase());
69
- }
70
- //# sourceMappingURL=load-manuscripts.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"load-manuscripts.js","sourceRoot":"","sources":["../../../../../src/compile/internal/load-manuscripts.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- import type { SpineCategoryRecord, SpineEntryRecord } from "../../template/index.ts";
2
- export type LoadedSpine = {
3
- entries: SpineEntryRecord[];
4
- categories: SpineCategoryRecord[];
5
- };
6
- export declare function loadSpine(projectRoot: string, spineDir: string): LoadedSpine;
7
- //# sourceMappingURL=load-spine.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"load-spine.d.ts","sourceRoot":"","sources":["../../../../../src/compile/internal/load-spine.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAErF,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,UAAU,EAAE,mBAAmB,EAAE,CAAC;CACnC,CAAC;AAEF,wBAAgB,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW,CAuC5E"}
@@ -1,92 +0,0 @@
1
- import fs from "node:fs";
2
- import path from "node:path";
3
- import { parseMarkdownDocument } from "@stego-labs/shared/domain/frontmatter";
4
- export function loadSpine(projectRoot, spineDir) {
5
- if (!fs.existsSync(spineDir)) {
6
- return { entries: [], categories: [] };
7
- }
8
- const categories = [];
9
- const entries = [];
10
- for (const dirent of fs.readdirSync(spineDir, { withFileTypes: true })) {
11
- if (!dirent.isDirectory()) {
12
- continue;
13
- }
14
- const categoryKey = dirent.name;
15
- const categoryDir = path.join(spineDir, categoryKey);
16
- const categoryFile = path.join(categoryDir, "_category.md");
17
- const categoryParsed = fs.existsSync(categoryFile)
18
- ? parseSpineMarkdownFile(categoryFile)
19
- : { frontmatter: {}, body: "" };
20
- categories.push({
21
- kind: "spine-category",
22
- key: categoryKey,
23
- label: toDisplayLabel(categoryParsed.frontmatter.label || categoryKey),
24
- path: categoryFile,
25
- metadata: categoryParsed.frontmatter
26
- });
27
- for (const filePath of collectMarkdownFiles(categoryDir)) {
28
- if (path.basename(filePath) === "_category.md") {
29
- continue;
30
- }
31
- entries.push(loadSpineEntry(projectRoot, categoryKey, filePath));
32
- }
33
- }
34
- entries.sort((a, b) => a.relativePath.localeCompare(b.relativePath));
35
- categories.sort((a, b) => a.key.localeCompare(b.key));
36
- return { entries, categories };
37
- }
38
- function loadSpineEntry(projectRoot, category, filePath) {
39
- const parsed = parseSpineMarkdownFile(filePath);
40
- const basename = path.basename(filePath, ".md");
41
- const body = parsed.body.trim();
42
- return {
43
- kind: "spine-entry",
44
- path: filePath,
45
- relativePath: path.relative(projectRoot, filePath),
46
- category,
47
- key: basename,
48
- label: resolveEntryLabel(parsed.frontmatter.label, body, basename),
49
- metadata: parsed.frontmatter,
50
- body
51
- };
52
- }
53
- function collectMarkdownFiles(dir) {
54
- const results = [];
55
- for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
56
- const fullPath = path.join(dir, entry.name);
57
- if (entry.isDirectory()) {
58
- results.push(...collectMarkdownFiles(fullPath));
59
- continue;
60
- }
61
- if (entry.isFile() && entry.name.endsWith(".md")) {
62
- results.push(fullPath);
63
- }
64
- }
65
- return results;
66
- }
67
- function resolveEntryLabel(frontmatterLabel, body, fallback) {
68
- if (typeof frontmatterLabel === "string" && frontmatterLabel.trim()) {
69
- return frontmatterLabel.trim();
70
- }
71
- const headingMatch = body.match(/^#\s+(.+)$/m);
72
- if (headingMatch && headingMatch[1].trim()) {
73
- return headingMatch[1].trim();
74
- }
75
- return toDisplayLabel(fallback);
76
- }
77
- function parseSpineMarkdownFile(filePath) {
78
- const raw = fs.readFileSync(filePath, "utf8");
79
- try {
80
- return parseMarkdownDocument(raw);
81
- }
82
- catch {
83
- return {
84
- frontmatter: {},
85
- body: raw
86
- };
87
- }
88
- }
89
- function toDisplayLabel(value) {
90
- return value.replace(/[-_]+/g, " ").replace(/\b\w/g, (letter) => letter.toUpperCase()).trim();
91
- }
92
- //# sourceMappingURL=load-spine.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"load-spine.js","sourceRoot":"","sources":["../../../../../src/compile/internal/load-spine.ts"],"names":[],"mappings":"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"}