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