@akanjs/cli 2.1.1 → 2.1.2-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/incrementalBuilder.proc.js +120 -124
- package/index.js +228 -187
- package/package.json +2 -2
- package/templates/lib/dict.ts +5 -2
- package/templates/lib/useClient.ts +6 -2
|
@@ -205,11 +205,13 @@ class HttpClient {
|
|
|
205
205
|
class CloudApi {
|
|
206
206
|
#api;
|
|
207
207
|
#accessToken = null;
|
|
208
|
-
|
|
208
|
+
#workspace;
|
|
209
|
+
static async fromHost(workspace, host) {
|
|
209
210
|
const hostConfig = await GlobalConfig.getHostConfig(host);
|
|
210
|
-
return new CloudApi(hostConfig);
|
|
211
|
+
return new CloudApi(workspace, hostConfig);
|
|
211
212
|
}
|
|
212
|
-
constructor(hostConfig) {
|
|
213
|
+
constructor(workspace, hostConfig) {
|
|
214
|
+
this.#workspace = workspace;
|
|
213
215
|
const host = akanCloudHost;
|
|
214
216
|
this.#api = new HttpClient(`${host}/api`);
|
|
215
217
|
this.#accessToken = hostConfig.auth?.accessToken ?? null;
|
|
@@ -225,16 +227,17 @@ class CloudApi {
|
|
|
225
227
|
const data = await this.#api.post(`/uploadEnv/${devProjectId}`, formData);
|
|
226
228
|
return data;
|
|
227
229
|
}
|
|
228
|
-
async downloadEnv(devProjectId
|
|
230
|
+
async downloadEnv(devProjectId) {
|
|
231
|
+
const localPath = `${this.#workspace.workspaceRoot}/local/env.tar`;
|
|
229
232
|
await this.#api.getFile(`/downloadEnv/${devProjectId}`, localPath);
|
|
230
233
|
}
|
|
231
234
|
async getRemoteAuthToken(remoteId) {
|
|
232
235
|
try {
|
|
233
236
|
if (this.#accessToken) {
|
|
234
237
|
if (GlobalConfig.needRefreshToken(this.#accessToken))
|
|
235
|
-
return await this
|
|
238
|
+
return await this.#refreshAuthToken();
|
|
236
239
|
else
|
|
237
|
-
return await this
|
|
240
|
+
return await this.#refreshAuthToken();
|
|
238
241
|
}
|
|
239
242
|
const accessToken = await this.#api.get(`/getRemoteAuthToken/${remoteId}`);
|
|
240
243
|
this.#accessToken = GlobalConfig.toAccessToken(accessToken);
|
|
@@ -246,10 +249,14 @@ class CloudApi {
|
|
|
246
249
|
return null;
|
|
247
250
|
}
|
|
248
251
|
}
|
|
249
|
-
async
|
|
250
|
-
const
|
|
251
|
-
|
|
252
|
-
|
|
252
|
+
async#refreshAuthToken() {
|
|
253
|
+
const refreshToken = this.#accessToken?.refreshToken;
|
|
254
|
+
if (!refreshToken)
|
|
255
|
+
throw new Error("No refresh token");
|
|
256
|
+
return await this.refreshAuthToken(refreshToken);
|
|
257
|
+
}
|
|
258
|
+
async refreshAuthToken(refreshToken) {
|
|
259
|
+
const response = await this.#api.post(`/refreshRemoteAuthToken`, { refreshToken });
|
|
253
260
|
this.#accessToken = GlobalConfig.toAccessToken(response);
|
|
254
261
|
this.#api.setHeaders({ Authorization: `Bearer ${this.#accessToken.jwt}` });
|
|
255
262
|
return this.#accessToken;
|
|
@@ -652,12 +659,7 @@ import {
|
|
|
652
659
|
spawn as spawn2
|
|
653
660
|
} from "child_process";
|
|
654
661
|
import { readFileSync as readFileSync3 } from "fs";
|
|
655
|
-
import {
|
|
656
|
-
copyFile,
|
|
657
|
-
mkdir as mkdir2,
|
|
658
|
-
readdir as readDirEntries,
|
|
659
|
-
stat as stat2
|
|
660
|
-
} from "fs/promises";
|
|
662
|
+
import { copyFile, mkdir as mkdir2, readdir as readDirEntries, stat as stat2 } from "fs/promises";
|
|
661
663
|
import path7 from "path";
|
|
662
664
|
import {
|
|
663
665
|
capitalize,
|
|
@@ -709,8 +711,18 @@ var DEFAULT_OPTIMIZE_IMPORTS = [
|
|
|
709
711
|
"mui-core",
|
|
710
712
|
"react-icons/*"
|
|
711
713
|
];
|
|
712
|
-
var WORKSPACE_BARREL_FACETS = [
|
|
713
|
-
|
|
714
|
+
var WORKSPACE_BARREL_FACETS = [
|
|
715
|
+
"ui",
|
|
716
|
+
"webkit",
|
|
717
|
+
"common",
|
|
718
|
+
"client",
|
|
719
|
+
"server"
|
|
720
|
+
];
|
|
721
|
+
var SSR_RUNTIME_PACKAGES = [
|
|
722
|
+
"react",
|
|
723
|
+
"react-dom",
|
|
724
|
+
"react-server-dom-webpack"
|
|
725
|
+
];
|
|
714
726
|
var NATIVE_RUNTIME_PACKAGES = ["sharp"];
|
|
715
727
|
var DEFAULT_BACKEND_RUNTIME_PACKAGES = ["croner"];
|
|
716
728
|
var DATABASE_MODE_RUNTIME_PACKAGES = {
|
|
@@ -770,7 +782,12 @@ class AkanAppConfig {
|
|
|
770
782
|
...libs.flatMap((lib) => WORKSPACE_BARREL_FACETS.map((facet) => `@libs/${lib}/${facet}`)),
|
|
771
783
|
...config?.barrelImports ?? []
|
|
772
784
|
];
|
|
773
|
-
this.optimizeImports = [
|
|
785
|
+
this.optimizeImports = [
|
|
786
|
+
...new Set([
|
|
787
|
+
...DEFAULT_OPTIMIZE_IMPORTS,
|
|
788
|
+
...config?.optimizeImports ?? []
|
|
789
|
+
])
|
|
790
|
+
];
|
|
774
791
|
this.images = mergeImageConfig(config?.images);
|
|
775
792
|
this.i18n = resolveAkanI18nConfig(config?.i18n);
|
|
776
793
|
process.env.AKAN_PUBLIC_DEFAULT_LOCALE = this.i18n.defaultLocale;
|
|
@@ -881,7 +898,13 @@ class AkanAppConfig {
|
|
|
881
898
|
}
|
|
882
899
|
#makeDockerContent(docker) {
|
|
883
900
|
if (docker.content)
|
|
884
|
-
return {
|
|
901
|
+
return {
|
|
902
|
+
content: docker.content,
|
|
903
|
+
image: {},
|
|
904
|
+
preRuns: [],
|
|
905
|
+
postRuns: [],
|
|
906
|
+
command: []
|
|
907
|
+
};
|
|
885
908
|
const preRunScripts = this.#getDockerRunScripts(docker.preRuns ?? []);
|
|
886
909
|
const postRunScripts = this.#getDockerRunScripts(docker.postRuns ?? []);
|
|
887
910
|
const imageScript = docker.image ? this.#getDockerImageScript(docker.image, "oven/bun:1-slim") : "FROM oven/bun:1-slim";
|
|
@@ -912,7 +935,13 @@ ENV AKAN_PUBLIC_LOCALES=${this.i18n.locales.join(",")}
|
|
|
912
935
|
ENV AKAN_PUBLIC_OPERATION_MODE=cloud
|
|
913
936
|
|
|
914
937
|
CMD [${command.map((c) => `"${c}"`).join(",")}]`;
|
|
915
|
-
return {
|
|
938
|
+
return {
|
|
939
|
+
content,
|
|
940
|
+
image: imageScript,
|
|
941
|
+
preRuns: docker.preRuns ?? [],
|
|
942
|
+
postRuns: docker.postRuns ?? [],
|
|
943
|
+
command
|
|
944
|
+
};
|
|
916
945
|
}
|
|
917
946
|
static async from(app) {
|
|
918
947
|
const [configImp, baseDevEnv, libs, rootPackageJson] = await Promise.all([
|
|
@@ -938,9 +967,24 @@ CMD [${command.map((c) => `"${c}"`).join(",")}]`;
|
|
|
938
967
|
...SSR_RUNTIME_PACKAGES,
|
|
939
968
|
...NATIVE_RUNTIME_PACKAGES,
|
|
940
969
|
...DEFAULT_BACKEND_RUNTIME_PACKAGES,
|
|
941
|
-
...
|
|
970
|
+
...this.getDatabaseModeRuntimePackages()
|
|
942
971
|
];
|
|
943
972
|
}
|
|
973
|
+
getDatabaseModeRuntimePackages(databaseMode = this.defaultDatabaseMode) {
|
|
974
|
+
return [...DATABASE_MODE_RUNTIME_PACKAGES[databaseMode]];
|
|
975
|
+
}
|
|
976
|
+
getMissingDatabaseModeDependencySpecs(databaseMode = this.defaultDatabaseMode) {
|
|
977
|
+
const rootDependencies = {
|
|
978
|
+
...this.rootPackageJson.dependencies,
|
|
979
|
+
...this.rootPackageJson.devDependencies
|
|
980
|
+
};
|
|
981
|
+
return this.getDatabaseModeRuntimePackages(databaseMode).filter((lib) => !rootDependencies[lib]).map((lib) => {
|
|
982
|
+
const version = this.#resolveProductionDependencyVersion(lib);
|
|
983
|
+
if (!version)
|
|
984
|
+
throw new Error(`Dependency ${lib} not found in package.json`);
|
|
985
|
+
return `${lib}@${version}`;
|
|
986
|
+
});
|
|
987
|
+
}
|
|
944
988
|
getProductionPackageJson(data = {}) {
|
|
945
989
|
return {
|
|
946
990
|
name: this.app.name,
|
|
@@ -976,7 +1020,12 @@ function getAkanPackageJson() {
|
|
|
976
1020
|
return akanPackageJson;
|
|
977
1021
|
} catch {}
|
|
978
1022
|
}
|
|
979
|
-
akanPackageJson = {
|
|
1023
|
+
akanPackageJson = {
|
|
1024
|
+
name: "akanjs",
|
|
1025
|
+
version: "0.0.0",
|
|
1026
|
+
description: "akanjs",
|
|
1027
|
+
dependencies: {}
|
|
1028
|
+
};
|
|
980
1029
|
return akanPackageJson;
|
|
981
1030
|
}
|
|
982
1031
|
function mergeImageConfig(config = {}) {
|
|
@@ -1000,7 +1049,9 @@ class AkanLibConfig {
|
|
|
1000
1049
|
this.externalLibs = config?.externalLibs ?? [];
|
|
1001
1050
|
}
|
|
1002
1051
|
static async from(lib) {
|
|
1003
|
-
const [configImp] = await Promise.all([
|
|
1052
|
+
const [configImp] = await Promise.all([
|
|
1053
|
+
import(`${lib.cwdPath}/akan.config.ts`).then((mod) => mod.default)
|
|
1054
|
+
]);
|
|
1004
1055
|
const config = typeof configImp === "function" ? configImp(lib) : configImp;
|
|
1005
1056
|
return new AkanLibConfig(lib, config);
|
|
1006
1057
|
}
|
|
@@ -2374,13 +2425,8 @@ class CommandExecutionError extends Error {
|
|
|
2374
2425
|
const displayCommand = formatCommandForDisplay(command, args);
|
|
2375
2426
|
const status = signal ? `signal: ${signal}` : `exit code: ${code ?? "unknown"}`;
|
|
2376
2427
|
const output = (stderr || stdout).trim();
|
|
2377
|
-
super([
|
|
2378
|
-
|
|
2379
|
-
`cwd: ${cwd}`,
|
|
2380
|
-
status,
|
|
2381
|
-
output ? `
|
|
2382
|
-
${output}` : ""
|
|
2383
|
-
].join(`
|
|
2428
|
+
super([`Command failed: ${displayCommand}`, `cwd: ${cwd}`, status, output ? `
|
|
2429
|
+
${output}` : ""].join(`
|
|
2384
2430
|
`), {
|
|
2385
2431
|
cause
|
|
2386
2432
|
});
|
|
@@ -2429,13 +2475,7 @@ var parseEnvFile = (envPath) => {
|
|
|
2429
2475
|
}
|
|
2430
2476
|
return env;
|
|
2431
2477
|
};
|
|
2432
|
-
var PAGE_ROUTE_EXPORTS = new Set([
|
|
2433
|
-
"default",
|
|
2434
|
-
"pageConfig",
|
|
2435
|
-
"head",
|
|
2436
|
-
"generateHead",
|
|
2437
|
-
"Loading"
|
|
2438
|
-
]);
|
|
2478
|
+
var PAGE_ROUTE_EXPORTS = new Set(["default", "pageConfig", "head", "generateHead", "Loading"]);
|
|
2439
2479
|
var ROOT_LAYOUT_EXPORTS = new Set([
|
|
2440
2480
|
"default",
|
|
2441
2481
|
"head",
|
|
@@ -2446,14 +2486,11 @@ var ROOT_LAYOUT_EXPORTS = new Set([
|
|
|
2446
2486
|
"reconnect",
|
|
2447
2487
|
"layoutStyle",
|
|
2448
2488
|
"gaTrackingId",
|
|
2449
|
-
"Loading"
|
|
2450
|
-
|
|
2451
|
-
|
|
2452
|
-
"default",
|
|
2453
|
-
"head",
|
|
2454
|
-
"generateHead",
|
|
2455
|
-
"Loading"
|
|
2489
|
+
"Loading",
|
|
2490
|
+
"NotFound",
|
|
2491
|
+
"Error"
|
|
2456
2492
|
]);
|
|
2493
|
+
var LAYOUT_ROUTE_EXPORTS = new Set(["default", "head", "generateHead", "Loading", "NotFound", "Error"]);
|
|
2457
2494
|
function validateRouteSourceExports(source, filePath, kind, options = {}) {
|
|
2458
2495
|
const sourceFile = ts3.createSourceFile(filePath, source, ts3.ScriptTarget.Latest, true, ts3.ScriptKind.TSX);
|
|
2459
2496
|
const allowed = kind === "page" ? PAGE_ROUTE_EXPORTS : options.rootLayout ? ROOT_LAYOUT_EXPORTS : LAYOUT_ROUTE_EXPORTS;
|
|
@@ -2800,11 +2837,7 @@ class Executor {
|
|
|
2800
2837
|
this.logger.debug(msg);
|
|
2801
2838
|
return this;
|
|
2802
2839
|
}
|
|
2803
|
-
spinning(msg, {
|
|
2804
|
-
prefix = `${this.emoji}${this.name}`,
|
|
2805
|
-
indent = 0,
|
|
2806
|
-
enableSpin = !Executor.verbose
|
|
2807
|
-
} = {}) {
|
|
2840
|
+
spinning(msg, { prefix = `${this.emoji}${this.name}`, indent = 0, enableSpin = !Executor.verbose } = {}) {
|
|
2808
2841
|
return new Spinner(msg, { prefix, indent, enableSpin }).start();
|
|
2809
2842
|
}
|
|
2810
2843
|
#tsconfig = null;
|
|
@@ -2833,9 +2866,7 @@ class Executor {
|
|
|
2833
2866
|
this.#tsconfig = tsconfig;
|
|
2834
2867
|
}
|
|
2835
2868
|
#packageJson = null;
|
|
2836
|
-
async getPackageJson({
|
|
2837
|
-
refresh
|
|
2838
|
-
} = {}) {
|
|
2869
|
+
async getPackageJson({ refresh } = {}) {
|
|
2839
2870
|
if (this.#packageJson && !refresh)
|
|
2840
2871
|
return this.#packageJson;
|
|
2841
2872
|
const packageJson = await this.readJson("package.json");
|
|
@@ -2951,10 +2982,7 @@ class Executor {
|
|
|
2951
2982
|
async applyTemplate(options) {
|
|
2952
2983
|
const dict = {
|
|
2953
2984
|
...options.dict ?? {},
|
|
2954
|
-
...Object.fromEntries(Object.entries(options.dict ?? {}).map(([key, value]) => [
|
|
2955
|
-
capitalize(key),
|
|
2956
|
-
capitalize(value)
|
|
2957
|
-
]))
|
|
2985
|
+
...Object.fromEntries(Object.entries(options.dict ?? {}).map(([key, value]) => [capitalize(key), capitalize(value)]))
|
|
2958
2986
|
};
|
|
2959
2987
|
return this._applyTemplate({ ...options, dict });
|
|
2960
2988
|
}
|
|
@@ -3090,10 +3118,7 @@ class WorkspaceExecutor extends Executor {
|
|
|
3090
3118
|
return await this.#getDirHasFile(`${this.workspaceRoot}/libs`, "akan.config.ts");
|
|
3091
3119
|
}
|
|
3092
3120
|
async getSyss() {
|
|
3093
|
-
const [appNames, libNames] = await Promise.all([
|
|
3094
|
-
this.getApps(),
|
|
3095
|
-
this.getLibs()
|
|
3096
|
-
]);
|
|
3121
|
+
const [appNames, libNames] = await Promise.all([this.getApps(), this.getLibs()]);
|
|
3097
3122
|
return [appNames, libNames];
|
|
3098
3123
|
}
|
|
3099
3124
|
async getPkgs() {
|
|
@@ -3102,11 +3127,7 @@ class WorkspaceExecutor extends Executor {
|
|
|
3102
3127
|
return await this.#getDirHasFile(`${this.workspaceRoot}/pkgs`, "package.json");
|
|
3103
3128
|
}
|
|
3104
3129
|
async getExecs() {
|
|
3105
|
-
const [appNames, libNames, pkgNames] = await Promise.all([
|
|
3106
|
-
this.getApps(),
|
|
3107
|
-
this.getLibs(),
|
|
3108
|
-
this.getPkgs()
|
|
3109
|
-
]);
|
|
3130
|
+
const [appNames, libNames, pkgNames] = await Promise.all([this.getApps(), this.getLibs(), this.getPkgs()]);
|
|
3110
3131
|
return [appNames, libNames, pkgNames];
|
|
3111
3132
|
}
|
|
3112
3133
|
async setPkgTsPaths(name) {
|
|
@@ -3124,10 +3145,7 @@ class WorkspaceExecutor extends Executor {
|
|
|
3124
3145
|
async unsetPkgTsPaths(name) {
|
|
3125
3146
|
const rootTsConfig = await this.readJson("tsconfig.json");
|
|
3126
3147
|
const filteredKeys = Object.keys(rootTsConfig.compilerOptions.paths ?? {}).filter((key) => key !== name && key !== `${name}/*`);
|
|
3127
|
-
rootTsConfig.compilerOptions.paths = Object.fromEntries(filteredKeys.map((key) => [
|
|
3128
|
-
key,
|
|
3129
|
-
rootTsConfig.compilerOptions.paths?.[key] ?? []
|
|
3130
|
-
]));
|
|
3148
|
+
rootTsConfig.compilerOptions.paths = Object.fromEntries(filteredKeys.map((key) => [key, rootTsConfig.compilerOptions.paths?.[key] ?? []]));
|
|
3131
3149
|
if (rootTsConfig.references) {
|
|
3132
3150
|
rootTsConfig.references = rootTsConfig.references.filter((ref) => ref.path !== `./pkgs/${name}/tsconfig.json`);
|
|
3133
3151
|
}
|
|
@@ -3219,11 +3237,7 @@ class SysExecutor extends Executor {
|
|
|
3219
3237
|
name;
|
|
3220
3238
|
type;
|
|
3221
3239
|
emoji;
|
|
3222
|
-
constructor({
|
|
3223
|
-
workspace = WorkspaceExecutor.fromRoot(),
|
|
3224
|
-
name,
|
|
3225
|
-
type
|
|
3226
|
-
}) {
|
|
3240
|
+
constructor({ workspace = WorkspaceExecutor.fromRoot(), name, type }) {
|
|
3227
3241
|
super(name, `${workspace.workspaceRoot}/${type}s/${name}`);
|
|
3228
3242
|
this.workspace = workspace;
|
|
3229
3243
|
this.name = name;
|
|
@@ -3326,10 +3340,7 @@ class SysExecutor extends Executor {
|
|
|
3326
3340
|
},
|
|
3327
3341
|
devDependencies: {
|
|
3328
3342
|
...Object.fromEntries(Object.entries(libPackageJson.devDependencies ?? {}).filter(([dep]) => !dependencySet.has(dep))),
|
|
3329
|
-
...Object.fromEntries(devDependencies.filter((dep) => rootPackageJson.dependencies?.[dep] || rootPackageJson.devDependencies?.[dep]).sort().map((dep) => [
|
|
3330
|
-
dep,
|
|
3331
|
-
rootPackageJson.devDependencies?.[dep] ?? rootPackageJson.dependencies?.[dep]
|
|
3332
|
-
]))
|
|
3343
|
+
...Object.fromEntries(devDependencies.filter((dep) => rootPackageJson.dependencies?.[dep] || rootPackageJson.devDependencies?.[dep]).sort().map((dep) => [dep, rootPackageJson.devDependencies?.[dep] ?? rootPackageJson.dependencies?.[dep]]))
|
|
3333
3344
|
}
|
|
3334
3345
|
};
|
|
3335
3346
|
await this.setPackageJson(libPkgJsonWithDeps);
|
|
@@ -3396,11 +3407,7 @@ class SysExecutor extends Executor {
|
|
|
3396
3407
|
...await LibExecutor.from(this, lib).getConstantFiles(),
|
|
3397
3408
|
...await LibExecutor.from(this, lib).getScalarConstantFiles()
|
|
3398
3409
|
]));
|
|
3399
|
-
return [
|
|
3400
|
-
...sysContantFiles,
|
|
3401
|
-
...sysScalarConstantFiles,
|
|
3402
|
-
...libConstantFiles.flat()
|
|
3403
|
-
];
|
|
3410
|
+
return [...sysContantFiles, ...sysScalarConstantFiles, ...libConstantFiles.flat()];
|
|
3404
3411
|
}
|
|
3405
3412
|
async getDictionaryFiles() {
|
|
3406
3413
|
const modules = await this.getModules();
|
|
@@ -3409,10 +3416,7 @@ class SysExecutor extends Executor {
|
|
|
3409
3416
|
async applyTemplate(options) {
|
|
3410
3417
|
const dict = {
|
|
3411
3418
|
...options.dict ?? {},
|
|
3412
|
-
...Object.fromEntries(Object.entries(options.dict ?? {}).map(([key, value]) => [
|
|
3413
|
-
capitalize(key),
|
|
3414
|
-
capitalize(value)
|
|
3415
|
-
]))
|
|
3419
|
+
...Object.fromEntries(Object.entries(options.dict ?? {}).map(([key, value]) => [capitalize(key), capitalize(value)]))
|
|
3416
3420
|
};
|
|
3417
3421
|
const scanInfo = await this.scan();
|
|
3418
3422
|
const fileContents = await this._applyTemplate({
|
|
@@ -3445,6 +3449,13 @@ class AppExecutor extends SysExecutor {
|
|
|
3445
3449
|
getEnv() {
|
|
3446
3450
|
return WorkspaceExecutor.getBaseDevEnv().env;
|
|
3447
3451
|
}
|
|
3452
|
+
async getDevPort() {
|
|
3453
|
+
const basePort = 8282;
|
|
3454
|
+
const appNames = (await this.workspace.getApps()).sort((a, b) => a.localeCompare(b));
|
|
3455
|
+
const appIndex = Math.max(appNames.indexOf(this.name), 0);
|
|
3456
|
+
const portOffset = WorkspaceExecutor.getBaseDevEnv().portOffset;
|
|
3457
|
+
return basePort + appIndex + portOffset;
|
|
3458
|
+
}
|
|
3448
3459
|
getCommandEnv(env = {}) {
|
|
3449
3460
|
const basePort = 8282;
|
|
3450
3461
|
const portOffset = WorkspaceExecutor.getBaseDevEnv().portOffset;
|
|
@@ -3471,17 +3482,19 @@ class AppExecutor extends SysExecutor {
|
|
|
3471
3482
|
if (type === "build") {
|
|
3472
3483
|
if (await this.exists(this.dist.cwdPath))
|
|
3473
3484
|
await this.dist.exec(`rm -rf ${this.dist.cwdPath}`);
|
|
3474
|
-
await Promise.all([
|
|
3475
|
-
this.dist.mkdir("private"),
|
|
3476
|
-
this.dist.mkdir("public")
|
|
3477
|
-
]);
|
|
3485
|
+
await Promise.all([this.dist.mkdir("private"), this.dist.mkdir("public")]);
|
|
3478
3486
|
await Promise.all([
|
|
3479
3487
|
this.cp("private", `${this.dist.cwdPath}/private`),
|
|
3480
3488
|
this.cp("public", `${this.dist.cwdPath}/public`)
|
|
3481
3489
|
]);
|
|
3482
3490
|
} else
|
|
3483
3491
|
await this.removeDir(".akan");
|
|
3484
|
-
const
|
|
3492
|
+
const devPort = type === "start" ? (await this.getDevPort()).toString() : undefined;
|
|
3493
|
+
const env = this.getCommandEnv({
|
|
3494
|
+
AKAN_COMMAND_TYPE: type,
|
|
3495
|
+
...routeEnv,
|
|
3496
|
+
...devPort ? { PORT: devPort, AKAN_PUBLIC_CLIENT_PORT: devPort, AKAN_PUBLIC_SERVER_PORT: devPort } : {}
|
|
3497
|
+
});
|
|
3485
3498
|
return { env };
|
|
3486
3499
|
}
|
|
3487
3500
|
#publicEnv = null;
|
|
@@ -3517,9 +3530,7 @@ class AppExecutor extends SysExecutor {
|
|
|
3517
3530
|
return this.#akanConfig;
|
|
3518
3531
|
}
|
|
3519
3532
|
#pageKeys = null;
|
|
3520
|
-
async getPageKeys({
|
|
3521
|
-
refresh
|
|
3522
|
-
} = {}) {
|
|
3533
|
+
async getPageKeys({ refresh } = {}) {
|
|
3523
3534
|
if (this.#pageKeys && !refresh)
|
|
3524
3535
|
return this.#pageKeys;
|
|
3525
3536
|
const akanConfig2 = await this.getConfig();
|
|
@@ -3568,10 +3579,7 @@ class AppExecutor extends SysExecutor {
|
|
|
3568
3579
|
const projectAssetsPath = `${this.cwdPath}/private`;
|
|
3569
3580
|
const projectPublicLibPath = `${projectPublicPath}/libs`;
|
|
3570
3581
|
const projectAssetsLibPath = `${projectAssetsPath}/libs`;
|
|
3571
|
-
await Promise.all([
|
|
3572
|
-
this.removeDir(projectPublicLibPath),
|
|
3573
|
-
this.removeDir(projectAssetsLibPath)
|
|
3574
|
-
]);
|
|
3582
|
+
await Promise.all([this.removeDir(projectPublicLibPath), this.removeDir(projectAssetsLibPath)]);
|
|
3575
3583
|
const targetPublicDeps = [];
|
|
3576
3584
|
for (const dep of libDeps) {
|
|
3577
3585
|
if (await this.exists(`${this.workspace.workspaceRoot}/libs/${dep}/public`))
|
|
@@ -3589,10 +3597,7 @@ class AppExecutor extends SysExecutor {
|
|
|
3589
3597
|
...targetAssetsDeps.map((dep) => this.cp(`${this.workspace.workspaceRoot}/libs/${dep}/private`, `${projectAssetsLibPath}/${dep}`))
|
|
3590
3598
|
]);
|
|
3591
3599
|
}
|
|
3592
|
-
async scanSync({
|
|
3593
|
-
refresh = false,
|
|
3594
|
-
write = true
|
|
3595
|
-
} = {}) {
|
|
3600
|
+
async scanSync({ refresh = false, write = true } = {}) {
|
|
3596
3601
|
const scanInfo = await this.scan({
|
|
3597
3602
|
refresh,
|
|
3598
3603
|
write,
|
|
@@ -3641,10 +3646,7 @@ class PkgExecutor extends Executor {
|
|
|
3641
3646
|
name;
|
|
3642
3647
|
dist;
|
|
3643
3648
|
emoji = execEmoji.pkg;
|
|
3644
|
-
constructor({
|
|
3645
|
-
workspace = WorkspaceExecutor.fromRoot(),
|
|
3646
|
-
name
|
|
3647
|
-
}) {
|
|
3649
|
+
constructor({ workspace = WorkspaceExecutor.fromRoot(), name }) {
|
|
3648
3650
|
super(name, `${workspace.workspaceRoot}/pkgs/${name}`);
|
|
3649
3651
|
this.workspace = workspace;
|
|
3650
3652
|
this.name = name;
|
|
@@ -3708,10 +3710,7 @@ class PkgExecutor extends Executor {
|
|
|
3708
3710
|
};
|
|
3709
3711
|
}
|
|
3710
3712
|
async updatePackageJsonDependencies(dependencies = [], devDependencies = []) {
|
|
3711
|
-
const [rootPackageJson, pkgJson] = await Promise.all([
|
|
3712
|
-
this.workspace.getPackageJson(),
|
|
3713
|
-
this.getPackageJson()
|
|
3714
|
-
]);
|
|
3713
|
+
const [rootPackageJson, pkgJson] = await Promise.all([this.workspace.getPackageJson(), this.getPackageJson()]);
|
|
3715
3714
|
const dependencyMaps = await this.#toDependencyMap(rootPackageJson, dependencies, devDependencies);
|
|
3716
3715
|
const newPkgJson = {
|
|
3717
3716
|
...pkgJson,
|
|
@@ -3721,10 +3720,7 @@ class PkgExecutor extends Executor {
|
|
|
3721
3720
|
return newPkgJson;
|
|
3722
3721
|
}
|
|
3723
3722
|
async generateDistPackageJson(dependencies = [], devDependencies = []) {
|
|
3724
|
-
const [rootPackageJson, pkgJson] = await Promise.all([
|
|
3725
|
-
this.workspace.getPackageJson(),
|
|
3726
|
-
this.getPackageJson()
|
|
3727
|
-
]);
|
|
3723
|
+
const [rootPackageJson, pkgJson] = await Promise.all([this.workspace.getPackageJson(), this.getPackageJson()]);
|
|
3728
3724
|
const dependencyMaps = await this.#toDependencyMap(rootPackageJson, dependencies, devDependencies);
|
|
3729
3725
|
const distPkgJson = {
|
|
3730
3726
|
...pkgJson,
|
|
@@ -3740,10 +3736,7 @@ class PkgExecutor extends Executor {
|
|
|
3740
3736
|
engines: { bun: ">=1.3.13" },
|
|
3741
3737
|
...dependencyMaps
|
|
3742
3738
|
};
|
|
3743
|
-
await Promise.all([
|
|
3744
|
-
this.dist.writeJson("package.json", distPkgJson),
|
|
3745
|
-
this.writeJson("package.json", distPkgJson)
|
|
3746
|
-
]);
|
|
3739
|
+
await Promise.all([this.dist.writeJson("package.json", distPkgJson), this.writeJson("package.json", distPkgJson)]);
|
|
3747
3740
|
return distPkgJson;
|
|
3748
3741
|
}
|
|
3749
3742
|
async build() {
|
|
@@ -3756,10 +3749,7 @@ class PkgExecutor extends Executor {
|
|
|
3756
3749
|
await this.cp(`${this.cwdPath}/dist`, this.dist.cwdPath);
|
|
3757
3750
|
}
|
|
3758
3751
|
async generateTsconfigJson() {
|
|
3759
|
-
const [rootTsconfig, pkgTsconfig] = await Promise.all([
|
|
3760
|
-
this.workspace.getTsConfig(),
|
|
3761
|
-
this.getTsConfig()
|
|
3762
|
-
]);
|
|
3752
|
+
const [rootTsconfig, pkgTsconfig] = await Promise.all([this.workspace.getTsConfig(), this.getTsConfig()]);
|
|
3763
3753
|
const tsconfig = {
|
|
3764
3754
|
...rootTsconfig,
|
|
3765
3755
|
...pkgTsconfig,
|
|
@@ -4630,6 +4620,9 @@ export async function generateHead(props: PageProps) {
|
|
|
4630
4620
|
return inheritedLayout.head;
|
|
4631
4621
|
}
|
|
4632
4622
|
|
|
4623
|
+
export const NotFound = userLayout.NotFound ?? inheritedLayout.NotFound;
|
|
4624
|
+
export const Error = userLayout.Error ?? inheritedLayout.Error;
|
|
4625
|
+
|
|
4633
4626
|
export default function GeneratedLayout({ children, params, searchParams }: LayoutProps) {
|
|
4634
4627
|
return (
|
|
4635
4628
|
<System.Provider
|
|
@@ -4659,6 +4652,9 @@ export async function generateHead(props: PageProps) {
|
|
|
4659
4652
|
return inheritedLayout.head;
|
|
4660
4653
|
}
|
|
4661
4654
|
|
|
4655
|
+
export const NotFound = userLayout.NotFound ?? inheritedLayout.NotFound;
|
|
4656
|
+
export const Error = userLayout.Error ?? inheritedLayout.Error;
|
|
4657
|
+
|
|
4662
4658
|
export default function GeneratedLayout({ children, params, searchParams }: LayoutProps) {
|
|
4663
4659
|
return <UserLayout params={params} searchParams={searchParams}>{children}</UserLayout>;
|
|
4664
4660
|
}
|