everything-dev
Version:
A consolidated product package for building Module Federation apps with oRPC APIs.
77 lines (75 loc) • 3.35 kB
JavaScript
const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
const require_types = require('../types.cjs');
const require_services_registry_fastkv = require('../services/registry/fastkv.cjs');
const require_load = require('../services/resolution/load.cjs');
const require_services_resolution_session = require('../services/resolution/session.cjs');
const require_use = require('../services/registry/use.cjs');
const require_save_config = require('../utils/save-config.cjs');
let node_fs = require("node:fs");
let node_path = require("node:path");
let effect = require("effect");
let node_process = require("node:process");
node_process = require_runtime.__toESM(node_process, 1);
//#region src/handlers/config.ts
function registerConfig(builder) {
return {
config: builder.config.effect(function* (_opts, input) {
const session = yield* require_services_resolution_session.ResolutionSessionService;
if (input.full) return buildConfigResult(session?.config ?? null, true);
return buildConfigResult(yield* effect.Effect.promise(() => require_load.readAuthoredConfigInput(session?.root)), false);
}),
registryUse: builder.registryUse.effect(function* (_opts, input) {
const root = (yield* require_services_resolution_session.ResolutionSessionService)?.root ?? node_process.default.cwd();
const configPath = require_load.localConfigEntryPath(root) ?? (0, node_path.join)(root, "bos.config.json");
const normalizedFrom = input.from.startsWith("bos://") ? input.from : `bos://${input.from}`;
return yield* effect.Effect.tryPromise({
try: async () => {
const remote = await require_services_registry_fastkv.fetchBosConfigFromFastKv(normalizedFrom);
const local = await require_load.readLocalAuthoredConfigInput(root) ?? (configPath.endsWith(".json") ? JSON.parse((0, node_fs.readFileSync)(configPath, "utf-8")) : await require_load.loadAppDescriptorConfig(configPath));
const { config: merged, applied } = require_use.applyRegistrySections(local, remote, input.sections);
if (input.dryRun) return {
status: "dry-run",
from: normalizedFrom,
applied,
configPath
};
await require_save_config.saveBosConfig(root, merged);
return {
status: "updated",
from: normalizedFrom,
applied,
configPath
};
},
catch: (error) => ({
status: "error",
from: normalizedFrom,
applied: [],
error: error instanceof Error ? error.message : String(error)
})
});
})
};
}
function buildConfigResult(bosConfig, full = false) {
const packages = bosConfig?.app && typeof bosConfig.app === "object" ? Object.keys(bosConfig.app) : [];
const remotes = packages.filter((name) => name !== "host");
return {
config: bosConfig ?? null,
packages,
remotes,
full
};
}
async function resolveRemoteConfigChain(accountId, gatewayId, registry) {
const { config: merged } = await require_services_resolution_session.walkExtendsChain(`bos://${accountId}/${gatewayId}`, {
env: "production",
registry,
visit: async () => {}
});
return require_load.resolveConfigComposableEntries(require_types.BosConfigSchema.parse(merged), node_process.default.cwd(), "production");
}
//#endregion
exports.registerConfig = registerConfig;
exports.resolveRemoteConfigChain = resolveRemoteConfigChain;
//# sourceMappingURL=config.cjs.map