@hymarkx/compiler 0.0.2

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 (88) hide show
  1. package/LICENSE-APACHE +202 -0
  2. package/LICENSE-MIT +21 -0
  3. package/README.md +23 -0
  4. package/dist/analyze/index.d.ts +75 -0
  5. package/dist/analyze/index.d.ts.map +1 -0
  6. package/dist/analyze/index.js +455 -0
  7. package/dist/analyze/index.js.map +1 -0
  8. package/dist/components/authored.d.ts +30 -0
  9. package/dist/components/authored.d.ts.map +1 -0
  10. package/dist/components/authored.js +293 -0
  11. package/dist/components/authored.js.map +1 -0
  12. package/dist/components/builtins.d.ts +6 -0
  13. package/dist/components/builtins.d.ts.map +1 -0
  14. package/dist/components/builtins.js +205 -0
  15. package/dist/components/builtins.js.map +1 -0
  16. package/dist/components/styles.d.ts +3 -0
  17. package/dist/components/styles.d.ts.map +1 -0
  18. package/dist/components/styles.js +99 -0
  19. package/dist/components/styles.js.map +1 -0
  20. package/dist/components/types.d.ts +77 -0
  21. package/dist/components/types.d.ts.map +1 -0
  22. package/dist/components/types.js +2 -0
  23. package/dist/components/types.js.map +1 -0
  24. package/dist/components/validate.d.ts +14 -0
  25. package/dist/components/validate.d.ts.map +1 -0
  26. package/dist/components/validate.js +347 -0
  27. package/dist/components/validate.js.map +1 -0
  28. package/dist/diagnostic-origin.d.ts +11 -0
  29. package/dist/diagnostic-origin.d.ts.map +1 -0
  30. package/dist/diagnostic-origin.js +12 -0
  31. package/dist/diagnostic-origin.js.map +1 -0
  32. package/dist/diagnostics/render.d.ts +13 -0
  33. package/dist/diagnostics/render.d.ts.map +1 -0
  34. package/dist/diagnostics/render.js +92 -0
  35. package/dist/diagnostics/render.js.map +1 -0
  36. package/dist/emit/backend.d.ts +13 -0
  37. package/dist/emit/backend.d.ts.map +1 -0
  38. package/dist/emit/backend.js +2 -0
  39. package/dist/emit/backend.js.map +1 -0
  40. package/dist/emit/escape.d.ts +5 -0
  41. package/dist/emit/escape.d.ts.map +1 -0
  42. package/dist/emit/escape.js +52 -0
  43. package/dist/emit/escape.js.map +1 -0
  44. package/dist/emit/html.d.ts +16 -0
  45. package/dist/emit/html.d.ts.map +1 -0
  46. package/dist/emit/html.js +528 -0
  47. package/dist/emit/html.js.map +1 -0
  48. package/dist/emit/sanitize.d.ts +19 -0
  49. package/dist/emit/sanitize.d.ts.map +1 -0
  50. package/dist/emit/sanitize.js +383 -0
  51. package/dist/emit/sanitize.js.map +1 -0
  52. package/dist/events.d.ts +7 -0
  53. package/dist/events.d.ts.map +1 -0
  54. package/dist/events.js +16 -0
  55. package/dist/events.js.map +1 -0
  56. package/dist/expression.d.ts +133 -0
  57. package/dist/expression.d.ts.map +1 -0
  58. package/dist/expression.js +1248 -0
  59. package/dist/expression.js.map +1 -0
  60. package/dist/frontmatter.d.ts +15 -0
  61. package/dist/frontmatter.d.ts.map +1 -0
  62. package/dist/frontmatter.js +196 -0
  63. package/dist/frontmatter.js.map +1 -0
  64. package/dist/index.d.ts +18 -0
  65. package/dist/index.d.ts.map +1 -0
  66. package/dist/index.js +92 -0
  67. package/dist/index.js.map +1 -0
  68. package/dist/islands.d.ts +23 -0
  69. package/dist/islands.d.ts.map +1 -0
  70. package/dist/islands.js +76 -0
  71. package/dist/islands.js.map +1 -0
  72. package/dist/runtime.d.ts +14 -0
  73. package/dist/runtime.d.ts.map +1 -0
  74. package/dist/runtime.js +487 -0
  75. package/dist/runtime.js.map +1 -0
  76. package/dist/styles.d.ts +33 -0
  77. package/dist/styles.d.ts.map +1 -0
  78. package/dist/styles.js +370 -0
  79. package/dist/styles.js.map +1 -0
  80. package/dist/suggestions.d.ts +3 -0
  81. package/dist/suggestions.d.ts.map +1 -0
  82. package/dist/suggestions.js +29 -0
  83. package/dist/suggestions.js.map +1 -0
  84. package/dist/types.d.ts +59 -0
  85. package/dist/types.d.ts.map +1 -0
  86. package/dist/types.js +2 -0
  87. package/dist/types.js.map +1 -0
  88. package/package.json +39 -0
