@loj-lang/rdsl-compiler 0.5.0

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 (78) hide show
  1. package/README.md +23 -0
  2. package/dist/cache-signature.d.ts +2 -0
  3. package/dist/cache-signature.d.ts.map +1 -0
  4. package/dist/cache-signature.js +17 -0
  5. package/dist/cache-signature.js.map +1 -0
  6. package/dist/codegen.d.ts +37 -0
  7. package/dist/codegen.d.ts.map +1 -0
  8. package/dist/codegen.js +6394 -0
  9. package/dist/codegen.js.map +1 -0
  10. package/dist/dependency-graph.d.ts +23 -0
  11. package/dist/dependency-graph.d.ts.map +1 -0
  12. package/dist/dependency-graph.js +516 -0
  13. package/dist/dependency-graph.js.map +1 -0
  14. package/dist/expr.d.ts +24 -0
  15. package/dist/expr.d.ts.map +1 -0
  16. package/dist/expr.js +359 -0
  17. package/dist/expr.js.map +1 -0
  18. package/dist/flow-proof.d.ts +68 -0
  19. package/dist/flow-proof.d.ts.map +1 -0
  20. package/dist/flow-proof.js +487 -0
  21. package/dist/flow-proof.js.map +1 -0
  22. package/dist/host-files.d.ts +27 -0
  23. package/dist/host-files.d.ts.map +1 -0
  24. package/dist/host-files.js +441 -0
  25. package/dist/host-files.js.map +1 -0
  26. package/dist/index.d.ts +120 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +948 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/ir.d.ts +451 -0
  31. package/dist/ir.d.ts.map +1 -0
  32. package/dist/ir.js +13 -0
  33. package/dist/ir.js.map +1 -0
  34. package/dist/manifest.d.ts +104 -0
  35. package/dist/manifest.d.ts.map +1 -0
  36. package/dist/manifest.js +635 -0
  37. package/dist/manifest.js.map +1 -0
  38. package/dist/node-inspect.d.ts +23 -0
  39. package/dist/node-inspect.d.ts.map +1 -0
  40. package/dist/node-inspect.js +475 -0
  41. package/dist/node-inspect.js.map +1 -0
  42. package/dist/normalize.d.ts +101 -0
  43. package/dist/normalize.d.ts.map +1 -0
  44. package/dist/normalize.js +1771 -0
  45. package/dist/normalize.js.map +1 -0
  46. package/dist/page-table-block.d.ts +69 -0
  47. package/dist/page-table-block.d.ts.map +1 -0
  48. package/dist/page-table-block.js +241 -0
  49. package/dist/page-table-block.js.map +1 -0
  50. package/dist/parser.d.ts +262 -0
  51. package/dist/parser.d.ts.map +1 -0
  52. package/dist/parser.js +1335 -0
  53. package/dist/parser.js.map +1 -0
  54. package/dist/project-paths.d.ts +6 -0
  55. package/dist/project-paths.d.ts.map +1 -0
  56. package/dist/project-paths.js +84 -0
  57. package/dist/project-paths.js.map +1 -0
  58. package/dist/relation-projection.d.ts +60 -0
  59. package/dist/relation-projection.d.ts.map +1 -0
  60. package/dist/relation-projection.js +121 -0
  61. package/dist/relation-projection.js.map +1 -0
  62. package/dist/rules-proof.d.ts +95 -0
  63. package/dist/rules-proof.d.ts.map +1 -0
  64. package/dist/rules-proof.js +537 -0
  65. package/dist/rules-proof.js.map +1 -0
  66. package/dist/source-files.d.ts +9 -0
  67. package/dist/source-files.d.ts.map +1 -0
  68. package/dist/source-files.js +27 -0
  69. package/dist/source-files.js.map +1 -0
  70. package/dist/style-proof.d.ts +70 -0
  71. package/dist/style-proof.d.ts.map +1 -0
  72. package/dist/style-proof.js +640 -0
  73. package/dist/style-proof.js.map +1 -0
  74. package/dist/validator.d.ts +51 -0
  75. package/dist/validator.d.ts.map +1 -0
  76. package/dist/validator.js +2487 -0
  77. package/dist/validator.js.map +1 -0
  78. package/package.json +40 -0
