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