package/dist/styles.js ADDED
@@ -0,0 +1,370 @@
1
+ import { createDiagnostic, visit } from '@hymarkx/ast';
2
+ import postcss from 'postcss';
3
+ import selectorParser from 'postcss-selector-parser';
4
+ import { builtinComponents } from './components/builtins.js';
5
+ import { builtinStylesFor } from './components/styles.js';
6
+ import { setDiagnosticOrigin } from './diagnostic-origin.js';
7
+ const EMPTY_STYLES = {
8
+ css: '',
9
+ diagnostics: [],
10
+ omittedNodes: new Map(),
11
+ rootScopeAttributes: [],
12
+ componentScopeAttributes: new Map(),
13
+ scopedBlocks: [],
14
+ };
15
+ function parseStyleBlock(node, index) {
16
+ const opening = /^<style(?<scoped>[ \t]+scoped)?[ \t]*>/i.exec(node.value);
17
+ if (opening === null) {
18
+ return undefined;
19
+ }
20
+ const closing = node.value.toLowerCase().lastIndexOf('</style>');
21
+ if (closing < opening[0].length || node.value.slice(closing + 8).trim() !== '') {
22
+ return undefined;
23
+ }
24
+ const css = node.value.slice(opening[0].length, closing);
25
+ const scoped = opening.groups?.scoped !== undefined;
26
+ // CommonMark example 176 uses a same-line raw `<style>…</style>` block. Requiring
27
+ // non-empty plain author styles to start on the next line preserves that baseline while
28
+ // scoped blocks and the explicitly supported empty `<style></style>` remain unambiguous.
29
+ if (!scoped && css !== '' && !css.startsWith('\n')) {
30
+ return undefined;
31
+ }
32
+ return {
33
+ node,
34
+ css,
35
+ cssOffset: node.position.start.offset + opening[0].length,
36
+ scoped,
37
+ index,
38
+ };
39
+ }
40
+ function collectStyleBlocks(document) {
41
+ const blocks = [];
42
+ visit(document.root, (node) => {
43
+ if (node.type === 'html') {
44
+ const block = parseStyleBlock(node, blocks.length);
45
+ if (block !== undefined) {
46
+ blocks.push(block);
47
+ }
48
+ }
49
+ });
50
+ return blocks;
51
+ }
52
+ function hashScope(identity) {
53
+ let hash = 0x811c9dc5;
54
+ for (let index = 0; index < identity.length; index += 1) {
55
+ hash ^= identity.charCodeAt(index);
56
+ hash = Math.imul(hash, 0x01000193);
57
+ }
58
+ return (hash >>> 0).toString(16).padStart(8, '0');
59
+ }
60
+ function authoredScopeAttribute(identity, used) {
61
+ const base = `data-hmx-s-${hashScope(identity)}-${hashScope(`authored\0${identity}`)}`;
62
+ let attribute = base;
63
+ let collision = 1;
64
+ while (used.has(attribute)) {
65
+ collision += 1;
66
+ attribute = `${base}-${collision}`;
67
+ }
68
+ used.add(attribute);
69
+ return attribute;
70
+ }
71
+ function isInsideKeyframes(rule) {
72
+ let parent = rule.parent;
73
+ while (parent !== undefined) {
74
+ if (parent.type === 'atrule' && /(?:^|-)keyframes$/i.test(parent.name)) {
75
+ return true;
76
+ }
77
+ parent = parent.parent;
78
+ }
79
+ return false;
80
+ }
81
+ function markGlobal(node, globals) {
82
+ globals.add(node);
83
+ if ('nodes' in node) {
84
+ for (const child of node.nodes) {
85
+ markGlobal(child, globals);
86
+ }
87
+ }
88
+ }
89
+ function unwrapGlobals(selector, globals) {
90
+ const pseudos = [];
91
+ selector.walkPseudos((pseudo) => {
92
+ if (pseudo.value.toLowerCase() === ':global') {
93
+ pseudos.push(pseudo);
94
+ }
95
+ });
96
+ for (const pseudo of pseudos.reverse()) {
97
+ const nested = pseudo.nodes[0];
98
+ if (nested === undefined || pseudo.nodes.length !== 1) {
99
+ throw new Error(':global() requires exactly one selector');
100
+ }
101
+ const replacements = nested.nodes.map((node) => node.clone());
102
+ for (const replacement of replacements) {
103
+ markGlobal(replacement, globals);
104
+ }
105
+ pseudo.replaceWith(...replacements);
106
+ }
107
+ }
108
+ function addScopeAttribute(selector, attributeName, globals) {
109
+ let selectedStart = -1;
110
+ let selectedEnd = -1;
111
+ let compoundStart = 0;
112
+ let compoundHasLocal = false;
113
+ for (let index = 0; index <= selector.nodes.length; index += 1) {
114
+ const node = selector.nodes[index];
115
+ if (node !== undefined && node.type !== 'combinator') {
116
+ if (node.type !== 'comment' && !globals.has(node)) {
117
+ compoundHasLocal = true;
118
+ }
119
+ continue;
120
+ }
121
+ if (compoundHasLocal) {
122
+ selectedStart = compoundStart;
123
+ selectedEnd = index;
124
+ }
125
+ compoundStart = index + 1;
126
+ compoundHasLocal = false;
127
+ }
128
+ if (selectedStart === -1) {
129
+ return;
130
+ }
131
+ const attribute = selectorParser.attribute({
132
+ attribute: attributeName,
133
+ value: undefined,
134
+ raws: {},
135
+ });
136
+ const pseudo = selector.nodes
137
+ .slice(selectedStart, selectedEnd)
138
+ .find((node) => node.type === 'pseudo');
139
+ if (pseudo !== undefined) {
140
+ selector.insertBefore(pseudo, attribute);
141
+ return;
142
+ }
143
+ const last = selector.nodes[selectedEnd - 1];
144
+ if (last !== undefined) {
145
+ selector.insertAfter(last, attribute);
146
+ }
147
+ }
148
+ function scopeRule(rule, attributeName) {
149
+ if (isInsideKeyframes(rule)) {
150
+ return;
151
+ }
152
+ try {
153
+ rule.selector = selectorParser((root) => {
154
+ root.each((selector) => {
155
+ const globals = new WeakSet();
156
+ unwrapGlobals(selector, globals);
157
+ addScopeAttribute(selector, attributeName, globals);
158
+ });
159
+ }).processSync(rule.selector);
160
+ }
161
+ catch (error) {
162
+ const message = error instanceof Error ? error.message : String(error);
163
+ throw rule.error(message, { word: rule.selector });
164
+ }
165
+ }
166
+ function pointAt(source, offset) {
167
+ let line = 1;
168
+ let column = 1;
169
+ for (let index = 0; index < offset; index += 1) {
170
+ if (source.charCodeAt(index) === 10) {
171
+ line += 1;
172
+ column = 1;
173
+ }
174
+ else {
175
+ column += 1;
176
+ }
177
+ }
178
+ return { line, column, offset };
179
+ }
180
+ function relativeOffset(value, line, column) {
181
+ if (line === undefined || column === undefined) {
182
+ return 0;
183
+ }
184
+ let offset = 0;
185
+ for (let currentLine = 1; currentLine < line; currentLine += 1) {
186
+ const newline = value.indexOf('\n', offset);
187
+ if (newline === -1) {
188
+ return value.length;
189
+ }
190
+ offset = newline + 1;
191
+ }
192
+ return Math.min(offset + Math.max(column - 1, 0), value.length);
193
+ }
194
+ function syntaxErrorDiagnostic(error, source, block) {
195
+ const located = error;
196
+ const startOffset = Math.min(block.cssOffset + relativeOffset(block.css, located.line, located.column), source.length);
197
+ const reportedEnd = relativeOffset(block.css, located.endLine, located.endColumn);
198
+ const endOffset = Math.min(Math.max(startOffset + 1, block.cssOffset + reportedEnd), source.length);
199
+ return createDiagnostic({
200
+ code: 'HMX2030',
201
+ severity: 'error',
202
+ message: `CSS syntax error: ${located.reason ?? located.message ?? 'invalid CSS'}`,
203
+ span: { start: pointAt(source, startOffset), end: pointAt(source, endOffset) },
204
+ });
205
+ }
206
+ function compileStyleBlock(block, attributeName, source, from) {
207
+ try {
208
+ const root = postcss.parse(block.css, from === undefined ? {} : { from });
209
+ if (attributeName !== undefined) {
210
+ root.walkRules((rule) => scopeRule(rule, attributeName));
211
+ return { css: root.toString() };
212
+ }
213
+ return { css: block.css };
214
+ }
215
+ catch (error) {
216
+ return { css: '', diagnostic: syntaxErrorDiagnostic(error, source, block) };
217
+ }
218
+ }
219
+ function analyzedDocuments(root) {
220
+ const documents = [];
221
+ const seen = new Set();
222
+ const stack = [root];
223
+ while (stack.length > 0) {
224
+ const document = stack.pop();
225
+ if (document === undefined || seen.has(document)) {
226
+ continue;
227
+ }
228
+ seen.add(document);
229
+ documents.push(document);
230
+ const nested = [...document.expansions.values()].map((expansion) => expansion.document);
231
+ for (let index = nested.length - 1; index >= 0; index -= 1) {
232
+ const child = nested[index];
233
+ if (child !== undefined) {
234
+ stack.push(child);
235
+ }
236
+ }
237
+ }
238
+ return documents;
239
+ }
240
+ function usedBuiltinComponents(documents) {
241
+ const used = new Set();
242
+ for (const document of documents) {
243
+ for (const [node, component] of document.components) {
244
+ if (component.kindAllowed &&
245
+ component.schema === builtinComponents.schemas[node.name] &&
246
+ component.renderer === builtinComponents.renderers[node.name]) {
247
+ used.add(node.name);
248
+ }
249
+ }
250
+ }
251
+ return used;
252
+ }
253
+ /** Collects app-mode author CSS and proportional built-in component CSS. */
254
+ export function prepareStyles(document, source, options) {
255
+ const documents = analyzedDocuments(document);
256
+ const builtins = builtinStylesFor(usedBuiltinComponents(documents));
257
+ const omittedNodes = new Map();
258
+ const rootScopeAttributes = [];
259
+ const componentScopeAttributes = new Map();
260
+ const scopedBlocks = [];
261
+ const diagnostics = [];
262
+ const authorCss = [];
263
+ const usedComponentScopeAttributes = new Set();
264
+ if (options.collectAuthorStyles) {
265
+ const blocks = collectStyleBlocks(document);
266
+ omittedNodes.set(document, new Set(blocks.map((block) => block.node)));
267
+ for (const block of blocks) {
268
+ const attributeName = block.scoped
269
+ ? `data-hmx-s-${hashScope(`${options.from ?? ''}\0${source}\0${block.index}`)}`
270
+ : undefined;
271
+ const compiled = compileStyleBlock(block, attributeName, source, options.from);
272
+ if (compiled.diagnostic !== undefined) {
273
+ diagnostics.push(compiled.diagnostic);
274
+ continue;
275
+ }
276
+ if (compiled.css !== '') {
277
+ authorCss.push(compiled.css);
278
+ }
279
+ if (attributeName !== undefined) {
280
+ rootScopeAttributes.push(attributeName);
281
+ scopedBlocks.push({
282
+ block,
283
+ attribute: attributeName,
284
+ source,
285
+ ...(options.from === undefined ? {} : { from: options.from }),
286
+ });
287
+ }
288
+ }
289
+ }
290
+ const componentDocuments = new Map();
291
+ for (const owner of documents) {
292
+ if (owner.authored === undefined) {
293
+ continue;
294
+ }
295
+ const instances = componentDocuments.get(owner.authored) ?? [];
296
+ instances.push(owner);
297
+ componentDocuments.set(owner.authored, instances);
298
+ }
299
+ for (const [definition, instances] of componentDocuments) {
300
+ const representative = instances[0];
301
+ if (representative === undefined) {
302
+ continue;
303
+ }
304
+ const blocks = collectStyleBlocks(representative);
305
+ const omitted = new Set(blocks.map((block) => block.node));
306
+ for (const instance of instances) {
307
+ omittedNodes.set(instance, omitted);
308
+ }
309
+ const attributes = [];
310
+ for (const block of blocks) {
311
+ if (!block.scoped || /<\s*script\b/i.test(block.css)) {
312
+ continue;
313
+ }
314
+ const identity = `${definition.name}\0${definition.from ?? ''}\0${definition.source}\0${block.index}`;
315
+ const attributeName = authoredScopeAttribute(identity, usedComponentScopeAttributes);
316
+ const compiled = compileStyleBlock(block, attributeName, definition.source, definition.from);
317
+ if (compiled.diagnostic !== undefined) {
318
+ setDiagnosticOrigin(compiled.diagnostic, definition.source, definition.from);
319
+ diagnostics.push(compiled.diagnostic);
320
+ continue;
321
+ }
322
+ if (compiled.css !== '') {
323
+ authorCss.push(compiled.css);
324
+ }
325
+ attributes.push(attributeName);
326
+ scopedBlocks.push({
327
+ block,
328
+ attribute: attributeName,
329
+ source: definition.source,
330
+ ...(definition.from === undefined ? {} : { from: definition.from }),
331
+ });
332
+ }
333
+ for (const instance of instances) {
334
+ componentScopeAttributes.set(instance, attributes);
335
+ }
336
+ }
337
+ if (builtins === '' &&
338
+ authorCss.length === 0 &&
339
+ diagnostics.length === 0 &&
340
+ omittedNodes.size === 0) {
341
+ return EMPTY_STYLES;
342
+ }
343
+ return {
344
+ css: [builtins, ...authorCss].filter((value) => value !== '').join('\n'),
345
+ diagnostics,
346
+ omittedNodes,
347
+ rootScopeAttributes,
348
+ componentScopeAttributes,
349
+ scopedBlocks,
350
+ };
351
+ }
352
+ /** Warns for valid scoped blocks when no generated element received their scope attribute. */
353
+ export function emptyScopeDiagnostics(styles, html) {
354
+ const diagnostics = [];
355
+ for (const { block, attribute, source, from } of styles.scopedBlocks) {
356
+ if (html.includes(` ${attribute}`)) {
357
+ continue;
358
+ }
359
+ const diagnostic = createDiagnostic({
360
+ code: 'HMX2031',
361
+ severity: 'warning',
362
+ message: 'Scoped style has no emitted elements to scope.',
363
+ span: block.node.position,
364
+ });
365
+ setDiagnosticOrigin(diagnostic, source, from);
366
+ diagnostics.push(diagnostic);
367
+ }
368
+ return diagnostics;
369
+ }
370
+ //# sourceMappingURL=styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.js","sourceRoot":"","sources":["../src/styles.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** Returns the single closest case-insensitive candidate within edit distance two. */
2
+ export declare function nearestSuggestion(value: string, candidates: readonly string[]): string | undefined;
3
+ //# sourceMappingURL=suggestions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suggestions.d.ts","sourceRoot":"","sources":["../src/suggestions.ts"],"names":[],"mappings":"AAmBA,sFAAsF;AACtF,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,SAAS,MAAM,EAAE,GAC5B,MAAM,GAAG,SAAS,CAYpB"}
@@ -0,0 +1,29 @@
1
+ function levenshtein(left, right) {
2
+ const previous = Array.from({ length: right.length + 1 }, (_, index) => index);
3
+ for (let leftIndex = 1; leftIndex <= left.length; leftIndex += 1) {
4
+ let diagonal = previous[0] ?? 0;
5
+ previous[0] = leftIndex;
6
+ for (let rightIndex = 1; rightIndex <= right.length; rightIndex += 1) {
7
+ const above = previous[rightIndex] ?? 0;
8
+ const next = Math.min(above + 1, (previous[rightIndex - 1] ?? 0) + 1, diagonal + (left[leftIndex - 1] === right[rightIndex - 1] ? 0 : 1));
9
+ diagonal = above;
10
+ previous[rightIndex] = next;
11
+ }
12
+ }
13
+ return previous[right.length] ?? 0;
14
+ }
15
+ /** Returns the single closest case-insensitive candidate within edit distance two. */
16
+ export function nearestSuggestion(value, candidates) {
17
+ let closest;
18
+ let closestDistance = 3;
19
+ const normalized = value.toLowerCase();
20
+ for (const candidate of candidates) {
21
+ const distance = levenshtein(normalized, candidate.toLowerCase());
22
+ if (distance < closestDistance) {
23
+ closest = candidate;
24
+ closestDistance = distance;
25
+ }
26
+ }
27
+ return closest;
28
+ }
29
+ //# sourceMappingURL=suggestions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suggestions.js","sourceRoot":"","sources":["../src/suggestions.ts"],"names":[],"mappings":"AAAA,SAAS,WAAW,CAAC,IAAY,EAAE,KAAa;IAC9C,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAA;IAC9E,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,IAAI,IAAI,CAAC,MAAM,EAAE,SAAS,IAAI,CAAC,EAAE,CAAC;QACjE,IAAI,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QAC/B,QAAQ,CAAC,CAAC,CAAC,GAAG,SAAS,CAAA;QACvB,KAAK,IAAI,UAAU,GAAG,CAAC,EAAE,UAAU,IAAI,KAAK,CAAC,MAAM,EAAE,UAAU,IAAI,CAAC,EAAE,CAAC;YACrE,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;YACvC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CACnB,KAAK,GAAG,CAAC,EACT,CAAC,QAAQ,CAAC,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EACnC,QAAQ,GAAG,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACnE,CAAA;YACD,QAAQ,GAAG,KAAK,CAAA;YAChB,QAAQ,CAAC,UAAU,CAAC,GAAG,IAAI,CAAA;QAC7B,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;AACpC,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,iBAAiB,CAC/B,KAAa,EACb,UAA6B;IAE7B,IAAI,OAA2B,CAAA;IAC/B,IAAI,eAAe,GAAG,CAAC,CAAA;IACvB,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAA;IACtC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,WAAW,CAAC,UAAU,EAAE,SAAS,CAAC,WAAW,EAAE,CAAC,CAAA;QACjE,IAAI,QAAQ,GAAG,eAAe,EAAE,CAAC;YAC/B,OAAO,GAAG,SAAS,CAAA;YACnB,eAAe,GAAG,QAAQ,CAAA;QAC5B,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC"}
@@ -0,0 +1,59 @@
1
+ import type { Diagnostic } from '@hymarkx/ast';
2
+ import type { ComponentRegistry } from './components/types.js';
3
+ /** Host-selected trust boundary used while emitting HTML. */
4
+ export type TrustMode = 'document' | 'app';
5
+ /** A scalar value accepted in parsed frontmatter. */
6
+ export type FrontmatterScalar = string | number | boolean | null;
7
+ /** A parsed frontmatter mapping exposed to compiler consumers. */
8
+ export type FrontmatterValue = {
9
+ readonly [key: string]: FrontmatterScalar | readonly FrontmatterScalar[] | FrontmatterValue;
10
+ };
11
+ /** Options controlling parsing, analysis, and HTML emission. */
12
+ export interface CompileOptions {
13
+ /** Host-selected. Never inferred from document content. Default: `document`. */
14
+ readonly trust?: TrustMode;
15
+ /** File path used when rendering diagnostics. */
16
+ readonly from?: string;
17
+ /** Enables GFM tables, task lists, strikethrough, and autolinks. Default: `true`. */
18
+ readonly gfm?: boolean;
19
+ /** Additional or replacement name-keyed component schemas and renderers. */
20
+ readonly components?: ComponentRegistry;
21
+ /** Emit CSS in a `<style>` element ahead of the HTML content. Default: `false`. */
22
+ readonly inlineCss?: boolean;
23
+ /** Emit JavaScript in a `<script>` element after the HTML content. Default: `false`. */
24
+ readonly inlineJs?: boolean;
25
+ }
26
+ /** Result of compiling source or an existing HMX syntax tree. */
27
+ export interface CompileResult {
28
+ /** Deterministic HTML output. */
29
+ readonly html: string;
30
+ /** Stylesheet for this document. Empty when no styles are needed. */
31
+ readonly css: string;
32
+ /** Feature-shaped interactive runtime. Empty when the document is static. */
33
+ readonly js: string;
34
+ /** Parser, analysis, and emission diagnostics in source order. */
35
+ readonly diagnostics: readonly Diagnostic[];
36
+ /** Normalized source indexed by every diagnostic span. */
37
+ readonly source: string;
38
+ /** Parsed frontmatter, or undefined when the document has none. */
39
+ readonly frontmatter?: FrontmatterValue;
40
+ /**
41
+ * Foreign-component references for the host to resolve and bundle (ADR-0016).
42
+ *
43
+ * Empty for every document without an `::island`. The compiler records references and
44
+ * never imports, transpiles, or evaluates them, so a document using islands is **not
45
+ * runnable from `hmx build` output alone** — a host integration must supply the modules
46
+ * and their framework runtime.
47
+ */
48
+ readonly islands: readonly IslandRef[];
49
+ }
50
+ /** Props passed to a foreign component: the same restricted scalars expressions produce. */
51
+ export type IslandProps = Readonly<Record<string, string | number | boolean | null>>;
52
+ /** One foreign-component reference in the island manifest. */
53
+ export interface IslandRef {
54
+ readonly id: number;
55
+ readonly from: string;
56
+ readonly export: string;
57
+ readonly props: IslandProps;
58
+ }
59
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAE9D,6DAA6D;AAC7D,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,KAAK,CAAA;AAE1C,qDAAqD;AACrD,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAA;AAEhE,kEAAkE;AAClE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,iBAAiB,EAAE,GAAG,gBAAgB,CAAA;CAC5F,CAAA;AAED,gEAAgE;AAChE,MAAM,WAAW,cAAc;IAC7B,gFAAgF;IAChF,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAA;IAC1B,iDAAiD;IACjD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,qFAAqF;IACrF,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAA;IACtB,4EAA4E;IAC5E,QAAQ,CAAC,UAAU,CAAC,EAAE,iBAAiB,CAAA;IACvC,mFAAmF;IACnF,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B,wFAAwF;IACxF,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAC5B;AAED,iEAAiE;AACjE,MAAM,WAAW,aAAa;IAC5B,iCAAiC;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,qEAAqE;IACrE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,kEAAkE;IAClE,QAAQ,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,CAAA;IAC3C,0DAA0D;IAC1D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,mEAAmE;IACnE,QAAQ,CAAC,WAAW,CAAC,EAAE,gBAAgB,CAAA;IACvC;;;;;;;OAOG;IACH,QAAQ,CAAC,OAAO,EAAE,SAAS,SAAS,EAAE,CAAA;CACvC;AAED,4FAA4F;AAC5F,MAAM,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC,CAAA;AAEpF,8DAA8D;AAC9D,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAA;CAC5B"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,39 @@
1
+ {
2
+ "name": "@hymarkx/compiler",
3
+ "version": "0.0.2",
4
+ "description": "Trust-aware HTML compiler and diagnostic renderer for HyMarkX (HMX).",
5
+ "license": "MIT OR Apache-2.0",
6
+ "publishConfig": {
7
+ "access": "public"
8
+ },
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "git+https://github.com/NAME0x0/HyMarkX.git",
12
+ "directory": "packages/compiler"
13
+ },
14
+ "homepage": "https://github.com/NAME0x0/HyMarkX#readme",
15
+ "bugs": "https://github.com/NAME0x0/HyMarkX/issues",
16
+ "type": "module",
17
+ "exports": {
18
+ ".": {
19
+ "types": "./dist/index.d.ts",
20
+ "import": "./dist/index.js"
21
+ }
22
+ },
23
+ "files": [
24
+ "dist",
25
+ "README.md",
26
+ "LICENSE-MIT",
27
+ "LICENSE-APACHE"
28
+ ],
29
+ "dependencies": {
30
+ "postcss": "^8.5.26",
31
+ "postcss-selector-parser": "^7.1.1",
32
+ "yaml": "^2.9.0",
33
+ "@hymarkx/parser": "0.0.2",
34
+ "@hymarkx/ast": "0.0.2"
35
+ },
36
+ "engines": {
37
+ "node": ">=22"
38
+ }
39
+ }