@stego-labs/engine 1.0.1

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 (207) hide show
  1. package/README.md +112 -0
  2. package/dist/stego-engine/src/collections/index.d.ts +3 -0
  3. package/dist/stego-engine/src/collections/index.d.ts.map +1 -0
  4. package/dist/stego-engine/src/collections/index.js +2 -0
  5. package/dist/stego-engine/src/collections/index.js.map +1 -0
  6. package/dist/stego-engine/src/collections/internal/filtering.d.ts +2 -0
  7. package/dist/stego-engine/src/collections/internal/filtering.d.ts.map +1 -0
  8. package/dist/stego-engine/src/collections/internal/filtering.js +4 -0
  9. package/dist/stego-engine/src/collections/internal/filtering.js.map +1 -0
  10. package/dist/stego-engine/src/collections/internal/grouping.d.ts +5 -0
  11. package/dist/stego-engine/src/collections/internal/grouping.d.ts.map +1 -0
  12. package/dist/stego-engine/src/collections/internal/grouping.js +69 -0
  13. package/dist/stego-engine/src/collections/internal/grouping.js.map +1 -0
  14. package/dist/stego-engine/src/collections/internal/sorting.d.ts +3 -0
  15. package/dist/stego-engine/src/collections/internal/sorting.d.ts.map +1 -0
  16. package/dist/stego-engine/src/collections/internal/sorting.js +31 -0
  17. package/dist/stego-engine/src/collections/internal/sorting.js.map +1 -0
  18. package/dist/stego-engine/src/collections/public/createCollection.d.ts +3 -0
  19. package/dist/stego-engine/src/collections/public/createCollection.d.ts.map +1 -0
  20. package/dist/stego-engine/src/collections/public/createCollection.js +31 -0
  21. package/dist/stego-engine/src/collections/public/createCollection.js.map +1 -0
  22. package/dist/stego-engine/src/collections/public/types.d.ts +23 -0
  23. package/dist/stego-engine/src/collections/public/types.d.ts.map +1 -0
  24. package/dist/stego-engine/src/collections/public/types.js +2 -0
  25. package/dist/stego-engine/src/collections/public/types.js.map +1 -0
  26. package/dist/stego-engine/src/compile/index.d.ts +4 -0
  27. package/dist/stego-engine/src/compile/index.d.ts.map +1 -0
  28. package/dist/stego-engine/src/compile/index.js +3 -0
  29. package/dist/stego-engine/src/compile/index.js.map +1 -0
  30. package/dist/stego-engine/src/compile/internal/load-manuscripts.d.ts +3 -0
  31. package/dist/stego-engine/src/compile/internal/load-manuscripts.d.ts.map +1 -0
  32. package/dist/stego-engine/src/compile/internal/load-manuscripts.js +70 -0
  33. package/dist/stego-engine/src/compile/internal/load-manuscripts.js.map +1 -0
  34. package/dist/stego-engine/src/compile/internal/load-project.d.ts +7 -0
  35. package/dist/stego-engine/src/compile/internal/load-project.d.ts.map +1 -0
  36. package/dist/stego-engine/src/compile/internal/load-project.js +16 -0
  37. package/dist/stego-engine/src/compile/internal/load-project.js.map +1 -0
  38. package/dist/stego-engine/src/compile/internal/load-spine.d.ts +7 -0
  39. package/dist/stego-engine/src/compile/internal/load-spine.d.ts.map +1 -0
  40. package/dist/stego-engine/src/compile/internal/load-spine.js +92 -0
  41. package/dist/stego-engine/src/compile/internal/load-spine.js.map +1 -0
  42. package/dist/stego-engine/src/compile/internal/resolve-template-path.d.ts +2 -0
  43. package/dist/stego-engine/src/compile/internal/resolve-template-path.d.ts.map +1 -0
  44. package/dist/stego-engine/src/compile/internal/resolve-template-path.js +12 -0
  45. package/dist/stego-engine/src/compile/internal/resolve-template-path.js.map +1 -0
  46. package/dist/stego-engine/src/compile/public/buildTemplateContext.d.ts +4 -0
  47. package/dist/stego-engine/src/compile/public/buildTemplateContext.d.ts.map +1 -0
  48. package/dist/stego-engine/src/compile/public/buildTemplateContext.js +21 -0
  49. package/dist/stego-engine/src/compile/public/buildTemplateContext.js.map +1 -0
  50. package/dist/stego-engine/src/compile/public/compileProject.d.ts +3 -0
  51. package/dist/stego-engine/src/compile/public/compileProject.d.ts.map +1 -0
  52. package/dist/stego-engine/src/compile/public/compileProject.js +27 -0
  53. package/dist/stego-engine/src/compile/public/compileProject.js.map +1 -0
  54. package/dist/stego-engine/src/compile/public/types.d.ts +20 -0
  55. package/dist/stego-engine/src/compile/public/types.d.ts.map +1 -0
  56. package/dist/stego-engine/src/compile/public/types.js +2 -0
  57. package/dist/stego-engine/src/compile/public/types.js.map +1 -0
  58. package/dist/stego-engine/src/index.d.ts +10 -0
  59. package/dist/stego-engine/src/index.d.ts.map +1 -0
  60. package/dist/stego-engine/src/index.js +6 -0
  61. package/dist/stego-engine/src/index.js.map +1 -0
  62. package/dist/stego-engine/src/ir/index.d.ts +13 -0
  63. package/dist/stego-engine/src/ir/index.d.ts.map +1 -0
  64. package/dist/stego-engine/src/ir/index.js +13 -0
  65. package/dist/stego-engine/src/ir/index.js.map +1 -0
  66. package/dist/stego-engine/src/ir/nodes/document.d.ts +3 -0
  67. package/dist/stego-engine/src/ir/nodes/document.d.ts.map +1 -0
  68. package/dist/stego-engine/src/ir/nodes/document.js +8 -0
  69. package/dist/stego-engine/src/ir/nodes/document.js.map +1 -0
  70. package/dist/stego-engine/src/ir/nodes/fragment.d.ts +3 -0
  71. package/dist/stego-engine/src/ir/nodes/fragment.d.ts.map +1 -0
  72. package/dist/stego-engine/src/ir/nodes/fragment.js +7 -0
  73. package/dist/stego-engine/src/ir/nodes/fragment.js.map +1 -0
  74. package/dist/stego-engine/src/ir/nodes/heading.d.ts +9 -0
  75. package/dist/stego-engine/src/ir/nodes/heading.d.ts.map +1 -0
  76. package/dist/stego-engine/src/ir/nodes/heading.js +13 -0
  77. package/dist/stego-engine/src/ir/nodes/heading.js.map +1 -0
  78. package/dist/stego-engine/src/ir/nodes/image.d.ts +11 -0
  79. package/dist/stego-engine/src/ir/nodes/image.d.ts.map +1 -0
  80. package/dist/stego-engine/src/ir/nodes/image.js +13 -0
  81. package/dist/stego-engine/src/ir/nodes/image.js.map +1 -0
  82. package/dist/stego-engine/src/ir/nodes/markdown.d.ts +3 -0
  83. package/dist/stego-engine/src/ir/nodes/markdown.d.ts.map +1 -0
  84. package/dist/stego-engine/src/ir/nodes/markdown.js +7 -0
  85. package/dist/stego-engine/src/ir/nodes/markdown.js.map +1 -0
  86. package/dist/stego-engine/src/ir/nodes/page-break.d.ts +3 -0
  87. package/dist/stego-engine/src/ir/nodes/page-break.d.ts.map +1 -0
  88. package/dist/stego-engine/src/ir/nodes/page-break.js +6 -0
  89. package/dist/stego-engine/src/ir/nodes/page-break.js.map +1 -0
  90. package/dist/stego-engine/src/ir/nodes/page-number.d.ts +3 -0
  91. package/dist/stego-engine/src/ir/nodes/page-number.d.ts.map +1 -0
  92. package/dist/stego-engine/src/ir/nodes/page-number.js +6 -0
  93. package/dist/stego-engine/src/ir/nodes/page-number.js.map +1 -0
  94. package/dist/stego-engine/src/ir/nodes/page-template.d.ts +3 -0
  95. package/dist/stego-engine/src/ir/nodes/page-template.d.ts.map +1 -0
  96. package/dist/stego-engine/src/ir/nodes/page-template.js +8 -0
  97. package/dist/stego-engine/src/ir/nodes/page-template.js.map +1 -0
  98. package/dist/stego-engine/src/ir/nodes/paragraph.d.ts +10 -0
  99. package/dist/stego-engine/src/ir/nodes/paragraph.d.ts.map +1 -0
  100. package/dist/stego-engine/src/ir/nodes/paragraph.js +13 -0
  101. package/dist/stego-engine/src/ir/nodes/paragraph.js.map +1 -0
  102. package/dist/stego-engine/src/ir/nodes/section.d.ts +12 -0
  103. package/dist/stego-engine/src/ir/nodes/section.d.ts.map +1 -0
  104. package/dist/stego-engine/src/ir/nodes/section.js +15 -0
  105. package/dist/stego-engine/src/ir/nodes/section.js.map +1 -0
  106. package/dist/stego-engine/src/ir/nodes/text.d.ts +3 -0
  107. package/dist/stego-engine/src/ir/nodes/text.d.ts.map +1 -0
  108. package/dist/stego-engine/src/ir/nodes/text.js +7 -0
  109. package/dist/stego-engine/src/ir/nodes/text.js.map +1 -0
  110. package/dist/stego-engine/src/ir/types.d.ts +87 -0
  111. package/dist/stego-engine/src/ir/types.d.ts.map +1 -0
  112. package/dist/stego-engine/src/ir/types.js +2 -0
  113. package/dist/stego-engine/src/ir/types.js.map +1 -0
  114. package/dist/stego-engine/src/render/index.d.ts +3 -0
  115. package/dist/stego-engine/src/render/index.d.ts.map +1 -0
  116. package/dist/stego-engine/src/render/index.js +2 -0
  117. package/dist/stego-engine/src/render/index.js.map +1 -0
  118. package/dist/stego-engine/src/render/internal/backends/pandoc/index.d.ts +2 -0
  119. package/dist/stego-engine/src/render/internal/backends/pandoc/index.d.ts.map +1 -0
  120. package/dist/stego-engine/src/render/internal/backends/pandoc/index.js +2 -0
  121. package/dist/stego-engine/src/render/internal/backends/pandoc/index.js.map +1 -0
  122. package/dist/stego-engine/src/render/internal/backends/pandoc/lower-to-render-plan.d.ts +4 -0
  123. package/dist/stego-engine/src/render/internal/backends/pandoc/lower-to-render-plan.d.ts.map +1 -0
  124. package/dist/stego-engine/src/render/internal/backends/pandoc/lower-to-render-plan.js +16 -0
  125. package/dist/stego-engine/src/render/internal/backends/pandoc/lower-to-render-plan.js.map +1 -0
  126. package/dist/stego-engine/src/render/internal/backends/pandoc/markdown-writer.d.ts +3 -0
  127. package/dist/stego-engine/src/render/internal/backends/pandoc/markdown-writer.d.ts.map +1 -0
  128. package/dist/stego-engine/src/render/internal/backends/pandoc/markdown-writer.js +139 -0
  129. package/dist/stego-engine/src/render/internal/backends/pandoc/markdown-writer.js.map +1 -0
  130. package/dist/stego-engine/src/render/internal/backends/pandoc/metadata-writer.d.ts +3 -0
  131. package/dist/stego-engine/src/render/internal/backends/pandoc/metadata-writer.d.ts.map +1 -0
  132. package/dist/stego-engine/src/render/internal/backends/pandoc/metadata-writer.js +38 -0
  133. package/dist/stego-engine/src/render/internal/backends/pandoc/metadata-writer.js.map +1 -0
  134. package/dist/stego-engine/src/render/internal/normalize/images.d.ts +3 -0
  135. package/dist/stego-engine/src/render/internal/normalize/images.d.ts.map +1 -0
  136. package/dist/stego-engine/src/render/internal/normalize/images.js +7 -0
  137. package/dist/stego-engine/src/render/internal/normalize/images.js.map +1 -0
  138. package/dist/stego-engine/src/render/internal/normalize/index.d.ts +4 -0
  139. package/dist/stego-engine/src/render/internal/normalize/index.d.ts.map +1 -0
  140. package/dist/stego-engine/src/render/internal/normalize/index.js +4 -0
  141. package/dist/stego-engine/src/render/internal/normalize/index.js.map +1 -0
  142. package/dist/stego-engine/src/render/internal/normalize/page-layout.d.ts +8 -0
  143. package/dist/stego-engine/src/render/internal/normalize/page-layout.d.ts.map +1 -0
  144. package/dist/stego-engine/src/render/internal/normalize/page-layout.js +28 -0
  145. package/dist/stego-engine/src/render/internal/normalize/page-layout.js.map +1 -0
  146. package/dist/stego-engine/src/render/internal/normalize/spacing.d.ts +3 -0
  147. package/dist/stego-engine/src/render/internal/normalize/spacing.d.ts.map +1 -0
  148. package/dist/stego-engine/src/render/internal/normalize/spacing.js +7 -0
  149. package/dist/stego-engine/src/render/internal/normalize/spacing.js.map +1 -0
  150. package/dist/stego-engine/src/render/public/renderDocument.d.ts +3 -0
  151. package/dist/stego-engine/src/render/public/renderDocument.d.ts.map +1 -0
  152. package/dist/stego-engine/src/render/public/renderDocument.js +5 -0
  153. package/dist/stego-engine/src/render/public/renderDocument.js.map +1 -0
  154. package/dist/stego-engine/src/render/public/types.d.ts +14 -0
  155. package/dist/stego-engine/src/render/public/types.d.ts.map +1 -0
  156. package/dist/stego-engine/src/render/public/types.js +2 -0
  157. package/dist/stego-engine/src/render/public/types.js.map +1 -0
  158. package/dist/stego-engine/src/template/index.d.ts +6 -0
  159. package/dist/stego-engine/src/template/index.d.ts.map +1 -0
  160. package/dist/stego-engine/src/template/index.js +5 -0
  161. package/dist/stego-engine/src/template/index.js.map +1 -0
  162. package/dist/stego-engine/src/template/internal/evaluate-template.d.ts +5 -0
  163. package/dist/stego-engine/src/template/internal/evaluate-template.d.ts.map +1 -0
  164. package/dist/stego-engine/src/template/internal/evaluate-template.js +17 -0
  165. package/dist/stego-engine/src/template/internal/evaluate-template.js.map +1 -0
  166. package/dist/stego-engine/src/template/internal/jsx-dev-runtime.d.ts +5 -0
  167. package/dist/stego-engine/src/template/internal/jsx-dev-runtime.d.ts.map +1 -0
  168. package/dist/stego-engine/src/template/internal/jsx-dev-runtime.js +4 -0
  169. package/dist/stego-engine/src/template/internal/jsx-dev-runtime.js.map +1 -0
  170. package/dist/stego-engine/src/template/internal/jsx-runtime.d.ts +18 -0
  171. package/dist/stego-engine/src/template/internal/jsx-runtime.d.ts.map +1 -0
  172. package/dist/stego-engine/src/template/internal/jsx-runtime.js +15 -0
  173. package/dist/stego-engine/src/template/internal/jsx-runtime.js.map +1 -0
  174. package/dist/stego-engine/src/template/internal/normalizeChildren.d.ts +3 -0
  175. package/dist/stego-engine/src/template/internal/normalizeChildren.d.ts.map +1 -0
  176. package/dist/stego-engine/src/template/internal/normalizeChildren.js +33 -0
  177. package/dist/stego-engine/src/template/internal/normalizeChildren.js.map +1 -0
  178. package/dist/stego-engine/src/template/internal/template-loader.d.ts +7 -0
  179. package/dist/stego-engine/src/template/internal/template-loader.d.ts.map +1 -0
  180. package/dist/stego-engine/src/template/internal/template-loader.js +61 -0
  181. package/dist/stego-engine/src/template/internal/template-loader.js.map +1 -0
  182. package/dist/stego-engine/src/template/public/authoring.d.ts +4 -0
  183. package/dist/stego-engine/src/template/public/authoring.d.ts.map +1 -0
  184. package/dist/stego-engine/src/template/public/authoring.js +3 -0
  185. package/dist/stego-engine/src/template/public/authoring.js.map +1 -0
  186. package/dist/stego-engine/src/template/public/components.d.ts +68 -0
  187. package/dist/stego-engine/src/template/public/components.d.ts.map +1 -0
  188. package/dist/stego-engine/src/template/public/components.js +45 -0
  189. package/dist/stego-engine/src/template/public/components.js.map +1 -0
  190. package/dist/stego-engine/src/template/public/context.d.ts +2 -0
  191. package/dist/stego-engine/src/template/public/context.d.ts.map +1 -0
  192. package/dist/stego-engine/src/template/public/context.js +2 -0
  193. package/dist/stego-engine/src/template/public/context.js.map +1 -0
  194. package/dist/stego-engine/src/template/public/defineTemplate.d.ts +4 -0
  195. package/dist/stego-engine/src/template/public/defineTemplate.d.ts.map +1 -0
  196. package/dist/stego-engine/src/template/public/defineTemplate.js +7 -0
  197. package/dist/stego-engine/src/template/public/defineTemplate.js.map +1 -0
  198. package/dist/stego-engine/src/template/public/types.d.ts +46 -0
  199. package/dist/stego-engine/src/template/public/types.d.ts.map +1 -0
  200. package/dist/stego-engine/src/template/public/types.js +2 -0
  201. package/dist/stego-engine/src/template/public/types.js.map +1 -0
  202. package/dist/stego-engine/src/testing/index.d.ts +2 -0
  203. package/dist/stego-engine/src/testing/index.d.ts.map +1 -0
  204. package/dist/stego-engine/src/testing/index.js +2 -0
  205. package/dist/stego-engine/src/testing/index.js.map +1 -0
  206. package/docs/architecture.md +16 -0
  207. package/package.json +53 -0
