everything-dev
Version:
A consolidated product package for building Module Federation apps with oRPC APIs.
1 lines • 6.23 kB
Source Map (JSON)
{"version":3,"file":"code-artifacts.cjs","names":["Schema","CORE_UI_PLUGIN_KEY","existsSync","join","Effect","writeResolvedConfig","openResolution","syncApiContractBridge","emitCoreUiStubs","generateUiManifest"],"sources":["../src/code-artifacts.ts"],"sourcesContent":["import { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { Effect, Schema } from \"effect\";\nimport { emitCoreUiStubs } from \"every-plugin/build/ui\";\nimport { CORE_UI_PLUGIN_KEY } from \"every-plugin/ui/manifest\";\nimport { generateUiManifest } from \"every-plugin/ui/manifest-generator\";\nimport { type ContractBridgeStatus, syncApiContractBridge } from \"./api-contract\";\nimport { writeResolvedConfig } from \"./config\";\nimport type { BosEnv } from \"./merge\";\nimport { openResolution } from \"./resolution/session\";\nimport type { BosConfig, RuntimeConfig } from \"./types\";\n\nexport class ArtifactGenError extends Schema.TaggedError<ArtifactGenError>()(\"ArtifactGenError\", {\n phase: Schema.String,\n cause: Schema.optional(Schema.Unknown),\n}) {}\n\ninterface GeneratedArtifacts {\n resolvedConfigPath?: string;\n contractBridgePath: string;\n}\n\ninterface UiManifestTarget {\n workspaceRoot: string;\n pluginName: string;\n emitRouteTree: boolean;\n}\n\nfunction uiManifestTargets(runtimeConfig: RuntimeConfig): UiManifestTarget[] {\n const targets: UiManifestTarget[] = [];\n const ui = runtimeConfig.ui;\n // The core ui is always a manifest target when local — with no authored\n // rsbuild.config.ts the every-plugin build synthesizes one, so the\n // config's existence no longer gates manifest generation.\n if (ui?.source === \"local\" && ui.localPath) {\n targets.push({\n workspaceRoot: ui.localPath,\n pluginName: CORE_UI_PLUGIN_KEY,\n emitRouteTree: !existsSync(join(ui.localPath, \"src/routeTree.gen.ts\")),\n });\n }\n for (const [key, plugin] of Object.entries(runtimeConfig.plugins ?? {})) {\n const uiPath = plugin.ui?.localPath;\n if (plugin.ui?.source === \"local\" && uiPath && existsSync(join(uiPath, \"rsbuild.config.ts\"))) {\n targets.push({ workspaceRoot: uiPath, pluginName: key, emitRouteTree: false });\n }\n }\n return targets;\n}\n\nexport const generateCodeArtifactsEffect = Effect.fn(\"generateCodeArtifacts\")(function* (\n configDir: string,\n config: BosConfig,\n opts?: {\n env?: BosEnv;\n extendsChain?: string[];\n runtimeConfig?: RuntimeConfig;\n },\n): Effect.fn.Return<\n (GeneratedArtifacts & { contractStatus: ContractBridgeStatus[] }) | null,\n ArtifactGenError\n> {\n const env = opts?.env;\n if (env) {\n yield* Effect.try({\n try: () => writeResolvedConfig(configDir, config, env, opts?.extendsChain),\n catch: (cause) => new ArtifactGenError({ phase: \"write resolved config\", cause }),\n });\n }\n\n const runtimeConfig =\n opts?.runtimeConfig ??\n (yield* Effect.tryPromise({\n try: () => openResolution({ cwd: configDir }),\n catch: (cause) => new ArtifactGenError({ phase: \"load resolved config\", cause }),\n }))?.runtime;\n if (!runtimeConfig) return null;\n\n const bridge = yield* Effect.tryPromise({\n try: () =>\n syncApiContractBridge({\n configDir,\n runtimeConfig,\n apiBaseUrl: runtimeConfig.api.url,\n }),\n catch: (cause) => new ArtifactGenError({ phase: \"sync api contract bridge\", cause }),\n });\n\n for (const target of uiManifestTargets(runtimeConfig)) {\n if (target.pluginName === CORE_UI_PLUGIN_KEY) {\n yield* Effect.try({\n try: () => emitCoreUiStubs(target.workspaceRoot),\n catch: (cause) =>\n new ArtifactGenError({ phase: `emit ui stubs (${target.pluginName})`, cause }),\n });\n }\n yield* Effect.tryPromise({\n try: () => generateUiManifest(target),\n catch: (cause) =>\n new ArtifactGenError({ phase: `generate ui manifest (${target.pluginName})`, cause }),\n });\n }\n\n return {\n resolvedConfigPath: env ? join(configDir, \".bos/bos.resolved-config.json\") : undefined,\n contractBridgePath: bridge.bridgePath,\n contractStatus: bridge.status,\n };\n});\n\nexport async function generateCodeArtifacts(\n configDir: string,\n config: BosConfig,\n opts?: {\n env?: BosEnv;\n extendsChain?: string[];\n runtimeConfig?: RuntimeConfig;\n },\n): Promise<(GeneratedArtifacts & { contractStatus: ContractBridgeStatus[] }) | null> {\n return Effect.runPromise(generateCodeArtifactsEffect(configDir, config, opts));\n}\n"],"mappings":";;;;;;;;;;;AAYA,IAAa,mBAAb,cAAsCA,cAAO,YAA8B,CAAC,CAAC,oBAAoB;CAC/F,OAAOA,cAAO;CACd,OAAOA,cAAO,SAASA,cAAO,OAAO;AACvC,CAAC,CAAC,CAAC,CAAC;AAaJ,SAAS,kBAAkB,eAAkD;CAC3E,MAAM,UAA8B,CAAC;CACrC,MAAM,KAAK,cAAc;CAIzB,IAAI,IAAI,WAAW,WAAW,GAAG,WAC/B,QAAQ,KAAK;EACX,eAAe,GAAG;EAClB,YAAYC;EACZ,eAAe,KAACC,wBAAWC,gBAAK,GAAG,WAAW,sBAAsB,CAAC;CACvE,CAAC;CAEH,KAAK,MAAM,CAAC,KAAK,WAAW,OAAO,QAAQ,cAAc,WAAW,CAAC,CAAC,GAAG;EACvE,MAAM,SAAS,OAAO,IAAI;EAC1B,IAAI,OAAO,IAAI,WAAW,WAAW,cAAUD,wBAAWC,gBAAK,QAAQ,mBAAmB,CAAC,GACzF,QAAQ,KAAK;GAAE,eAAe;GAAQ,YAAY;GAAK,eAAe;EAAM,CAAC;CAEjF;CACA,OAAO;AACT;AAEA,MAAa,8BAA8BC,cAAO,GAAG,uBAAuB,CAAC,CAAC,WAC5E,WACA,QACA,MAQA;CACA,MAAM,MAAM,MAAM;CAClB,IAAI,KACF,OAAOA,cAAO,IAAI;EAChB,WAAWC,mCAAoB,WAAW,QAAQ,KAAK,MAAM,YAAY;EACzE,QAAQ,UAAU,IAAI,iBAAiB;GAAE,OAAO;GAAyB;EAAM,CAAC;CAClF,CAAC;CAGH,MAAM,gBACJ,MAAM,kBACL,OAAOD,cAAO,WAAW;EACxB,WAAWE,0CAAe,EAAE,KAAK,UAAU,CAAC;EAC5C,QAAQ,UAAU,IAAI,iBAAiB;GAAE,OAAO;GAAwB;EAAM,CAAC;CACjF,CAAC,EAAC,EAAG;CACP,IAAI,CAAC,eAAe,OAAO;CAE3B,MAAM,SAAS,OAAOF,cAAO,WAAW;EACtC,WACEG,2CAAsB;GACpB;GACA;GACA,YAAY,cAAc,IAAI;EAChC,CAAC;EACH,QAAQ,UAAU,IAAI,iBAAiB;GAAE,OAAO;GAA4B;EAAM,CAAC;CACrF,CAAC;CAED,KAAK,MAAM,UAAU,kBAAkB,aAAa,GAAG;EACrD,IAAI,OAAO,eAAeN,6CACxB,OAAOG,cAAO,IAAI;GAChB,eAAWI,uCAAgB,OAAO,aAAa;GAC/C,QAAQ,UACN,IAAI,iBAAiB;IAAE,OAAO,kBAAkB,OAAO,WAAW;IAAI;GAAM,CAAC;EACjF,CAAC;EAEH,OAAOJ,cAAO,WAAW;GACvB,eAAWK,uDAAmB,MAAM;GACpC,QAAQ,UACN,IAAI,iBAAiB;IAAE,OAAO,yBAAyB,OAAO,WAAW;IAAI;GAAM,CAAC;EACxF,CAAC;CACH;CAEA,OAAO;EACL,oBAAoB,UAAMN,gBAAK,WAAW,+BAA+B,IAAI;EAC7E,oBAAoB,OAAO;EAC3B,gBAAgB,OAAO;CACzB;AACF,CAAC;AAED,eAAsB,sBACpB,WACA,QACA,MAKmF;CACnF,OAAOC,cAAO,WAAW,4BAA4B,WAAW,QAAQ,IAAI,CAAC;AAC/E"}