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