UNPKG

everything-dev

Version:

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

1 lines • 2.78 kB
{"version":3,"file":"fingerprint.mjs","names":[],"sources":["../../../src/services/registry/fingerprint.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport type { BosConfig } from \"../../types\";\nimport { walkConfigSlots } from \"../config-slots\";\n\n/**\n * The published pointer's version identity (atomic-deploys 08/12): a hash\n * over every slot's `pin` — cheap to compute (no version-manifest fetch), and\n * stable exactly when the deployed set is. Shared so the CLI and the host\n * compute the same identity for the same pointer.\n */\nexport function pointerFingerprint(config: BosConfig): string {\n const parts: Array<string> = [];\n walkConfigSlots(config as unknown as Record<string, unknown>, ({ slot, entry, isPluginRef }) => {\n if (isPluginRef) {\n parts.push(`${slot}:${entry as string}`);\n return;\n }\n const s = entry as { pin?: unknown; integrity?: unknown } | undefined;\n if (!s) return;\n const pin = s.pin as { manifest?: unknown; integrity?: unknown } | undefined;\n const pinPart =\n pin && typeof pin.manifest === \"string\" && typeof pin.integrity === \"string\"\n ? `${pin.manifest}:${pin.integrity}`\n : \"\";\n const directPart = typeof s.integrity === \"string\" ? s.integrity : \"\";\n parts.push(`${slot}:${pinPart}:${directPart}`);\n });\n return createHash(\"sha256\").update(parts.join(\"|\")).digest(\"hex\").slice(0, 16);\n}\n\n/** Per-slot pin ids for display (slot → versioned manifest filename). */\nexport function slotPins(config: BosConfig): Record<string, string> {\n const pins: Record<string, string> = {};\n walkConfigSlots(config as unknown as Record<string, unknown>, ({ slot, entry, isPluginRef }) => {\n if (isPluginRef) return;\n const s = entry as { pin?: unknown } | undefined;\n if (!s) return;\n const manifest = (s.pin as { manifest?: unknown } | undefined)?.manifest;\n if (typeof manifest === \"string\") pins[slot] = manifest;\n });\n return pins;\n}\n"],"mappings":";;;;;;;;;;AAUA,SAAgB,mBAAmB,QAA2B;CAC5D,MAAM,QAAuB,CAAC;CAC9B,gBAAgB,SAA+C,EAAE,MAAM,OAAO,kBAAkB;EAC9F,IAAI,aAAa;GACf,MAAM,KAAK,GAAG,KAAK,GAAG,OAAiB;GACvC;EACF;EACA,MAAM,IAAI;EACV,IAAI,CAAC,GAAG;EACR,MAAM,MAAM,EAAE;EACd,MAAM,UACJ,OAAO,OAAO,IAAI,aAAa,YAAY,OAAO,IAAI,cAAc,WAChE,GAAG,IAAI,SAAS,GAAG,IAAI,cACvB;EACN,MAAM,aAAa,OAAO,EAAE,cAAc,WAAW,EAAE,YAAY;EACnE,MAAM,KAAK,GAAG,KAAK,GAAG,QAAQ,GAAG,YAAY;CAC/C,CAAC;CACD,OAAO,WAAW,QAAQ,CAAC,CAAC,OAAO,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,MAAM,GAAG,EAAE;AAC/E;;AAGA,SAAgB,SAAS,QAA2C;CAClE,MAAM,OAA+B,CAAC;CACtC,gBAAgB,SAA+C,EAAE,MAAM,OAAO,kBAAkB;EAC9F,IAAI,aAAa;EACjB,MAAM,IAAI;EACV,IAAI,CAAC,GAAG;EACR,MAAM,WAAY,EAAE,KAA4C;EAChE,IAAI,OAAO,aAAa,UAAU,KAAK,QAAQ;CACjD,CAAC;CACD,OAAO;AACT"}