@nola-lang/compiler 0.1.0-alpha.0 → 0.1.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.
- package/LICENSE +201 -21
- package/dist/ambient-stub.d.ts +1 -1
- package/dist/ambient-stub.d.ts.map +1 -1
- package/dist/ambient-stub.js +17 -3
- package/dist/ambient-stub.js.map +1 -1
- package/dist/lower/{Lowerer.d.ts → lowerer.d.ts} +34 -2
- package/dist/lower/lowerer.d.ts.map +1 -0
- package/dist/lower/{Lowerer.js → lowerer.js} +201 -33
- package/dist/lower/lowerer.js.map +1 -0
- package/dist/lower/templates.d.ts +58 -4
- package/dist/lower/templates.d.ts.map +1 -1
- package/dist/lower/templates.js +65 -9
- package/dist/lower/templates.js.map +1 -1
- package/dist/spans.d.ts +14 -3
- package/dist/spans.d.ts.map +1 -1
- package/dist/spans.js +8 -6
- package/dist/spans.js.map +1 -1
- package/dist/types.d.ts +2 -2
- package/package.json +7 -6
- package/dist/lower/Lowerer.d.ts.map +0 -1
- package/dist/lower/Lowerer.js.map +0 -1
- package/dist/lower/lower.d.ts +0 -2
- package/dist/lower/lower.d.ts.map +0 -1
- package/dist/lower/lower.js +0 -319
- package/dist/lower/lower.js.map +0 -1
- package/dist/lower.d.ts +0 -4
- package/dist/lower.d.ts.map +0 -1
- package/dist/lower.js +0 -322
- package/dist/lower.js.map +0 -1
package/dist/lower.js
DELETED
|
@@ -1,322 +0,0 @@
|
|
|
1
|
-
import { Codes, children, } from "@nola-lang/ast";
|
|
2
|
-
import { NOLA_EMIT } from "@nola-lang/core";
|
|
3
|
-
import { companionSpecifierFor } from "./companion-name.js";
|
|
4
|
-
import { collectTypeRegistry } from "./schema.js";
|
|
5
|
-
import { accessorNameFor, buildAccessorPlan, collectTypeImports, deriveTypeExpr, } from "./schema-expr.js";
|
|
6
|
-
import { SpanRecorder } from "./spans.js";
|
|
7
|
-
/**
|
|
8
|
-
* Appended at EOF so no original line/column shifts: ESM hoists the import, and a
|
|
9
|
-
* `function` declaration hoists with its value. `__nola_file_ctx` must NOT be a
|
|
10
|
-
* `const`/`let` — an infer function called during its own module's evaluation
|
|
11
|
-
* (`const eager = go();`) reads it before the declaration runs and hits the TDZ.
|
|
12
|
-
* It holds no state: `__nola.context.file` is memoized by path in the runtime.
|
|
13
|
-
*/
|
|
14
|
-
const RUNTIME_IMPORT = (displayFile) => `
|
|
15
|
-
import { __nola } from "nola-lang/runtime";
|
|
16
|
-
__nola.useRuntime(${NOLA_EMIT});
|
|
17
|
-
function __nola_file_ctx() { return __nola.context.file(${JSON.stringify(displayFile)}); }
|
|
18
|
-
`;
|
|
19
|
-
export function lower(source, file, ast, displayFile = file) {
|
|
20
|
-
return new Lowerer(source, file, ast, displayFile).run();
|
|
21
|
-
}
|
|
22
|
-
class Lowerer {
|
|
23
|
-
s;
|
|
24
|
-
source;
|
|
25
|
-
/** Absolute on-disk path. Diagnostics and source maps use this. */
|
|
26
|
-
file;
|
|
27
|
-
/** Project-root-relative path. Only this reaches the emitted code. */
|
|
28
|
-
displayFile;
|
|
29
|
-
ast;
|
|
30
|
-
diagnostics = [];
|
|
31
|
-
meta = { nolaFunctions: [] };
|
|
32
|
-
usedRuntime = false;
|
|
33
|
-
/** named types needing a __nola_type_<Name> accessor in the appendix, in first-use order */
|
|
34
|
-
typeAccessors = new Map();
|
|
35
|
-
/** local binding name -> companion import emitted in the appendix */
|
|
36
|
-
companionImports = new Map();
|
|
37
|
-
/** shared derivation context (registry, imports, display file, bare ref names) */
|
|
38
|
-
deriveCtx;
|
|
39
|
-
constructor(source, file, ast, displayFile) {
|
|
40
|
-
this.s = new SpanRecorder(source);
|
|
41
|
-
this.source = source;
|
|
42
|
-
this.file = file;
|
|
43
|
-
this.displayFile = displayFile;
|
|
44
|
-
this.ast = ast;
|
|
45
|
-
this.deriveCtx = {
|
|
46
|
-
source,
|
|
47
|
-
registry: collectTypeRegistry(ast),
|
|
48
|
-
imports: collectTypeImports(ast),
|
|
49
|
-
importerDisplayFile: displayFile,
|
|
50
|
-
refQualifier: "",
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
run() {
|
|
54
|
-
this.visit(this.ast, false, true);
|
|
55
|
-
if (this.usedRuntime) {
|
|
56
|
-
// Accessors are `function` declarations for the same TDZ reason as
|
|
57
|
-
// __nola_file_ctx: a top-level extractor evaluates during module
|
|
58
|
-
// evaluation, before any appendix statement runs.
|
|
59
|
-
let appendix = RUNTIME_IMPORT(this.displayFile);
|
|
60
|
-
for (const [name, expr] of this.typeAccessors) {
|
|
61
|
-
// The explicit return type is required: a self-recursive accessor has no
|
|
62
|
-
// inferable return type (TS7023 under strict). The inline import type is
|
|
63
|
-
// erased by esbuild and resolves against both the stub and the runtime.
|
|
64
|
-
appendix += `function ${accessorNameFor(name)}(): import("nola-lang/runtime").InferType<unknown> { return ${expr}; }\n`;
|
|
65
|
-
}
|
|
66
|
-
// Companion imports hoist like any ESM import; the binding is a companion
|
|
67
|
-
// accessor function, initialized before module evaluation (cycle-safe).
|
|
68
|
-
for (const [local, imp] of this.companionImports) {
|
|
69
|
-
appendix += `import { ${imp.importedName}$type as ${accessorNameFor(local)} } from ${JSON.stringify(companionSpecifierFor(imp.specifier))};\n`;
|
|
70
|
-
}
|
|
71
|
-
this.s.appendix(appendix);
|
|
72
|
-
}
|
|
73
|
-
const map = this.s.generateMap({ source: this.file, hires: true, includeContent: true });
|
|
74
|
-
const spans = this.s.finalize(this.source.length);
|
|
75
|
-
const companions = [
|
|
76
|
-
...new Set([...this.companionImports.values()].map((i) => companionSpecifierFor(i.specifier))),
|
|
77
|
-
].sort();
|
|
78
|
-
return {
|
|
79
|
-
code: this.s.toString(),
|
|
80
|
-
map,
|
|
81
|
-
diagnostics: this.diagnostics,
|
|
82
|
-
meta: { ...this.meta, spans, companions, mode: "lowered" },
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
diag(code, message, node) {
|
|
86
|
-
this.diagnostics.push({ code, message, file: this.file, start: node.start, end: node.end, loc: node.loc });
|
|
87
|
-
}
|
|
88
|
-
/** Fold a derivation's transitive needs (accessors, companion imports) into the state. */
|
|
89
|
-
absorbPlan(companions, plan) {
|
|
90
|
-
for (const [local, imp] of companions)
|
|
91
|
-
this.companionImports.set(local, imp);
|
|
92
|
-
for (const [name, expr] of plan.accessors) {
|
|
93
|
-
if (!this.typeAccessors.has(name))
|
|
94
|
-
this.typeAccessors.set(name, expr);
|
|
95
|
-
}
|
|
96
|
-
for (const [local, imp] of plan.companions)
|
|
97
|
-
this.companionImports.set(local, imp);
|
|
98
|
-
}
|
|
99
|
-
absorbTypeNeeds(refs, companions) {
|
|
100
|
-
const plan = buildAccessorPlan(refs, this.deriveCtx);
|
|
101
|
-
this.absorbPlan(companions, plan);
|
|
102
|
-
for (const e of plan.errors)
|
|
103
|
-
this.diag(Codes.UnsupportedIntentType, e.message, e.node);
|
|
104
|
-
}
|
|
105
|
-
// inNolaFnBody: directly inside a nola function body.
|
|
106
|
-
// topLevel: current node is a direct child of Program (or an export wrapper).
|
|
107
|
-
visit(node, inNolaFnBody, topLevel) {
|
|
108
|
-
switch (node.type) {
|
|
109
|
-
case "NolaExtractExpression": {
|
|
110
|
-
const extract = node;
|
|
111
|
-
// Tolerant-parse placeholder: diagnostic already recorded; leave the
|
|
112
|
-
// span's original bytes untouched.
|
|
113
|
-
if (extract.nolaError || !extract.quasi)
|
|
114
|
-
return;
|
|
115
|
-
this.lowerExtract(extract, inNolaFnBody);
|
|
116
|
-
return;
|
|
117
|
-
}
|
|
118
|
-
case "NolaAskExpression": {
|
|
119
|
-
const ask = node;
|
|
120
|
-
if (!inNolaFnBody) {
|
|
121
|
-
this.diag(Codes.AskOutsideNolaFunction, "`ask` is only allowed directly inside an infer function body.", node);
|
|
122
|
-
}
|
|
123
|
-
else {
|
|
124
|
-
// Overwriting up to the operand also removes an `with <alias>` span;
|
|
125
|
-
// the alias re-enters as ask's third argument.
|
|
126
|
-
this.s.overwrite(node.start, ask.argument.start, "await __nola.ask(");
|
|
127
|
-
const provider = ask.provider ? `, ${JSON.stringify(ask.provider.name)}` : "";
|
|
128
|
-
// appendRight: extract-lowering suffixes use appendLeft at the same
|
|
129
|
-
// position and must land BEFORE this closing paren.
|
|
130
|
-
this.s.appendRight(node.end, `, __ctx${provider})`);
|
|
131
|
-
this.usedRuntime = true;
|
|
132
|
-
}
|
|
133
|
-
this.visit(ask.argument, inNolaFnBody, false);
|
|
134
|
-
return;
|
|
135
|
-
}
|
|
136
|
-
case "FunctionDeclaration": {
|
|
137
|
-
const fn = node;
|
|
138
|
-
if (!fn.nolaInfer) {
|
|
139
|
-
break;
|
|
140
|
-
}
|
|
141
|
-
if (!topLevel) {
|
|
142
|
-
// TODO: to discuss - wew should not have this limitation
|
|
143
|
-
this.diag(Codes.NolaFnNotTopLevel, "infer functions must be declared at module top level.", node);
|
|
144
|
-
break;
|
|
145
|
-
}
|
|
146
|
-
this.lowerInferFunction(fn);
|
|
147
|
-
if (fn.body) {
|
|
148
|
-
for (const child of children(fn.body)) {
|
|
149
|
-
this.visit(child, true, false);
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
return;
|
|
153
|
-
}
|
|
154
|
-
case "CallExpression": {
|
|
155
|
-
const call = node;
|
|
156
|
-
if (call.callee.type === "TaggedTemplateExpression") {
|
|
157
|
-
this.lowerCallIntent(call, inNolaFnBody);
|
|
158
|
-
return;
|
|
159
|
-
}
|
|
160
|
-
break;
|
|
161
|
-
}
|
|
162
|
-
default:
|
|
163
|
-
break;
|
|
164
|
-
}
|
|
165
|
-
const isFunctionScope = node.type === "FunctionDeclaration" ||
|
|
166
|
-
node.type === "FunctionExpression" ||
|
|
167
|
-
node.type === "ArrowFunctionExpression" ||
|
|
168
|
-
node.type === "ObjectMethod" ||
|
|
169
|
-
node.type === "ClassMethod";
|
|
170
|
-
const nextTopLevel = node.type === "File" ||
|
|
171
|
-
node.type === "Program" ||
|
|
172
|
-
(topLevel && (node.type === "ExportNamedDeclaration" || node.type === "ExportDefaultDeclaration"));
|
|
173
|
-
for (const child of children(node)) {
|
|
174
|
-
this.visit(child, isFunctionScope ? false : inNolaFnBody, nextTopLevel);
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
lowerInferFunction(fn) {
|
|
178
|
-
const infer = fn.nolaInfer;
|
|
179
|
-
if (!infer)
|
|
180
|
-
return;
|
|
181
|
-
const name = fn.id?.name ?? "anonymous";
|
|
182
|
-
// Removes `infer ` including trailing whitespace up to `function`.
|
|
183
|
-
this.s.remove(infer.start, infer.end);
|
|
184
|
-
const instruction = fn.nolaMarker?.instruction ?? "";
|
|
185
|
-
if (fn.nolaMarker)
|
|
186
|
-
this.s.remove(fn.nolaMarker.start, fn.nolaMarker.end);
|
|
187
|
-
const body = fn.body;
|
|
188
|
-
if (!body)
|
|
189
|
-
return;
|
|
190
|
-
// Harvest params into FunctionScopeInit args: every named param contributes
|
|
191
|
-
// name (+ InferType when derivable); only `..`-prefixed params contribute
|
|
192
|
-
// the live value. Underivable/unannotated types are silently omitted — an
|
|
193
|
-
// UnsupportedType here would fail tsc-clean, and a missing arg type must
|
|
194
|
-
// not block compilation the way it deliberately does for extractors.
|
|
195
|
-
const argEntries = [];
|
|
196
|
-
for (const p of (fn.params ?? [])) {
|
|
197
|
-
if (p.nolaContextual)
|
|
198
|
-
this.s.remove(p.nolaContextual.start, p.nolaContextual.end);
|
|
199
|
-
const target = p.type === "AssignmentPattern" ? p.left : p;
|
|
200
|
-
if (target.type !== "Identifier")
|
|
201
|
-
continue; // patterns: parser already diagnosed `..` misuse; nothing to harvest
|
|
202
|
-
const paramName = target.name;
|
|
203
|
-
if (!paramName)
|
|
204
|
-
continue;
|
|
205
|
-
let typeField = "";
|
|
206
|
-
const tsAnn = target.typeAnnotation?.typeAnnotation;
|
|
207
|
-
if (tsAnn) {
|
|
208
|
-
const derived = deriveTypeExpr(tsAnn, this.deriveCtx);
|
|
209
|
-
if (derived.ok) {
|
|
210
|
-
// ref() derivation is lazy — a named type's body only derives inside
|
|
211
|
-
// the accessor plan, so "derivable" is only known once the plan builds
|
|
212
|
-
// cleanly. On any transitive failure, omit like the shallow case:
|
|
213
|
-
// nothing absorbed, no dangling __nola_type_* ref, no diagnostic.
|
|
214
|
-
const plan = buildAccessorPlan(derived.refs, this.deriveCtx);
|
|
215
|
-
if (plan.errors.length === 0) {
|
|
216
|
-
typeField = `, type: ${derived.expr}`;
|
|
217
|
-
this.absorbPlan(derived.companions, plan);
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
const ctxField = p.nolaContextual ? `, contextual: true, value: ${paramName}` : "";
|
|
222
|
-
argEntries.push(`{ name: ${JSON.stringify(paramName)}${typeField}${ctxField} }`);
|
|
223
|
-
}
|
|
224
|
-
const argsField = argEntries.length > 0 ? `, args: [${argEntries.join(", ")}]` : "";
|
|
225
|
-
this.s.appendRight(body.start + 1, "\n return __nola.intents.Intent(async (__ctx) => {");
|
|
226
|
-
this.s.appendLeft(body.end - 1, ` }, __nola_file_ctx().func({ fn: ${JSON.stringify(name)}, instruction: ${JSON.stringify(instruction)}${argsField} }));\n`);
|
|
227
|
-
this.meta.nolaFunctions.push(name);
|
|
228
|
-
this.usedRuntime = true;
|
|
229
|
-
}
|
|
230
|
-
lowerCallIntent(call, inNolaFnBody) {
|
|
231
|
-
const callee = call.callee;
|
|
232
|
-
const { tag, quasi } = callee;
|
|
233
|
-
if (quasi.expressions.length > 0) {
|
|
234
|
-
this.diag(Codes.SubstitutionInCallMarker,
|
|
235
|
-
// biome-ignore lint/suspicious/noTemplateCurlyInString: literal ${...} in a diagnostic message
|
|
236
|
-
"`${...}` substitutions are not allowed in a call-intent marker.", quasi.expressions[0]);
|
|
237
|
-
return;
|
|
238
|
-
}
|
|
239
|
-
for (const arg of call.arguments)
|
|
240
|
-
this.checkCallIntentArg(arg);
|
|
241
|
-
const instruction = quasi.quasis.map((q) => q.value.cooked ?? q.value.raw).join("");
|
|
242
|
-
const tagText = this.source.slice(tag.start, tag.end);
|
|
243
|
-
const simple = tag.type === "Identifier" || tag.type === "MemberExpression";
|
|
244
|
-
const typeText = simple ? `<Awaited<ReturnType<typeof ${tagText}>>>` : "";
|
|
245
|
-
const { line, column } = call.loc.start;
|
|
246
|
-
this.s.appendLeft(call.start, `__nola.intents.FunctionCallingIntent${typeText}({ fn: `);
|
|
247
|
-
const argsStart = call.arguments.length > 0 ? call.arguments[0].start : call.end - 1;
|
|
248
|
-
this.s.overwrite(tag.end, argsStart, `, name: ${JSON.stringify(tagText)}, instruction: ${JSON.stringify(instruction)}, ` +
|
|
249
|
-
`loc: ${JSON.stringify(`${line}:${column + 1}`)}, args: [`);
|
|
250
|
-
this.s.overwrite(call.end - 1, call.end, "] })");
|
|
251
|
-
this.usedRuntime = true;
|
|
252
|
-
for (const arg of call.arguments)
|
|
253
|
-
this.visit(arg, inNolaFnBody, false);
|
|
254
|
-
}
|
|
255
|
-
/**
|
|
256
|
-
* NOLA2004 for untyped extractors in slot positions: direct args and anywhere
|
|
257
|
-
* inside plain object/array literal nesting (mirrors the runtime slot walk).
|
|
258
|
-
*/
|
|
259
|
-
checkCallIntentArg(arg) {
|
|
260
|
-
if (arg.type === "NolaExtractExpression") {
|
|
261
|
-
if (!arg.typeArgs) {
|
|
262
|
-
this.diag(Codes.UntypedCallIntentArg, "an extractor used as a call-intent argument must have an explicit <T>.", arg);
|
|
263
|
-
}
|
|
264
|
-
return;
|
|
265
|
-
}
|
|
266
|
-
if (arg.type === "ObjectExpression") {
|
|
267
|
-
for (const prop of arg.properties) {
|
|
268
|
-
if (prop.type === "ObjectProperty")
|
|
269
|
-
this.checkCallIntentArg(prop.value);
|
|
270
|
-
}
|
|
271
|
-
return;
|
|
272
|
-
}
|
|
273
|
-
if (arg.type === "ArrayExpression") {
|
|
274
|
-
for (const el of arg.elements) {
|
|
275
|
-
if (el)
|
|
276
|
-
this.checkCallIntentArg(el);
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
lowerExtract(node, inNolaFnBody) {
|
|
281
|
-
const quasi = node.quasi;
|
|
282
|
-
if (!quasi)
|
|
283
|
-
return;
|
|
284
|
-
let typeExpr = "__nola.types.string()";
|
|
285
|
-
let typeText = "<any>";
|
|
286
|
-
if (node.typeArgs) {
|
|
287
|
-
const t = node.typeArgs.params[0];
|
|
288
|
-
if (t) {
|
|
289
|
-
typeText = `<${this.source.slice(t.start, t.end)}>`;
|
|
290
|
-
const derived = deriveTypeExpr(t, this.deriveCtx);
|
|
291
|
-
if (derived.ok) {
|
|
292
|
-
typeExpr = derived.expr;
|
|
293
|
-
this.absorbTypeNeeds(derived.refs, derived.companions);
|
|
294
|
-
}
|
|
295
|
-
else {
|
|
296
|
-
this.diag(Codes.UnsupportedIntentType, derived.message, derived.node);
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
}
|
|
300
|
-
const { line, column } = node.loc.start;
|
|
301
|
-
// Prefix up to (but not including) the template preserves the template's
|
|
302
|
-
// original bytes; each ${expr} gets __nola.fmt(...) wrapped around it.
|
|
303
|
-
this.s.overwrite(node.start, quasi.start, `__nola.intents.ExtractIntent${typeText}({ instruction: `);
|
|
304
|
-
for (const expr of quasi.expressions) {
|
|
305
|
-
this.s.appendLeft(expr.start, "__nola.fmt(");
|
|
306
|
-
this.s.appendLeft(expr.end, ")");
|
|
307
|
-
}
|
|
308
|
-
const suffix = `, type: ${typeExpr}, loc: ${JSON.stringify(`${line}:${column + 1}`)} })`;
|
|
309
|
-
if (node.end > quasi.end) {
|
|
310
|
-
// Replaces the <T> span (which follows the template).
|
|
311
|
-
this.s.overwrite(quasi.end, node.end, suffix);
|
|
312
|
-
}
|
|
313
|
-
else {
|
|
314
|
-
// appendLeft: must precede an enclosing ask's appendRight ")".
|
|
315
|
-
this.s.appendLeft(node.end, suffix);
|
|
316
|
-
}
|
|
317
|
-
this.usedRuntime = true;
|
|
318
|
-
for (const expr of quasi.expressions)
|
|
319
|
-
this.visit(expr, inNolaFnBody, false);
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
//# sourceMappingURL=lower.js.map
|
package/dist/lower.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"lower.js","sourceRoot":"","sources":["../src/lower.ts"],"names":[],"mappings":"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"}
|