@incajs/cli 0.0.3 → 0.0.5

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.js CHANGED
@@ -1,79 +1,115 @@
1
- import { i as e, n as t, o as n, r, t as i } from "./chunks/defaults-D_1rymg4.js";
1
+ import { i as e, n as t, o as n, r, t as i } from "./chunks/defaults-DNvHueCI.js";
2
2
  import a from "node:path";
3
3
  import { existsSync as o } from "node:fs";
4
- import { chmod as s, cp as c, mkdir as l, readFile as u, readdir as d, rm as f, writeFile as p } from "node:fs/promises";
5
- import { styleText as m } from "node:util";
6
- import { build as h } from "vite";
7
- import g from "@vitejs/plugin-vue";
8
- import { createRequire as _ } from "node:module";
9
- import { spawn as v } from "node:child_process";
10
- import { once as y } from "node:events";
11
- import b from "node:readline";
12
- import { setTimeout as x } from "node:timers/promises";
4
+ import { chmod as s, cp as c, link as l, mkdir as u, readFile as d, readdir as f, rm as p, writeFile as m } from "node:fs/promises";
5
+ import { styleText as h } from "node:util";
6
+ import { build as g } from "vite";
7
+ import _ from "@vitejs/plugin-vue";
8
+ import { createRequire as v } from "node:module";
9
+ import { spawn as y } from "node:child_process";
10
+ import { once as b } from "node:events";
11
+ import x from "node:readline";
12
+ import { setTimeout as S } from "node:timers/promises";
13
13
  //#region src/error.mts
