@nola-lang/compiler 0.1.0-alpha.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 (67) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +7 -0
  3. package/dist/ambient-stub.d.ts +8 -0
  4. package/dist/ambient-stub.d.ts.map +1 -0
  5. package/dist/ambient-stub.js +71 -0
  6. package/dist/ambient-stub.js.map +1 -0
  7. package/dist/companion-name.d.ts +22 -0
  8. package/dist/companion-name.d.ts.map +1 -0
  9. package/dist/companion-name.js +48 -0
  10. package/dist/companion-name.js.map +1 -0
  11. package/dist/companion.d.ts +22 -0
  12. package/dist/companion.d.ts.map +1 -0
  13. package/dist/companion.js +90 -0
  14. package/dist/companion.js.map +1 -0
  15. package/dist/compile.d.ts +3 -0
  16. package/dist/compile.d.ts.map +1 -0
  17. package/dist/compile.js +33 -0
  18. package/dist/compile.js.map +1 -0
  19. package/dist/index.d.ts +12 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +10 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/lower/Lowerer.d.ts +56 -0
  24. package/dist/lower/Lowerer.d.ts.map +1 -0
  25. package/dist/lower/Lowerer.js +353 -0
  26. package/dist/lower/Lowerer.js.map +1 -0
  27. package/dist/lower/index.d.ts +8 -0
  28. package/dist/lower/index.d.ts.map +1 -0
  29. package/dist/lower/index.js +5 -0
  30. package/dist/lower/index.js.map +1 -0
  31. package/dist/lower/lower.d.ts +2 -0
  32. package/dist/lower/lower.d.ts.map +1 -0
  33. package/dist/lower/lower.js +319 -0
  34. package/dist/lower/lower.js.map +1 -0
  35. package/dist/lower/templates.d.ts +61 -0
  36. package/dist/lower/templates.d.ts.map +1 -0
  37. package/dist/lower/templates.js +70 -0
  38. package/dist/lower/templates.js.map +1 -0
  39. package/dist/lower.d.ts +4 -0
  40. package/dist/lower.d.ts.map +1 -0
  41. package/dist/lower.js +322 -0
  42. package/dist/lower.js.map +1 -0
  43. package/dist/path.d.ts +16 -0
  44. package/dist/path.d.ts.map +1 -0
  45. package/dist/path.js +28 -0
  46. package/dist/path.js.map +1 -0
  47. package/dist/schema-expr.d.ts +61 -0
  48. package/dist/schema-expr.d.ts.map +1 -0
  49. package/dist/schema-expr.js +211 -0
  50. package/dist/schema-expr.js.map +1 -0
  51. package/dist/schema.d.ts +16 -0
  52. package/dist/schema.d.ts.map +1 -0
  53. package/dist/schema.js +152 -0
  54. package/dist/schema.js.map +1 -0
  55. package/dist/spans.d.ts +73 -0
  56. package/dist/spans.d.ts.map +1 -0
  57. package/dist/spans.js +169 -0
  58. package/dist/spans.js.map +1 -0
  59. package/dist/static-config.d.ts +15 -0
  60. package/dist/static-config.d.ts.map +1 -0
  61. package/dist/static-config.js +93 -0
  62. package/dist/static-config.js.map +1 -0
  63. package/dist/types.d.ts +37 -0
  64. package/dist/types.d.ts.map +1 -0
  65. package/dist/types.js +2 -0
  66. package/dist/types.js.map +1 -0
  67. package/package.json +45 -0