@@ -0,0 +1,487 @@
1
+ import { parseExpr } from './expr.js';
2
+ import { LineCounter, isMap, isPair, isScalar, isSeq, parseDocument, } from 'yaml';
3
+ export function isFlowSourceFile(fileName) {
4
+ return fileName.endsWith('.flow.loj');
5
+ }
6
+ export function buildFlowManifestFileName(fileName) {
7
+ const normalizedFileName = fileName.replace(/\\/g, '/');
8
+ const baseName = normalizedFileName.slice(normalizedFileName.lastIndexOf('/') + 1);
9
+ if (baseName.endsWith('.flow.loj')) {
10
+ return `${baseName.slice(0, -'.flow.loj'.length)}.flow.manifest.json`;
11
+ }
12
+ const withoutExtension = baseName.replace(/\.[^.]+$/, '');
13
+ return `${withoutExtension}.flow.manifest.json`;
14
+ }
15
+ export function compileFlowSource(source, fileName = 'workflow.flow.loj') {
16
+ const errors = [];
17
+ const warnings = [];
18
+ const lineCounter = new LineCounter();
19
+ const document = parseDocument(source, {
20
+ merge: false,
21
+ uniqueKeys: true,
22
+ lineCounter,
23
+ });
24
+ for (const error of document.errors) {
25
+ errors.push({
26
+ message: error.message,
27
+ file: fileName,
28
+ });
29
+ }
30
+ if (errors.length > 0) {
31
+ return { success: false, errors, warnings };
32
+ }
33
+ const root = document.contents;
34
+ if (!isMap(root)) {
35
+ return {
36
+ success: false,
37
+ errors: [{ message: 'Root document must be a YAML mapping', file: fileName }],
38
+ warnings,
39
+ };
40
+ }
41
+ let program;
42
+ for (const pair of root.items) {
43
+ if (!isPair(pair) || !isScalar(pair.key)) {
44
+ continue;
45
+ }
46
+ const key = String(pair.key.value);
47
+ const sourceSpan = getPairSpan(pair, fileName, lineCounter);
48
+ if (!key.startsWith('workflow ')) {
49
+ pushError(errors, `Unknown top-level key: "${key}"`, sourceSpan);
50
+ continue;
51
+ }
52
+ if (program) {
53
+ pushError(errors, 'Only one top-level "workflow <name>" block is supported in the first slice', sourceSpan);
54
+ continue;
55
+ }
56
+ const name = key.slice('workflow '.length).trim();
57
+ if (!name) {
58
+ pushError(errors, 'Top-level workflow block must be named: workflow <name>', sourceSpan);
59
+ continue;
60
+ }
61
+ program = parseWorkflowBlock(name, pair.value, fileName, lineCounter, errors, sourceSpan);
62
+ }
63
+ if (!program) {
64
+ if (errors.length === 0) {
65
+ errors.push({
66
+ message: 'Document must contain one top-level "workflow <name>" block',
67
+ file: fileName,
68
+ });
69
+ }
70
+ return { success: false, errors, warnings };
71
+ }
72
+ if (errors.length > 0) {
73
+ return { success: false, errors, warnings };
74
+ }
75
+ const manifest = {
76
+ artifact: 'loj.flow.manifest',
77
+ schemaVersion: 1,
78
+ workflow: program.name,
79
+ model: program.model,
80
+ field: program.field,
81
+ states: program.states,
82
+ wizard: program.wizard
83
+ ? {
84
+ steps: program.wizard.steps.map((step) => ({
85
+ name: step.name,
86
+ completesWith: step.completesWith,
87
+ surface: step.surface,
88
+ allow: step.allow,
89
+ })),
90
+ }
91
+ : undefined,
92
+ transitions: program.transitions.map((transition) => ({
93
+ name: transition.name,
94
+ from: transition.from,
95
+ to: transition.to,
96
+ allow: transition.allow,
97
+ })),
98
+ };
99
+ return {
100
+ success: true,
101
+ program,
102
+ manifest,
103
+ errors,
104
+ warnings,
105
+ };
106
+ }
107
+ function parseWorkflowBlock(name, value, fileName, lineCounter, errors, sourceSpan) {
108
+ if (!isMap(value)) {
109
+ pushError(errors, `workflow ${name} must be a YAML mapping`, sourceSpan);
110
+ return undefined;
111
+ }
112
+ let model = '';
113
+ let field = '';
114
+ let states = [];
115
+ let wizard;
116
+ let transitions = [];
117
+ for (const pair of value.items) {
118
+ if (!isPair(pair) || !isScalar(pair.key)) {
119
+ continue;
120
+ }
121
+ const key = String(pair.key.value);
122
+ const pairSpan = getPairSpan(pair, fileName, lineCounter);
123
+ switch (key) {
124
+ case 'model':
125
+ model = parseRequiredStringField(pair.value, errors, pairSpan, `workflow ${name} model`) ?? '';
126
+ break;
127
+ case 'field':
128
+ field = parseRequiredStringField(pair.value, errors, pairSpan, `workflow ${name} field`) ?? '';
129
+ break;
130
+ case 'states':
131
+ states = parseStates(pair.value, fileName, lineCounter, errors, `workflow ${name}`, pairSpan);
132
+ break;
133
+ case 'wizard':
134
+ wizard = parseWizard(pair.value, fileName, lineCounter, errors, `workflow ${name}`, pairSpan);
135
+ break;
136
+ case 'transitions':
137
+ transitions = parseTransitions(pair.value, fileName, lineCounter, errors, `workflow ${name}`, pairSpan);
138
+ break;
139
+ default:
140
+ pushError(errors, `workflow ${name} has unsupported key "${key}"`, pairSpan);
141
+ break;
142
+ }
143
+ }
144
+ if (!model) {
145
+ pushError(errors, `workflow ${name} must set model`, sourceSpan);
146
+ }
147
+ if (!field) {
148
+ pushError(errors, `workflow ${name} must set field`, sourceSpan);
149
+ }
150
+ if (states.length === 0) {
151
+ pushError(errors, `workflow ${name} must define at least one state`, sourceSpan);
152
+ }
153
+ if (transitions.length === 0) {
154
+ pushError(errors, `workflow ${name} must define at least one transition`, sourceSpan);
155
+ }
156
+ const knownStates = new Set(states.map((state) => state.name));
157
+ for (const transition of transitions) {
158
+ for (const fromState of transition.from) {
159
+ if (!knownStates.has(fromState)) {
160
+ pushError(errors, `workflow ${name} transition "${transition.name}" references unknown from state "${fromState}"`, sourceSpan);
161
+ }
162
+ }
163
+ if (!knownStates.has(transition.to)) {
164
+ pushError(errors, `workflow ${name} transition "${transition.name}" references unknown to state "${transition.to}"`, sourceSpan);
165
+ }
166
+ }
167
+ for (const step of wizard?.steps ?? []) {
168
+ if (!knownStates.has(step.completesWith)) {
169
+ pushError(errors, `workflow ${name} wizard step "${step.name}" references unknown completesWith state "${step.completesWith}"`, sourceSpan);
170
+ }
171
+ }
172
+ return {
173
+ name,
174
+ model,
175
+ field,
176
+ states,
177
+ wizard,
178
+ transitions,
179
+ };
180
+ }
181
+ function parseStates(value, fileName, lineCounter, errors, label, sourceSpan) {
182
+ if (!isMap(value)) {
183
+ pushError(errors, `${label} states must be a YAML mapping`, sourceSpan);
184
+ return [];
185
+ }
186
+ const seen = new Set();
187
+ const states = [];
188
+ for (const pair of value.items) {
189
+ if (!isPair(pair) || !isScalar(pair.key)) {
190
+ continue;
191
+ }
192
+ const stateName = String(pair.key.value);
193
+ const pairSpan = getPairSpan(pair, fileName, lineCounter);
194
+ if (!stateName) {
195
+ pushError(errors, `${label} state names must be non-empty`, pairSpan);
196
+ continue;
197
+ }
198
+ if (seen.has(stateName)) {
199
+ pushError(errors, `${label} has duplicate state "${stateName}"`, pairSpan);
200
+ continue;
201
+ }
202
+ seen.add(stateName);
203
+ if (!isMap(pair.value)) {
204
+ pushError(errors, `${label} state "${stateName}" must be a YAML mapping`, pairSpan);
205
+ continue;
206
+ }
207
+ let labelValue;
208
+ let color;
209
+ for (const statePair of pair.value.items) {
210
+ if (!isPair(statePair) || !isScalar(statePair.key)) {
211
+ continue;
212
+ }
213
+ const key = String(statePair.key.value);
214
+ const statePairSpan = getPairSpan(statePair, fileName, lineCounter);
215
+ switch (key) {
216
+ case 'label':
217
+ labelValue = parseOptionalStringField(statePair.value, errors, statePairSpan, `${label} state "${stateName}" label`);
218
+ break;
219
+ case 'color':
220
+ color = parseOptionalStringField(statePair.value, errors, statePairSpan, `${label} state "${stateName}" color`);
221
+ break;
222
+ default:
223
+ pushError(errors, `${label} state "${stateName}" has unsupported key "${key}"`, statePairSpan);
224
+ }
225
+ }
226
+ states.push({
227
+ name: stateName,
228
+ label: labelValue,
229
+ color,
230
+ });
231
+ }
232
+ return states;
233
+ }
234
+ function parseWizard(value, fileName, lineCounter, errors, label, sourceSpan) {
235
+ if (!isMap(value)) {
236
+ pushError(errors, `${label} wizard must be a YAML mapping`, sourceSpan);
237
+ return undefined;
238
+ }
239
+ let steps = [];
240
+ for (const pair of value.items) {
241
+ if (!isPair(pair) || !isScalar(pair.key)) {
242
+ continue;
243
+ }
244
+ const key = String(pair.key.value);
245
+ const pairSpan = getPairSpan(pair, fileName, lineCounter);
246
+ if (key !== 'steps') {
247
+ pushError(errors, `${label} wizard has unsupported key "${key}"`, pairSpan);
248
+ continue;
249
+ }
250
+ if (!isSeq(pair.value)) {
251
+ pushError(errors, `${label} wizard steps must be a YAML sequence`, pairSpan);
252
+ continue;
253
+ }
254
+ steps = pair.value.items
255
+ .map((item, index) => parseWizardStep(item, fileName, lineCounter, errors, label, index))
256
+ .filter((step) => Boolean(step));
257
+ }
258
+ return steps.length > 0 ? { steps } : undefined;
259
+ }
260
+ function parseWizardStep(value, fileName, lineCounter, errors, label, stepIndex) {
261
+ const sourceSpan = getNodeSpan(value, fileName, lineCounter);
262
+ if (!isMap(value)) {
263
+ pushError(errors, `${label} wizard step must be a mapping`, sourceSpan);
264
+ return undefined;
265
+ }
266
+ let name = '';
267
+ let completesWith = '';
268
+ let surface;
269
+ let allow;
270
+ for (const pair of value.items) {
271
+ if (!isPair(pair) || !isScalar(pair.key)) {
272
+ continue;
273
+ }
274
+ const key = String(pair.key.value);
275
+ const pairSpan = getPairSpan(pair, fileName, lineCounter);
276
+ switch (key) {
277
+ case 'name':
278
+ name = parseRequiredStringField(pair.value, errors, pairSpan, `${label} wizard step name`) ?? '';
279
+ break;
280
+ case 'completesWith':
281
+ completesWith = parseRequiredStringField(pair.value, errors, pairSpan, `${label} wizard step completesWith`) ?? '';
282
+ break;
283
+ case 'surface': {
284
+ const parsed = parseRequiredStringField(pair.value, errors, pairSpan, `${label} wizard step surface`);
285
+ if (parsed === 'form' || parsed === 'read' || parsed === 'workflow') {
286
+ surface = parsed;
287
+ }
288
+ else if (parsed) {
289
+ pushError(errors, `${label} wizard step surface must be one of: form, read, workflow`, pairSpan);
290
+ }
291
+ break;
292
+ }
293
+ case 'allow': {
294
+ const source = parseRequiredExprSource(pair.value, errors, pairSpan, `${label} wizard step allow`);
295
+ allow = source ? parseFlowExpression(source, errors, pairSpan, `${label} wizard step allow`) : undefined;
296
+ break;
297
+ }
298
+ default:
299
+ pushError(errors, `${label} wizard step has unsupported key "${key}"`, pairSpan);
300
+ break;
301
+ }
302
+ }
303
+ if (!name || !completesWith) {
304
+ pushError(errors, `${label} wizard step must set name and completesWith`, sourceSpan);
305
+ return undefined;
306
+ }
307
+ return {
308
+ name,
309
+ completesWith,
310
+ surface: surface ?? (stepIndex === 0 ? 'form' : 'workflow'),
311
+ allow,
312
+ };
313
+ }
314
+ function parseTransitions(value, fileName, lineCounter, errors, label, sourceSpan) {
315
+ if (!isMap(value)) {
316
+ pushError(errors, `${label} transitions must be a YAML mapping`, sourceSpan);
317
+ return [];
318
+ }
319
+ const transitions = [];
320
+ const seen = new Set();
321
+ for (const pair of value.items) {
322
+ if (!isPair(pair) || !isScalar(pair.key)) {
323
+ continue;
324
+ }
325
+ const transitionName = String(pair.key.value);
326
+ const pairSpan = getPairSpan(pair, fileName, lineCounter);
327
+ if (!transitionName) {
328
+ pushError(errors, `${label} transition names must be non-empty`, pairSpan);
329
+ continue;
330
+ }
331
+ if (seen.has(transitionName)) {
332
+ pushError(errors, `${label} has duplicate transition "${transitionName}"`, pairSpan);
333
+ continue;
334
+ }
335
+ seen.add(transitionName);
336
+ if (!isMap(pair.value)) {
337
+ pushError(errors, `${label} transition "${transitionName}" must be a YAML mapping`, pairSpan);
338
+ continue;
339
+ }
340
+ let from = [];
341
+ let to = '';
342
+ let allow;
343
+ for (const transitionPair of pair.value.items) {
344
+ if (!isPair(transitionPair) || !isScalar(transitionPair.key)) {
345
+ continue;
346
+ }
347
+ const key = String(transitionPair.key.value);
348
+ const transitionPairSpan = getPairSpan(transitionPair, fileName, lineCounter);
349
+ switch (key) {
350
+ case 'from':
351
+ from = parseStateList(transitionPair.value, errors, transitionPairSpan, `${label} transition "${transitionName}" from`);
352
+ break;
353
+ case 'to':
354
+ to = parseRequiredStringField(transitionPair.value, errors, transitionPairSpan, `${label} transition "${transitionName}" to`) ?? '';
355
+ break;
356
+ case 'allow': {
357
+ const source = parseRequiredExprSource(transitionPair.value, errors, transitionPairSpan, `${label} transition "${transitionName}" allow`);
358
+ allow = source ? parseFlowExpression(source, errors, transitionPairSpan, `${label} transition "${transitionName}" allow`) : undefined;
359
+ break;
360
+ }
361
+ default:
362
+ pushError(errors, `${label} transition "${transitionName}" has unsupported key "${key}"`, transitionPairSpan);
363
+ break;
364
+ }
365
+ }
366
+ if (from.length === 0 || !to) {
367
+ pushError(errors, `${label} transition "${transitionName}" must set from and to`, pairSpan);
368
+ continue;
369
+ }
370
+ transitions.push({
371
+ name: transitionName,
372
+ from,
373
+ to,
374
+ allow,
375
+ });
376
+ }
377
+ return transitions;
378
+ }
379
+ function parseStateList(value, errors, sourceSpan, label) {
380
+ if (isScalar(value)) {
381
+ const parsed = parseOptionalStringField(value, errors, sourceSpan, label);
382
+ return parsed ? [parsed] : [];
383
+ }
384
+ if (!isSeq(value)) {
385
+ pushError(errors, `${label} must be a string or sequence of strings`, sourceSpan);
386
+ return [];
387
+ }
388
+ const items = value.items
389
+ .map((item) => (isScalar(item) && item.value !== undefined && item.value !== null ? String(item.value) : ''))
390
+ .filter((item) => item.length > 0);
391
+ if (items.length === 0) {
392
+ pushError(errors, `${label} must list at least one state`, sourceSpan);
393
+ }
394
+ return items;
395
+ }
396
+ function parseOptionalStringField(value, errors, sourceSpan, label) {
397
+ if (!isScalar(value) || value.value === null || value.value === undefined) {
398
+ pushError(errors, `${label} must be a string`, sourceSpan);
399
+ return undefined;
400
+ }
401
+ return String(value.value);
402
+ }
403
+ function parseRequiredStringField(value, errors, sourceSpan, label) {
404
+ const parsed = parseOptionalStringField(value, errors, sourceSpan, label);
405
+ if (!parsed || parsed.trim().length === 0) {
406
+ pushError(errors, `${label} must be a non-empty string`, sourceSpan);
407
+ return undefined;
408
+ }
409
+ return parsed.trim();
410
+ }
411
+ function parseRequiredExprSource(value, errors, sourceSpan, label) {
412
+ const source = scalarToExprSource(value);
413
+ if (!source || source.trim().length === 0) {
414
+ pushError(errors, `${label} must be a non-empty expression string`, sourceSpan);
415
+ return undefined;
416
+ }
417
+ return source;
418
+ }
419
+ function scalarToExprSource(value) {
420
+ if (!isScalar(value) || value.value === null || value.value === undefined) {
421
+ return undefined;
422
+ }
423
+ if (typeof value.value === 'string') {
424
+ return value.value;
425
+ }
426
+ if (typeof value.value === 'number' || typeof value.value === 'boolean') {
427
+ return String(value.value);
428
+ }
429
+ return undefined;
430
+ }
431
+ function parseFlowExpression(source, errors, sourceSpan, label) {
432
+ try {
433
+ return parseExpr(source.replace(/\bin\s*\[([^\]]*)\]/g, 'in ($1)'));
434
+ }
435
+ catch (error) {
436
+ pushError(errors, `${label} could not be parsed: ${error instanceof Error ? error.message : String(error)}`, sourceSpan);
437
+ return undefined;
438
+ }
439
+ }
440
+ function pushError(errors, message, sourceSpan) {
441
+ errors.push({
442
+ message,
443
+ file: sourceSpan?.file,
444
+ line: sourceSpan?.startLine,
445
+ col: sourceSpan?.startCol,
446
+ });
447
+ }
448
+ function getNodeSpan(node, fileName, lineCounter) {
449
+ if (!node || typeof node !== 'object')
450
+ return undefined;
451
+ const rangedNode = node;
452
+ if (!rangedNode.range)
453
+ return undefined;
454
+ return rangeToSourceSpan(rangedNode.range, fileName, lineCounter);
455
+ }
456
+ function getPairSpan(pair, fileName, lineCounter) {
457
+ if (!pair)
458
+ return undefined;
459
+ const keyRange = pair.key && typeof pair.key === 'object' && 'range' in pair.key
460
+ ? pair.key.range
461
+ : undefined;
462
+ const valueRange = pair.value && typeof pair.value === 'object' && 'range' in pair.value
463
+ ? pair.value.range
464
+ : undefined;
465
+ if (keyRange && valueRange) {
466
+ return rangeToSourceSpan([keyRange[0], valueRange[1]], fileName, lineCounter);
467
+ }
468
+ if (valueRange) {
469
+ return rangeToSourceSpan(valueRange, fileName, lineCounter);
470
+ }
471
+ if (keyRange) {
472
+ return rangeToSourceSpan(keyRange, fileName, lineCounter);
473
+ }
474
+ return undefined;
475
+ }
476
+ function rangeToSourceSpan(range, file, lineCounter) {
477
+ const start = lineCounter.linePos(range[0]);
478
+ const end = lineCounter.linePos(range[1]);
479
+ return {
480
+ file,
481
+ startLine: start.line,
482
+ startCol: start.col,
483
+ endLine: end.line,
484
+ endCol: end.col,
485
+ };
486
+ }
487
+ //# sourceMappingURL=flow-proof.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flow-proof.js","sourceRoot":"","sources":["../src/flow-proof.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { IRApp } from './ir.js';
2
+ export interface HostFileReferenceEntry {
3
+ nodeId: string;
4
+ role: string;
5
+ sourceFile?: string;
6
+ logicalPath?: string;
7
+ lockIn?: 'neutral' | 'explicit';
8
+ }
9
+ export interface HostFileDependencyEntry {
10
+ path: string;
11
+ kind: 'script' | 'style';
12
+ importers: string[];
13
+ }
14
+ export interface HostFileEntry {
15
+ path: string;
16
+ references: HostFileReferenceEntry[];
17
+ dependencies?: HostFileDependencyEntry[];
18
+ }
19
+ export interface HostFileCollectionOptions {
20
+ readFile?: (filePath: string) => string | undefined;
21
+ }
22
+ export declare function collectHostFileSegments(ir: IRApp | undefined, options?: HostFileCollectionOptions): Record<string, HostFileEntry[]>;
23
+ export declare function collectHostFiles(ir: IRApp | undefined, options?: HostFileCollectionOptions): HostFileEntry[];
24
+ export declare function listHostFilesForNode(hostFiles: HostFileEntry[], nodeId: string): HostFileEntry[];
25
+ export declare function listMaterializedHostFiles(hostFiles: HostFileEntry[]): string[];
26
+ export declare function mergeHostFileSegments(segments: Record<string, HostFileEntry[]>): HostFileEntry[];
27
+ //# sourceMappingURL=host-files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host-files.d.ts","sourceRoot":"","sources":["../src/host-files.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,KAAK,EAWN,MAAM,SAAS,CAAC;AAQjB,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC;CACjC;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;IACzB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,sBAAsB,EAAE,CAAC;IACrC,YAAY,CAAC,EAAE,uBAAuB,EAAE,CAAC;CAC1C;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;CACrD;AAED,wBAAgB,uBAAuB,CACrC,EAAE,EAAE,KAAK,GAAG,SAAS,EACrB,OAAO,GAAE,yBAA8B,GACtC,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,CAkJjC;AAED,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,KAAK,GAAG,SAAS,EACrB,OAAO,GAAE,yBAA8B,GACtC,aAAa,EAAE,CAEjB;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,aAAa,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,aAAa,EAAE,CAShG;AAED,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,MAAM,EAAE,CAS9E;AAsJD,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,GACxC,aAAa,EAAE,CAsDjB"}