14
- var S = class extends Error {
14
+ var C = class extends Error {
15
15
  code;
16
16
  name = "IncaError";
17
17
  constructor(e, t) {
18
18
  super(t), this.code = e;
19
19
  }
20
- };
21
- //#endregion
22
- //#region src/config/loader.mts
23
- async function C(e) {
24
- let { config: t } = await n({
20
+ }, ee = {
21
+ name: "inca",
22
+ packageJson: "inca",
23
+ rcFile: !1,
24
+ globalRc: !1,
25
+ giget: !1,
26
+ extend: !1
27
+ }, te = /[/\\:*?"<>|\0]/;
28
+ function ne(e) {
29
+ return e === e.trim() && e !== "" && e !== "." && e !== ".." && !te.test(e);
30
+ }
31
+ function w(e) {
32
+ if (!(typeof e == "string" && ne(e))) throw new C("ERR_INCA_PRODUCT_NAME_INVALID", `${JSON.stringify(e)} can't name a directory — set a "productName" in inca.config.ts with no leading or trailing space, and none of \`/\\:*?"<>|\``);
33
+ }
34
+ async function T(e) {
35
+ let { config: t, layers: r } = await n({
25
36
  cwd: e,
26
- name: "inca",
27
- packageJson: "inca",
28
- rcFile: !1,
29
- globalRc: !1,
30
- giget: !1,
31
- extend: !1
32
- });
37
+ ...ee
38
+ }), i = r?.find((e) => e.configFile === "package.json");
39
+ return {
40
+ config: t,
41
+ usedPackageJsonKey: Object.keys(i?.config ?? {}).length > 0
42
+ };
43
+ }
44
+ async function E(e) {
45
+ let { config: t } = await T(e);
33
46
  return {
34
47
  entry: t.entry ? a.resolve(e, t.entry) : void 0,
35
48
  outDir: a.resolve(e, t.outDir ?? i.outDir)
36
49
  };
37
50
  }
38
- async function ee(e) {
39
- let s = a.join(e, "package.json"), c;
51
+ async function D(e) {
52
+ let n = a.join(e, "package.json"), s;
40
53
  try {
41
- c = await u(s, "utf8");
54
+ s = await d(n, "utf8");
42
55
  } catch {
43
- throw new S("ERR_INCA_PACKAGE_JSON_NOT_FOUND", `no package.json found at ${s}`);
56
+ throw new C("ERR_INCA_PACKAGE_JSON_NOT_FOUND", `no package.json found at ${n}`);
44
57
  }
45
- let l = JSON.parse(c), { config: d, layers: f } = await n({
46
- cwd: e,
47
- name: "inca",
48
- packageJson: "inca",
49
- rcFile: !1,
50
- globalRc: !1,
51
- giget: !1,
52
- extend: !1
53
- }), p = f?.find((e) => e.configFile === "package.json"), m = Object.keys(p?.config ?? {}).length > 0, h = d.productName ?? r(l.name);
54
- if (!h) throw new S("ERR_INCA_PRODUCT_NAME_MISSING", `${s} needs a "name", or "productName" in inca.config.ts`);
55
- let g = d.version ?? l.version ?? i.version, _ = d.identifier ?? t(h), v;
56
- if (d.icon && (v = a.resolve(e, d.icon), !o(v))) throw new S("ERR_INCA_ICON_NOT_FOUND", `"icon" points to ${v}, which doesn't exist`);
57
- let y = d.entry ? a.resolve(e, d.entry) : void 0, b = a.resolve(e, d.outDir ?? i.outDir);
58
+ let c = JSON.parse(s), { config: l, usedPackageJsonKey: u } = await T(e), f = l.productName ?? r(c.name);
59
+ if (!f) throw new C("ERR_INCA_PRODUCT_NAME_MISSING", `${n} needs a "name", or "productName" in inca.config.ts`);
60
+ w(f);
61
+ let p = l.version ?? c.version ?? i.version, m = l.identifier ?? t(f), h;
62
+ if (l.icon && (h = a.resolve(e, l.icon), !o(h))) throw new C("ERR_INCA_ICON_NOT_FOUND", `"icon" points to ${h}, which doesn't exist`);
63
+ let g = l.entry ? a.resolve(e, l.entry) : void 0, _ = a.resolve(e, l.outDir ?? i.outDir);
58
64
  return {
59
- productName: h,
60
- identifier: _,
61
- identifierIsDefault: d.identifier === void 0,
62
- version: g,
63
- icon: v,
64
- entry: y,
65
- outDir: b,
66
- usedPackageJsonKey: m
65
+ productName: f,
66
+ identifier: m,
67
+ identifierIsDefault: l.identifier === void 0,
68
+ version: p,
69
+ icon: h,
70
+ window: l.window,
71
+ entry: g,
72
+ outDir: _,
73
+ usedPackageJsonKey: u
67
74
  };
68
75
  }
76
+ function O(e) {
77
+ return {
78
+ name: e.productName,
79
+ identifier: e.identifier,
80
+ window: e.window
81
+ };
82
+ }
83
+ async function k(e) {
84
+ let { config: n } = await T(e), i = {};
85
+ try {
86
+ i = JSON.parse(await d(a.join(e, "package.json"), "utf8"));
87
+ } catch {}
88
+ let o = n.productName ?? r(i.name);
89
+ o && w(o);
90
+ let s = {
91
+ name: o,
92
+ identifier: n.identifier ?? (o ? t(o) : void 0),
93
+ window: n.window
94
+ };
95
+ return Object.values(s).some((e) => e !== void 0) ? s : void 0;
96
+ }
69
97
  //#endregion
70
98
  //#region src/adapter/vite/captureOutput.mts
71
- function te(e) {
99
+ function A(e, t, n) {
100
+ return {
101
+ outDir: e,
102
+ entryFile: a.join(e, t.entryFile),
103
+ files: t.files,
104
+ changed: n
105
+ };
106
+ }
107
+ function re(e) {
72
108
  return {
73
109
  name: "inca:capture-output",
74
110
  writeBundle(t, n) {
75
111
  let r = Object.keys(n), i = Object.values(n).find((e) => e.type === "chunk" && e.isEntry);
76
- if (!i) throw new S("ERR_INCA_BUILD_NO_ENTRY_CHUNK", "build produced no entry chunk");
112
+ if (!i) throw new C("ERR_INCA_BUILD_NO_ENTRY_CHUNK", "build produced no entry chunk");
77
113
  e({
78
114
  entryFile: i.fileName,
79
115
  files: r
@@ -82,9 +118,25 @@ function te(e) {
82
118
  };
83
119
  }
84
120
  //#endregion
121
+ //#region src/adapter/vite/emitConfig.mts
122
+ var ie = "inca.json";
123
+ function ae(e) {
124
+ let t = JSON.stringify(e, void 0, 2), n = t === void 0 || t === "{}";
125
+ return {
126
+ name: "inca:emit-config",
127
+ generateBundle() {
128
+ n || this.emitFile({
129
+ type: "asset",
130
+ fileName: ie,
131
+ source: `${t}\n`
132
+ });
133
+ }
134
+ };
135
+ }
136
+ //#endregion
85
137
  //#region src/adapter/vite/logger.mts
86
- var ne = "Build failed with ";
87
- function re(e, t) {
138
+ var oe = "Build failed with ";
139
+ function se(e, t) {
88
140
  let n = /* @__PURE__ */ new WeakSet(), r = /* @__PURE__ */ new Set(), i = {
89
141
  hasWarned: !1,
90
142
  info(t) {
@@ -97,7 +149,7 @@ function re(e, t) {
97
149
  r.has(e) || (r.add(e), i.warn(e));
98
150
  },
99
151
  error(e, r) {
100
- i.hasWarned = !0, r?.error && n.add(r.error), !e.includes(ne) && t.write(`${e.replace(/\n\s+at .*/g, "")}\n`);
152
+ i.hasWarned = !0, r?.error && n.add(r.error), !e.includes(oe) && t.write(`${e.replace(/\n\s+at .*/g, "")}\n`);
101
153
  },
102
154
  clearScreen() {},
103
155
  hasErrorLogged(e) {
@@ -108,7 +160,7 @@ function re(e, t) {
108
160
  }
109
161
  //#endregion
110
162
  //#region src/adapter/vite/unsupported.mts
111
- var w = /\.(?:css|pcss|postcss|sass|scss|less|styl|stylus)(?:\?|$)/, T = [{
163
+ var ce = /\.(?:css|pcss|postcss|sass|scss|less|styl|stylus)(?:\?|$)/, le = [{
112
164
  code: "ERR_INCA_UNSUPPORTED_STYLE",
113
165
  name: "a <style> block",
114
166
  matches: (e) => e.includes("vue&type=style"),
@@ -116,10 +168,10 @@ var w = /\.(?:css|pcss|postcss|sass|scss|less|styl|stylus)(?:\?|$)/, T = [{
116
168
  }, {
117
169
  code: "ERR_INCA_UNSUPPORTED_STYLESHEET",
118
170
  name: "a stylesheet import",
119
- matches: (e) => w.test(e),
171
+ matches: (e) => ce.test(e),
120
172
  hint: "the renderer applies no stylesheet — use a :style binding instead"
121
173
  }];
122
- function E(e = T) {
174
+ function ue(e = le) {
123
175
  return {
124
176
  name: "inca:reject-unsupported",
125
177
  enforce: "pre",
@@ -127,32 +179,33 @@ function E(e = T) {
127
179
  let r = e.find((e) => e.matches(n));
128
180
  if (!r) return null;
129
181
  let i = a.relative(process.cwd(), n.split("?")[0] ?? n);
130
- throw new S(r.code, `${r.code}: ${i} uses ${r.name}, unsupported for now: ${r.hint}`);
182
+ throw new C(r.code, `${r.code}: ${i} uses ${r.name}, unsupported for now: ${r.hint}`);
131
183
  }
132
184
  };
133
185
  }
134
186
  //#endregion
135
187
  //#region src/adapter/vite/config.mts
136
- var D = "bundle.js";
137
- function O({ entry: e, outDir: t, mode: n, watch: r, onOutput: i, stdout: o, stderr: s, quiet: c }) {
188
+ var de = "bundle.js";
189
+ function j({ entry: e, outDir: t, mode: n, watch: r, onOutput: i, stdout: o, stderr: s, quiet: c, runtimeConfig: l }) {
138
190
  return {
139
191
  configFile: !1,
140
192
  root: a.dirname(e),
141
193
  mode: n,
142
194
  clearScreen: !1,
143
195
  logLevel: c ? "silent" : "info",
144
- customLogger: re(o, s),
196
+ customLogger: se(o, s),
145
197
  define: { "process.env.NODE_ENV": JSON.stringify(n) },
146
198
  plugins: [
147
- g({ template: { compilerOptions: { runtimeModuleName: "@vue/runtime-core" } } }),
148
- E(),
149
- te(i)
199
+ _({ template: { compilerOptions: { runtimeModuleName: "@vue/runtime-core" } } }),
200
+ ue(),
201
+ ae(l),
202
+ re(i)
150
203
  ],
151
204
  build: {
152
205
  lib: {
153
206
  entry: e,
154
207
  formats: ["es"],
155
- fileName: () => D
208
+ fileName: () => de
156
209
  },
157
210
  outDir: t,
158
211
  emptyOutDir: n === "production",
@@ -167,66 +220,63 @@ function O({ entry: e, outDir: t, mode: n, watch: r, onOutput: i, stdout: o, std
167
220
  }
168
221
  //#endregion
169
222
  //#region src/adapter/vite/build.mts
170
- async function k({ entry: e, outDir: t, stdout: n = process.stdout, stderr: r = process.stderr, quiet: i = !1 }) {
223
+ async function fe({ entry: e, outDir: t, runtimeConfig: n, stdout: r = process.stdout, stderr: i = process.stderr, quiet: a = !1 }) {
171
224
  let o;
172
- if (await h(O({
225
+ if (await g(j({
173
226
  entry: e,
174
227
  outDir: t,
228
+ runtimeConfig: n,
175
229
  mode: "production",
176
230
  watch: !1,
177
- stdout: n,
178
- stderr: r,
179
- quiet: i,
231
+ stdout: r,
232
+ stderr: i,
233
+ quiet: a,
180
234
  onOutput: (e) => {
181
- o = {
182
- outDir: t,
183
- entryFile: a.join(t, e.entryFile),
184
- files: e.files
185
- };
235
+ o = A(t, e);
186
236
  }
187
- })), !o) throw new S("ERR_INCA_BUILD_NO_OUTPUT", "build produced no output");
237
+ })), !o) throw new C("ERR_INCA_BUILD_NO_OUTPUT", "build produced no output");
188
238
  return o;
189
239
  }
190
240
  //#endregion
191
241
  //#region src/dev-client/hostBin.mts
192
- var A = "INCA_HOST_BIN";
193
- function j() {
242
+ var M = "INCA_HOST_BIN";
243
+ function N() {
194
244
  let e = process.platform === "darwin" || process.platform === "linux" ? process.platform : void 0, t = process.arch === "arm64" || process.arch === "x64" ? process.arch : void 0;
195
245
  return e && t ? `@incajs/host-${e}-${t}` : void 0;
196
246
  }
197
- function M() {
198
- let e = j();
247
+ function pe() {
248
+ let e = N();
199
249
  if (e) try {
200
- return _(import.meta.url).resolve(`${e}/bin/inca-host`);
250
+ return v(import.meta.url).resolve(`${e}/bin/inca-host`);
201
251
  } catch {
202
252
  return;
203
253
  }
204
254
  }
205
- function N() {
206
- let e = process.env[A];
255
+ function P() {
256
+ let e = process.env[M];
207
257
  if (e) return e;
208
- let t = M();
258
+ let t = pe();
209
259
  if (t) return t;
210
- let n = j();
211
- throw new S("ERR_INCA_HOST_BIN_UNRESOLVED", `no inca-host binary found — ${n ? `no ${n} package is installed for it` : `this platform (${process.platform}/${process.arch}) has no published package`}, and ${A} isn't set to one`);
260
+ let n = N();
261
+ throw new C("ERR_INCA_HOST_BIN_UNRESOLVED", `no inca-host binary found — ${n ? `no ${n} package is installed for it` : `this platform (${process.platform}/${process.arch}) has no published package`}, and ${M} isn't set to one`);
212
262
  }
213
263
  //#endregion
214
264
  //#region src/dev-client/hostError.mts
215
- var P = class extends Error {
265
+ var F = class extends Error {
216
266
  code;
217
267
  hostStack;
218
268
  constructor(e, t, n = null) {
219
269
  super(e), this.code = t, this.hostStack = n, this.name = "HostError";
220
270
  }
221
271
  };
222
- function ie(e) {
272
+ function me(e) {
223
273
  return typeof e == "object" && !!e && e.jsonrpc === "2.0";
224
274
  }
225
275
  //#endregion
226
276
  //#region src/dev-client/hostClient.mts
227
- var ae = (e) => {
277
+ var I = (e) => {
228
278
  process.stderr.write(e.endsWith("\n") ? e : `${e}\n`);
229
- }, oe = class {
279
+ }, L = class {
230
280
  #e;
231
281
  #t;
232
282
  #n = 1;
@@ -236,22 +286,22 @@ var ae = (e) => {
236
286
  this.#e = e;
237
287
  }
238
288
  async start() {
239
- let e = this.#e.hostBin ?? N(), t = v(e, ["--dev", this.#e.entryFile], { stdio: [
289
+ let e = this.#e.hostBin ?? P(), t = y(e, ["--dev", this.#e.entryFile], { stdio: [
240
290
  "pipe",
241
291
  "pipe",
242
292
  "pipe"
243
293
  ] });
244
294
  this.#t = t;
245
- let n = this.#e.onStderr ?? ae;
295
+ let n = this.#e.onStderr ?? I;
246
296
  t.stderr.setEncoding("utf8"), t.stderr.on("data", (e) => n(e)), t.stdin.on("error", (e) => {
247
297
  e.code !== "EPIPE" && n(`inca-host stdin: ${e.message}\n`);
248
- }), b.createInterface({ input: t.stdout }).on("line", (e) => {
298
+ }), x.createInterface({ input: t.stdout }).on("line", (e) => {
249
299
  this.#a(e, n);
250
300
  }), t.on("exit", (e, t) => {
251
301
  let n = /* @__PURE__ */ Error(`inca-host exited (code=${String(e)}, signal=${String(t)}) before answering`);
252
302
  for (let { reject: e } of this.#r.values()) e(n);
253
303
  this.#r.clear(), this.#i || this.#e.onExit?.(e, t);
254
- }), await y(t, "spawn");
304
+ }), await b(t, "spawn");
255
305
  }
256
306
  #a(e, t) {
257
307
  let n;
@@ -261,7 +311,7 @@ var ae = (e) => {
261
311
  t(`[stray stdout] ${e}`);
262
312
  return;
263
313
  }
264
- if (!ie(n)) {
314
+ if (!me(n)) {
265
315
  t(`[stray stdout] ${e}`);
266
316
  return;
267
317
  }
@@ -270,7 +320,7 @@ var ae = (e) => {
270
320
  return;
271
321
  }
272
322
  let r = this.#r.get(n.id);
273
- r && (this.#r.delete(n.id), "error" in n ? r.reject(new P(n.error.message, n.error.code, n.error.data?.stack ?? null)) : r.resolve(n.result));
323
+ r && (this.#r.delete(n.id), "error" in n ? r.reject(new F(n.error.message, n.error.code, n.error.data?.stack ?? null)) : r.resolve(n.result));
274
324
  }
275
325
  #o(e, t, n) {
276
326
  switch (e) {
@@ -294,24 +344,31 @@ var ae = (e) => {
294
344
  }
295
345
  async #s(e) {
296
346
  this.#i = !0;
297
- let t = y(e, "exit");
347
+ let t = b(e, "exit");
298
348
  e.kill(), await t;
299
349
  }
300
- async call(e, t) {
301
- let n = this.#t;
302
- if (!n) throw Error("HostClient.start() has not been called");
303
- let r = this.#n++, i = JSON.stringify({
350
+ async call(e, t, n) {
351
+ let r = this.#t;
352
+ if (!r) throw Error("HostClient.start() has not been called");
353
+ let i = this.#n++, a = JSON.stringify({
304
354
  jsonrpc: "2.0",
305
- id: r,
355
+ id: i,
306
356
  method: e,
307
357
  params: t
308
358
  });
309
- return new Promise((e, t) => {
310
- this.#r.set(r, {
311
- resolve: e,
312
- reject: t
313
- }), n.stdin.write(`${i}\n`, (e) => {
314
- e && (this.#r.delete(r), t(e));
359
+ return new Promise((t, o) => {
360
+ let s = n === void 0 ? void 0 : setTimeout(() => {
361
+ this.#r.delete(i), o(/* @__PURE__ */ Error(`${e} timed out after ${String(n)}ms`));
362
+ }, n);
363
+ this.#r.set(i, {
364
+ resolve: (e) => {
365
+ clearTimeout(s), t(e);
366
+ },
367
+ reject: (e) => {
368
+ clearTimeout(s), o(e);
369
+ }
370
+ }), r.stdin.write(`${a}\n`, (e) => {
371
+ e && (clearTimeout(s), this.#r.delete(i), o(e));
315
372
  });
316
373
  });
317
374
  }
@@ -319,35 +376,35 @@ var ae = (e) => {
319
376
  let t = this.#t;
320
377
  if (!t || t.exitCode !== null || t.signalCode !== null) return;
321
378
  this.#i = !0;
322
- let n = y(t, "exit");
323
- this.call("shutdown").catch(() => {}), await Promise.race([n.then(() => "exited"), x(e).then(() => "timeout")]) === "timeout" && (t.kill(), await n);
379
+ let n = b(t, "exit");
380
+ this.call("shutdown").catch(() => {}), await Promise.race([n.then(() => "exited"), S(e).then(() => "timeout")]) === "timeout" && (t.kill(), await n);
324
381
  }
325
- }, F = "[inca]", I = new Intl.DateTimeFormat(void 0, {
382
+ }, R = "[inca]", z = new Intl.DateTimeFormat(void 0, {
326
383
  hour: "numeric",
327
384
  minute: "numeric",
328
385
  second: "numeric"
329
386
  });
330
- function L(e, t, n) {
331
- let r = m(["bold", n], F, { stream: e });
332
- return t.timestamp ? `${m("dim", I.format(/* @__PURE__ */ new Date()), { stream: e })} ${r}` : r;
387
+ function B(e, t, n) {
388
+ let r = h(["bold", n], R, { stream: e });
389
+ return t.timestamp ? `${h("dim", z.format(/* @__PURE__ */ new Date()), { stream: e })} ${r}` : r;
333
390
  }
334
- function R(e, t, n = {}) {
335
- e.write(`${L(e, n, "cyan")} ${t}\n`);
391
+ function V(e, t, n = {}) {
392
+ e.write(`${B(e, n, "cyan")} ${t}\n`);
336
393
  }
337
- function z(e) {
394
+ function H(e) {
338
395
  let t = e.code;
339
396
  return typeof t == "string" ? t : null;
340
397
  }
341
- function B(e) {
398
+ function he(e) {
342
399
  return /\bERR_INCA_[A-Z0-9_]+/.exec(e)?.[0] ?? null;
343
400
  }
344
- function V(e) {
401
+ function ge(e) {
345
402
  let t = e.stack;
346
403
  if (!t) return null;
347
404
  for (let n of [`${e.name}: ${e.message}`, e.message]) if (t.startsWith(n)) return t.slice(n.length).replace(/^\r?\n/, "") || null;
348
405
  return t;
349
406
  }
350
- function H(e) {
407
+ function _e(e) {
351
408
  let t = /^(?:\w*Error: )?(ERR_INCA_[A-Z0-9_]+): /.exec(e);
352
409
  return t ? {
353
410
  message: e.slice(t[0].length),
@@ -360,14 +417,14 @@ function H(e) {
360
417
  };
361
418
  }
362
419
  function U(e) {
363
- return e instanceof P ? {
420
+ return e instanceof F ? {
364
421
  message: e.message,
365
422
  stack: e.hostStack,
366
- code: z(e)
423
+ code: H(e)
367
424
  } : e instanceof Error ? {
368
425
  message: e.message,
369
- stack: V(e),
370
- code: z(e) ?? B(e.message)
426
+ stack: ge(e),
427
+ code: H(e) ?? he(e.message)
371
428
  } : {
372
429
  message: String(e),
373
430
  stack: null,
@@ -375,258 +432,300 @@ function U(e) {
375
432
  };
376
433
  }
377
434
  function W(e, t, n, r = {}) {
378
- let i = n.code ? ` (${m("bold", n.code, { stream: e })})` : "";
379
- e.write(`${L(e, r, "red")} ${t}${i}: ${n.message}\n`), n.stack && e.write(`${n.stack}\n`);
435
+ let i = n.code ? ` (${h("bold", n.code, { stream: e })})` : "";
436
+ e.write(`${B(e, r, "red")} ${t}${i}: ${n.message}\n`), n.stack && e.write(`${n.stack}\n`);
380
437
  }
381
438
  //#endregion
382
439
  //#region src/adapter/vite/watch.mts
383
- async function G({ onBuild: e, onError: t, stdout: n = process.stdout, stderr: r = process.stderr, quiet: i = !1, ...o }) {
384
- let { outDir: s } = o, c, l = await h(O({
385
- ...o,
440
+ async function ve({ onBuild: e, onError: t, stdout: n = process.stdout, stderr: r = process.stderr, quiet: i = !1, ...a }) {
441
+ let { outDir: o } = a, s, c = await g(j({
442
+ ...a,
386
443
  watch: !0,
387
444
  stdout: n,
388
445
  stderr: r,
389
446
  quiet: i,
390
447
  onOutput: (t) => {
391
- e({
392
- outDir: s,
393
- entryFile: a.join(s, t.entryFile),
394
- files: t.files,
395
- changed: c
396
- }), c = void 0;
448
+ e(A(o, t, s)), s = void 0;
397
449
  }
398
450
  }));
399
- return l.on("change", (e) => {
400
- c ??= {
451
+ return c.on("change", (e) => {
452
+ s ??= {
401
453
  file: e,
402
454
  at: Date.now()
403
455
  };
404
- }), l.on("event", (e) => {
456
+ }), c.on("event", (e) => {
405
457
  if (e.code !== "ERROR") return;
406
- c = void 0;
458
+ s = void 0;
407
459
  let { errors: n } = e.error;
408
- t(H(n?.[0]?.message ?? e.error.message));
409
- }), { close: () => l.close() };
460
+ t(_e(n?.[0]?.message ?? e.error.message));
461
+ }), { close: () => c.close() };
410
462
  }
411
463
  //#endregion
412
464
  //#region src/defaultBundler.mts
413
- var K = {
414
- watch: G,
415
- build: k
465
+ var G = {
466
+ watch: ve,
467
+ build: fe
416
468
  };
417
469
  //#endregion
418
470
  //#region src/entry.mts
419
- async function q(e) {
471
+ async function K(e) {
420
472
  let t = a.join(e, "src/main.mts");
421
473
  if (o(t)) return t;
422
474
  let n = a.join(e, "src/App.vue");
423
- if (o(n)) return se(n, e);
424
- throw new S("ERR_INCA_ENTRY_NOT_FOUND", `no app entry found — expected ${t} or ${n}`);
475
+ if (o(n)) return ye(n, e);
476
+ throw new C("ERR_INCA_ENTRY_NOT_FOUND", `no app entry found — expected ${t} or ${n}`);
425
477
  }
426
- async function se(e, t) {
478
+ async function ye(e, t) {
427
479
  let n = a.join(t, "node_modules/.inca");
428
- await l(n, { recursive: !0 });
480
+ await u(n, { recursive: !0 });
429
481
  let r = a.join(n, "entry.mts"), i = JSON.stringify(e.split(a.sep).join("/"));
430
- return await p(r, `import { createIncaApp } from "incajs/vue";\nimport App from ${i};\ncreateIncaApp(App).mount();\n`), r;
482
+ return await m(r, `import { createIncaApp } from "incajs/vue";\nimport App from ${i};\ncreateIncaApp(App).mount();\n`), r;
431
483
  }
432
484
  //#endregion
433
485
  //#region src/build.mts
434
- async function J(e = {}) {
435
- let t = e.cwd ?? process.cwd(), n = e.config ?? await C(t), r = n.outDir, i = e.bundler ?? K, a = e.entry ?? n.entry ?? await q(t);
486
+ async function q(e = {}) {
487
+ let t = e.cwd ?? process.cwd(), n = e.config ?? await E(t), r = n.outDir, i = e.bundler ?? G, a = e.entry ?? n.entry ?? await K(t), o = e.runtimeConfig ?? await k(t);
436
488
  return i.build({
437
489
  entry: a,
438
490
  outDir: r,
491
+ runtimeConfig: o,
439
492
  stdout: e.stdout,
440
493
  stderr: e.stderr
441
494
  });
442
495
  }
443
496
  //#endregion
444
497
  //#region src/dev-lock.mts
445
- function ce(e) {
498
+ function be(e) {
446
499
  return a.join(e, "node_modules/.inca/dev.pid");
447
500
  }
448
- function le(e) {
501
+ function xe(e) {
449
502
  try {
450
503
  return process.kill(e, 0), !0;
451
504
  } catch (e) {
452
505
  return e.code === "EPERM";
453
506
  }
454
507
  }
455
- async function ue(e) {
456
- let t = ce(e), n = Number.parseInt(await u(t, "utf8").catch(() => ""), 10);
457
- if (Number.isInteger(n) && le(n)) throw new S("ERR_INCA_DEV_RUNNING", `inca dev is already running for this app (pid ${String(n)})`);
458
- return await l(a.dirname(t), { recursive: !0 }), await p(t, String(process.pid)), () => f(t, { force: !0 });
508
+ async function Se(e) {
509
+ let t = be(e), n = Number.parseInt(await d(t, "utf8").catch(() => ""), 10);
510
+ if (Number.isInteger(n) && xe(n)) throw new C("ERR_INCA_DEV_RUNNING", `inca dev is already running for this app (pid ${String(n)})`);
511
+ return await u(a.dirname(t), { recursive: !0 }), await m(t, String(process.pid)), () => p(t, { force: !0 });
512
+ }
513
+ //#endregion
514
+ //#region src/plist.mts
515
+ function J(e) {
516
+ return e.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;");
517
+ }
518
+ function Ce(e) {
519
+ return typeof e == "boolean" ? e ? "<true/>" : "<false/>" : `<string>${J(e)}</string>`;
520
+ }
521
+ function we(e) {
522
+ return `<?xml version="1.0" encoding="UTF-8"?>
523
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
524
+ <plist version="1.0">
525
+ <dict>
526
+ ${Object.entries(e).map(([e, t]) => `\t<key>${J(e)}</key>\n\t${Ce(t)}`).join("\n")}\n</dict>
527
+ </plist>
528
+ `;
529
+ }
530
+ //#endregion
531
+ //#region src/macos-app.mts
532
+ async function Y(e) {
533
+ let { appPath: t, metadata: n, hostBin: r } = e;
534
+ await p(t, {
535
+ recursive: !0,
536
+ force: !0
537
+ });
538
+ let i = a.join(t, "Contents"), o = a.join(i, "MacOS"), d = a.join(i, "Resources");
539
+ await u(o, { recursive: !0 }), await u(d, { recursive: !0 });
540
+ let f = a.join(o, n.productName);
541
+ e.link ? await l(r, f).catch(() => c(r, f)) : await c(r, f), await s(f, 493);
542
+ let h = {
543
+ CFBundleName: n.productName,
544
+ CFBundleDisplayName: n.productName,
545
+ CFBundleExecutable: n.productName,
546
+ CFBundleIdentifier: n.identifier,
547
+ CFBundleVersion: n.version,
548
+ CFBundleShortVersionString: n.version,
549
+ CFBundlePackageType: "APPL",
550
+ CFBundleInfoDictionaryVersion: "6.0",
551
+ NSHighResolutionCapable: !0
552
+ };
553
+ if (n.icon) {
554
+ let e = a.basename(n.icon);
555
+ await c(n.icon, a.join(d, e)), h.CFBundleIconFile = e;
556
+ }
557
+ return await m(a.join(i, "Info.plist"), we(h)), await m(a.join(i, "PkgInfo"), "APPL????"), {
558
+ appPath: t,
559
+ executablePath: f,
560
+ resourcesDir: d
561
+ };
459
562
  }
460
563
  //#endregion
461
564
  //#region src/dev.mts
462
- var Y = { timestamp: !0 };
463
- async function de(e, t) {
565
+ var X = { timestamp: !0 }, Te = 1e4, Ee = ["ERR_INCA_PACKAGE_JSON_NOT_FOUND", "ERR_INCA_PRODUCT_NAME_MISSING"];
566
+ async function De(e, t) {
567
+ try {
568
+ return await D(e);
569
+ } catch (e) {
570
+ if (!(e instanceof C) || !Ee.includes(e.code)) throw e;
571
+ V(t, `running unnamed — ${e.message}`, X);
572
+ return;
573
+ }
574
+ }
575
+ async function Oe(e, t, n, r) {
576
+ if (process.platform === "darwin" && t) try {
577
+ return (await Y({
578
+ appPath: a.join(e, "node_modules/.inca", `${t.productName}.app`),
579
+ metadata: t,
580
+ hostBin: n ?? P(),
581
+ link: !0
582
+ })).executablePath;
583
+ } catch (e) {
584
+ V(r, `running unbundled — ${U(e).message}`, X);
585
+ return;
586
+ }
587
+ }
588
+ async function ke(e, t) {
464
589
  let n = new Set(t), r;
465
590
  try {
466
- r = await d(e, {
591
+ r = await f(e, {
467
592
  recursive: !0,
468
593
  withFileTypes: !0
469
594
  });
470
595
  } catch {
471
596
  return;
472
597
  }
473
- await Promise.all(r.filter((e) => e.isFile()).map((t) => a.relative(e, a.join(t.parentPath, t.name))).filter((e) => !n.has(e)).map((t) => f(a.join(e, t), { force: !0 })));
598
+ await Promise.all(r.filter((e) => e.isFile()).map((t) => a.relative(e, a.join(t.parentPath, t.name))).filter((e) => !n.has(e)).map((t) => p(a.join(e, t), { force: !0 })));
474
599
  }
475
- async function fe(e) {
476
- let t = e.cwd ?? process.cwd(), n = await C(t), r = await ue(t), i = n.outDir, o = e.bundler ?? K, s = e.stdout ?? process.stdout, c = e.stderr ?? process.stderr, l = e.entry ?? n.entry ?? await q(t), u, d = !1, f = !1, p = Promise.resolve(), h = () => {}, g = new Promise((e) => {
477
- h = e;
478
- });
479
- async function _() {
480
- try {
481
- return await u?.call("reload"), !0;
482
- } catch (e) {
483
- return W(c, "reload failed", U(e), Y), !1;
600
+ async function Z(e) {
601
+ let t = e.cwd ?? process.cwd(), n = await E(t), r = await Se(t);
602
+ try {
603
+ let r = n.outDir, i = e.bundler ?? G, o = e.stdout ?? process.stdout, s = e.stderr ?? process.stderr, c = e.entry ?? n.entry ?? await K(t), l = await De(t, o), u = l ? O(l) : await k(t), d = await Oe(t, l, e.hostBin, o) ?? e.hostBin, f, p = !1, m = !1, g = Promise.resolve(), _ = () => {}, v = new Promise((e) => {
604
+ _ = e;
605
+ });
606
+ async function y() {
607
+ try {
608
+ return await f?.call("reload", void 0, Te), !0;
609
+ } catch (e) {
610
+ return W(s, "reload failed", U(e), X), !1;
611
+ }
484
612
  }
485
- }
486
- async function v(n) {
487
- if (await de(n.outDir, n.files), !u) {
488
- let t = new oe({
489
- entryFile: n.entryFile,
490
- hostBin: e.hostBin,
491
- onStderr: (e) => c.write(e),
613
+ async function b(e) {
614
+ let t = new L({
615
+ entryFile: e,
616
+ hostBin: d,
617
+ onStderr: (e) => s.write(e),
492
618
  onReady: () => {
493
- d = !0, R(s, "ready", Y), f && (f = !1, _());
619
+ p = !0, V(o, "ready", X), m && (m = !1, y());
494
620
  },
495
- onAppError: (e) => W(c, "app error", e, Y),
621
+ onAppError: (e) => W(s, "app error", e, X),
496
622
  onExit: () => {
497
- R(s, "host exited — stopping", Y), h();
623
+ V(o, "host exited — stopping", X), _();
498
624
  }
499
625
  });
500
626
  try {
501
627
  await t.start();
502
628
  } catch (e) {
503
- W(c, "failed to start inca-host", U(e), Y);
629
+ W(s, "failed to start inca-host", U(e), X);
504
630
  return;
505
631
  }
506
- u = t;
507
- return;
632
+ f = t;
508
633
  }
509
- if (!d) {
510
- f = !0;
511
- return;
512
- }
513
- if (await _() && n.changed) {
514
- let e = m("dim", a.relative(t, n.changed.file), { stream: s }), r = Date.now() - n.changed.at;
515
- R(s, `${m("green", "reload")} ${e} (${r}ms)`, Y);
634
+ async function x(e) {
635
+ if (await ke(e.outDir, e.files), !f) {
636
+ await b(e.entryFile);
637
+ return;
638
+ }
639
+ if (!p) {
640
+ m = !0;
641
+ return;
642
+ }
643
+ if (await y() && e.changed) {
644
+ let n = h("dim", a.relative(t, e.changed.file), { stream: o }), r = Date.now() - e.changed.at;
645
+ V(o, `${h("green", "reload")} ${n} (${r}ms)`, X);
646
+ }
516
647
  }
648
+ let S = await i.watch({
649
+ entry: c,
650
+ outDir: r,
651
+ runtimeConfig: u,
652
+ mode: "development",
653
+ stdout: o,
654
+ stderr: s,
655
+ onBuild: (e) => {
656
+ g = g.then(() => x(e));
657
+ },
658
+ onError: (e) => {
659
+ W(s, "build failed", e, X);
660
+ }
661
+ });
662
+ e.signal.aborted ? _() : e.signal.addEventListener("abort", () => _(), { once: !0 }), await v, await g, await f?.stop(), await S.close();
663
+ } finally {
664
+ await r();
517
665
  }
518
- let y = await o.watch({
519
- entry: l,
520
- outDir: i,
521
- mode: "development",
522
- stdout: s,
523
- stderr: c,
524
- onBuild: (e) => {
525
- p = p.then(() => v(e));
526
- },
527
- onError: (e) => {
528
- W(c, "build failed", e, Y);
529
- }
530
- });
531
- e.signal.aborted ? h() : e.signal.addEventListener("abort", () => h(), { once: !0 }), await g, await p, await u?.stop(), await y.close(), await r();
532
- }
533
- //#endregion
534
- //#region src/plist.mts
535
- function X(e) {
536
- return e.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;");
537
- }
538
- function pe(e) {
539
- return typeof e == "boolean" ? e ? "<true/>" : "<false/>" : `<string>${X(e)}</string>`;
540
- }
541
- function me(e) {
542
- return `<?xml version="1.0" encoding="UTF-8"?>
543
- <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
544
- <plist version="1.0">
545
- <dict>
546
- ${Object.entries(e).map(([e, t]) => `\t<key>${X(e)}</key>\n\t${pe(t)}`).join("\n")}\n</dict>
547
- </plist>
548
- `;
549
666
  }
550
667
  //#endregion
551
668
  //#region src/package.mts
552
- function he() {
669
+ function Ae() {
553
670
  if (process.platform === "darwin") return "macos";
554
671
  if (process.platform === "linux") return "linux";
555
- throw new S("ERR_INCA_PLATFORM_UNSUPPORTED", `inca package doesn't support ${process.platform} yet`);
672
+ throw new C("ERR_INCA_PLATFORM_UNSUPPORTED", `inca package doesn't support ${process.platform} yet`);
556
673
  }
557
- async function Z(e, t) {
674
+ async function Q(e, t) {
558
675
  await Promise.all(e.files.map(async (n) => {
559
676
  let r = a.join(t, n);
560
- await l(a.dirname(r), { recursive: !0 }), await c(a.join(e.outDir, n), r);
677
+ await u(a.dirname(r), { recursive: !0 }), await c(a.join(e.outDir, n), r);
561
678
  }));
562
679
  }
563
- async function Q({ metadata: e, output: t, hostBin: n }) {
564
- let r = a.join(t.outDir, `${e.productName}.app`);
565
- await f(r, {
566
- recursive: !0,
567
- force: !0
680
+ async function je({ metadata: e, output: t, hostBin: n }) {
681
+ let { appPath: r, resourcesDir: i } = await Y({
682
+ appPath: a.join(t.outDir, `${e.productName}.app`),
683
+ metadata: e,
684
+ hostBin: n
568
685
  });
569
- let i = a.join(r, "Contents"), o = a.join(i, "MacOS"), u = a.join(i, "Resources");
570
- await l(o, { recursive: !0 }), await l(u, { recursive: !0 });
571
- let d = a.join(o, e.productName);
572
- await c(n, d), await s(d, 493), await Z(t, u);
573
- let m = {
574
- CFBundleName: e.productName,
575
- CFBundleDisplayName: e.productName,
576
- CFBundleExecutable: e.productName,
577
- CFBundleIdentifier: e.identifier,
578
- CFBundleVersion: e.version,
579
- CFBundleShortVersionString: e.version,
580
- CFBundlePackageType: "APPL",
581
- CFBundleInfoDictionaryVersion: "6.0",
582
- NSHighResolutionCapable: !0
583
- };
584
- if (e.icon) {
585
- let t = a.basename(e.icon);
586
- await c(e.icon, a.join(u, t)), m.CFBundleIconFile = t;
587
- }
588
- return await p(a.join(i, "Info.plist"), me(m)), await p(a.join(i, "PkgInfo"), "APPL????"), r;
686
+ return await Q(t, i), r;
589
687
  }
590
- async function ge({ metadata: t, output: n, hostBin: r }) {
688
+ async function Me({ metadata: t, output: n, hostBin: r }) {
591
689
  let i = e(t.productName), o = a.join(n.outDir, i);
592
- await f(o, {
690
+ await p(o, {
593
691
  recursive: !0,
594
692
  force: !0
595
- }), await l(o, { recursive: !0 });
596
- let u = a.join(o, i);
597
- return await c(r, u), await s(u, 493), await Z(n, o), o;
598
- }
599
- async function _e(e = {}) {
600
- let t = e.cwd ?? process.cwd(), n = e.stdout ?? process.stdout, r = e.target ?? he(), i = await ee(t);
601
- i.usedPackageJsonKey && R(n, "the \"inca\" key in package.json is deprecated — move these settings to inca.config.ts"), i.identifierIsDefault && R(n, `no "identifier" set in inca.config.ts — using generated identifier ${i.identifier}`);
602
- let a = await J({
693
+ }), await u(o, { recursive: !0 });
694
+ let l = a.join(o, i);
695
+ return await c(r, l), await s(l, 493), await Q(n, o), o;
696
+ }
697
+ async function Ne(e = {}) {
698
+ let t = e.cwd ?? process.cwd(), n = e.stdout ?? process.stdout, r = e.target ?? Ae(), i = await D(t);
699
+ i.usedPackageJsonKey && V(n, "the \"inca\" key in package.json is deprecated — move these settings to inca.config.ts"), i.identifierIsDefault && V(n, `no "identifier" set in inca.config.ts — using generated identifier ${i.identifier}`);
700
+ let a = await q({
603
701
  cwd: t,
604
702
  entry: e.entry,
605
703
  config: i,
704
+ runtimeConfig: O(i),
606
705
  bundler: e.bundler,
607
706
  stdout: n,
608
707
  stderr: e.stderr
609
- }), s = e.hostBin ?? N();
610
- if (!o(s)) throw new S("ERR_INCA_HOST_BIN_NOT_FOUND", `no host binary at ${s} — check that it was built and is executable`);
708
+ }), s = e.hostBin ?? P();
709
+ if (!o(s)) throw new C("ERR_INCA_HOST_BIN_NOT_FOUND", `no host binary at ${s} — check that it was built and is executable`);
611
710
  let c = {
612
711
  metadata: i,
613
712
  output: a,
614
713
  hostBin: s
615
714
  };
616
- return { appPath: r === "macos" ? await Q(c) : await ge(c) };
715
+ return { appPath: r === "macos" ? await je(c) : await Me(c) };
617
716
  }
618
717
  //#endregion
619
718
  //#region src/cli.mts
620
- var ve = "Usage: inca <dev|build|package>";
719
+ var Pe = "Usage: inca <dev|build|package>";
621
720
  function $(e) {
622
721
  return a.relative(process.cwd(), e);
623
722
  }
624
- async function ye(e = process.argv) {
723
+ async function Fe(e = process.argv) {
625
724
  let t = e[2];
626
725
  if (t === "build") {
627
726
  try {
628
- let e = await J();
629
- R(process.stdout, `built ${$(e.entryFile)}`);
727
+ let e = await q();
728
+ V(process.stdout, `built ${$(e.entryFile)}`);
630
729
  } catch (e) {
631
730
  W(process.stderr, "build failed", U(e)), process.exitCode = 1;
632
731
  }
@@ -634,26 +733,26 @@ async function ye(e = process.argv) {
634
733
  }
635
734
  if (t === "package") {
636
735
  try {
637
- let { appPath: e } = await _e();
638
- R(process.stdout, `packaged ${$(e)}`);
736
+ let { appPath: e } = await Ne();
737
+ V(process.stdout, `packaged ${$(e)}`);
639
738
  } catch (e) {
640
739
  W(process.stderr, "package failed", U(e)), process.exitCode = 1;
641
740
  }
642
741
  return;
643
742
  }
644
743
  if (t !== "dev") {
645
- process.stderr.write(`${ve}\n`), process.exitCode = 1;
744
+ process.stderr.write(`${Pe}\n`), process.exitCode = 1;
646
745
  return;
647
746
  }
648
747
  let n = new AbortController(), r = () => {
649
- n.signal.aborted || (R(process.stderr, "shutting down", { timestamp: !0 }), n.abort());
748
+ n.signal.aborted || (V(process.stderr, "shutting down", { timestamp: !0 }), n.abort());
650
749
  };
651
750
  process.on("SIGINT", r), process.on("SIGTERM", r);
652
751
  try {
653
- await fe({ signal: n.signal });
752
+ await Z({ signal: n.signal });
654
753
  } catch (e) {
655
754
  W(process.stderr, "dev failed", U(e), { timestamp: !0 }), process.exitCode = 1;
656
755
  }
657
756
  }
658
757
  //#endregion
659
- export { ye as run };
758
+ export { Fe as run };