package/README.md ADDED
@@ -0,0 +1,112 @@
1
+ # @stego-labs/engine
2
+
3
+ `@stego-labs/engine` is the template-driven document engine for Stego.
4
+
5
+ It provides four public areas:
6
+
7
+ - `ir`: the intermediate representation for Stego documents
8
+ - `collections`: generic query/grouping helpers for template data
9
+ - `template`: TSX-facing authoring API and template loading
10
+ - `compile` and `render`: project loading, template evaluation, and Pandoc-oriented render planning
11
+
12
+ Templates are plain TSX with normal JavaScript. They compose built-in `Stego.*` components and compile into Stego IR, which the render layer lowers into a Pandoc-oriented render plan.
13
+
14
+ V1 intentionally does not expose backend-specific escape hatches, arbitrary CSS, or a plugin API.
15
+
16
+ ## Template basics
17
+
18
+ Templates default-export `defineTemplate(...)` from a `.tsx` file:
19
+
20
+ ```tsx
21
+ import { defineTemplate, Stego } from "@stego-labs/engine";
22
+
23
+ export default defineTemplate((ctx) => (
24
+ <Stego.Document page={{ size: "6x9", margin: "0.75in" }}>
25
+ <Stego.PageTemplate footer={{ right: <Stego.PageNumber /> }} />
26
+ <Stego.Heading level={1}>
27
+ {String(ctx.project.metadata.title ?? ctx.project.id)}
28
+ </Stego.Heading>
29
+ {ctx.collections.manuscripts.map((doc) => (
30
+ <Stego.Markdown source={doc.body} />
31
+ ))}
32
+ </Stego.Document>
33
+ ));
34
+ ```
35
+
36
+ Templates use normal JavaScript control flow inside TSX. There is no Stego-specific control-flow DSL in V1.
37
+
38
+ For VS Code and TypeScript language-server support, put template files in a TS project with:
39
+
40
+ ```json
41
+ {
42
+ "compilerOptions": {
43
+ "target": "ES2022",
44
+ "module": "NodeNext",
45
+ "moduleResolution": "NodeNext",
46
+ "strict": true,
47
+ "noEmit": true,
48
+ "types": ["node"],
49
+ "jsx": "react-jsx",
50
+ "jsxImportSource": "@stego-labs/engine"
51
+ },
52
+ "include": ["templates/**/*.tsx"]
53
+ }
54
+ ```
55
+
56
+ The TypeScript server also needs to be able to resolve `@stego-labs/engine`, either from `node_modules` or a local link during development.
57
+
58
+ For block spacing, use `spaceBefore` / `spaceAfter`. For horizontally inset blocks such as custom pull quotes or blockquote-style wrappers, use `insetLeft` / `insetRight`. For fiction-style paragraph indentation, use `firstLineIndent` at the section or paragraph level.
59
+
60
+ ```tsx
61
+ function PullQuote(props: { children?: unknown }) {
62
+ return (
63
+ <Stego.Section insetLeft="24pt" insetRight="24pt" spaceBefore={18} spaceAfter={18}>
64
+ <Stego.Paragraph align="center">{props.children}</Stego.Paragraph>
65
+ </Stego.Section>
66
+ );
67
+ }
68
+
69
+ function ChapterBody(props: { children?: unknown }) {
70
+ return (
71
+ <Stego.Section firstLineIndent="1.5em">
72
+ {props.children}
73
+ </Stego.Section>
74
+ );
75
+ }
76
+ ```
77
+
78
+ ## Collections: `groupBy()` vs `splitBy()`
79
+
80
+ `ctx.collections.*` exposes immutable collection helpers for ordered project content.
81
+
82
+ Use `groupBy()` when you want bucketed groups by key, regardless of where matching items appear:
83
+
84
+ ```ts
85
+ const groups = ctx.collections.spineEntries.groupBy("category");
86
+ ```
87
+
88
+ Use `splitBy()` when you want contiguous groups in the current order:
89
+
90
+ ```ts
91
+ const chapters = ctx.collections.manuscripts.splitBy("chapter");
92
+ ```
93
+
94
+ `splitBy()` preserves order and starts a new group each time the selected value changes. Repeated values later in the stream create a new group.
95
+
96
+ Missing values inherit the current open group instead of breaking it, so only files that start a new boundary need to specify the boundary metadata.
97
+
98
+ Example:
99
+
100
+ ```ts
101
+ ["1", "1", null, "2", "2", null, "1"]
102
+ ```
103
+
104
+ becomes:
105
+
106
+ ```ts
107
+ [["1", "1", null], ["2", "2", null], ["1"]]
108
+ ```
109
+
110
+ If the sequence starts with `undefined`, `null`, or blank values, those leading items form a leading ungrouped segment with `group.value === undefined`.
111
+
112
+ This makes `splitBy()` the right primitive for ordered document structure such as chapters, parts, or appendix sections.
@@ -0,0 +1,3 @@
1
+ export { createCollection } from "./public/createCollection.ts";
2
+ export type { Collection, Group, GroupSelector, SortSelector, SplitGroup } from "./public/types.ts";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/collections/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,YAAY,EAAE,UAAU,EAAE,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { createCollection } from "./public/createCollection.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/collections/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function filterItems<T>(items: T[], predicate: (item: T) => boolean): T[];
2
+ //# sourceMappingURL=filtering.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filtering.d.ts","sourceRoot":"","sources":["../../../../../src/collections/internal/filtering.ts"],"names":[],"mappings":"AAAA,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,GAAG,CAAC,EAAE,CAE/E"}
@@ -0,0 +1,4 @@
1
+ export function filterItems(items, predicate) {
2
+ return items.filter(predicate);
3
+ }
4
+ //# sourceMappingURL=filtering.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filtering.js","sourceRoot":"","sources":["../../../../../src/collections/internal/filtering.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,WAAW,CAAI,KAAU,EAAE,SAA+B;IACxE,OAAO,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AACjC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { Group, GroupSelector, SplitGroup } from "../public/types.ts";
2
+ export declare function groupItems<T>(items: T[], selector: GroupSelector<T>): Group<T>[];
3
+ export declare function splitItems<T>(items: T[], selector: GroupSelector<T>): SplitGroup<T>[];
4
+ export declare function resolveGroupValue<T>(item: T, selector: GroupSelector<T>): string | undefined;
5
+ //# sourceMappingURL=grouping.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grouping.d.ts","sourceRoot":"","sources":["../../../../../src/collections/internal/grouping.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAE3E,wBAAgB,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAkBhF;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,CA4BrF;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,SAAS,CAW5F"}
@@ -0,0 +1,69 @@
1
+ export function groupItems(items, selector) {
2
+ const grouped = new Map();
3
+ for (const item of items) {
4
+ const resolved = resolveGroupValue(item, selector);
5
+ if (!resolved) {
6
+ continue;
7
+ }
8
+ const bucket = grouped.get(resolved) ?? [];
9
+ bucket.push(item);
10
+ grouped.set(resolved, bucket);
11
+ }
12
+ return [...grouped.entries()].map(([value, groupedItems]) => ({
13
+ key: value,
14
+ value,
15
+ items: groupedItems,
16
+ first: groupedItems[0]
17
+ }));
18
+ }
19
+ export function splitItems(items, selector) {
20
+ const groups = [];
21
+ let activeValue;
22
+ for (const item of items) {
23
+ const resolved = resolveGroupValue(item, selector);
24
+ const currentValue = resolved ?? activeValue;
25
+ const previous = groups[groups.length - 1];
26
+ if (previous && previous.value === currentValue) {
27
+ previous.items.push(item);
28
+ if (resolved) {
29
+ activeValue = resolved;
30
+ }
31
+ continue;
32
+ }
33
+ if (resolved) {
34
+ activeValue = resolved;
35
+ }
36
+ groups.push({
37
+ key: currentValue,
38
+ value: currentValue,
39
+ items: [item],
40
+ first: item
41
+ });
42
+ }
43
+ return groups;
44
+ }
45
+ export function resolveGroupValue(item, selector) {
46
+ const raw = typeof selector === "function"
47
+ ? selector(item)
48
+ : resolveNamedValue(item, selector);
49
+ if (raw == null) {
50
+ return undefined;
51
+ }
52
+ const normalized = String(raw).trim();
53
+ return normalized.length > 0 ? normalized : undefined;
54
+ }
55
+ function resolveNamedValue(item, key) {
56
+ const ownValue = Reflect.get(item, key);
57
+ if (typeof ownValue === "string" || typeof ownValue === "number") {
58
+ return ownValue;
59
+ }
60
+ const metadata = Reflect.get(item, "metadata");
61
+ if (metadata && typeof metadata === "object" && !Array.isArray(metadata)) {
62
+ const metadataValue = Reflect.get(metadata, key);
63
+ if (typeof metadataValue === "string" || typeof metadataValue === "number") {
64
+ return metadataValue;
65
+ }
66
+ }
67
+ return undefined;
68
+ }
69
+ //# sourceMappingURL=grouping.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grouping.js","sourceRoot":"","sources":["../../../../../src/collections/internal/grouping.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { SortSelector } from "../public/types.ts";
2
+ export declare function sortItems<T>(items: T[], selector: SortSelector<T>): T[];
3
+ //# sourceMappingURL=sorting.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sorting.d.ts","sourceRoot":"","sources":["../../../../../src/collections/internal/sorting.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,wBAAgB,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAIvE"}
@@ -0,0 +1,31 @@
1
+ export function sortItems(items, selector) {
2
+ const next = [...items];
3
+ next.sort((a, b) => compareValues(resolveSortValue(a, selector), resolveSortValue(b, selector)));
4
+ return next;
5
+ }
6
+ function resolveSortValue(item, selector) {
7
+ if (typeof selector === "function") {
8
+ return selector(item);
9
+ }
10
+ const raw = item[selector];
11
+ if (typeof raw === "string" || typeof raw === "number") {
12
+ return raw;
13
+ }
14
+ return undefined;
15
+ }
16
+ function compareValues(a, b) {
17
+ if (a == null && b == null) {
18
+ return 0;
19
+ }
20
+ if (a == null) {
21
+ return 1;
22
+ }
23
+ if (b == null) {
24
+ return -1;
25
+ }
26
+ if (typeof a === "number" && typeof b === "number") {
27
+ return a - b;
28
+ }
29
+ return String(a).localeCompare(String(b));
30
+ }
31
+ //# sourceMappingURL=sorting.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sorting.js","sourceRoot":"","sources":["../../../../../src/collections/internal/sorting.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,SAAS,CAAI,KAAU,EAAE,QAAyB;IAChE,MAAM,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IACxB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,gBAAgB,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IACjG,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,gBAAgB,CAAI,IAAO,EAAE,QAAyB;IAC7D,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE,CAAC;QACnC,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC3B,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACvD,OAAO,GAAG,CAAC;IACb,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,aAAa,CAAC,CAA8B,EAAE,CAA8B;IACnF,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QAC3B,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QACd,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QACd,OAAO,CAAC,CAAC,CAAC;IACZ,CAAC;IACD,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,CAAC;IACf,CAAC;IACD,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Collection } from "./types.ts";
2
+ export declare function createCollection<T>(items: T[]): Collection<T>;
3
+ //# sourceMappingURL=createCollection.d.ts.map
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,31 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,23 @@
1
+ export type Group<T> = {
2
+ key: string;
3
+ value: string;
4
+ items: T[];
5
+ first: T | undefined;
6
+ };
7
+ export type SplitGroup<T> = {
8
+ key: string | undefined;
9
+ value: string | undefined;
10
+ items: T[];
11
+ first: T;
12
+ };
13
+ export type GroupSelector<T> = string | ((item: T) => string | undefined);
14
+ export type SortSelector<T> = keyof T | ((item: T) => string | number | undefined);
15
+ export type Collection<T> = {
16
+ all(): T[];
17
+ where(predicate: (item: T) => boolean): Collection<T>;
18
+ sortBy(selector: SortSelector<T>): Collection<T>;
19
+ groupBy(selector: GroupSelector<T>): Group<T>[];
20
+ splitBy(selector: GroupSelector<T>): SplitGroup<T>[];
21
+ map<U>(mapper: (item: T) => U): U[];
22
+ };
23
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/collections/public/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,KAAK,CAAC,CAAC,IAAI;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,KAAK,EAAE,CAAC,GAAG,SAAS,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI;IAC1B,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,KAAK,EAAE,CAAC,CAAC;CACV,CAAC;AAEF,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,GAAG,SAAS,CAAC,CAAC;AAC1E,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC;AAEnF,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI;IAC1B,GAAG,IAAI,CAAC,EAAE,CAAC;IACX,KAAK,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IACtD,MAAM,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IACjD,OAAO,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAChD,OAAO,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;IACrD,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;CACrC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../src/collections/public/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ export { compileProject } from "./public/compileProject.ts";
2
+ export { buildTemplateContext } from "./public/buildTemplateContext.ts";
3
+ export type { CompileProjectInput, CompileProjectResult, BuildTemplateContextInput } from "./public/types.ts";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/compile/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AACxE,YAAY,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { compileProject } from "./public/compileProject.js";
2
+ export { buildTemplateContext } from "./public/buildTemplateContext.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/compile/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC"}
@@ -0,0 +1,3 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,70 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-manuscripts.js","sourceRoot":"","sources":["../../../../../src/compile/internal/load-manuscripts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export type LoadedProject = {
2
+ id: string;
3
+ root: string;
4
+ metadata: Record<string, unknown>;
5
+ };
6
+ export declare function loadProject(projectRoot: string): LoadedProject;
7
+ //# sourceMappingURL=load-project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-project.d.ts","sourceRoot":"","sources":["../../../../../src/compile/internal/load-project.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC,CAAC;AAEF,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,CAc9D"}
@@ -0,0 +1,16 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ export function loadProject(projectRoot) {
4
+ const projectJsonPath = path.join(projectRoot, "stego-project.json");
5
+ const raw = fs.readFileSync(projectJsonPath, "utf8");
6
+ const parsed = JSON.parse(raw);
7
+ const id = typeof parsed.id === "string" && parsed.id.trim()
8
+ ? parsed.id.trim()
9
+ : path.basename(projectRoot);
10
+ return {
11
+ id,
12
+ root: projectRoot,
13
+ metadata: parsed
14
+ };
15
+ }
16
+ //# sourceMappingURL=load-project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-project.js","sourceRoot":"","sources":["../../../../../src/compile/internal/load-project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAQ7B,MAAM,UAAU,WAAW,CAAC,WAAmB;IAC7C,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,oBAAoB,CAAC,CAAC;IACrE,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAC;IAE1D,MAAM,EAAE,GAAG,OAAO,MAAM,CAAC,EAAE,KAAK,QAAQ,IAAI,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE;QAC1D,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE;QAClB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAE/B,OAAO;QACL,EAAE;QACF,IAAI,EAAE,WAAW;QACjB,QAAQ,EAAE,MAAM;KACjB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,92 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-spine.js","sourceRoot":"","sources":["../../../../../src/compile/internal/load-spine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function resolveTemplatePath(projectRoot: string, templatePath?: string): string;
2
+ //# sourceMappingURL=resolve-template-path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-template-path.d.ts","sourceRoot":"","sources":["../../../../../src/compile/internal/resolve-template-path.ts"],"names":[],"mappings":"AAGA,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAYtF"}