nola-lang 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 (63) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +32 -0
  3. package/dist/build.d.ts +6 -0
  4. package/dist/build.d.ts.map +1 -0
  5. package/dist/build.js +107 -0
  6. package/dist/build.js.map +1 -0
  7. package/dist/check.d.ts +4 -0
  8. package/dist/check.d.ts.map +1 -0
  9. package/dist/check.js +71 -0
  10. package/dist/check.js.map +1 -0
  11. package/dist/companions.d.ts +18 -0
  12. package/dist/companions.d.ts.map +1 -0
  13. package/dist/companions.js +44 -0
  14. package/dist/companions.js.map +1 -0
  15. package/dist/config.d.ts +3 -0
  16. package/dist/config.d.ts.map +1 -0
  17. package/dist/config.js +2 -0
  18. package/dist/config.js.map +1 -0
  19. package/dist/diag.d.ts +3 -0
  20. package/dist/diag.d.ts.map +1 -0
  21. package/dist/diag.js +11 -0
  22. package/dist/diag.js.map +1 -0
  23. package/dist/frame.d.ts +3 -0
  24. package/dist/frame.d.ts.map +1 -0
  25. package/dist/frame.js +8 -0
  26. package/dist/frame.js.map +1 -0
  27. package/dist/index.d.ts +8 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +8 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/init.d.ts +3 -0
  32. package/dist/init.d.ts.map +1 -0
  33. package/dist/init.js +14 -0
  34. package/dist/init.js.map +1 -0
  35. package/dist/main.d.ts +3 -0
  36. package/dist/main.d.ts.map +1 -0
  37. package/dist/main.js +53 -0
  38. package/dist/main.js.map +1 -0
  39. package/dist/providers.d.ts +3 -0
  40. package/dist/providers.d.ts.map +1 -0
  41. package/dist/providers.js +2 -0
  42. package/dist/providers.js.map +1 -0
  43. package/dist/register.d.ts +2 -0
  44. package/dist/register.d.ts.map +1 -0
  45. package/dist/register.js +3 -0
  46. package/dist/register.js.map +1 -0
  47. package/dist/run.d.ts +2 -0
  48. package/dist/run.d.ts.map +1 -0
  49. package/dist/run.js +14 -0
  50. package/dist/run.js.map +1 -0
  51. package/dist/runtime.d.ts +3 -0
  52. package/dist/runtime.d.ts.map +1 -0
  53. package/dist/runtime.js +7 -0
  54. package/dist/runtime.js.map +1 -0
  55. package/dist/tshost.d.ts +12 -0
  56. package/dist/tshost.d.ts.map +1 -0
  57. package/dist/tshost.js +90 -0
  58. package/dist/tshost.js.map +1 -0
  59. package/dist/walk.d.ts +6 -0
  60. package/dist/walk.d.ts.map +1 -0
  61. package/dist/walk.js +29 -0
  62. package/dist/walk.js.map +1 -0
  63. package/package.json +57 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Evgen Mykhailenko
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,32 @@
1
+ # nola-lang
2
+
3
+ The [Nola](https://github.com/nola-lang/nola) toolchain. Nola is a TypeScript
4
+ superset (`.tsi`) where `infer` functions and `ask` extractors turn prompts
5
+ into typed values, resolved by a configured LLM at run time.
6
+
7
+ Install as a **devDependency** — your app depends on
8
+ [`@nola-lang/runtime`](https://www.npmjs.com/package/@nola-lang/runtime) and
9
+ [`@nola-lang/providers`](https://www.npmjs.com/package/@nola-lang/providers)
10
+ instead (the scaffold sets all of this up):
11
+
12
+ ```bash
13
+ npm create nola-lang my-app # or: npx nola init
14
+ ```
15
+
16
+ ## Commands
17
+
18
+ ```
19
+ nola init [dir] scaffold a new Nola project
20
+ nola build [dir] [--out dist] compile .tsi -> js + source maps + d.ts
21
+ nola run <entry> run a .tsi/.ts entry with the loader + nola.config.ts
22
+ nola check [dir] type-check .tsi and .ts together, positions mapped back
23
+ ```
24
+
25
+ ## Direct node execution (the tsx model)
26
+
27
+ ```bash
28
+ node --import nola-lang/register src/main.tsi
29
+ ```
30
+
31
+ The loader inlines source maps pointing at the on-disk `.tsi`, so VS Code
32
+ breakpoints bind directly in Nola source.
@@ -0,0 +1,6 @@
1
+ export interface BuildResult {
2
+ written: string[];
3
+ errors: string[];
4
+ }
5
+ export declare function cmdBuild(dirArg?: string, outArg?: string): Promise<BuildResult>;
6
+ //# sourceMappingURL=build.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,wBAAsB,QAAQ,CAAC,MAAM,SAAM,EAAE,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,CAwGlF"}
package/dist/build.js ADDED
@@ -0,0 +1,107 @@
1
+ import { existsSync } from "node:fs";
2
+ import { mkdir, readFile, writeFile } from "node:fs/promises";
3
+ import { basename, dirname, join, relative, resolve } from "node:path";
4
+ import remappingImport from "@ampproject/remapping";
5
+ import { Codes } from "@nola-lang/ast";
6
+ import { companionSourceCandidates, companionSpecifierFor, compileCompanion, compileNola } from "@nola-lang/compiler";
7
+ import { findProjectRoot, loadCompilerOptions } from "@nola-lang/node-loader";
8
+ import { transformSync } from "esbuild";
9
+ import { collectCompanionEntries } from "./companions.js";
10
+ import { printDiagnostics } from "./diag.js";
11
+ import { createLoweredProgram } from "./tshost.js";
12
+ import { walkProject } from "./walk.js";
13
+ const remapping = remappingImport;
14
+ export async function cmdBuild(dirArg = ".", outArg = "dist") {
15
+ const dir = resolve(dirArg);
16
+ const out = resolve(outArg);
17
+ const sourceRoot = findProjectRoot(dir);
18
+ const { underivableContextType } = await loadCompilerOptions(dir);
19
+ const written = [];
20
+ const errors = [];
21
+ const lowered = [];
22
+ const metas = [];
23
+ const { tsi, reserved } = await walkProject(dir);
24
+ for (const file of reserved) {
25
+ errors.push(`${file} ${Codes.ReservedCompanionPath}: the *.nola.* filename namespace is reserved for generated companion modules — rename this file`);
26
+ }
27
+ if (errors.length > 0)
28
+ return { written, errors };
29
+ for (const file of tsi) {
30
+ const source = await readFile(file, "utf8");
31
+ const result = compileNola(source, file, { sourceRoot, underivableContextType });
32
+ if (result.diagnostics.length > 0) {
33
+ errors.push(printDiagnostics(result.diagnostics, () => source));
34
+ continue;
35
+ }
36
+ lowered.push({ file, loweredCode: result.code });
37
+ metas.push(result.meta.companions);
38
+ const js = transformSync(result.code, { loader: "ts", format: "esm", sourcemap: "external", sourcefile: file });
39
+ let consumed = false;
40
+ const merged = remapping(js.map, () => {
41
+ if (consumed)
42
+ return null;
43
+ consumed = true;
44
+ return result.map;
45
+ });
46
+ const outPath = `${join(out, relative(dir, file))}.js`;
47
+ await mkdir(dirname(outPath), { recursive: true });
48
+ await writeFile(outPath, `${js.code}\n//# sourceMappingURL=${basename(outPath)}.map\n`);
49
+ await writeFile(`${outPath}.map`, merged.toString());
50
+ written.push(outPath, `${outPath}.map`);
51
+ }
52
+ // Companion worklist: every reachable type source gets one real module in
53
+ // dist, named by the same forward transform the lowered imports use — so
54
+ // production output needs no loader at all.
55
+ const emittedCompanions = new Set();
56
+ const companionQueue = lowered.flatMap((entry, i) => (metas[i] ?? []).map((specifier) => ({ importer: entry.file, specifier })));
57
+ while (companionQueue.length > 0) {
58
+ const { importer, specifier } = companionQueue.shift();
59
+ const src = companionSourceCandidates(specifier)
60
+ .map((c) => resolve(dirname(importer), c))
61
+ .find((p) => existsSync(p));
62
+ if (!src) {
63
+ errors.push(`${importer} ${Codes.CompanionUnavailable}: cannot locate the type source for "${specifier}"`);
64
+ continue;
65
+ }
66
+ if (emittedCompanions.has(src))
67
+ continue;
68
+ emittedCompanions.add(src);
69
+ const companion = compileCompanion(await readFile(src, "utf8"), src, { sourceRoot });
70
+ if (companion.code === "" || companion.diagnostics.length > 0) {
71
+ errors.push(printDiagnostics(companion.diagnostics, () => ""));
72
+ continue;
73
+ }
74
+ const js = transformSync(companion.code, { loader: "ts", format: "esm" });
75
+ const outName = companionSpecifierFor(basename(src));
76
+ const outPath = join(out, relative(dir, join(dirname(src), outName)));
77
+ await mkdir(dirname(outPath), { recursive: true });
78
+ await writeFile(outPath, js.code);
79
+ written.push(outPath);
80
+ companionQueue.push(...companion.companions.map((c) => ({ importer: src, specifier: c })));
81
+ }
82
+ if (lowered.length > 0) {
83
+ const companionEntries = await collectCompanionEntries(lowered.map((entry, i) => ({ file: entry.file, companions: metas[i] ?? [] })), sourceRoot);
84
+ const { program, virtualName } = createLoweredProgram(lowered, dir, "declarations", companionEntries.virtual);
85
+ for (const entry of lowered) {
86
+ const sourceFile = program.getSourceFile(virtualName(entry.file));
87
+ if (!sourceFile)
88
+ continue;
89
+ let declarationText = "";
90
+ program.emit(sourceFile, (fileName, text) => {
91
+ if (fileName.endsWith(".d.ts"))
92
+ declarationText = text;
93
+ }, undefined, true);
94
+ if (declarationText) {
95
+ // Next to the built .js in --out (report.tsi.js + report.tsi.d.ts pair
96
+ // under NodeNext), NEVER adjacent to the source: the editor serves
97
+ // .tsi virtually, and an on-disk declaration would only shadow it.
98
+ const dtsPath = `${join(out, relative(dir, entry.file))}.d.ts`;
99
+ await mkdir(dirname(dtsPath), { recursive: true });
100
+ await writeFile(dtsPath, declarationText);
101
+ written.push(dtsPath);
102
+ }
103
+ }
104
+ }
105
+ return { written, errors };
106
+ }
107
+ //# sourceMappingURL=build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function cmdCheck(dirArg?: string): Promise<{
2
+ errors: string[];
3
+ }>;
4
+ //# sourceMappingURL=check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../src/check.ts"],"names":[],"mappings":"AAYA,wBAAsB,QAAQ,CAAC,MAAM,SAAM,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CA8D1E"}
package/dist/check.js ADDED
@@ -0,0 +1,71 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { resolve } from "node:path";
3
+ import { originalPositionFor, TraceMap } from "@jridgewell/trace-mapping";
4
+ import { Codes } from "@nola-lang/ast";
5
+ import { compileNola } from "@nola-lang/compiler";
6
+ import { findProjectRoot, loadCompilerOptions } from "@nola-lang/node-loader";
7
+ import ts from "typescript";
8
+ import { collectCompanionEntries } from "./companions.js";
9
+ import { printDiagnostics } from "./diag.js";
10
+ import { createLoweredProgram } from "./tshost.js";
11
+ import { walkProject } from "./walk.js";
12
+ export async function cmdCheck(dirArg = ".") {
13
+ const dir = resolve(dirArg);
14
+ // Check the same text `nola build` emits, so the two can't drift.
15
+ const sourceRoot = findProjectRoot(dir);
16
+ const { underivableContextType } = await loadCompilerOptions(dir);
17
+ const errors = [];
18
+ const { tsi, reserved } = await walkProject(dir);
19
+ for (const file of reserved) {
20
+ errors.push(`${file} ${Codes.ReservedCompanionPath}: the *.nola.* filename namespace is reserved for generated companion modules — rename this file`);
21
+ }
22
+ if (errors.length > 0)
23
+ return { errors };
24
+ const entries = [];
25
+ const maps = new Map();
26
+ const seeds = [];
27
+ for (const file of tsi) {
28
+ const source = await readFile(file, "utf8");
29
+ const result = compileNola(source, file, { sourceRoot, underivableContextType });
30
+ if (result.diagnostics.length > 0) {
31
+ errors.push(printDiagnostics(result.diagnostics, () => source));
32
+ continue;
33
+ }
34
+ entries.push({ file, loweredCode: result.code });
35
+ maps.set(file, result.map);
36
+ seeds.push({ file, companions: result.meta.companions });
37
+ }
38
+ if (entries.length === 0)
39
+ return { errors };
40
+ const companionEntries = await collectCompanionEntries(seeds, sourceRoot);
41
+ errors.push(...companionEntries.errors);
42
+ const { program, virtualName } = createLoweredProgram(entries, dir, "check", companionEntries.virtual);
43
+ const virtualToFile = new Map(entries.map((e) => [virtualName(e.file).replace(/\\/g, "/"), e.file]));
44
+ for (const d of ts.getPreEmitDiagnostics(program)) {
45
+ if (!d.file || d.start === undefined)
46
+ continue;
47
+ const fileName = d.file.fileName.replace(/\\/g, "/");
48
+ const message = ts.flattenDiagnosticMessageText(d.messageText, " ");
49
+ const companionSource = companionEntries.sources.get(fileName);
50
+ if (companionSource) {
51
+ // Diagnostics policy: never report into a file the user cannot open.
52
+ errors.push(`${companionSource}:1:1 TS${d.code}: in derived type module: ${message}`);
53
+ continue;
54
+ }
55
+ const original = virtualToFile.get(fileName);
56
+ if (!original) {
57
+ // A real on-disk file (a plain .ts project root): position it directly.
58
+ const pos = d.file.getLineAndCharacterOfPosition(d.start);
59
+ errors.push(`${d.file.fileName}:${pos.line + 1}:${pos.character + 1} TS${d.code}: ${message}`);
60
+ continue;
61
+ }
62
+ const generated = d.file.getLineAndCharacterOfPosition(d.start);
63
+ const tracer = new TraceMap(maps.get(original));
64
+ const pos = originalPositionFor(tracer, { line: generated.line + 1, column: generated.character });
65
+ const line = pos.line ?? generated.line + 1;
66
+ const column = (pos.column ?? generated.character) + 1;
67
+ errors.push(`${original}:${line}:${column} TS${d.code}: ${message}`);
68
+ }
69
+ return { errors };
70
+ }
71
+ //# sourceMappingURL=check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.js","sourceRoot":"","sources":["../src/check.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export interface CompanionEntries {
2
+ /** normalized absolute virtual path (<resolved companion>.ts) -> generated TS */
3
+ virtual: Map<string, string>;
4
+ /** virtual path -> on-disk source file it derives from (for diagnostic remap) */
5
+ sources: Map<string, string>;
6
+ errors: string[];
7
+ }
8
+ /**
9
+ * Host-side worklist: resolve every companion specifier reachable from the
10
+ * lowered entries (transitively through generated companions), generate each
11
+ * module once, and key it under the exact virtual path TypeScript's NodeNext
12
+ * `.js`→`.ts` mapping will look up.
13
+ */
14
+ export declare function collectCompanionEntries(seeds: Array<{
15
+ file: string;
16
+ companions: string[];
17
+ }>, sourceRoot: string): Promise<CompanionEntries>;
18
+ //# sourceMappingURL=companions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"companions.d.ts","sourceRoot":"","sources":["../src/companions.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,gBAAgB;IAC/B,iFAAiF;IACjF,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,iFAAiF;IACjF,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAMD;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,EACpD,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,gBAAgB,CAAC,CA6B3B"}
@@ -0,0 +1,44 @@
1
+ import { existsSync } from "node:fs";
2
+ import { readFile } from "node:fs/promises";
3
+ import { dirname, resolve } from "node:path";
4
+ import { Codes } from "@nola-lang/ast";
5
+ import { companionSourceCandidates, compileCompanion } from "@nola-lang/compiler";
6
+ function norm(p) {
7
+ return p.replace(/\\/g, "/");
8
+ }
9
+ /**
10
+ * Host-side worklist: resolve every companion specifier reachable from the
11
+ * lowered entries (transitively through generated companions), generate each
12
+ * module once, and key it under the exact virtual path TypeScript's NodeNext
13
+ * `.js`→`.ts` mapping will look up.
14
+ */
15
+ export async function collectCompanionEntries(seeds, sourceRoot) {
16
+ const out = { virtual: new Map(), sources: new Map(), errors: [] };
17
+ const queue = seeds.flatMap((s) => s.companions.map((c) => ({ importer: s.file, specifier: c })));
18
+ const seen = new Set();
19
+ while (queue.length > 0) {
20
+ const { importer, specifier } = queue.shift();
21
+ const resolved = resolve(dirname(importer), specifier); // …/models.nola.js
22
+ const virtualName = `${norm(resolved).slice(0, -".js".length)}.ts`;
23
+ if (seen.has(virtualName))
24
+ continue;
25
+ seen.add(virtualName);
26
+ const src = companionSourceCandidates(specifier)
27
+ .map((c) => resolve(dirname(importer), c))
28
+ .find((p) => existsSync(p));
29
+ if (!src) {
30
+ out.errors.push(`${importer} ${Codes.CompanionUnavailable}: cannot locate the type source for "${specifier}"`);
31
+ continue;
32
+ }
33
+ const compiled = compileCompanion(await readFile(src, "utf8"), src, { sourceRoot });
34
+ if (compiled.code === "" || compiled.diagnostics.length > 0) {
35
+ out.errors.push(`${src} ${Codes.CompanionUnavailable}: cannot derive a type module (${compiled.diagnostics[0]?.message ?? "parse failed"})`);
36
+ continue;
37
+ }
38
+ out.virtual.set(virtualName, compiled.code);
39
+ out.sources.set(virtualName, src);
40
+ queue.push(...compiled.companions.map((c) => ({ importer: src, specifier: c })));
41
+ }
42
+ return out;
43
+ }
44
+ //# sourceMappingURL=companions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"companions.js","sourceRoot":"","sources":["../src/companions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export type { AskContext, AskReceipt, AskResult, NolaConfig, NolaHook, NolaLogLevel, NolaMiddleware, NolaProvider, ProviderRef, } from "@nola-lang/core";
2
+ export { constant, defineConfig, exponential, fallback, type RetryPolicy, roundRobin, withRetry, } from "@nola-lang/runtime";
3
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,UAAU,EACV,UAAU,EACV,SAAS,EACT,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,WAAW,GACZ,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,QAAQ,EACR,KAAK,WAAW,EAChB,UAAU,EACV,SAAS,GACV,MAAM,oBAAoB,CAAC"}
package/dist/config.js ADDED
@@ -0,0 +1,2 @@
1
+ export { constant, defineConfig, exponential, fallback, roundRobin, withRetry, } from "@nola-lang/runtime";
2
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAWA,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,QAAQ,EAER,UAAU,EACV,SAAS,GACV,MAAM,oBAAoB,CAAC"}
package/dist/diag.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ import type { Diagnostic } from "@nola-lang/ast";
2
+ export declare function printDiagnostics(diagnostics: Diagnostic[], readSource: (file: string) => string | null): string;
3
+ //# sourceMappingURL=diag.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diag.d.ts","sourceRoot":"","sources":["../src/diag.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAGjD,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,UAAU,EAAE,EAAE,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,GAAG,MAAM,CAQ/G"}
package/dist/diag.js ADDED
@@ -0,0 +1,11 @@
1
+ import { codeFrame } from "./frame.js";
2
+ export function printDiagnostics(diagnostics, readSource) {
3
+ return diagnostics
4
+ .map((d) => {
5
+ const head = `${d.file}:${d.loc.start.line}:${d.loc.start.column + 1} ${d.code}: ${d.message}`;
6
+ const source = readSource(d.file);
7
+ return source ? `${head}\n${codeFrame(source, d.loc.start.line, d.loc.start.column)}` : head;
8
+ })
9
+ .join("\n\n");
10
+ }
11
+ //# sourceMappingURL=diag.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diag.js","sourceRoot":"","sources":["../src/diag.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,MAAM,UAAU,gBAAgB,CAAC,WAAyB,EAAE,UAA2C;IACrG,OAAO,WAAW;SACf,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACT,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;QAC/F,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAClC,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/F,CAAC,CAAC;SACD,IAAI,CAAC,MAAM,CAAC,CAAC;AAClB,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** Minimal code frame: the offending line plus a caret. line 1-based, column 0-based. */
2
+ export declare function codeFrame(source: string, line: number, column: number): string;
3
+ //# sourceMappingURL=frame.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frame.d.ts","sourceRoot":"","sources":["../src/frame.ts"],"names":[],"mappings":"AAAA,yFAAyF;AACzF,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAK9E"}
package/dist/frame.js ADDED
@@ -0,0 +1,8 @@
1
+ /** Minimal code frame: the offending line plus a caret. line 1-based, column 0-based. */
2
+ export function codeFrame(source, line, column) {
3
+ const lines = source.split(/\r?\n/);
4
+ const text = lines[line - 1] ?? "";
5
+ const gutter = `${line} | `;
6
+ return `${gutter}${text}\n${" ".repeat(gutter.length + column)}^`;
7
+ }
8
+ //# sourceMappingURL=frame.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frame.js","sourceRoot":"","sources":["../src/frame.ts"],"names":[],"mappings":"AAAA,yFAAyF;AACzF,MAAM,UAAU,SAAS,CAAC,MAAc,EAAE,IAAY,EAAE,MAAc;IACpE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACnC,MAAM,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC;IAC5B,OAAO,GAAG,MAAM,GAAG,IAAI,KAAK,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC;AACpE,CAAC"}
@@ -0,0 +1,8 @@
1
+ export { type BuildResult, cmdBuild } from "./build.js";
2
+ export { cmdCheck } from "./check.js";
3
+ export { printDiagnostics } from "./diag.js";
4
+ export { codeFrame } from "./frame.js";
5
+ export { cmdRun } from "./run.js";
6
+ export { createLoweredProgram, type LoweredEntry, type LoweredProgram } from "./tshost.js";
7
+ export { findNolaFiles } from "./walk.js";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,oBAAoB,EAAE,KAAK,YAAY,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAC3F,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,8 @@
1
+ export { cmdBuild } from "./build.js";
2
+ export { cmdCheck } from "./check.js";
3
+ export { printDiagnostics } from "./diag.js";
4
+ export { codeFrame } from "./frame.js";
5
+ export { cmdRun } from "./run.js";
6
+ export { createLoweredProgram } from "./tshost.js";
7
+ export { findNolaFiles } from "./walk.js";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,QAAQ,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,oBAAoB,EAA0C,MAAM,aAAa,CAAC;AAC3F,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC"}
package/dist/init.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ /** `nola init [dir]` — the same scaffold `npm create nola-lang` runs. */
2
+ export declare function cmdInit(dir: string): Promise<number>;
3
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAEA,yEAAyE;AACzE,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAS1D"}
package/dist/init.js ADDED
@@ -0,0 +1,14 @@
1
+ import { scaffold } from "create-nola-lang";
2
+ /** `nola init [dir]` — the same scaffold `npm create nola-lang` runs. */
3
+ export async function cmdInit(dir) {
4
+ const { root, files } = await scaffold(dir);
5
+ console.log(`Scaffolded a Nola project into ${root} (${files.length} files).`);
6
+ console.log("");
7
+ console.log("Next steps:");
8
+ if (dir !== ".")
9
+ console.log(` cd ${dir}`);
10
+ console.log(" npm install");
11
+ console.log(" npm start # runs offline via the replay ledger — no API key needed");
12
+ return 0;
13
+ }
14
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,yEAAyE;AACzE,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,GAAW;IACvC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,kCAAkC,IAAI,KAAK,KAAK,CAAC,MAAM,UAAU,CAAC,CAAC;IAC/E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC3B,IAAI,GAAG,KAAK,GAAG;QAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC7B,OAAO,CAAC,GAAG,CAAC,6EAA6E,CAAC,CAAC;IAC3F,OAAO,CAAC,CAAC;AACX,CAAC"}
package/dist/main.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=main.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":""}
package/dist/main.js ADDED
@@ -0,0 +1,53 @@
1
+ #!/usr/bin/env node
2
+ import { parseArgs } from "node:util";
3
+ import { cmdBuild } from "./build.js";
4
+ import { cmdCheck } from "./check.js";
5
+ import { cmdInit } from "./init.js";
6
+ import { cmdRun } from "./run.js";
7
+ const HELP = `nola <command>
8
+
9
+ Commands:
10
+ init [dir] scaffold a new Nola project (same starter as npm create nola-lang)
11
+ build [dir] [--out <dir>] compile all .tsi files (js+map+d.ts to --out)
12
+ run <entry> run a .tsi/.js entry with the Nola loader + nola.config.ts
13
+ check [dir] type-check lowered .tsi files AND the project's .ts files, positions mapped back
14
+ `;
15
+ async function main() {
16
+ const { positionals, values } = parseArgs({
17
+ allowPositionals: true,
18
+ options: { out: { type: "string", default: "dist" } },
19
+ });
20
+ const [command, arg] = positionals;
21
+ switch (command) {
22
+ case "build": {
23
+ const { written, errors } = await cmdBuild(arg ?? ".", values.out);
24
+ if (errors.length > 0) {
25
+ console.error(errors.join("\n\n"));
26
+ return 1;
27
+ }
28
+ console.log(`nola build: ${written.length} files written`);
29
+ return 0;
30
+ }
31
+ case "check": {
32
+ const { errors } = await cmdCheck(arg ?? ".");
33
+ if (errors.length > 0) {
34
+ console.error(errors.join("\n"));
35
+ return 1;
36
+ }
37
+ console.log("nola check: no errors");
38
+ return 0;
39
+ }
40
+ case "run":
41
+ return cmdRun(arg ?? "");
42
+ case "init":
43
+ return cmdInit(arg ?? ".");
44
+ default:
45
+ console.log(HELP);
46
+ return command ? 1 : 0;
47
+ }
48
+ }
49
+ main().then((code) => process.exit(code), (err) => {
50
+ console.error(err instanceof Error ? err.message : String(err));
51
+ process.exit(1);
52
+ });
53
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,MAAM,IAAI,GAAG;;;;;;;CAOZ,CAAC;AAEF,KAAK,UAAU,IAAI;IACjB,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;QACxC,gBAAgB,EAAE,IAAI;QACtB,OAAO,EAAE,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;KACtD,CAAC,CAAC;IACH,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,WAAW,CAAC;IACnC,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,QAAQ,CAAC,GAAG,IAAI,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;YACnE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtB,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;gBACnC,OAAO,CAAC,CAAC;YACX,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,eAAe,OAAO,CAAC,MAAM,gBAAgB,CAAC,CAAC;YAC3D,OAAO,CAAC,CAAC;QACX,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,QAAQ,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;YAC9C,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtB,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBACjC,OAAO,CAAC,CAAC;YACX,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;YACrC,OAAO,CAAC,CAAC;QACX,CAAC;QACD,KAAK,KAAK;YACR,OAAO,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;QAC3B,KAAK,MAAM;YACT,OAAO,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;QAC7B;YACE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,IAAI,CACT,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAC5B,CAAC,GAAG,EAAE,EAAE;IACN,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ export type { NolaProvider, ProviderRef, ProviderRequest } from "@nola-lang/core";
2
+ export { mockProvider, type OpenAiOptions, openai, providers, } from "@nola-lang/runtime";
3
+ //# sourceMappingURL=providers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClF,OAAO,EACL,YAAY,EACZ,KAAK,aAAa,EAClB,MAAM,EACN,SAAS,GACV,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { mockProvider, openai, providers, } from "@nola-lang/runtime";
2
+ //# sourceMappingURL=providers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.js","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EAEZ,MAAM,EACN,SAAS,GACV,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=register.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../src/register.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import { registerNola } from "@nola-lang/node-loader";
2
+ await registerNola();
3
+ //# sourceMappingURL=register.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.js","sourceRoot":"","sources":["../src/register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,MAAM,YAAY,EAAE,CAAC"}
package/dist/run.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export declare function cmdRun(entryArg: string): Promise<number>;
2
+ //# sourceMappingURL=run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"AAIA,wBAAsB,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAS9D"}
package/dist/run.js ADDED
@@ -0,0 +1,14 @@
1
+ import { dirname, resolve } from "node:path";
2
+ import { pathToFileURL } from "node:url";
3
+ import { registerNola } from "@nola-lang/node-loader";
4
+ export async function cmdRun(entryArg) {
5
+ if (!entryArg) {
6
+ console.error("nola run <entry>");
7
+ return 1;
8
+ }
9
+ const entry = resolve(entryArg);
10
+ await registerNola({ dir: dirname(entry) });
11
+ await import(pathToFileURL(entry).href);
12
+ return 0;
13
+ }
14
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,QAAgB;IAC3C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAClC,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAChC,MAAM,YAAY,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC5C,MAAM,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;IACxC,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,3 @@
1
+ export type { InferType, UnsupportedType } from "@nola-lang/runtime";
2
+ export { __nola } from "@nola-lang/runtime";
3
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AASA,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,7 @@
1
+ // The lowering emits `import { __nola } from "nola-lang/runtime"` into user code.
2
+ // This subpath re-exports the runtime brand from the package the user actually
3
+ // installs (nola-lang), so the injected import resolves without relying on
4
+ // hoisting of the private @nola-lang/runtime scope. Mirrors React's
5
+ // `react/jsx-runtime`.
6
+ export { __nola } from "@nola-lang/runtime";
7
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,+EAA+E;AAC/E,2EAA2E;AAC3E,oEAAoE;AACpE,uBAAuB;AAMvB,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import ts from "typescript";
2
+ export interface LoweredEntry {
3
+ file: string;
4
+ loweredCode: string;
5
+ }
6
+ export interface LoweredProgram {
7
+ program: ts.Program;
8
+ virtualName(file: string): string;
9
+ options: ts.CompilerOptions;
10
+ }
11
+ export declare function createLoweredProgram(entries: LoweredEntry[], projectDir: string, mode: "check" | "declarations", extraVirtual?: Map<string, string>): LoweredProgram;
12
+ //# sourceMappingURL=tshost.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tshost.d.ts","sourceRoot":"","sources":["../src/tshost.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,YAAY,CAAC;AAM5B,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC;IACpB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAClC,OAAO,EAAE,EAAE,CAAC,eAAe,CAAC;CAC7B;AAMD,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,YAAY,EAAE,EACvB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,OAAO,GAAG,cAAc,EAC9B,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACjC,cAAc,CA0FhB"}
package/dist/tshost.js ADDED
@@ -0,0 +1,90 @@
1
+ import { loweredVirtualNameFor, RUNTIME_AMBIENT_STUB } from "@nola-lang/compiler";
2
+ import ts from "typescript";
3
+ const RUNTIME_STUB = RUNTIME_AMBIENT_STUB;
4
+ const STUB_RUNTIME_PATH = "/__nola_stubs__/runtime.d.ts";
5
+ function norm(p) {
6
+ return p.replace(/\\/g, "/");
7
+ }
8
+ export function createLoweredProgram(entries, projectDir, mode, extraVirtual) {
9
+ const virtual = new Map();
10
+ const virtualName = (file) => loweredVirtualNameFor(file);
11
+ for (const e of entries)
12
+ virtual.set(virtualName(e.file), e.loweredCode);
13
+ // Companion modules and other synthesized support files; reachable from the
14
+ // roots via imports, so they are not added to rootNames.
15
+ if (extraVirtual)
16
+ for (const [k, v] of extraVirtual)
17
+ virtual.set(norm(k), v);
18
+ let options = {
19
+ strict: true,
20
+ target: ts.ScriptTarget.ES2022,
21
+ module: ts.ModuleKind.NodeNext,
22
+ moduleResolution: ts.ModuleResolutionKind.NodeNext,
23
+ skipLibCheck: true,
24
+ };
25
+ // In check mode the project's plain .ts files join the program roots (the
26
+ // vue-tsc role): their `./x.tsi` imports resolve to the LIVE lowered
27
+ // virtuals below, so no declaration files are needed anywhere. Stale
28
+ // .d.tsi.ts artifacts of the old adjacent emit are excluded outright.
29
+ let projectTsFiles = [];
30
+ const configPath = ts.findConfigFile(projectDir, ts.sys.fileExists, "tsconfig.json");
31
+ if (configPath) {
32
+ const parsed = ts.parseJsonConfigFileContent(ts.readConfigFile(configPath, ts.sys.readFile).config, ts.sys, projectDir);
33
+ options = { ...parsed.options, ...options, strict: parsed.options.strict ?? true };
34
+ if (mode === "check") {
35
+ projectTsFiles = parsed.fileNames.map(norm).filter((f) => !f.endsWith(".d.tsi.ts"));
36
+ }
37
+ }
38
+ options =
39
+ mode === "check"
40
+ ? { ...options, noEmit: true }
41
+ : { ...options, noEmit: false, declaration: true, emitDeclarationOnly: true };
42
+ // Bare projects (tests) can't resolve the runtime the lowering imports
43
+ // (`@nola-lang/runtime`) — fall back to stubs.
44
+ const probe = ts.resolveModuleName("@nola-lang/runtime", `${norm(projectDir)}/probe.ts`, options, ts.sys);
45
+ if (!probe.resolvedModule) {
46
+ virtual.set(STUB_RUNTIME_PATH, RUNTIME_STUB);
47
+ options = {
48
+ ...options,
49
+ baseUrl: "/",
50
+ paths: {
51
+ "@nola-lang/runtime": [STUB_RUNTIME_PATH],
52
+ },
53
+ };
54
+ }
55
+ const host = ts.createCompilerHost(options);
56
+ const defaultReadFile = host.readFile.bind(host);
57
+ const defaultFileExists = host.fileExists.bind(host);
58
+ const defaultGetSourceFile = host.getSourceFile.bind(host);
59
+ host.readFile = (f) => virtual.get(norm(f)) ?? defaultReadFile(f);
60
+ host.fileExists = (f) => virtual.has(norm(f)) || defaultFileExists(f);
61
+ host.getSourceFile = (f, lang, onError, shouldCreate) => virtual.has(norm(f))
62
+ ? ts.createSourceFile(f, virtual.get(norm(f)), lang)
63
+ : defaultGetSourceFile(f, lang, onError, shouldCreate);
64
+ const defaultResolve = (specifier, containing) => ts.resolveModuleName(specifier, containing, options, {
65
+ fileExists: host.fileExists,
66
+ readFile: (f) => host.readFile(f) ?? undefined,
67
+ }).resolvedModule;
68
+ host.resolveModuleNameLiterals = (literals, containingFile) => literals.map((lit) => {
69
+ const spec = lit.text;
70
+ if (spec.endsWith(".tsi")) {
71
+ const base = norm(containingFile).replace(/\/[^/]*$/, "");
72
+ const target = norm(new URL(spec, `file:///${base}/`).pathname.replace(/^\/([A-Za-z]:)/, "$1"));
73
+ const virt = `${target}.ts`;
74
+ if (virtual.has(virt)) {
75
+ return {
76
+ resolvedModule: { resolvedFileName: virt, extension: ts.Extension.Ts, isExternalLibraryImport: false },
77
+ };
78
+ }
79
+ }
80
+ return { resolvedModule: defaultResolve(spec, containingFile) ?? undefined };
81
+ });
82
+ const rootNames = [
83
+ ...entries.map((e) => virtualName(e.file)),
84
+ ...projectTsFiles,
85
+ ...(virtual.has(STUB_RUNTIME_PATH) ? [STUB_RUNTIME_PATH] : []),
86
+ ];
87
+ const program = ts.createProgram(rootNames, options, host);
88
+ return { program, virtualName, options };
89
+ }
90
+ //# sourceMappingURL=tshost.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tshost.js","sourceRoot":"","sources":["../src/tshost.ts"],"names":[],"mappings":"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"}
package/dist/walk.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ export declare function walkProject(dir: string): Promise<{
2
+ tsi: string[];
3
+ reserved: string[];
4
+ }>;
5
+ export declare function findNolaFiles(dir: string): Promise<string[]>;
6
+ //# sourceMappingURL=walk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walk.d.ts","sourceRoot":"","sources":["../src/walk.ts"],"names":[],"mappings":"AAMA,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAkB7F;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAElE"}
package/dist/walk.js ADDED
@@ -0,0 +1,29 @@
1
+ import { readdir } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ import { isReservedNolaName } from "@nola-lang/compiler";
4
+ const SKIP = new Set(["node_modules", ".git", "dist"]);
5
+ export async function walkProject(dir) {
6
+ const tsi = [];
7
+ const reserved = [];
8
+ const entries = await readdir(dir, { withFileTypes: true });
9
+ for (const entry of entries) {
10
+ if (entry.isDirectory()) {
11
+ if (!SKIP.has(entry.name)) {
12
+ const nested = await walkProject(join(dir, entry.name));
13
+ tsi.push(...nested.tsi);
14
+ reserved.push(...nested.reserved);
15
+ }
16
+ }
17
+ else if (isReservedNolaName(entry.name)) {
18
+ reserved.push(join(dir, entry.name));
19
+ }
20
+ else if (entry.name.endsWith(".tsi")) {
21
+ tsi.push(join(dir, entry.name));
22
+ }
23
+ }
24
+ return { tsi: tsi.sort(), reserved: reserved.sort() };
25
+ }
26
+ export async function findNolaFiles(dir) {
27
+ return (await walkProject(dir)).tsi;
28
+ }
29
+ //# sourceMappingURL=walk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walk.js","sourceRoot":"","sources":["../src/walk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAEvD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,GAAW;IAC3C,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1B,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;gBACxD,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;gBACxB,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;aAAM,IAAI,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACvC,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACvC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;AACxD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAW;IAC7C,OAAO,CAAC,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;AACtC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,57 @@
1
+ {
2
+ "name": "nola-lang",
3
+ "version": "0.1.0-alpha.0",
4
+ "description": "The Nola language toolchain: nola init/build/run/check and the Node loader for .tsi files",
5
+ "keywords": [
6
+ "nola",
7
+ "llm",
8
+ "ai",
9
+ "typescript",
10
+ "language",
11
+ "prompt",
12
+ "cli"
13
+ ],
14
+ "license": "MIT",
15
+ "author": "Evgen Mykhailenko",
16
+ "homepage": "https://github.com/nola-lang/nola#readme",
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "git+https://github.com/nola-lang/nola.git",
20
+ "directory": "packages/nola-lang"
21
+ },
22
+ "bugs": {
23
+ "url": "https://github.com/nola-lang/nola/issues"
24
+ },
25
+ "publishConfig": {
26
+ "access": "public"
27
+ },
28
+ "type": "module",
29
+ "bin": {
30
+ "nola": "./dist/main.js"
31
+ },
32
+ "exports": {
33
+ ".": {
34
+ "types": "./dist/index.d.ts",
35
+ "default": "./dist/index.js"
36
+ },
37
+ "./register": "./dist/register.js"
38
+ },
39
+ "files": [
40
+ "dist"
41
+ ],
42
+ "dependencies": {
43
+ "create-nola-lang": "0.1.0-alpha.0",
44
+ "@nola-lang/ast": "0.1.0-alpha.0",
45
+ "@nola-lang/compiler": "0.1.0-alpha.0",
46
+ "@nola-lang/node-loader": "0.1.0-alpha.0",
47
+ "@nola-lang/parser": "0.1.0-alpha.0",
48
+ "@nola-lang/runtime": "0.1.0-alpha.0",
49
+ "@ampproject/remapping": "^2.3.0",
50
+ "@jridgewell/trace-mapping": "^0.3.25",
51
+ "esbuild": "^0.25.0",
52
+ "typescript": "^5.6.0"
53
+ },
54
+ "engines": {
55
+ "node": ">=22"
56
+ }
57
+ }