@@ -0,0 +1,353 @@
1
+ import { Codes, children, } from "@nola-lang/ast";
2
+ import { companionSpecifierFor } from "../companion-name.js";
3
+ import { collectTypeRegistry } from "../schema.js";
4
+ import { buildAccessorPlan, collectTypeImports, deriveTypeExpr, } from "../schema-expr.js";
5
+ import { anchorInsertedLines, SpanRecorder } from "../spans.js";
6
+ import { ASK_OPEN, askClose, CALL_INTENT_CLOSE, callIntentArgsHead, callIntentOpen, callIntentTypeText, companionImportDecl, EXTRACT_DEFAULT_TYPE_EXPR, EXTRACT_DEFAULT_TYPE_TEXT, extractClose, extractOpen, FMT_CLOSE, FMT_OPEN, invocationArgEntry, invocationClose, invocationOpen, runtimeImport, typeAccessorDecl, typeArgsText, } from "./templates.js";
7
+ export class Lowerer {
8
+ s;
9
+ source;
10
+ /** Absolute on-disk path. Diagnostics and source maps use this. */
11
+ file;
12
+ /** Project-root-relative path. Only this reaches the emitted code. */
13
+ displayFile;
14
+ ast;
15
+ diagnostics = [];
16
+ meta = { nolaFunctions: [] };
17
+ usedRuntime = false;
18
+ /** named types needing a __nola_type_<Name> accessor in the appendix, in first-use order */
19
+ typeAccessors = new Map();
20
+ /** local binding name -> companion import emitted in the appendix */
21
+ companionImports = new Map();
22
+ /** shared derivation context (registry, imports, display file, bare ref names) */
23
+ deriveCtx;
24
+ /** policy for underivable `..`-contextual param types (compiler.underivableContextType) */
25
+ underivableContextType;
26
+ constructor(source, file, ast, displayFile, options = {}) {
27
+ this.s = new SpanRecorder(source);
28
+ this.source = source;
29
+ this.file = file;
30
+ this.displayFile = displayFile;
31
+ this.ast = ast;
32
+ this.underivableContextType = options.underivableContextType ?? "error";
33
+ this.deriveCtx = {
34
+ source,
35
+ registry: collectTypeRegistry(ast),
36
+ imports: collectTypeImports(ast),
37
+ importerDisplayFile: displayFile,
38
+ refQualifier: "",
39
+ };
40
+ }
41
+ run() {
42
+ this.visit(this.ast, false, true);
43
+ if (this.usedRuntime) {
44
+ let appendix = runtimeImport(this.displayFile);
45
+ for (const [name, expr] of this.typeAccessors)
46
+ appendix += typeAccessorDecl(name, expr);
47
+ for (const [local, imp] of this.companionImports)
48
+ appendix += companionImportDecl(local, imp);
49
+ this.s.appendix(appendix);
50
+ }
51
+ const map = this.s.generateMap({ source: this.file, hires: true, includeContent: true });
52
+ const { spans, anchors } = this.s.finalize(this.source.length);
53
+ anchorInsertedLines(map, spans, this.s.toString(), this.source);
54
+ const companions = [
55
+ ...new Set([...this.companionImports.values()].map((i) => companionSpecifierFor(i.specifier))),
56
+ ].sort();
57
+ return {
58
+ code: this.s.toString(),
59
+ map,
60
+ diagnostics: this.diagnostics,
61
+ meta: { ...this.meta, spans, anchors, companions, mode: "lowered" },
62
+ };
63
+ }
64
+ diag(code, message, node) {
65
+ this.diagnostics.push({ code, message, file: this.file, start: node.start, end: node.end, loc: node.loc });
66
+ }
67
+ /** Fold a derivation's transitive needs (accessors, companion imports) into the state. */
68
+ absorbPlan(companions, plan) {
69
+ for (const [local, imp] of companions)
70
+ this.companionImports.set(local, imp);
71
+ for (const [name, expr] of plan.accessors) {
72
+ if (!this.typeAccessors.has(name))
73
+ this.typeAccessors.set(name, expr);
74
+ }
75
+ for (const [local, imp] of plan.companions)
76
+ this.companionImports.set(local, imp);
77
+ }
78
+ absorbTypeNeeds(refs, companions) {
79
+ const plan = buildAccessorPlan(refs, this.deriveCtx);
80
+ this.absorbPlan(companions, plan);
81
+ for (const e of plan.errors)
82
+ this.diag(Codes.UnsupportedIntentType, e.message, e.node);
83
+ }
84
+ /**
85
+ * A `..`-contextual param's type failed to derive (shallowly or in its
86
+ * accessor plan). Resolve it per the configured policy; the returned expr
87
+ * (if any) replaces the failed one.
88
+ */
89
+ applyContextTypePolicy(tsAnn, paramName, reason) {
90
+ switch (this.underivableContextType) {
91
+ case "omit":
92
+ return undefined;
93
+ case "prune":
94
+ return this.pruneDerive(tsAnn);
95
+ case "error":
96
+ this.diag(Codes.UnderivableContextType, `contextual parameter '${paramName}' has a type that cannot be derived for inference: ${reason}. ` +
97
+ `Set compiler.underivableContextType to "prune" or "omit" in nola.config.ts to allow it.`, tsAnn);
98
+ return undefined;
99
+ }
100
+ }
101
+ /**
102
+ * Lossy derivation for the prune policy: underivable object members drop out
103
+ * instead of failing the type. Named refs derive lazily, so "underivable" is
104
+ * discovered through the accessor plan — every plan failure marks its type
105
+ * dead and the derivation reruns with refs to dead names failing (and thus
106
+ * pruning) at their use sites. deadRefs grows monotonically and is bounded
107
+ * by the registry, so the loop terminates. Returns undefined (-> omit) when
108
+ * the top-level type itself prunes away.
109
+ */
110
+ pruneDerive(tsAnn) {
111
+ const deadRefs = new Set();
112
+ const ctx = { ...this.deriveCtx, lossy: true, deadRefs };
113
+ for (;;) {
114
+ const derived = deriveTypeExpr(tsAnn, ctx);
115
+ if (!derived.ok)
116
+ return undefined;
117
+ const plan = buildAccessorPlan(derived.refs, ctx);
118
+ if (plan.errors.length === 0) {
119
+ this.absorbPlan(derived.companions, plan);
120
+ return derived.expr;
121
+ }
122
+ for (const e of plan.errors)
123
+ deadRefs.add(e.name);
124
+ }
125
+ }
126
+ // inNolaFnBody: directly inside a nola function body.
127
+ // topLevel: current node is a direct child of Program (or an export wrapper).
128
+ visit(node, inNolaFnBody, topLevel) {
129
+ switch (node.type) {
130
+ case "NolaExtractExpression": {
131
+ const extract = node;
132
+ // Tolerant-parse placeholder: diagnostic already recorded; leave the
133
+ // span's original bytes untouched.
134
+ if (extract.nolaError || !extract.quasi)
135
+ return;
136
+ this.lowerExtract(extract, inNolaFnBody);
137
+ return;
138
+ }
139
+ case "NolaAskExpression": {
140
+ const ask = node;
141
+ if (!inNolaFnBody) {
142
+ this.diag(Codes.AskOutsideNolaFunction, "`ask` is only allowed directly inside an infer function body.", node);
143
+ }
144
+ else {
145
+ // Overwriting up to the operand also removes an `with <alias>` span;
146
+ // the alias re-enters as ask's third argument.
147
+ this.s.overwrite(node.start, ask.argument.start, ASK_OPEN);
148
+ // appendRight: extract-lowering suffixes use appendLeft at the same
149
+ // position and must land BEFORE this closing paren.
150
+ this.s.appendRight(node.end, askClose(ask.provider?.name));
151
+ this.usedRuntime = true;
152
+ }
153
+ this.visit(ask.argument, inNolaFnBody, false);
154
+ return;
155
+ }
156
+ case "FunctionDeclaration": {
157
+ const fn = node;
158
+ if (!fn.nolaInfer) {
159
+ break;
160
+ }
161
+ if (!topLevel) {
162
+ // TODO: to discuss - wew should not have this limitation
163
+ this.diag(Codes.NolaFnNotTopLevel, "infer functions must be declared at module top level.", node);
164
+ break;
165
+ }
166
+ this.lowerInferFunction(fn);
167
+ if (fn.body) {
168
+ for (const child of children(fn.body)) {
169
+ this.visit(child, true, false);
170
+ }
171
+ }
172
+ return;
173
+ }
174
+ case "CallExpression": {
175
+ const call = node;
176
+ if (call.callee.type === "TaggedTemplateExpression") {
177
+ this.lowerCallIntent(call, inNolaFnBody);
178
+ return;
179
+ }
180
+ break;
181
+ }
182
+ default:
183
+ break;
184
+ }
185
+ const isFunctionScope = node.type === "FunctionDeclaration" ||
186
+ node.type === "FunctionExpression" ||
187
+ node.type === "ArrowFunctionExpression" ||
188
+ node.type === "ObjectMethod" ||
189
+ node.type === "ClassMethod";
190
+ const nextTopLevel = node.type === "File" ||
191
+ node.type === "Program" ||
192
+ (topLevel && (node.type === "ExportNamedDeclaration" || node.type === "ExportDefaultDeclaration"));
193
+ for (const child of children(node)) {
194
+ this.visit(child, isFunctionScope ? false : inNolaFnBody, nextTopLevel);
195
+ }
196
+ }
197
+ lowerInferFunction(fn) {
198
+ const infer = fn.nolaInfer;
199
+ if (!infer)
200
+ return;
201
+ const name = fn.id?.name ?? "anonymous";
202
+ // Removes `infer ` including trailing whitespace up to `function`.
203
+ this.s.remove(infer.start, infer.end);
204
+ const instruction = fn.nolaMarker?.instruction ?? "";
205
+ if (fn.nolaMarker)
206
+ this.s.remove(fn.nolaMarker.start, fn.nolaMarker.end);
207
+ const body = fn.body;
208
+ if (!body)
209
+ return;
210
+ // Harvest params into FunctionScopeInit args: every named param contributes
211
+ // name (+ InferType when derivable); only `..`-prefixed params contribute
212
+ // the live value. Plain params with underivable/unannotated types are
213
+ // silently omitted in every mode — their type never describes a live value.
214
+ // Contextual params follow the underivableContextType policy: a value the
215
+ // model receives without a schema is the silent failure the policy exists
216
+ // to surface.
217
+ const argEntries = [];
218
+ const paramNames = [];
219
+ for (const p of (fn.params ?? [])) {
220
+ if (p.nolaContextual)
221
+ this.s.remove(p.nolaContextual.start, p.nolaContextual.end);
222
+ const target = p.type === "AssignmentPattern" ? p.left : p;
223
+ if (target.type !== "Identifier")
224
+ continue; // patterns: parser already diagnosed `..` misuse; nothing to harvest
225
+ const paramName = target.name;
226
+ if (!paramName)
227
+ continue;
228
+ paramNames.push(paramName);
229
+ let typeExpr;
230
+ const tsAnn = target.typeAnnotation?.typeAnnotation;
231
+ if (tsAnn) {
232
+ // ref() derivation is lazy — a named type's body only derives inside
233
+ // the accessor plan, so "derivable" is only known once the plan builds
234
+ // cleanly. Absorb nothing on failure: no dangling __nola_type_* ref.
235
+ const derived = deriveTypeExpr(tsAnn, this.deriveCtx);
236
+ const failure = derived.ok
237
+ ? (() => {
238
+ const plan = buildAccessorPlan(derived.refs, this.deriveCtx);
239
+ if (plan.errors.length > 0)
240
+ return plan.errors[0];
241
+ typeExpr = derived.expr;
242
+ this.absorbPlan(derived.companions, plan);
243
+ return undefined;
244
+ })()
245
+ : derived;
246
+ if (failure && p.nolaContextual) {
247
+ typeExpr = this.applyContextTypePolicy(tsAnn, paramName, failure.message);
248
+ }
249
+ }
250
+ argEntries.push(invocationArgEntry(paramName, typeExpr, Boolean(p.nolaContextual)));
251
+ }
252
+ this.s.appendRight(body.start + 1, invocationOpen(paramNames));
253
+ this.s.appendLeft(body.end - 1, invocationClose(name, instruction, argEntries));
254
+ this.meta.nolaFunctions.push(name);
255
+ this.usedRuntime = true;
256
+ }
257
+ lowerCallIntent(call, inNolaFnBody) {
258
+ const callee = call.callee;
259
+ const { tag, quasi } = callee;
260
+ if (quasi.expressions.length > 0) {
261
+ this.diag(Codes.SubstitutionInCallMarker,
262
+ // biome-ignore lint/suspicious/noTemplateCurlyInString: literal ${...} in a diagnostic message
263
+ "`${...}` substitutions are not allowed in a call-intent marker.", quasi.expressions[0]);
264
+ return;
265
+ }
266
+ for (const arg of call.arguments)
267
+ this.checkCallIntentArg(arg);
268
+ const instruction = quasi.quasis.map((q) => q.value.cooked ?? q.value.raw).join("");
269
+ const tagText = this.source.slice(tag.start, tag.end);
270
+ const simple = tag.type === "Identifier" || tag.type === "MemberExpression";
271
+ const typeText = simple ? callIntentTypeText(tagText) : "";
272
+ this.s.appendLeft(call.start, callIntentOpen(typeText));
273
+ const argsStart = call.arguments.length > 0 ? call.arguments[0].start : call.end - 1;
274
+ this.s.overwrite(tag.end, argsStart, callIntentArgsHead(tagText, instruction, call.loc.start));
275
+ this.s.overwrite(call.end - 1, call.end, CALL_INTENT_CLOSE);
276
+ this.usedRuntime = true;
277
+ for (const arg of call.arguments)
278
+ this.visit(arg, inNolaFnBody, false);
279
+ }
280
+ /**
281
+ * NOLA2004 for untyped extractors in slot positions: direct args and anywhere
282
+ * inside plain object/array literal nesting (mirrors the runtime slot walk).
283
+ */
284
+ checkCallIntentArg(arg) {
285
+ if (arg.type === "NolaExtractExpression") {
286
+ if (!arg.typeArgs) {
287
+ this.diag(Codes.UntypedCallIntentArg, "an extractor used as a call-intent argument must have an explicit <T>.", arg);
288
+ }
289
+ return;
290
+ }
291
+ if (arg.type === "ObjectExpression") {
292
+ for (const prop of arg.properties) {
293
+ if (prop.type === "ObjectProperty")
294
+ this.checkCallIntentArg(prop.value);
295
+ }
296
+ return;
297
+ }
298
+ if (arg.type === "ArrayExpression") {
299
+ for (const el of arg.elements) {
300
+ if (el)
301
+ this.checkCallIntentArg(el);
302
+ }
303
+ }
304
+ }
305
+ lowerExtract(node, inNolaFnBody) {
306
+ const quasi = node.quasi;
307
+ if (!quasi)
308
+ return;
309
+ let typeExpr = EXTRACT_DEFAULT_TYPE_EXPR;
310
+ let typeText = EXTRACT_DEFAULT_TYPE_TEXT;
311
+ if (node.typeArgs) {
312
+ const t = node.typeArgs.params[0];
313
+ if (t) {
314
+ typeText = typeArgsText(this.source.slice(t.start, t.end));
315
+ const derived = deriveTypeExpr(t, this.deriveCtx);
316
+ if (derived.ok) {
317
+ typeExpr = derived.expr;
318
+ this.absorbTypeNeeds(derived.refs, derived.companions);
319
+ }
320
+ else {
321
+ this.diag(Codes.UnsupportedIntentType, derived.message, derived.node);
322
+ }
323
+ }
324
+ }
325
+ // Prefix up to (but not including) the template preserves the template's
326
+ // original bytes; each ${expr} gets __nola.fmt(...) wrapped around it.
327
+ // An authored <T> is copied into the prefix byte-identically — anchor it
328
+ // so navigation/hover/completion work on the type text at the ask site.
329
+ const open = extractOpen(typeText);
330
+ const typeNode = node.typeArgs?.params[0];
331
+ const anchors = typeNode
332
+ ? [{ sourceStart: typeNode.start, sourceEnd: typeNode.end, textOffset: open.indexOf(typeText) + 1 }]
333
+ : undefined;
334
+ this.s.overwrite(node.start, quasi.start, open, anchors);
335
+ for (const expr of quasi.expressions) {
336
+ this.s.appendLeft(expr.start, FMT_OPEN);
337
+ this.s.appendLeft(expr.end, FMT_CLOSE);
338
+ }
339
+ const suffix = extractClose(typeExpr, node.loc.start);
340
+ if (node.end > quasi.end) {
341
+ // Replaces the <T> span (which follows the template).
342
+ this.s.overwrite(quasi.end, node.end, suffix);
343
+ }
344
+ else {
345
+ // appendLeft: must precede an enclosing ask's appendRight ")".
346
+ this.s.appendLeft(node.end, suffix);
347
+ }
348
+ this.usedRuntime = true;
349
+ for (const expr of quasi.expressions)
350
+ this.visit(expr, inNolaFnBody, false);
351
+ }
352
+ }
353
+ //# sourceMappingURL=lowerer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lowerer.js","sourceRoot":"","sources":["../../src/lower/lowerer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { BaseNode } from "@nola-lang/ast";
2
+ import type { UnderivableContextTypeMode } from "@nola-lang/core";
3
+ import type { CompileResult } from "../types.js";
4
+ export interface LowerOptions {
5
+ underivableContextType?: UnderivableContextTypeMode;
6
+ }
7
+ export declare function lower(source: string, file: string, ast: BaseNode, displayFile?: string, options?: LowerOptions): CompileResult;
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lower/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,MAAM,WAAW,YAAY;IAC3B,sBAAsB,CAAC,EAAE,0BAA0B,CAAC;CACrD;AAED,wBAAgB,KAAK,CACnB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,QAAQ,EACb,WAAW,GAAE,MAAa,EAC1B,OAAO,GAAE,YAAiB,GACzB,aAAa,CAEf"}
@@ -0,0 +1,5 @@
1
+ import { Lowerer } from "./lowerer.js";
2
+ export function lower(source, file, ast, displayFile = file, options = {}) {
3
+ return new Lowerer(source, file, ast, displayFile, options).run();
4
+ }
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lower/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAMvC,MAAM,UAAU,KAAK,CACnB,MAAc,EACd,IAAY,EACZ,GAAa,EACb,cAAsB,IAAI,EAC1B,UAAwB,EAAE;IAE1B,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC;AACpE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=lower.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lower.d.ts","sourceRoot":"","sources":["../../src/lower/lower.ts"],"names":[],"mappings":""}