@jalvin/cli 1.0.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/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,415 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ // ─────────────────────────────────────────────────────────────────────────────
4
+ // jalvin CLI — entry point
5
+ //
6
+ // Commands:
7
+ // jalvin build [files] — compile .jalvin → .ts/.tsx
8
+ // jalvin check [files] — type-check without emitting
9
+ // jalvin run <file> — compile + run as Node.js (via ts-node/tsx)
10
+ // jalvin init [dir] — scaffold a new Jalvin project
11
+ // jalvin version — print version
12
+ // ─────────────────────────────────────────────────────────────────────────────
13
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ var desc = Object.getOwnPropertyDescriptor(m, k);
16
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
+ desc = { enumerable: true, get: function() { return m[k]; } };
18
+ }
19
+ Object.defineProperty(o, k2, desc);
20
+ }) : (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ o[k2] = m[k];
23
+ }));
24
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
25
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
26
+ }) : function(o, v) {
27
+ o["default"] = v;
28
+ });
29
+ var __importStar = (this && this.__importStar) || (function () {
30
+ var ownKeys = function(o) {
31
+ ownKeys = Object.getOwnPropertyNames || function (o) {
32
+ var ar = [];
33
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
34
+ return ar;
35
+ };
36
+ return ownKeys(o);
37
+ };
38
+ return function (mod) {
39
+ if (mod && mod.__esModule) return mod;
40
+ var result = {};
41
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
42
+ __setModuleDefault(result, mod);
43
+ return result;
44
+ };
45
+ })();
46
+ Object.defineProperty(exports, "__esModule", { value: true });
47
+ const fs = __importStar(require("node:fs"));
48
+ const path = __importStar(require("node:path"));
49
+ const compiler_1 = require("@jalvin/compiler");
50
+ const config_js_1 = require("./config.js");
51
+ const JALVIN_EXT = ".jalvin";
52
+ const VERSION = "1.0.0";
53
+ function usage() {
54
+ console.log(`
55
+ jalvin — the Jalvin language compiler & toolchain
56
+ version ${VERSION}
57
+
58
+ Usage:
59
+ jalvin build [--out <dir>] [<files|dirs>] Compile .jalvin → TypeScript
60
+ jalvin check [<files|dirs>] Type-check without emitting
61
+ jalvin run <file> [-- args...] Compile + execute (requires tsx)
62
+ jalvin init [<dir>] Create new project scaffold
63
+ jalvin version Print version
64
+
65
+ Flags:
66
+ --out, -o <dir> Output directory (default: as per JALVIN config or ./dist)
67
+ --emit-types Include TS type annotations in output
68
+ --verbose, -v Show all diagnostics
69
+ --no-color Disable ANSI color output
70
+
71
+ Config:
72
+ Place a 'JALVIN' file (no extension) at your project root to configure the
73
+ compiler. Example:
74
+
75
+ outDir = dist
76
+ rootDir = src
77
+ jsx = true
78
+ emitTypes = false
79
+ `);
80
+ }
81
+ function parseArgs(argv) {
82
+ const args = {
83
+ command: "help",
84
+ files: [],
85
+ outDir: null,
86
+ emitTypes: false,
87
+ verbose: false,
88
+ color: true,
89
+ passthrough: [],
90
+ };
91
+ const raw = argv.slice(2); // strip node + script path
92
+ let i = 0;
93
+ let pastDoubleDash = false;
94
+ const commands = new Set(["build", "check", "run", "init", "version", "help"]);
95
+ for (; i < raw.length; i++) {
96
+ const arg = raw[i];
97
+ if (arg === "--") {
98
+ pastDoubleDash = true;
99
+ i++;
100
+ break;
101
+ }
102
+ if (pastDoubleDash) {
103
+ args.passthrough.push(arg);
104
+ continue;
105
+ }
106
+ if (commands.has(arg) && args.command === "help") {
107
+ args.command = arg;
108
+ }
109
+ else if (arg === "--out" || arg === "-o") {
110
+ args.outDir = raw[++i] ?? null;
111
+ }
112
+ else if (arg === "--emit-types") {
113
+ args.emitTypes = true;
114
+ }
115
+ else if (arg === "--verbose" || arg === "-v") {
116
+ args.verbose = true;
117
+ }
118
+ else if (arg === "--no-color") {
119
+ args.color = false;
120
+ }
121
+ else if (!arg.startsWith("--")) {
122
+ args.files.push(arg);
123
+ }
124
+ }
125
+ for (; i < raw.length; i++) {
126
+ args.passthrough.push(raw[i]);
127
+ }
128
+ return args;
129
+ }
130
+ // ---------------------------------------------------------------------------
131
+ // File collection
132
+ // ---------------------------------------------------------------------------
133
+ function collectJalvinFiles(inputs) {
134
+ const results = [];
135
+ for (const input of inputs) {
136
+ const stat = fs.statSync(input, { throwIfNoEntry: false });
137
+ if (!stat) {
138
+ console.error(`error: '${input}' not found`);
139
+ process.exit(1);
140
+ }
141
+ if (stat.isDirectory()) {
142
+ const walk = (dir) => {
143
+ for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
144
+ const full = path.join(dir, entry.name);
145
+ if (entry.isDirectory())
146
+ walk(full);
147
+ else if (entry.name.endsWith(JALVIN_EXT))
148
+ results.push(full);
149
+ }
150
+ };
151
+ walk(input);
152
+ }
153
+ else if (input.endsWith(JALVIN_EXT)) {
154
+ results.push(input);
155
+ }
156
+ }
157
+ return results;
158
+ }
159
+ // ---------------------------------------------------------------------------
160
+ // ANSI helpers
161
+ // ---------------------------------------------------------------------------
162
+ const C = {
163
+ reset: "\x1b[0m",
164
+ bold: "\x1b[1m",
165
+ red: "\x1b[31m",
166
+ yellow: "\x1b[33m",
167
+ cyan: "\x1b[36m",
168
+ green: "\x1b[32m",
169
+ gray: "\x1b[90m",
170
+ };
171
+ function colorize(color, code, text) {
172
+ return color ? `${code}${text}${C.reset}` : text;
173
+ }
174
+ // ---------------------------------------------------------------------------
175
+ // Build command
176
+ // ---------------------------------------------------------------------------
177
+ async function runBuild(args) {
178
+ const config = await (0, config_js_1.loadConfig)(process.cwd());
179
+ const outDir = args.outDir ?? config.outDir ?? "dist";
180
+ const inputGlobs = args.files.length > 0 ? args.files : [config.rootDir ?? "src"];
181
+ const files = collectJalvinFiles(inputGlobs);
182
+ if (files.length === 0) {
183
+ console.warn("No .jalvin files found.");
184
+ return;
185
+ }
186
+ let errors = 0;
187
+ let warnings = 0;
188
+ for (const file of files) {
189
+ const source = fs.readFileSync(file, "utf8");
190
+ const result = (0, compiler_1.compile)(source, file, {
191
+ emitTypes: args.emitTypes || config.emitTypes,
192
+ });
193
+ for (const diag of result.diagnostics) {
194
+ const sev = diag.severity;
195
+ if (sev === "error")
196
+ errors++;
197
+ if (sev === "warning")
198
+ warnings++;
199
+ if (sev === "error" || args.verbose) {
200
+ const color = sev === "error" ? C.red : C.yellow;
201
+ const loc = diag.span
202
+ ? `${colorize(args.color, C.gray, `${file}:${diag.span.startLine + 1}:${diag.span.startCol + 1}`)}: `
203
+ : `${colorize(args.color, C.gray, file)}: `;
204
+ console.log(`${loc}${colorize(args.color, color, sev)}: ${diag.message} ${colorize(args.color, C.gray, `[${diag.code}]`)}`);
205
+ }
206
+ }
207
+ if (!result.ok)
208
+ continue;
209
+ const ext = result.isJsx ? ".tsx" : ".ts";
210
+ const relative = path.relative(config.rootDir ?? "src", file).replace(JALVIN_EXT, ext);
211
+ const outFile = path.join(outDir, relative);
212
+ fs.mkdirSync(path.dirname(outFile), { recursive: true });
213
+ fs.writeFileSync(outFile, result.code, "utf8");
214
+ if (args.verbose) {
215
+ console.log(`${colorize(args.color, C.green, "compiled")} ${file} → ${outFile}`);
216
+ }
217
+ }
218
+ const icon = errors > 0 ? colorize(args.color, C.red, "✗") : colorize(args.color, C.green, "✓");
219
+ const eSummary = errors > 0 ? colorize(args.color, C.red, `${errors} error${errors !== 1 ? "s" : ""}`) : colorize(args.color, C.green, "0 errors");
220
+ const wSummary = warnings > 0 ? colorize(args.color, C.yellow, `${warnings} warning${warnings !== 1 ? "s" : ""}`) : "0 warnings";
221
+ console.log(`\n${icon} Build complete — ${eSummary}, ${wSummary} (${files.length} file${files.length !== 1 ? "s" : ""})`);
222
+ if (errors > 0)
223
+ process.exit(1);
224
+ }
225
+ // ---------------------------------------------------------------------------
226
+ // Check command
227
+ // ---------------------------------------------------------------------------
228
+ async function runCheck(args) {
229
+ const config = await (0, config_js_1.loadConfig)(process.cwd());
230
+ const inputGlobs = args.files.length > 0 ? args.files : [config.rootDir ?? "src"];
231
+ const files = collectJalvinFiles(inputGlobs);
232
+ if (files.length === 0) {
233
+ console.warn("No .jalvin files found.");
234
+ return;
235
+ }
236
+ let errors = 0;
237
+ let warnings = 0;
238
+ for (const file of files) {
239
+ const source = fs.readFileSync(file, "utf8");
240
+ const result = (0, compiler_1.compile)(source, file);
241
+ for (const diag of result.diagnostics) {
242
+ if (diag.severity === "error")
243
+ errors++;
244
+ if (diag.severity === "warning")
245
+ warnings++;
246
+ const color = diag.severity === "error" ? C.red : C.yellow;
247
+ const loc = diag.span
248
+ ? `${file}:${diag.span.startLine + 1}:${diag.span.startCol + 1}: `
249
+ : `${file}: `;
250
+ console.log(`${colorize(args.color, C.gray, loc)}${colorize(args.color, color, diag.severity)}: ${diag.message} [${diag.code}]`);
251
+ }
252
+ }
253
+ const icon = errors > 0 ? "✗" : "✓";
254
+ console.log(`\n${icon} ${files.length} file${files.length !== 1 ? "s" : ""} checked — ${errors} error${errors !== 1 ? "s" : ""}, ${warnings} warning${warnings !== 1 ? "s" : ""}`);
255
+ if (errors > 0)
256
+ process.exit(1);
257
+ }
258
+ // ---------------------------------------------------------------------------
259
+ // Run command
260
+ // ---------------------------------------------------------------------------
261
+ async function runFile(args) {
262
+ const file = args.files[0];
263
+ if (!file) {
264
+ console.error("error: specify a .jalvin file to run\n jalvin run <file>");
265
+ process.exit(1);
266
+ }
267
+ const source = fs.readFileSync(file, "utf8");
268
+ const result = (0, compiler_1.compile)(source, file);
269
+ if (!result.ok) {
270
+ for (const diag of result.diagnostics) {
271
+ if (diag.severity === "error") {
272
+ console.error(`error: ${diag.message} [${diag.code}] at ${file}:${diag.span ? diag.span.startLine + 1 : "?"}`);
273
+ }
274
+ }
275
+ process.exit(1);
276
+ }
277
+ const tmpDir = fs.mkdtempSync(path.join(process.env["TMPDIR"] ?? "/tmp", "jalvin-"));
278
+ const tmpFile = path.join(tmpDir, path.basename(file).replace(JALVIN_EXT, result.isJsx ? ".tsx" : ".ts"));
279
+ fs.writeFileSync(tmpFile, result.code, "utf8");
280
+ // Use tsx (fast TS runner) if available, fall back to ts-node
281
+ const runner = await findRunner();
282
+ if (!runner) {
283
+ console.error("error: Cannot run Jalvin files — install 'tsx' or 'ts-node':\n npm install -g tsx");
284
+ process.exit(1);
285
+ }
286
+ const { spawnSync } = await import("node:child_process");
287
+ const res = spawnSync(runner, [tmpFile, ...args.passthrough], { stdio: "inherit" });
288
+ fs.rmSync(tmpDir, { recursive: true, force: true });
289
+ process.exit(res.status ?? 0);
290
+ }
291
+ async function findRunner() {
292
+ const { execFileSync } = await import("node:child_process");
293
+ for (const bin of ["tsx", "ts-node"]) {
294
+ try {
295
+ execFileSync("which", [bin], { stdio: "ignore" });
296
+ return bin;
297
+ }
298
+ catch { /* not found */ }
299
+ }
300
+ return null;
301
+ }
302
+ // ---------------------------------------------------------------------------
303
+ // Init command
304
+ // ---------------------------------------------------------------------------
305
+ async function runInit(args) {
306
+ const dir = args.files[0] ?? ".";
307
+ const projectName = path.basename(path.resolve(dir));
308
+ fs.mkdirSync(path.join(dir, "src"), { recursive: true });
309
+ // JALVIN config
310
+ const jalvinConfig = `# Jalvin project configuration
311
+ name = ${projectName}
312
+ version = 1.0.0
313
+
314
+ rootDir = src
315
+ outDir = dist
316
+
317
+ # Uncomment to enable JSX / React
318
+ # jsx = true
319
+
320
+ # Enable TypeScript type annotations in emitted code
321
+ emitTypes = false
322
+ `;
323
+ writeUnlessExists(path.join(dir, "JALVIN"), jalvinConfig);
324
+ // package.json
325
+ const pkgJson = `{
326
+ "name": "${projectName}",
327
+ "version": "1.0.0",
328
+ "type": "module",
329
+ "scripts": {
330
+ "build": "jalvin build",
331
+ "check": "jalvin check",
332
+ "dev": "jalvin build --watch"
333
+ },
334
+ "dependencies": {
335
+ "@jalvin/runtime": "^1.0.0"
336
+ },
337
+ "devDependencies": {
338
+ "@jalvin/cli": "^1.0.0"
339
+ }
340
+ }
341
+ `;
342
+ writeUnlessExists(path.join(dir, "package.json"), pkgJson);
343
+ // Entry file
344
+ const mainJalvin = `// ${projectName} — main entry point
345
+ import @jalvin/runtime.*
346
+
347
+ fun main() {
348
+ println("Hello from ${projectName}!")
349
+
350
+ val greeting = buildGreeting("World")
351
+ println(greeting)
352
+ }
353
+
354
+ fun buildGreeting(name: String): String {
355
+ return "Hello, $name! Welcome to Jalvin."
356
+ }
357
+ `;
358
+ writeUnlessExists(path.join(dir, "src", "main.jalvin"), mainJalvin);
359
+ // .gitignore
360
+ const gitignore = `node_modules/
361
+ dist/
362
+ .jalvin-cache/
363
+ *.js.map
364
+ `;
365
+ writeUnlessExists(path.join(dir, ".gitignore"), gitignore);
366
+ console.log(`
367
+ ✓ Created new Jalvin project: ${projectName}/
368
+ src/main.jalvin — your first Jalvin source file
369
+ JALVIN — project configuration
370
+ package.json — npm manifest
371
+
372
+ Next steps:
373
+ cd ${dir}
374
+ npm install
375
+ jalvin build
376
+ jalvin run src/main.jalvin
377
+ `);
378
+ }
379
+ function writeUnlessExists(filePath, content) {
380
+ if (!fs.existsSync(filePath)) {
381
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
382
+ fs.writeFileSync(filePath, content, "utf8");
383
+ }
384
+ }
385
+ // ---------------------------------------------------------------------------
386
+ // Entrypoint
387
+ // ---------------------------------------------------------------------------
388
+ async function main() {
389
+ const args = parseArgs(process.argv);
390
+ switch (args.command) {
391
+ case "build":
392
+ await runBuild(args);
393
+ break;
394
+ case "check":
395
+ await runCheck(args);
396
+ break;
397
+ case "run":
398
+ await runFile(args);
399
+ break;
400
+ case "init":
401
+ await runInit(args);
402
+ break;
403
+ case "version":
404
+ console.log(`jalvin ${VERSION}`);
405
+ break;
406
+ default:
407
+ usage();
408
+ break;
409
+ }
410
+ }
411
+ main().catch((e) => {
412
+ console.error("fatal:", e instanceof Error ? e.message : String(e));
413
+ process.exit(1);
414
+ });
415
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;AACA,gFAAgF;AAChF,2BAA2B;AAC3B,EAAE;AACF,YAAY;AACZ,yDAAyD;AACzD,0DAA0D;AAC1D,yEAAyE;AACzE,4DAA4D;AAC5D,4CAA4C;AAC5C,gFAAgF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEhF,4CAA8B;AAC9B,gDAAkC;AAClC,+CAA2C;AAC3C,2CAAyC;AAEzC,MAAM,UAAU,GAAG,SAAS,CAAC;AAC7B,MAAM,OAAO,GAAG,OAAO,CAAC;AAExB,SAAS,KAAK;IACZ,OAAO,CAAC,GAAG,CAAC;;UAEJ,OAAO;;;;;;;;;;;;;;;;;;;;;;;CAuBhB,CAAC,CAAC;AACH,CAAC;AAgBD,SAAS,SAAS,CAAC,IAAc;IAC/B,MAAM,IAAI,GAAY;QACpB,OAAO,EAAE,MAAM;QACf,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,IAAI;QACZ,SAAS,EAAE,KAAK;QAChB,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,IAAI;QACX,WAAW,EAAE,EAAE;KAChB,CAAC;IAEF,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,2BAA2B;IACtD,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,cAAc,GAAG,KAAK,CAAC;IAE3B,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;IAE/E,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAE,CAAC;QACpB,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAAC,cAAc,GAAG,IAAI,CAAC;YAAC,CAAC,EAAE,CAAC;YAAC,MAAM;QAAC,CAAC;QACxD,IAAI,cAAc,EAAE,CAAC;YAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAAC,SAAS;QAAC,CAAC;QAE7D,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;YACjD,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;QACrB,CAAC;aAAM,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAC3C,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC;QACjC,CAAC;aAAM,IAAI,GAAG,KAAK,cAAc,EAAE,CAAC;YAClC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACxB,CAAC;aAAM,IAAI,GAAG,KAAK,WAAW,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAC/C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,CAAC;aAAM,IAAI,GAAG,KAAK,YAAY,EAAE,CAAC;YAChC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACrB,CAAC;aAAM,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,CAAC;IACjC,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,SAAS,kBAAkB,CAAC,MAAgB;IAC1C,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC;QAC3D,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,CAAC,KAAK,CAAC,WAAW,KAAK,aAAa,CAAC,CAAC;YAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,CAAC,GAAW,EAAQ,EAAE;gBACjC,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;oBACjE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;oBACxC,IAAI,KAAK,CAAC,WAAW,EAAE;wBAAE,IAAI,CAAC,IAAI,CAAC,CAAC;yBAC/B,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;wBAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC/D,CAAC;YACH,CAAC,CAAC;YACF,IAAI,CAAC,KAAK,CAAC,CAAC;QACd,CAAC;aAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YACtC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,8EAA8E;AAC9E,eAAe;AACf,8EAA8E;AAE9E,MAAM,CAAC,GAAG;IACR,KAAK,EAAE,SAAS;IAChB,IAAI,EAAE,SAAS;IACf,GAAG,EAAE,UAAU;IACf,MAAM,EAAE,UAAU;IAClB,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,UAAU;IACjB,IAAI,EAAE,UAAU;CACjB,CAAC;AAEF,SAAS,QAAQ,CAAC,KAAc,EAAE,IAAY,EAAE,IAAY;IAC1D,OAAO,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACnD,CAAC;AAED,8EAA8E;AAC9E,gBAAgB;AAChB,8EAA8E;AAE9E,KAAK,UAAU,QAAQ,CAAC,IAAa;IACnC,MAAM,MAAM,GAAG,MAAM,IAAA,sBAAU,EAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC;IACtD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC;IAElF,MAAM,KAAK,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAC7C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACxC,OAAO;IACT,CAAC;IAED,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,QAAQ,GAAG,CAAC,CAAC;IAEjB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,IAAA,kBAAO,EAAC,MAAM,EAAE,IAAI,EAAE;YACnC,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS;SAC9C,CAAC,CAAC;QAEH,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACtC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC1B,IAAI,GAAG,KAAK,OAAO;gBAAE,MAAM,EAAE,CAAC;YAC9B,IAAI,GAAG,KAAK,SAAS;gBAAE,QAAQ,EAAE,CAAC;YAClC,IAAI,GAAG,KAAK,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACpC,MAAM,KAAK,GAAG,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBACjD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI;oBACnB,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,IAAI;oBACrG,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC;gBAC9C,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC;YAC9H,CAAC;QACH,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,EAAE;YAAE,SAAS;QAEzB,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;QAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,IAAI,KAAK,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QACvF,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAE5C,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAE/C,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,IAAI,MAAM,OAAO,EAAE,CAAC,CAAC;QACnF,CAAC;IACH,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAChG,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,SAAS,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IACnJ,MAAM,QAAQ,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,GAAG,QAAQ,WAAW,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;IACjI,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,sBAAsB,QAAQ,KAAK,QAAQ,MAAM,KAAK,CAAC,MAAM,QAAQ,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC5H,IAAI,MAAM,GAAG,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClC,CAAC;AAED,8EAA8E;AAC9E,gBAAgB;AAChB,8EAA8E;AAE9E,KAAK,UAAU,QAAQ,CAAC,IAAa;IACnC,MAAM,MAAM,GAAG,MAAM,IAAA,sBAAU,EAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC;IAClF,MAAM,KAAK,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAE7C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACxC,OAAO;IACT,CAAC;IAED,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,QAAQ,GAAG,CAAC,CAAC;IAEjB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,IAAA,kBAAO,EAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACrC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACtC,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO;gBAAE,MAAM,EAAE,CAAC;YACxC,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;gBAAE,QAAQ,EAAE,CAAC;YAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YAC3D,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI;gBACnB,CAAC,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI;gBAClE,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QACnI,CAAC;IACH,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,KAAK,KAAK,CAAC,MAAM,QAAQ,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,cAAc,MAAM,SAAS,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,WAAW,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACpL,IAAI,MAAM,GAAG,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClC,CAAC;AAED,8EAA8E;AAC9E,cAAc;AACd,8EAA8E;AAE9E,KAAK,UAAU,OAAO,CAAC,IAAa;IAClC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;QAC3E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,IAAA,kBAAO,EAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAErC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACtC,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;gBAC9B,OAAO,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,IAAI,QAAQ,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;YACjH,CAAC;QACH,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;IACrF,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1G,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAE/C,8DAA8D;IAC9D,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAClC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CAAC,oFAAoF,CAAC,CAAC;QACpG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACzD,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IACpF,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;AAChC,CAAC;AAED,KAAK,UAAU,UAAU;IACvB,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAC5D,KAAK,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;QACrC,IAAI,CAAC;YACH,YAAY,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YAClD,OAAO,GAAG,CAAC;QACb,CAAC;QAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,8EAA8E;AAC9E,eAAe;AACf,8EAA8E;AAE9E,KAAK,UAAU,OAAO,CAAC,IAAa;IAClC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;IACjC,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IAErD,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEzD,gBAAgB;IAChB,MAAM,YAAY,GAAG;SACd,WAAW;;;;;;;;;;;CAWnB,CAAC;IACA,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,YAAY,CAAC,CAAC;IAE1D,eAAe;IACf,MAAM,OAAO,GAAG;aACL,WAAW;;;;;;;;;;;;;;;CAevB,CAAC;IACA,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC;IAE3D,aAAa;IACb,MAAM,UAAU,GAAG,MAAM,WAAW;;;;0BAIZ,WAAW;;;;;;;;;CASpC,CAAC;IACA,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,aAAa,CAAC,EAAE,UAAU,CAAC,CAAC;IAEpE,aAAa;IACb,MAAM,SAAS,GAAG;;;;CAInB,CAAC;IACA,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,EAAE,SAAS,CAAC,CAAC;IAE3D,OAAO,CAAC,GAAG,CAAC;gCACkB,WAAW;;;;;;OAMpC,GAAG;;;;CAIT,CAAC,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAgB,EAAE,OAAe;IAC1D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAErC,QAAQ,IAAI,CAAC,OAAO,EAAE,CAAC;QACrB,KAAK,OAAO;YAAI,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;YAAC,MAAM;QAC5C,KAAK,OAAO;YAAI,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;YAAC,MAAM;QAC5C,KAAK,KAAK;YAAM,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;YAAC,MAAM;QAC3C,KAAK,MAAM;YAAK,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;YAAC,MAAM;QAC3C,KAAK,SAAS;YAAE,OAAO,CAAC,GAAG,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC;YAAC,MAAM;QACxD;YAAgB,KAAK,EAAE,CAAC;YAAC,MAAM;IACjC,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE;IAC1B,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,10 @@
1
+ export interface JalvinConfig {
2
+ name?: string;
3
+ version?: string;
4
+ rootDir: string;
5
+ outDir: string;
6
+ jsx: boolean;
7
+ emitTypes: boolean;
8
+ }
9
+ export declare function loadConfig(projectRoot: string): Promise<JalvinConfig>;
10
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,OAAO,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;CACpB;AASD,wBAAsB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CA4B3E"}
package/dist/config.js ADDED
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ // ─────────────────────────────────────────────────────────────────────────────
3
+ // JALVIN config file parser
4
+ //
5
+ // Config format (key = value, # comments, blank lines ignored):
6
+ //
7
+ // name = my-app
8
+ // version = 1.0.0
9
+ // rootDir = src
10
+ // outDir = dist
11
+ // jsx = true
12
+ // emitTypes = false
13
+ // ─────────────────────────────────────────────────────────────────────────────
14
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ var desc = Object.getOwnPropertyDescriptor(m, k);
17
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
18
+ desc = { enumerable: true, get: function() { return m[k]; } };
19
+ }
20
+ Object.defineProperty(o, k2, desc);
21
+ }) : (function(o, m, k, k2) {
22
+ if (k2 === undefined) k2 = k;
23
+ o[k2] = m[k];
24
+ }));
25
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
26
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
27
+ }) : function(o, v) {
28
+ o["default"] = v;
29
+ });
30
+ var __importStar = (this && this.__importStar) || (function () {
31
+ var ownKeys = function(o) {
32
+ ownKeys = Object.getOwnPropertyNames || function (o) {
33
+ var ar = [];
34
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
35
+ return ar;
36
+ };
37
+ return ownKeys(o);
38
+ };
39
+ return function (mod) {
40
+ if (mod && mod.__esModule) return mod;
41
+ var result = {};
42
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
43
+ __setModuleDefault(result, mod);
44
+ return result;
45
+ };
46
+ })();
47
+ Object.defineProperty(exports, "__esModule", { value: true });
48
+ exports.loadConfig = loadConfig;
49
+ const fs = __importStar(require("node:fs"));
50
+ const path = __importStar(require("node:path"));
51
+ const DEFAULTS = {
52
+ rootDir: "src",
53
+ outDir: "dist",
54
+ jsx: false,
55
+ emitTypes: false,
56
+ };
57
+ async function loadConfig(projectRoot) {
58
+ const configPath = path.join(projectRoot, "JALVIN");
59
+ if (!fs.existsSync(configPath))
60
+ return { ...DEFAULTS };
61
+ const raw = fs.readFileSync(configPath, "utf8");
62
+ const config = { ...DEFAULTS };
63
+ for (const rawLine of raw.split(/\r?\n/)) {
64
+ const line = rawLine.trim();
65
+ if (!line || line.startsWith("#"))
66
+ continue;
67
+ const eqIdx = line.indexOf("=");
68
+ if (eqIdx === -1)
69
+ continue;
70
+ const key = line.slice(0, eqIdx).trim();
71
+ const value = line.slice(eqIdx + 1).trim();
72
+ switch (key) {
73
+ case "name":
74
+ config.name = value;
75
+ break;
76
+ case "version":
77
+ config.version = value;
78
+ break;
79
+ case "rootDir":
80
+ config.rootDir = value;
81
+ break;
82
+ case "outDir":
83
+ config.outDir = value;
84
+ break;
85
+ case "jsx":
86
+ config.jsx = value === "true";
87
+ break;
88
+ case "emitTypes":
89
+ config.emitTypes = value === "true";
90
+ break;
91
+ }
92
+ }
93
+ return config;
94
+ }
95
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,4BAA4B;AAC5B,EAAE;AACF,gEAAgE;AAChE,EAAE;AACF,kBAAkB;AAClB,oBAAoB;AACpB,kBAAkB;AAClB,kBAAkB;AAClB,eAAe;AACf,sBAAsB;AACtB,gFAAgF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqBhF,gCA4BC;AA/CD,4CAA8B;AAC9B,gDAAkC;AAWlC,MAAM,QAAQ,GAAiB;IAC7B,OAAO,EAAE,KAAK;IACd,MAAM,EAAE,MAAM;IACd,GAAG,EAAE,KAAK;IACV,SAAS,EAAE,KAAK;CACjB,CAAC;AAEK,KAAK,UAAU,UAAU,CAAC,WAAmB;IAClD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IACpD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,CAAC;IAEvD,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAChD,MAAM,MAAM,GAAiB,EAAE,GAAG,QAAQ,EAAE,CAAC;IAE7C,KAAK,MAAM,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAE5C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,SAAS;QAE3B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAE3C,QAAQ,GAAG,EAAE,CAAC;YACZ,KAAK,MAAM;gBAAO,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC;gBAAC,MAAM;YAC7C,KAAK,SAAS;gBAAI,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;gBAAC,MAAM;YAChD,KAAK,SAAS;gBAAI,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;gBAAC,MAAM;YAChD,KAAK,QAAQ;gBAAK,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;gBAAC,MAAM;YAC/C,KAAK,KAAK;gBAAQ,MAAM,CAAC,GAAG,GAAG,KAAK,KAAK,MAAM,CAAC;gBAAC,MAAM;YACvD,KAAK,WAAW;gBAAE,MAAM,CAAC,SAAS,GAAG,KAAK,KAAK,MAAM,CAAC;gBAAC,MAAM;QAC/D,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,28 @@
1
+ {
2
+ "name": "@jalvin/cli",
3
+ "version": "1.0.0",
4
+ "description": "Jalvin language — command line interface",
5
+ "bin": {
6
+ "jalvin": "dist/cli.js"
7
+ },
8
+ "main": "dist/cli.js",
9
+ "types": "dist/cli.d.ts",
10
+ "publishConfig": {
11
+ "access": "public"
12
+ },
13
+ "files": [
14
+ "dist"
15
+ ],
16
+ "dependencies": {
17
+ "@jalvin/compiler": "1.0.0"
18
+ },
19
+ "devDependencies": {
20
+ "typescript": "^5.4.0",
21
+ "@types/node": "^20.0.0"
22
+ },
23
+ "scripts": {
24
+ "build": "tsc -p tsconfig.json",
25
+ "typecheck": "tsc -p tsconfig.json --noEmit",
26
+ "clean": "rm -rf dist"
27
+ }
28
+ }