UNPKG

everything-dev

Version:

A consolidated product package for building Module Federation apps with oRPC APIs.

1 lines • 5.41 kB
{"version":3,"file":"config.mjs","names":[],"sources":["../../src/handlers/config.ts"],"sourcesContent":["import { readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport process from \"node:process\";\nimport { Effect } from \"effect\";\nimport {\n loadAppDescriptorConfig,\n localConfigEntryPath,\n readAuthoredConfigInput,\n readLocalAuthoredConfigInput,\n resolveConfigComposableEntries,\n} from \"../config\";\nimport type { BosConfigResult } from \"../contract\";\nimport { fetchBosConfigFromFastKv } from \"../services/registry/fastkv\";\nimport { applyRegistrySections } from \"../services/registry/use\";\nimport { ResolutionSessionService, walkExtendsChain } from \"../services/resolution/session\";\nimport type { BosConfig, BosConfigInput } from \"../types\";\nimport { BosConfigSchema } from \"../types\";\nimport { saveBosConfig } from \"../utils/save-config\";\nimport type { BosBuilder } from \"./shared\";\n\nexport function registerConfig(builder: BosBuilder) {\n return {\n config: builder.config.effect(function* (_opts, input) {\n const session = yield* ResolutionSessionService;\n if (input.full) {\n return buildConfigResult(session?.config ?? null, true);\n }\n\n const localConfig = yield* Effect.promise(() => readAuthoredConfigInput(session?.root));\n return buildConfigResult(localConfig, false);\n }),\n\n registryUse: builder.registryUse.effect(function* (_opts, input) {\n const session = yield* ResolutionSessionService;\n const root = session?.root ?? process.cwd();\n const configPath = localConfigEntryPath(root) ?? join(root, \"bos.config.json\");\n const normalizedFrom = input.from.startsWith(\"bos://\") ? input.from : `bos://${input.from}`;\n\n return yield* Effect.tryPromise({\n try: async () => {\n const remote = await fetchBosConfigFromFastKv<Record<string, unknown>>(normalizedFrom);\n const localRaw = await readLocalAuthoredConfigInput(root);\n const local = (localRaw ??\n (configPath.endsWith(\".json\")\n ? (JSON.parse(readFileSync(configPath, \"utf-8\")) as Record<string, unknown>)\n : ((await loadAppDescriptorConfig(configPath)) as unknown as Record<\n string,\n unknown\n >))) as Record<string, unknown>;\n const { config: merged, applied } = applyRegistrySections(\n local as never,\n remote as never,\n input.sections,\n );\n\n if (input.dryRun) {\n return {\n status: \"dry-run\" as const,\n from: normalizedFrom,\n applied,\n configPath,\n };\n }\n\n await saveBosConfig(root, merged);\n\n return {\n status: \"updated\" as const,\n from: normalizedFrom,\n applied,\n configPath,\n };\n },\n catch: (error) => ({\n status: \"error\" as const,\n from: normalizedFrom,\n applied: [],\n error: error instanceof Error ? error.message : String(error),\n }),\n });\n }),\n };\n}\n\nfunction buildConfigResult(\n bosConfig: BosConfigInput | BosConfig | null,\n full = false,\n): BosConfigResult {\n const packages =\n bosConfig?.app && typeof bosConfig.app === \"object\" ? Object.keys(bosConfig.app) : [];\n const remotes = packages.filter((name) => name !== \"host\");\n\n return {\n config: bosConfig ?? null,\n packages,\n remotes,\n full,\n };\n}\n\nexport async function resolveRemoteConfigChain(\n accountId: string,\n gatewayId: string,\n registry?: string,\n): Promise<BosConfig> {\n const { config: merged } = await walkExtendsChain(`bos://${accountId}/${gatewayId}`, {\n env: \"production\",\n registry,\n visit: async () => {},\n });\n\n return resolveConfigComposableEntries(BosConfigSchema.parse(merged), process.cwd(), \"production\");\n}\n"],"mappings":";;;;;;;;;;;;AAoBA,SAAgB,eAAe,SAAqB;CAClD,OAAO;EACL,QAAQ,QAAQ,OAAO,OAAO,WAAW,OAAO,OAAO;GACrD,MAAM,UAAU,OAAO;GACvB,IAAI,MAAM,MACR,OAAO,kBAAkB,SAAS,UAAU,MAAM,IAAI;GAIxD,OAAO,kBAAkB,OADE,OAAO,cAAc,wBAAwB,SAAS,IAAI,CAAC,GAChD,KAAK;EAC7C,CAAC;EAED,aAAa,QAAQ,YAAY,OAAO,WAAW,OAAO,OAAO;GAE/D,MAAM,QAAO,OADU,yBACH,EAAE,QAAQ,QAAQ,IAAI;GAC1C,MAAM,aAAa,qBAAqB,IAAI,KAAK,KAAK,MAAM,iBAAiB;GAC7E,MAAM,iBAAiB,MAAM,KAAK,WAAW,QAAQ,IAAI,MAAM,OAAO,SAAS,MAAM;GAErF,OAAO,OAAO,OAAO,WAAW;IAC9B,KAAK,YAAY;KACf,MAAM,SAAS,MAAM,yBAAkD,cAAc;KAErF,MAAM,QAAS,MADQ,6BAA6B,IAAI,MAErD,WAAW,SAAS,OAAO,IACvB,KAAK,MAAM,aAAa,YAAY,OAAO,CAAC,IAC3C,MAAM,wBAAwB,UAAU;KAIhD,MAAM,EAAE,QAAQ,QAAQ,YAAY,sBAClC,OACA,QACA,MAAM,QACR;KAEA,IAAI,MAAM,QACR,OAAO;MACL,QAAQ;MACR,MAAM;MACN;MACA;KACF;KAGF,MAAM,cAAc,MAAM,MAAM;KAEhC,OAAO;MACL,QAAQ;MACR,MAAM;MACN;MACA;KACF;IACF;IACA,QAAQ,WAAW;KACjB,QAAQ;KACR,MAAM;KACN,SAAS,CAAC;KACV,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;IAC9D;GACF,CAAC;EACH,CAAC;CACH;AACF;AAEA,SAAS,kBACP,WACA,OAAO,OACU;CACjB,MAAM,WACJ,WAAW,OAAO,OAAO,UAAU,QAAQ,WAAW,OAAO,KAAK,UAAU,GAAG,IAAI,CAAC;CACtF,MAAM,UAAU,SAAS,QAAQ,SAAS,SAAS,MAAM;CAEzD,OAAO;EACL,QAAQ,aAAa;EACrB;EACA;EACA;CACF;AACF;AAEA,eAAsB,yBACpB,WACA,WACA,UACoB;CACpB,MAAM,EAAE,QAAQ,WAAW,MAAM,iBAAiB,SAAS,UAAU,GAAG,aAAa;EACnF,KAAK;EACL;EACA,OAAO,YAAY,CAAC;CACtB,CAAC;CAED,OAAO,+BAA+B,gBAAgB,MAAM,MAAM,GAAG,QAAQ,IAAI,GAAG,YAAY;AAClG"}