38 lines
1.7 KiB
JavaScript
38 lines
1.7 KiB
JavaScript
import { readFileSync } from "node:fs";
|
|
import { isAbsolute, join, resolve } from "node:path";
|
|
|
|
import {
|
|
buildP0aRuntimeAssetPlan,
|
|
defaultReplicationRoot,
|
|
deployRuntimeAssetPlan,
|
|
readRuntimeAssetManifest,
|
|
serializeRuntimeAssetManifest,
|
|
} from "./lib/runtime-assets.mjs";
|
|
|
|
function option(name) {
|
|
const index = process.argv.indexOf(name);
|
|
return index >= 0 ? process.argv[index + 1] : undefined;
|
|
}
|
|
|
|
function defaultConfigPath() {
|
|
if (!process.env.LOCALAPPDATA || !isAbsolute(process.env.LOCALAPPDATA)) throw new Error("local_app_data_unavailable");
|
|
return join(process.env.LOCALAPPDATA, "Dada", "P0A", "config", "instance.json");
|
|
}
|
|
|
|
const configFile = resolve(option("--config") ?? process.env.DADA_INSTANCE_CONFIG_PATH ?? defaultConfigPath());
|
|
const configuration = JSON.parse(readFileSync(configFile, "utf8"));
|
|
const assetRootCandidate = option("--asset-root") ?? configuration.asset_root;
|
|
if (typeof assetRootCandidate !== "string" || !isAbsolute(assetRootCandidate)) {
|
|
throw new Error("asset_root_configuration_invalid");
|
|
}
|
|
const assetRoot = resolve(assetRootCandidate);
|
|
const trustedManifest = readRuntimeAssetManifest(resolve(option("--trusted-manifest") ?? "config/runtime-assets-manifest.json"));
|
|
const plan = await buildP0aRuntimeAssetPlan({
|
|
replicationRoot: resolve(option("--replication-root") ?? defaultReplicationRoot()),
|
|
});
|
|
if (serializeRuntimeAssetManifest(plan.manifest) !== serializeRuntimeAssetManifest(trustedManifest)) {
|
|
throw new Error("runtime_asset_source_does_not_match_trusted_manifest");
|
|
}
|
|
const result = deployRuntimeAssetPlan({ assetRoot, manifest: trustedManifest, resources: plan.resources });
|
|
process.stdout.write(`${JSON.stringify({ linked_files: result.linked_files, status: result.status })}\n`);
|