@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
@@ -0,0 +1,455 @@
1
+ import { createDiagnostic, visit } from '@hymarkx/ast';
2
+ import { authoredComponentFor } from '../components/authored.js';
3
+ import { validateComponent } from '../components/validate.js';
4
+ import { setDiagnosticOrigin } from '../diagnostic-origin.js';
5
+ import { islandFor } from '../islands.js';
6
+ import { compileHandlerExpression, evaluateExpression, isExpressionIdentifier, } from '../expression.js';
7
+ import { isAllowedEventAttribute } from '../events.js';
8
+ import { nearestSuggestion } from '../suggestions.js';
9
+ const MAX_COMPONENT_DEPTH = 32;
10
+ /**
11
+ * Matches a line that opens like a block directive: two or more colons immediately
12
+ * followed by a directive name character. Prose such as `:: note` or a bare `:::` does
13
+ * not match, because a name character must follow the colons with no space.
14
+ */
15
+ const DIRECTIVE_LIKE = /^:{2,}[A-Za-z0-9]/;
16
+ /**
17
+ * Reports paragraphs that look like a block directive but were not parsed as one.
18
+ *
19
+ * The tokenizer refuses to open a directive whose attribute block is malformed — for
20
+ * example `:::card{ bad` — and the line then falls through to ordinary Markdown. Without this
21
+ * check the document renders
22
+ * the source text verbatim and says nothing, which is the least debuggable failure a
23
+ * markup language can have.
24
+ */
25
+ function checkDirectiveLikeParagraphs(root, diagnostics) {
26
+ visit(root, (node) => {
27
+ if (node.type !== 'paragraph') {
28
+ return;
29
+ }
30
+ const first = node.children[0];
31
+ if (first?.type !== 'text' || !DIRECTIVE_LIKE.test(first.value)) {
32
+ return;
33
+ }
34
+ diagnostics.push(createDiagnostic({
35
+ code: 'HMX1011',
36
+ severity: 'warning',
37
+ message: 'This line looks like a directive but was not recognized as one.',
38
+ span: node.position,
39
+ expected: 'a well-formed attribute block, such as :::name{key="value"}',
40
+ }));
41
+ });
42
+ }
43
+ function leadingWhitespaceLength(value) {
44
+ return value.length - value.trimStart().length;
45
+ }
46
+ function interpolationSource(node, source) {
47
+ const raw = source.slice(node.position.start.offset, node.position.end.offset);
48
+ const interior = raw.startsWith('{{') && raw.endsWith('}}') ? raw.slice(2, -2) : node.value;
49
+ return {
50
+ value: node.value,
51
+ startOffset: node.position.start.offset +
52
+ (raw.startsWith('{{') ? 2 : 0) +
53
+ leadingWhitespaceLength(interior),
54
+ };
55
+ }
56
+ function attributeExpression(attribute, source) {
57
+ if (attribute.value === null || attribute.valueSpan === undefined) {
58
+ return undefined;
59
+ }
60
+ const start = attribute.valueSpan.start.offset;
61
+ const end = attribute.valueSpan.end.offset;
62
+ if (start < 1 || source[start - 1] !== '{' || source[end] !== '}') {
63
+ return undefined;
64
+ }
65
+ const interior = source.slice(start, end);
66
+ return {
67
+ value: attribute.value,
68
+ startOffset: start + leadingWhitespaceLength(interior),
69
+ };
70
+ }
71
+ function expressionSpan(expression, source) {
72
+ const start = expression.startOffset;
73
+ const end = start + expression.value.length;
74
+ const pointAt = (offset) => {
75
+ let line = 1;
76
+ let lineStart = 0;
77
+ for (let index = 0; index < offset; index += 1) {
78
+ if (source.charCodeAt(index) === 10) {
79
+ line += 1;
80
+ lineStart = index + 1;
81
+ }
82
+ }
83
+ return { line, column: offset - lineStart + 1, offset };
84
+ };
85
+ return { start: pointAt(start), end: pointAt(end) };
86
+ }
87
+ const STATE_NUMBER = /^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?$/;
88
+ function stateValue(attribute, source) {
89
+ if (attribute.value === null) {
90
+ return null;
91
+ }
92
+ const span = attribute.valueSpan;
93
+ const opening = span === undefined ? undefined : source[span.start.offset - 1];
94
+ const closing = span === undefined ? undefined : source[span.end.offset];
95
+ if ((opening === '"' || opening === "'") && closing === opening) {
96
+ return attribute.value;
97
+ }
98
+ if (attribute.value === 'true')
99
+ return true;
100
+ if (attribute.value === 'false')
101
+ return false;
102
+ if (attribute.value === 'null')
103
+ return null;
104
+ if (STATE_NUMBER.test(attribute.value)) {
105
+ const value = Number(attribute.value);
106
+ return Number.isFinite(value) ? value : attribute.value;
107
+ }
108
+ return attribute.value;
109
+ }
110
+ function isStateExpression(attribute, source) {
111
+ const span = attribute.valueSpan;
112
+ return (span !== undefined && source[span.start.offset - 1] === '{' && source[span.end.offset] === '}');
113
+ }
114
+ function stateDiagnostic(code, message, span) {
115
+ return createDiagnostic({ code, severity: 'error', message, span });
116
+ }
117
+ function collectState(root, source, existingNames, diagnostics) {
118
+ const state = Object.create(null);
119
+ const rootDeclarations = new Set(root.children.filter((node) => node.type === 'leafDirective' && node.name === 'state'));
120
+ const occupied = new Set(existingNames);
121
+ visit(root, (node) => {
122
+ if (node.type !== 'leafDirective' || node.name !== 'state')
123
+ return;
124
+ if (!rootDeclarations.has(node)) {
125
+ diagnostics.push(stateDiagnostic('HMX2063', '::state must be declared directly in a document or authored component root.', node.position));
126
+ return;
127
+ }
128
+ for (const attribute of node.attributes) {
129
+ if (!isExpressionIdentifier(attribute.name)) {
130
+ diagnostics.push(stateDiagnostic('HMX2062', `State name "${attribute.name}" is not a valid expression identifier.`, attribute.nameSpan));
131
+ continue;
132
+ }
133
+ if (occupied.has(attribute.name) || Object.hasOwn(state, attribute.name)) {
134
+ diagnostics.push(stateDiagnostic('HMX2062', `State name "${attribute.name}" collides with an existing expression-scope name.`, attribute.nameSpan));
135
+ continue;
136
+ }
137
+ if (isStateExpression(attribute, source)) {
138
+ diagnostics.push(stateDiagnostic('HMX2062', `State "${attribute.name}" requires a scalar literal; named derived state is not supported.`, attribute.valueSpan ?? attribute.nameSpan));
139
+ continue;
140
+ }
141
+ state[attribute.name] = stateValue(attribute, source);
142
+ }
143
+ });
144
+ return state;
145
+ }
146
+ function reactiveExpression(evaluation, stateNames) {
147
+ const dependencies = evaluation.identifiers.filter((name) => stateNames.has(name));
148
+ return {
149
+ instruction: evaluation.instruction,
150
+ identifiers: evaluation.identifiers,
151
+ stateNames: dependencies,
152
+ };
153
+ }
154
+ function interpolationText(value, expression, source, diagnostics) {
155
+ if (value === null) {
156
+ return '';
157
+ }
158
+ if (typeof value === 'number') {
159
+ if (!Number.isFinite(value)) {
160
+ diagnostics.push(createDiagnostic({
161
+ code: 'HMX2042',
162
+ severity: 'error',
163
+ message: 'Numeric result must be finite.',
164
+ span: expressionSpan(expression, source),
165
+ }));
166
+ return '';
167
+ }
168
+ return Object.is(value, -0) ? '0' : String(value);
169
+ }
170
+ if (typeof value === 'string' || typeof value === 'boolean') {
171
+ return String(value);
172
+ }
173
+ diagnostics.push(createDiagnostic({
174
+ code: 'HMX2043',
175
+ severity: 'error',
176
+ message: 'Objects and arrays cannot be rendered in a text position.',
177
+ span: expressionSpan(expression, source),
178
+ }));
179
+ return '';
180
+ }
181
+ function callerChildren(node) {
182
+ return node.type === 'containerDirective' ? node.children : [];
183
+ }
184
+ function propScope(component) {
185
+ const scope = Object.create(null);
186
+ for (const name of Object.keys(component.schema.attributes)) {
187
+ const value = component.attributes[name];
188
+ if (Object.hasOwn(component.attributes, name) && value !== undefined) {
189
+ scope[name] = value;
190
+ }
191
+ }
192
+ return scope;
193
+ }
194
+ function analyzeDocument(root, options) {
195
+ const diagnostics = [];
196
+ const state = collectState(root, options.source, options.identifierNames, diagnostics);
197
+ const stateNames = new Set(Object.keys(state));
198
+ const scope = Object.assign(Object.create(null), options.scope, state);
199
+ const identifierNames = [...options.identifierNames, ...stateNames];
200
+ const components = new Map();
201
+ const interpolations = new Map();
202
+ const reactiveInterpolations = new Map();
203
+ const reactiveAttributes = new Map();
204
+ const events = new Map();
205
+ const attributeExpressions = new Map();
206
+ const expansions = new Map();
207
+ const projections = new Map();
208
+ const islands = [];
209
+ const islandNodes = new Map();
210
+ const document = {
211
+ root,
212
+ source: options.source,
213
+ ...(options.from === undefined ? {} : { from: options.from }),
214
+ ...(options.authored === undefined ? {} : { authored: options.authored }),
215
+ diagnostics,
216
+ components,
217
+ interpolations,
218
+ expansions,
219
+ projections,
220
+ islands,
221
+ islandNodes,
222
+ reactivity: {
223
+ state,
224
+ scope,
225
+ interpolations: reactiveInterpolations,
226
+ attributes: reactiveAttributes,
227
+ events,
228
+ },
229
+ };
230
+ checkDirectiveLikeParagraphs(root, diagnostics);
231
+ visit(root, (node) => {
232
+ if (node.type === 'interpolation') {
233
+ const expression = interpolationSource(node, options.source);
234
+ const evaluation = evaluateExpression(expression.value, scope, {
235
+ documentSource: options.source,
236
+ startOffset: expression.startOffset,
237
+ identifierNames,
238
+ strictScope: stateNames.size > 0,
239
+ });
240
+ diagnostics.push(...evaluation.diagnostics);
241
+ if (evaluation.ok) {
242
+ const reactive = reactiveExpression(evaluation, stateNames);
243
+ reactiveInterpolations.set(node, reactive);
244
+ }
245
+ interpolations.set(node, evaluation.ok
246
+ ? interpolationText(evaluation.value, expression, options.source, diagnostics)
247
+ : '');
248
+ return;
249
+ }
250
+ if (node.type === 'textDirective' ||
251
+ node.type === 'leafDirective' ||
252
+ node.type === 'containerDirective') {
253
+ if (node.type === 'leafDirective' && node.name === 'state') {
254
+ return;
255
+ }
256
+ if (node.type === 'leafDirective' && node.name === 'island') {
257
+ const island = islandFor(node, islands.length, options.trust, diagnostics);
258
+ if (island !== undefined) {
259
+ islands.push(island);
260
+ islandNodes.set(node, island);
261
+ }
262
+ return;
263
+ }
264
+ if (node.type === 'leafDirective' && node.name === 'children') {
265
+ if (options.authored === undefined) {
266
+ diagnostics.push(createDiagnostic({
267
+ code: 'HMX2056',
268
+ severity: 'error',
269
+ message: '::children can only appear inside an authored component document.',
270
+ span: node.position,
271
+ }));
272
+ }
273
+ return;
274
+ }
275
+ const schema = Object.hasOwn(options.components.schemas, node.name)
276
+ ? options.components.schemas[node.name]
277
+ : undefined;
278
+ const renderer = Object.hasOwn(options.components.renderers, node.name)
279
+ ? options.components.renderers[node.name]
280
+ : undefined;
281
+ const ignoredAttributes = new Set();
282
+ const nodeEvents = [];
283
+ const nodeReactiveAttributes = [];
284
+ for (const attribute of node.attributes) {
285
+ if (attribute.name.startsWith('on-')) {
286
+ ignoredAttributes.add(attribute);
287
+ if (!isAllowedEventAttribute(attribute.name)) {
288
+ diagnostics.push(createDiagnostic({
289
+ code: 'HMX2060',
290
+ severity: 'error',
291
+ message: `Event attribute "${attribute.name}" is not allowlisted.`,
292
+ span: attribute.nameSpan,
293
+ }));
294
+ continue;
295
+ }
296
+ if (attribute.value === null) {
297
+ diagnostics.push(createDiagnostic({
298
+ code: 'HMX2061',
299
+ severity: 'error',
300
+ message: `Event attribute "${attribute.name}" requires a handler expression.`,
301
+ span: attribute.nameSpan,
302
+ }));
303
+ continue;
304
+ }
305
+ const handler = compileHandlerExpression(attribute.value, stateNames, {
306
+ documentSource: options.source,
307
+ startOffset: attribute.valueSpan?.start.offset ?? attribute.nameSpan.end.offset,
308
+ identifierNames: [...stateNames],
309
+ });
310
+ diagnostics.push(...handler.diagnostics);
311
+ if (handler.ok) {
312
+ const name = attribute.name.slice(3);
313
+ if (name === 'input' && node.name === 'input' && handler.assignments.length !== 1) {
314
+ diagnostics.push(createDiagnostic({
315
+ code: 'HMX2061',
316
+ severity: 'error',
317
+ message: 'on-input on an input must assign exactly one declared state name.',
318
+ span: attribute.valueSpan ?? attribute.nameSpan,
319
+ }));
320
+ continue;
321
+ }
322
+ const inputState = name === 'input' && node.name === 'input' ? handler.assignments[0] : undefined;
323
+ nodeEvents.push({
324
+ name,
325
+ instruction: handler.instruction,
326
+ assignments: handler.assignments,
327
+ ...(inputState === undefined ? {} : { inputState }),
328
+ });
329
+ }
330
+ continue;
331
+ }
332
+ const expression = attributeExpression(attribute, options.source);
333
+ if (expression !== undefined) {
334
+ const evaluation = evaluateExpression(expression.value, scope, {
335
+ documentSource: options.source,
336
+ startOffset: expression.startOffset,
337
+ identifierNames,
338
+ strictScope: stateNames.size > 0,
339
+ });
340
+ attributeExpressions.set(attribute, evaluation);
341
+ diagnostics.push(...evaluation.diagnostics);
342
+ if (evaluation.ok) {
343
+ const reactive = reactiveExpression(evaluation, stateNames);
344
+ nodeReactiveAttributes.push({
345
+ name: attribute.name,
346
+ expression: reactive,
347
+ url: options.trust === 'document' && schema?.attributes[attribute.name]?.type === 'url',
348
+ });
349
+ }
350
+ }
351
+ }
352
+ if (nodeEvents.length > 0)
353
+ events.set(node, nodeEvents);
354
+ if (nodeReactiveAttributes.length > 0) {
355
+ reactiveAttributes.set(node, nodeReactiveAttributes);
356
+ }
357
+ if (schema === undefined || renderer === undefined) {
358
+ const replacement = nearestSuggestion(node.name, Object.keys(options.components.schemas));
359
+ diagnostics.push(createDiagnostic({
360
+ code: 'HMX2002',
361
+ severity: 'warning',
362
+ message: `Unknown directive "${node.name}"; rendering its content without a wrapper.`,
363
+ span: node.position,
364
+ ...(replacement === undefined
365
+ ? {}
366
+ : {
367
+ suggestion: {
368
+ message: `Replace with "${replacement}".`,
369
+ replacement,
370
+ span: node.position,
371
+ },
372
+ }),
373
+ }));
374
+ }
375
+ else {
376
+ const component = validateComponent(node, schema, renderer, options.trust, attributeExpressions, diagnostics, ignoredAttributes);
377
+ components.set(node, component);
378
+ const authored = authoredComponentFor(renderer);
379
+ if (authored === undefined || !component.kindAllowed) {
380
+ return;
381
+ }
382
+ const cycleStart = options.stack.indexOf(authored.name);
383
+ if (cycleStart !== -1) {
384
+ const cycle = [...options.stack.slice(cycleStart), authored.name];
385
+ diagnostics.push(createDiagnostic({
386
+ code: 'HMX2054',
387
+ severity: 'error',
388
+ message: `Authored component cycle detected: ${cycle.join(' -> ')}.`,
389
+ span: node.position,
390
+ }));
391
+ return;
392
+ }
393
+ if (options.stack.length >= MAX_COMPONENT_DEPTH) {
394
+ diagnostics.push(createDiagnostic({
395
+ code: 'HMX2055',
396
+ severity: 'error',
397
+ message: `Authored component expansion exceeds the maximum depth of ${MAX_COMPONENT_DEPTH}.`,
398
+ span: node.position,
399
+ }));
400
+ return;
401
+ }
402
+ const children = callerChildren(node);
403
+ const marker = authored.childrenMarkers[0];
404
+ if (marker === undefined && children.length > 0) {
405
+ diagnostics.push(createDiagnostic({
406
+ code: 'HMX2052',
407
+ severity: 'warning',
408
+ message: `Authored component "${authored.name}" discards supplied content because it has no ::children directive.`,
409
+ span: children[0]?.position ?? node.position,
410
+ }));
411
+ }
412
+ const nested = analyzeDocument(authored.root, {
413
+ components: options.components,
414
+ trust: options.trust,
415
+ source: authored.source,
416
+ ...(authored.from === undefined ? {} : { from: authored.from }),
417
+ scope: propScope(component),
418
+ identifierNames: Object.keys(schema.attributes),
419
+ stack: [...options.stack, authored.name],
420
+ authored,
421
+ });
422
+ if (marker !== undefined) {
423
+ const nestedProjections = nested.projections;
424
+ nestedProjections.set(marker, {
425
+ document,
426
+ nodes: children,
427
+ });
428
+ }
429
+ const propNames = new Set(Object.keys(schema.attributes));
430
+ expansions.set(node, {
431
+ document: nested,
432
+ propBindings: new Map(nodeReactiveAttributes
433
+ .filter(({ name }) => propNames.has(name))
434
+ .map(({ name, expression }) => [name, expression])),
435
+ });
436
+ diagnostics.push(...nested.diagnostics);
437
+ }
438
+ }
439
+ });
440
+ for (const diagnostic of diagnostics) {
441
+ setDiagnosticOrigin(diagnostic, options.source, options.from);
442
+ }
443
+ return document;
444
+ }
445
+ /** Runs semantic component checks without mutating the syntax tree. */
446
+ export function analyze(root, options) {
447
+ const scope = options.frontmatter ?? Object.create(null);
448
+ return analyzeDocument(root, {
449
+ ...options,
450
+ scope,
451
+ identifierNames: Object.keys(scope),
452
+ stack: [],
453
+ });
454
+ }
455
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/analyze/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import type { Diagnostic, LeafDirective, Root } from '@hymarkx/ast';
2
+ import type { CompileOptions } from '../types.js';
3
+ import type { ComponentRegistry, ComponentRenderer } from './types.js';
4
+ /** Source input for one HMX-authored component. */
5
+ export interface AuthoredComponent {
6
+ /** Registered name, normally the case-sensitive file basename. */
7
+ readonly name: string;
8
+ /** Complete HMX component document source. */
9
+ readonly source: string;
10
+ /** Path displayed for diagnostics raised inside the component. */
11
+ readonly from?: string;
12
+ }
13
+ /** Parsed compiler-only template associated with an authored component renderer. */
14
+ export interface AuthoredComponentDefinition {
15
+ readonly name: string;
16
+ readonly source: string;
17
+ readonly root: Root;
18
+ readonly childrenMarkers: readonly LeafDirective[];
19
+ readonly from?: string;
20
+ }
21
+ /** Result of compiling authored component sources into a normal component registry. */
22
+ export interface CompileComponentsResult {
23
+ readonly registry: ComponentRegistry;
24
+ readonly diagnostics: readonly Diagnostic[];
25
+ }
26
+ /** Returns authored template metadata for a renderer created by {@link compileComponents}. */
27
+ export declare function authoredComponentFor(renderer: ComponentRenderer): AuthoredComponentDefinition | undefined;
28
+ /** Parses HMX component sources and registers their schemas and compile-time templates. */
29
+ export declare function compileComponents(sources: readonly AuthoredComponent[], options?: CompileOptions): CompileComponentsResult;
30
+ //# sourceMappingURL=authored.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authored.d.ts","sourceRoot":"","sources":["../../src/components/authored.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAS,IAAI,EAAc,MAAM,cAAc,CAAA;AAItF,OAAO,KAAK,EAAE,cAAc,EAAoB,MAAM,aAAa,CAAA;AAGnE,OAAO,KAAK,EAGV,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,YAAY,CAAA;AAEnB,mDAAmD;AACnD,MAAM,WAAW,iBAAiB;IAChC,kEAAkE;IAClE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,8CAA8C;IAC9C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,kEAAkE;IAClE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,oFAAoF;AACpF,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAA;IACnB,QAAQ,CAAC,eAAe,EAAE,SAAS,aAAa,EAAE,CAAA;IAClD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,uFAAuF;AACvF,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAA;IACpC,QAAQ,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,CAAA;CAC5C;AA6aD,8FAA8F;AAC9F,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,iBAAiB,GAC1B,2BAA2B,GAAG,SAAS,CAEzC;AAED,2FAA2F;AAC3F,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,SAAS,iBAAiB,EAAE,EACrC,OAAO,GAAE,cAAmB,GAC3B,uBAAuB,CA6CzB"}