everything-dev
Version:
A consolidated product package for building Module Federation apps with oRPC APIs.
91 lines (89 loc) • 2.97 kB
JavaScript
const require_load = require('../services/resolution/load.cjs');
const require_services_resolution_session = require('../services/resolution/session.cjs');
const require_artifacts = require('../services/codegen/artifacts.cjs');
const require_build_train = require('../services/workspace/build-train.cjs');
let effect = require("effect");
//#region src/handlers/build.ts
function registerBuild(builder) {
return { build: builder.build.effect(function* (_opts, input) {
const session = yield* require_services_resolution_session.ResolutionSessionService;
const train = yield* require_build_train.BuildTrainService;
if (!session?.config) return {
status: "error",
error: require_load.MISSING_CONFIG_MESSAGE,
built: [],
skipped: []
};
const bosConfig = session.config;
const buildEnv = "development";
const targets = require_build_train.selectWorkspaceTargets(input.packages, bosConfig);
if (targets.length === 0) {
const allPackages = [...Object.keys(bosConfig.app ?? {}), ...Object.keys(bosConfig.plugins ?? {})];
return {
status: "error",
error: `Unknown build target(s): ${input.packages} — valid targets: ${allPackages.join(", ") || "none"} (framework packages build via the prerequisite train: pnpm run build <target>)`,
built: [],
skipped: []
};
}
const runtimeConfig = yield* effect.Effect.tryPromise({
try: () => session.buildRuntime({
uiSource: bosConfig.app.ui?.development ? "local" : "remote",
apiSource: bosConfig.app.api?.development ? "local" : "remote",
authSource: bosConfig.app.auth?.development ? "local" : "remote",
hostSource: bosConfig.app.host?.development ? "local" : "remote",
env: buildEnv,
plugins: session.runtime?.plugins
}),
catch: () => ({
status: "error",
error: "Could not build the runtime config",
built: [],
skipped: []
})
});
for (const message of session.warnings) console.warn(message);
yield* effect.Effect.tryPromise({
try: () => require_artifacts.generateCodeArtifacts(session.root, bosConfig, {
env: buildEnv,
runtimeConfig
}),
catch: () => ({
status: "error",
error: "Could not generate code artifacts",
built: [],
skipped: []
})
});
const buildInput = {
configDir: session.root,
bosConfig,
runtimeConfig,
targets,
deploy: false
};
const { built, skipped } = yield* effect.Effect.tryPromise({
try: () => train.buildTargets(buildInput),
catch: (error) => ({
status: "error",
error: error instanceof Error ? error.message : "Unknown error",
built: [],
skipped: []
})
});
if (built.length === 0) return {
status: "error",
error: `Nothing to build — no local targets matched${skipped.length > 0 ? `: ${skipped.join(", ")}` : ""}`,
built: [],
skipped
};
return {
status: "success",
built,
skipped
};
}) };
}
//#endregion
exports.registerBuild = registerBuild;
//# sourceMappingURL=build.cjs.map