@akanjs/cli 2.1.0-rc.1 → 2.1.0-rc.3
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/incrementalBuilder.proc.js +9661 -0
- package/index.js +178 -24
- package/package.json +2 -2
package/index.js
CHANGED
|
@@ -1959,6 +1959,45 @@ var staticTemplateFileExtensions = new Set([
|
|
|
1959
1959
|
".woff2",
|
|
1960
1960
|
".xml"
|
|
1961
1961
|
]);
|
|
1962
|
+
var formatCommandArg = (value) => /^[\w@%+=:,./-]+$/.test(value) ? value : JSON.stringify(value);
|
|
1963
|
+
var formatCommandForDisplay = (command, args = []) => [command, ...args].map(formatCommandArg).join(" ");
|
|
1964
|
+
|
|
1965
|
+
class CommandExecutionError extends Error {
|
|
1966
|
+
command;
|
|
1967
|
+
args;
|
|
1968
|
+
cwd;
|
|
1969
|
+
code;
|
|
1970
|
+
signal;
|
|
1971
|
+
stdout;
|
|
1972
|
+
stderr;
|
|
1973
|
+
constructor({
|
|
1974
|
+
command,
|
|
1975
|
+
args = [],
|
|
1976
|
+
cwd,
|
|
1977
|
+
code,
|
|
1978
|
+
signal,
|
|
1979
|
+
stdout = "",
|
|
1980
|
+
stderr = "",
|
|
1981
|
+
cause
|
|
1982
|
+
}) {
|
|
1983
|
+
const displayCommand = formatCommandForDisplay(command, args);
|
|
1984
|
+
const status = signal ? `signal: ${signal}` : `exit code: ${code ?? "unknown"}`;
|
|
1985
|
+
const output = (stderr || stdout).trim();
|
|
1986
|
+
super([`Command failed: ${displayCommand}`, `cwd: ${cwd}`, status, output ? `
|
|
1987
|
+
${output}` : ""].join(`
|
|
1988
|
+
`), {
|
|
1989
|
+
cause
|
|
1990
|
+
});
|
|
1991
|
+
this.name = "CommandExecutionError";
|
|
1992
|
+
this.command = command;
|
|
1993
|
+
this.args = args;
|
|
1994
|
+
this.cwd = cwd;
|
|
1995
|
+
this.code = code;
|
|
1996
|
+
this.signal = signal;
|
|
1997
|
+
this.stdout = stdout;
|
|
1998
|
+
this.stderr = stderr;
|
|
1999
|
+
}
|
|
2000
|
+
}
|
|
1962
2001
|
var execEmoji = {
|
|
1963
2002
|
workspace: "\uD83C\uDFE0",
|
|
1964
2003
|
app: "\uD83D\uDE80",
|
|
@@ -2089,23 +2128,32 @@ class Executor {
|
|
|
2089
2128
|
Logger4.raw(chalk4.red(data.toString()));
|
|
2090
2129
|
}
|
|
2091
2130
|
exec(command, options = {}) {
|
|
2131
|
+
const cwd = options.cwd?.toString() ?? this.cwdPath;
|
|
2092
2132
|
const proc = exec(command, { cwd: this.cwdPath, ...options });
|
|
2133
|
+
let stdout = "";
|
|
2134
|
+
let stderr = "";
|
|
2093
2135
|
proc.stdout?.on("data", (data) => {
|
|
2136
|
+
stdout += data.toString();
|
|
2094
2137
|
this.#stdout(data);
|
|
2095
2138
|
});
|
|
2096
2139
|
proc.stderr?.on("data", (data) => {
|
|
2140
|
+
stderr += data.toString();
|
|
2097
2141
|
this.#stdout(data);
|
|
2098
2142
|
});
|
|
2099
2143
|
return new Promise((resolve, reject) => {
|
|
2144
|
+
proc.on("error", (error) => {
|
|
2145
|
+
reject(new CommandExecutionError({ command, cwd, code: null, signal: null, stdout, stderr, cause: error }));
|
|
2146
|
+
});
|
|
2100
2147
|
proc.on("exit", (code, signal) => {
|
|
2101
2148
|
if (!!code || signal)
|
|
2102
|
-
reject({ code, signal });
|
|
2149
|
+
reject(new CommandExecutionError({ command, cwd, code, signal, stdout, stderr }));
|
|
2103
2150
|
else
|
|
2104
2151
|
resolve({ code, signal });
|
|
2105
2152
|
});
|
|
2106
2153
|
});
|
|
2107
2154
|
}
|
|
2108
2155
|
spawn(command, args = [], options = {}) {
|
|
2156
|
+
const cwd = options.cwd?.toString() ?? this.cwdPath;
|
|
2109
2157
|
const proc = spawn(command, args, {
|
|
2110
2158
|
cwd: this.cwdPath,
|
|
2111
2159
|
...options
|
|
@@ -2123,9 +2171,12 @@ class Executor {
|
|
|
2123
2171
|
this.#stdout(data);
|
|
2124
2172
|
});
|
|
2125
2173
|
return new Promise((resolve, reject) => {
|
|
2174
|
+
proc.on("error", (error) => {
|
|
2175
|
+
reject(new CommandExecutionError({ command, args, cwd, code: null, signal: null, stdout, stderr, cause: error }));
|
|
2176
|
+
});
|
|
2126
2177
|
proc.on("close", (code, signal) => {
|
|
2127
2178
|
if (code !== 0 || signal)
|
|
2128
|
-
reject(
|
|
2179
|
+
reject(new CommandExecutionError({ command, args, cwd, code, signal, stdout, stderr }));
|
|
2129
2180
|
else
|
|
2130
2181
|
resolve(stdout);
|
|
2131
2182
|
});
|
|
@@ -2139,20 +2190,37 @@ class Executor {
|
|
|
2139
2190
|
return proc;
|
|
2140
2191
|
}
|
|
2141
2192
|
fork(modulePath, args = [], options = {}) {
|
|
2193
|
+
const cwd = options.cwd?.toString() ?? this.cwdPath;
|
|
2142
2194
|
const proc = fork(modulePath, args, {
|
|
2143
2195
|
cwd: this.cwdPath,
|
|
2144
2196
|
...options
|
|
2145
2197
|
});
|
|
2198
|
+
let stdout = "";
|
|
2199
|
+
let stderr = "";
|
|
2146
2200
|
proc.stdout?.on("data", (data) => {
|
|
2201
|
+
stdout += data.toString();
|
|
2147
2202
|
this.#stdout(data);
|
|
2148
2203
|
});
|
|
2149
2204
|
proc.stderr?.on("data", (data) => {
|
|
2205
|
+
stderr += data.toString();
|
|
2150
2206
|
this.#stderr(data);
|
|
2151
2207
|
});
|
|
2152
2208
|
return new Promise((resolve, reject) => {
|
|
2209
|
+
proc.on("error", (error) => {
|
|
2210
|
+
reject(new CommandExecutionError({
|
|
2211
|
+
command: modulePath,
|
|
2212
|
+
args,
|
|
2213
|
+
cwd,
|
|
2214
|
+
code: null,
|
|
2215
|
+
signal: null,
|
|
2216
|
+
stdout,
|
|
2217
|
+
stderr,
|
|
2218
|
+
cause: error
|
|
2219
|
+
}));
|
|
2220
|
+
});
|
|
2153
2221
|
proc.on("exit", (code, signal) => {
|
|
2154
2222
|
if (!!code || signal)
|
|
2155
|
-
reject({ code, signal });
|
|
2223
|
+
reject(new CommandExecutionError({ command: modulePath, args, cwd, code, signal, stdout, stderr }));
|
|
2156
2224
|
else
|
|
2157
2225
|
resolve({ code, signal });
|
|
2158
2226
|
});
|
|
@@ -3374,6 +3442,7 @@ class IncrementalBuilderHost {
|
|
|
3374
3442
|
const candidates = [
|
|
3375
3443
|
path8.join(app.workspace.workspaceRoot, "pkgs/@akanjs/devkit/incrementalBuilder/incrementalBuilder.proc.ts"),
|
|
3376
3444
|
path8.join(app.workspace.workspaceRoot, "node_modules/@akanjs/devkit/incrementalBuilder/incrementalBuilder.proc.ts"),
|
|
3445
|
+
path8.join(import.meta.dir, "incrementalBuilder.proc.js"),
|
|
3377
3446
|
path8.join(import.meta.dir, "incrementalBuilder.proc.ts")
|
|
3378
3447
|
];
|
|
3379
3448
|
for (const c of candidates)
|
|
@@ -5793,9 +5862,9 @@ class CssImportResolver {
|
|
|
5793
5862
|
}
|
|
5794
5863
|
async resolve(id, fromBase) {
|
|
5795
5864
|
for (const resolve of [
|
|
5865
|
+
() => this.#resolveWithTsconfig(id),
|
|
5796
5866
|
() => this.#resolveWithBun(id, fromBase),
|
|
5797
5867
|
() => this.#resolveWithRequire(id, fromBase),
|
|
5798
|
-
() => this.#resolveWithTsconfig(id),
|
|
5799
5868
|
() => this.#resolvePackageStyle(id, fromBase)
|
|
5800
5869
|
]) {
|
|
5801
5870
|
const resolved = await resolve();
|
|
@@ -5805,20 +5874,24 @@ class CssImportResolver {
|
|
|
5805
5874
|
return null;
|
|
5806
5875
|
}
|
|
5807
5876
|
#resolveWithBun(id, fromBase) {
|
|
5808
|
-
|
|
5809
|
-
|
|
5810
|
-
|
|
5811
|
-
|
|
5812
|
-
|
|
5877
|
+
for (const base of this.#resolutionBases(fromBase)) {
|
|
5878
|
+
try {
|
|
5879
|
+
const resolved = Bun.resolveSync(id, base);
|
|
5880
|
+
if (CssImportResolver.isCssFile(resolved))
|
|
5881
|
+
return resolved;
|
|
5882
|
+
} catch {}
|
|
5813
5883
|
}
|
|
5884
|
+
return null;
|
|
5814
5885
|
}
|
|
5815
5886
|
#resolveWithRequire(id, fromBase) {
|
|
5816
|
-
|
|
5817
|
-
|
|
5818
|
-
|
|
5819
|
-
|
|
5820
|
-
|
|
5887
|
+
for (const base of this.#resolutionBases(fromBase)) {
|
|
5888
|
+
try {
|
|
5889
|
+
const resolved = __require.resolve(id, { paths: [base] });
|
|
5890
|
+
if (CssImportResolver.isCssFile(resolved))
|
|
5891
|
+
return resolved;
|
|
5892
|
+
} catch {}
|
|
5821
5893
|
}
|
|
5894
|
+
return null;
|
|
5822
5895
|
}
|
|
5823
5896
|
async#resolveWithTsconfig(id) {
|
|
5824
5897
|
const exact = this.#paths[id];
|
|
@@ -5846,8 +5919,25 @@ class CssImportResolver {
|
|
|
5846
5919
|
const pkgName = CssImportResolver.getPackageName(id);
|
|
5847
5920
|
if (!pkgName)
|
|
5848
5921
|
return null;
|
|
5922
|
+
for (const base of this.#resolutionBases(fromBase)) {
|
|
5923
|
+
try {
|
|
5924
|
+
const pkgPath = __require.resolve(`${pkgName}/package.json`, { paths: [base] });
|
|
5925
|
+
const resolved = await this.#resolvePackageStyleFromPackageJson(id, pkgName, pkgPath);
|
|
5926
|
+
if (resolved)
|
|
5927
|
+
return resolved;
|
|
5928
|
+
} catch {}
|
|
5929
|
+
}
|
|
5930
|
+
for (const pkgPath of this.#packageJsonCandidates(pkgName)) {
|
|
5931
|
+
const resolved = await this.#resolvePackageStyleFromPackageJson(id, pkgName, pkgPath);
|
|
5932
|
+
if (resolved)
|
|
5933
|
+
return resolved;
|
|
5934
|
+
}
|
|
5935
|
+
return null;
|
|
5936
|
+
}
|
|
5937
|
+
async#resolvePackageStyleFromPackageJson(id, pkgName, pkgPath) {
|
|
5849
5938
|
try {
|
|
5850
|
-
|
|
5939
|
+
if (!await Bun.file(pkgPath).exists())
|
|
5940
|
+
return null;
|
|
5851
5941
|
const pkgDir = path22.dirname(pkgPath);
|
|
5852
5942
|
const pkg = await Bun.file(pkgPath).json();
|
|
5853
5943
|
const subpath = id === pkgName ? "." : `.${id.slice(pkgName.length)}`;
|
|
@@ -5858,6 +5948,22 @@ class CssImportResolver {
|
|
|
5858
5948
|
return null;
|
|
5859
5949
|
}
|
|
5860
5950
|
}
|
|
5951
|
+
#resolutionBases(fromBase) {
|
|
5952
|
+
return [
|
|
5953
|
+
fromBase,
|
|
5954
|
+
this.#workspaceRoot,
|
|
5955
|
+
path22.dirname(Bun.main),
|
|
5956
|
+
path22.resolve(path22.dirname(Bun.main), "../..")
|
|
5957
|
+
];
|
|
5958
|
+
}
|
|
5959
|
+
#packageJsonCandidates(pkgName) {
|
|
5960
|
+
return [
|
|
5961
|
+
path22.join(this.#workspaceRoot, "pkgs", pkgName, "package.json"),
|
|
5962
|
+
path22.join(this.#workspaceRoot, "node_modules", pkgName, "package.json"),
|
|
5963
|
+
path22.join(path22.dirname(Bun.main), "node_modules", pkgName, "package.json"),
|
|
5964
|
+
path22.join(path22.dirname(Bun.main), "../../", pkgName, "package.json")
|
|
5965
|
+
];
|
|
5966
|
+
}
|
|
5861
5967
|
async#firstExisting(basePath2) {
|
|
5862
5968
|
for (const suffix of CSS_IMPORT_EXTS) {
|
|
5863
5969
|
const candidate = `${basePath2}${suffix}`;
|
|
@@ -6982,14 +7088,23 @@ class SsrBaseArtifactBuilder {
|
|
|
6982
7088
|
async#resolveAkanServerPath() {
|
|
6983
7089
|
const candidates = [
|
|
6984
7090
|
path30.join(this.#app.workspace.workspaceRoot, "pkgs/akanjs/server"),
|
|
7091
|
+
path30.join(this.#app.workspace.workspaceRoot, "node_modules/akanjs/server"),
|
|
7092
|
+
path30.join(path30.dirname(Bun.main), "node_modules/akanjs/server"),
|
|
7093
|
+
path30.join(path30.dirname(Bun.main), "../../akanjs/server"),
|
|
6985
7094
|
path30.resolve(import.meta.dir, "../../server"),
|
|
6986
7095
|
path30.resolve(import.meta.dir, "../server")
|
|
6987
7096
|
];
|
|
7097
|
+
try {
|
|
7098
|
+
candidates.unshift(path30.dirname(Bun.resolveSync("akanjs/server", this.#app.workspace.workspaceRoot)));
|
|
7099
|
+
} catch {}
|
|
7100
|
+
try {
|
|
7101
|
+
candidates.unshift(path30.dirname(Bun.resolveSync("akanjs/server", path30.dirname(Bun.main))));
|
|
7102
|
+
} catch {}
|
|
6988
7103
|
for (const candidate of candidates) {
|
|
6989
7104
|
if (await Bun.file(path30.join(candidate, "rscClient.tsx")).exists())
|
|
6990
7105
|
return candidate;
|
|
6991
7106
|
}
|
|
6992
|
-
|
|
7107
|
+
throw new Error(`[base-artifact] failed to locate akanjs/server; looked in: ${candidates.join(", ")}`);
|
|
6993
7108
|
}
|
|
6994
7109
|
async#buildStyleAssets() {
|
|
6995
7110
|
const cssCompiler = new CssCompiler(this.#app);
|
|
@@ -8247,8 +8362,8 @@ var Pkg = createInternalArgToken("Pkg");
|
|
|
8247
8362
|
var Module = createInternalArgToken("Module");
|
|
8248
8363
|
var Workspace = createInternalArgToken("Workspace");
|
|
8249
8364
|
// pkgs/@akanjs/devkit/commandDecorators/command.ts
|
|
8250
|
-
import { confirm, input as input2, select as select2 } from "@inquirer/prompts";
|
|
8251
8365
|
import path35 from "path";
|
|
8366
|
+
import { confirm, input as input2, select as select2 } from "@inquirer/prompts";
|
|
8252
8367
|
import { Logger as Logger11 } from "akanjs/common";
|
|
8253
8368
|
import chalk6 from "chalk";
|
|
8254
8369
|
import { program } from "commander";
|
|
@@ -8506,6 +8621,37 @@ var formatCommandHelp = (command, key) => {
|
|
|
8506
8621
|
|
|
8507
8622
|
// pkgs/@akanjs/devkit/commandDecorators/command.ts
|
|
8508
8623
|
var camelToKebabCase2 = (str) => str.replace(/([A-Z])/g, "-$1").toLowerCase();
|
|
8624
|
+
var loggedCliErrorObjects = new WeakSet;
|
|
8625
|
+
var loggedCliErrorMessages = new Set;
|
|
8626
|
+
var formatCliError = (error) => {
|
|
8627
|
+
if (error instanceof Error)
|
|
8628
|
+
return error.message || error.name;
|
|
8629
|
+
if (typeof error === "string")
|
|
8630
|
+
return error.trim() || "Unknown error";
|
|
8631
|
+
if (error === null || error === undefined)
|
|
8632
|
+
return "Unknown error";
|
|
8633
|
+
try {
|
|
8634
|
+
const json = JSON.stringify(error);
|
|
8635
|
+
if (json)
|
|
8636
|
+
return json;
|
|
8637
|
+
} catch {
|
|
8638
|
+
return String(error);
|
|
8639
|
+
}
|
|
8640
|
+
return String(error) || "Unknown error";
|
|
8641
|
+
};
|
|
8642
|
+
var printCliError = (error) => {
|
|
8643
|
+
if (typeof error === "object" && error !== null) {
|
|
8644
|
+
if (loggedCliErrorObjects.has(error))
|
|
8645
|
+
return;
|
|
8646
|
+
loggedCliErrorObjects.add(error);
|
|
8647
|
+
}
|
|
8648
|
+
const message = formatCliError(error);
|
|
8649
|
+
if (loggedCliErrorMessages.has(message))
|
|
8650
|
+
return;
|
|
8651
|
+
loggedCliErrorMessages.add(message);
|
|
8652
|
+
Logger11.rawLog(`
|
|
8653
|
+
${chalk6.red(message)}`);
|
|
8654
|
+
};
|
|
8509
8655
|
var handleOption = (programCommand, argMeta) => {
|
|
8510
8656
|
const {
|
|
8511
8657
|
type,
|
|
@@ -8712,6 +8858,7 @@ var getInternalArgumentValue = async (argMeta, value, workspace) => {
|
|
|
8712
8858
|
};
|
|
8713
8859
|
var runCommands = async (...commands) => {
|
|
8714
8860
|
process.on("unhandledRejection", (error) => {
|
|
8861
|
+
printCliError(error);
|
|
8715
8862
|
process.exit(1);
|
|
8716
8863
|
});
|
|
8717
8864
|
const __dirname2 = getDirname(import.meta.url);
|
|
@@ -8802,9 +8949,7 @@ It may cause unexpected behavior. Run \`akan update\` to update latest akanjs.`)
|
|
|
8802
8949
|
await targetMeta.handler.call(cmd, ...commandArgs);
|
|
8803
8950
|
Logger11.rawLog();
|
|
8804
8951
|
} catch (e) {
|
|
8805
|
-
|
|
8806
|
-
Logger11.rawLog(`
|
|
8807
|
-
${chalk6.red(errMsg)}`);
|
|
8952
|
+
printCliError(e);
|
|
8808
8953
|
throw e;
|
|
8809
8954
|
}
|
|
8810
8955
|
});
|
|
@@ -9582,8 +9727,15 @@ class ApplicationRunner extends runner("application") {
|
|
|
9582
9727
|
cwd: `${workspace.workspaceRoot}/local`
|
|
9583
9728
|
});
|
|
9584
9729
|
return wasAlreadyUp;
|
|
9585
|
-
} catch {
|
|
9586
|
-
|
|
9730
|
+
} catch (error) {
|
|
9731
|
+
const detail = error instanceof Error ? error.message : typeof error === "string" ? error : JSON.stringify(error) || "Unknown error";
|
|
9732
|
+
throw new Error([
|
|
9733
|
+
"Docker daemon may not be running. Please install Docker or start the Docker daemon and try again.",
|
|
9734
|
+
`Original error:
|
|
9735
|
+
${detail}`
|
|
9736
|
+
].join(`
|
|
9737
|
+
|
|
9738
|
+
`));
|
|
9587
9739
|
}
|
|
9588
9740
|
}
|
|
9589
9741
|
async dbdown(workspace) {
|
|
@@ -11465,16 +11617,18 @@ class WorkspaceRunner extends runner("workspace") {
|
|
|
11465
11617
|
workspace.getPackageJson(),
|
|
11466
11618
|
this.#getAkanPeerDependencies()
|
|
11467
11619
|
]);
|
|
11620
|
+
const { typescript, ...dependencies } = peerDependencies;
|
|
11468
11621
|
const packageJson = {
|
|
11469
11622
|
...rootPackageJson,
|
|
11470
11623
|
dependencies: {
|
|
11471
11624
|
...rootPackageJson.dependencies,
|
|
11472
|
-
...
|
|
11625
|
+
...dependencies,
|
|
11473
11626
|
akanjs: akanVersion
|
|
11474
11627
|
},
|
|
11475
11628
|
devDependencies: {
|
|
11476
11629
|
...rootPackageJson.devDependencies,
|
|
11477
|
-
"@types/bun": latestTypesBunVersion
|
|
11630
|
+
"@types/bun": latestTypesBunVersion,
|
|
11631
|
+
...typescript ? { typescript } : {}
|
|
11478
11632
|
}
|
|
11479
11633
|
};
|
|
11480
11634
|
await workspace.setPackageJson(packageJson);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@akanjs/cli",
|
|
3
|
-
"version": "2.1.0-rc.
|
|
3
|
+
"version": "2.1.0-rc.3",
|
|
4
4
|
"sourceType": "module",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"publishConfig": {
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"@langchain/deepseek": "^1.0.26",
|
|
35
35
|
"@langchain/openai": "^1.4.6",
|
|
36
36
|
"@trapezedev/project": "^7.1.4",
|
|
37
|
-
"akanjs": "2.1.0-rc.
|
|
37
|
+
"akanjs": "2.1.0-rc.3",
|
|
38
38
|
"chalk": "^5.6.2",
|
|
39
39
|
"commander": "^14.0.3",
|
|
40
40
|
"fontaine": "^0.8.0",
|