{"version":3,"sources":["../src/errors.ts","../src/uuid-v5.ts","../src/guid.ts","../src/builtin.ts"],"names":[],"mappings":"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","file":"builtin.mjs","sourcesContent":["// errors.ts — PackError class (feat-20260513-guid-asset-package-system w15)\n//\n// Structured surface: .code / .expected / .hint / .detail, plus optional typed .cause\n// Structurally parallel to AssetError / RhiError / RemoteError\n// (charter proposition 5 consistent abstraction).\n//\n// .detail is narrowed per .code via PackErrorDetail discriminated union\n// (requirements §6.2 AC-07; plan-strategy §D-5).\n\nimport type { PackErrorCode, PackErrorDetail } from '@forgeax/engine-types';\nimport type { PackAuthoringError } from './pack-authoring.js';\n\n/**\n * Structured error for the engine-pack disk scanner fail-fast chain.\n *\n * AI users consume via exhaustive switch on .code — no default case needed:\n * ```ts\n * switch (err.code) {\n *   case 'pack-guid-collision':\n *     console.error(err.detail.paths);\n *     break;\n *   case 'pack-cyclic-reference':\n *     console.error(err.detail.cycle);\n *     break;\n *   // ...all 8 cases\n * }\n * ```\n */\nexport class PackError extends Error {\n  readonly code: PackErrorCode;\n  readonly expected: string;\n  readonly hint: string;\n  readonly detail: PackErrorDetail;\n  override readonly cause?: PackAuthoringError;\n\n  constructor(args: {\n    code: PackErrorCode;\n    expected: string;\n    hint: string;\n    detail: PackErrorDetail;\n    cause?: PackAuthoringError;\n  }) {\n    super(`[PackError ${args.code}] expected: ${args.expected}; hint: ${args.hint}`);\n    this.name = 'PackError';\n    this.code = args.code;\n    this.expected = args.expected;\n    this.hint = args.hint;\n    this.detail = args.detail;\n    if (args.cause !== undefined) this.cause = args.cause;\n  }\n}\n","import { sha1 } from '@noble/hashes/legacy.js';\n\n/** Internal UUIDv5 kernel; each caller owns its namespace and name validation. */\nexport function uuidV5(namespace: Uint8Array, name: string): Uint8Array {\n  const nameBytes = new TextEncoder().encode(name);\n  const input = new Uint8Array(namespace.byteLength + nameBytes.byteLength);\n  input.set(namespace, 0);\n  input.set(nameBytes, namespace.byteLength);\n  const result = sha1(input).slice(0, 16);\n  // RFC 4122: UUID version 5, RFC variant.\n  result[6] = ((result[6] ?? 0) & 0x0f) | 0x50;\n  result[8] = ((result[8] ?? 0) & 0x3f) | 0x80;\n  return result;\n}\n","import { uuidv7obj } from 'uuidv7';\nimport { PackError } from './errors.js';\nimport { uuidV5 } from './uuid-v5.js';\n\n/**\n * 16-byte UUID branded ABI. Prevents assignment from plain Uint8Array or string.\n * Brand field mirrors the declaration in @forgeax/engine-types for cross-package\n * structural compatibility (both use __guidBrand: 'AssetGuid').\n */\nexport type AssetGuid = Uint8Array & { readonly __guidBrand: 'AssetGuid' };\n\n/** Pack-level identity. It is intentionally not assignable to AssetGuid. */\nexport type PackageId = Uint8Array & { readonly __packageIdBrand: 'PackageId' };\n\n/** Minimal Result alias for this module (structurally compatible with ScanResult). */\nexport type GuidResult<T, E> =\n  | { readonly ok: true; readonly value: T }\n  | { readonly ok: false; readonly error: E };\n\nfunction brand(bytes: Uint8Array): AssetGuid {\n  return bytes as AssetGuid;\n}\n\nconst HEX_BYTE = Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0'));\n\nfunction bytesToDashForm(bytes: Uint8Array): string {\n  const h = HEX_BYTE;\n  // biome-ignore lint/style/noNonNullAssertion: length guaranteed 16\n  return `${h[bytes[0]!]}${h[bytes[1]!]}${h[bytes[2]!]}${h[bytes[3]!]}-${h[bytes[4]!]}${h[bytes[5]!]}-${h[bytes[6]!]}${h[bytes[7]!]}-${h[bytes[8]!]}${h[bytes[9]!]}-${h[bytes[10]!]}${h[bytes[11]!]}${h[bytes[12]!]}${h[bytes[13]!]}${h[bytes[14]!]}${h[bytes[15]!]}`;\n}\n\nconst UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n\n/** Stable author-owned output identity. Paths and payloads are not identity inputs. */\nexport const PACK_SOURCE_KEY_RE = /^[a-z0-9][a-z0-9._-]*(\\/[a-z0-9][a-z0-9._-]*)*$/;\n\nexport function isValidPackSourceKey(value: unknown): value is string {\n  return typeof value === 'string' && PACK_SOURCE_KEY_RE.test(value);\n}\n\nexport function isValidAssetGuidString(value: unknown): value is string {\n  return typeof value === 'string' && UUID_RE.test(value);\n}\n\nfunction dashFormToBytes(dashForm: string): Uint8Array {\n  const hex = dashForm.replace(/-/g, '');\n  const bytes = new Uint8Array(16);\n  for (let i = 0; i < 16; i++) {\n    bytes[i] = parseInt(hex.slice(i * 2, i * 2 + 2), 16);\n  }\n  return bytes;\n}\n\nfunction randomUuidBytes(): Uint8Array {\n  const uuid = uuidv7obj();\n  const bytes = new Uint8Array(16);\n  bytes.set(uuid.bytes);\n  return bytes;\n}\n\nfunction packageId(value: Uint8Array): PackageId {\n  return value as PackageId;\n}\n\n/** Utilities for the pack-level UUID identity. */\nexport const PackageId = {\n  parse(dashForm: string): GuidResult<PackageId, PackError> {\n    const parsed = AssetGuid.parse(dashForm);\n    return parsed.ok ? { ok: true, value: packageId(parsed.value) } : parsed;\n  },\n  format(value: PackageId): string {\n    return bytesToDashForm(value);\n  },\n  random(): PackageId {\n    return packageId(randomUuidBytes());\n  },\n} as const;\n\nfunction derivedGuid(namespace: PackageId, sourceKey: string): AssetGuid {\n  if (!(namespace instanceof Uint8Array) || namespace.byteLength !== 16) {\n    throw new TypeError('AssetGuid.derive requires a 16-byte PackageId');\n  }\n  if (!isValidPackSourceKey(sourceKey)) {\n    const error = new TypeError(\n      `AssetGuid.derive received invalid sourceKey ${JSON.stringify(sourceKey)}`,\n    ) as TypeError & { readonly code?: string };\n    Object.defineProperty(error, 'code', { value: 'pack-source-key-invalid' });\n    throw error;\n  }\n  return brand(uuidV5(namespace, sourceKey));\n}\n\n/**\n * Utilities for the AssetGuid branded 16-byte UUID type.\n * Declare the type via `import type { AssetGuid } from '@forgeax/engine-pack/guid'`\n * or `import type { AssetGuid } from '@forgeax/engine-types'`.\n */\nexport const AssetGuid = {\n  /**\n   * Parse a 36-char RFC 4122 dash-form UUID string into an AssetGuid.\n   * Returns Ok(AssetGuid) on success or Err(PackError) with code 'pack-guid-malformed' on failure.\n   * Never throws for expected failures (requirements §4.2 / §14 / charter proposition 4).\n   */\n  parse(dashForm: string): GuidResult<AssetGuid, PackError> {\n    if (!isValidAssetGuidString(dashForm)) {\n      return {\n        ok: false,\n        error: new PackError({\n          code: 'pack-guid-malformed',\n          expected: '36-char RFC 4122 dash-form UUID',\n          hint: 'use AssetGuid.random() or a UUIDv7 generator; all GUID fields must be 36-char RFC 4122 dash-form',\n          detail: {\n            raw: dashForm,\n            reason: 'expected 36-char RFC 4122 dash-form UUID',\n          },\n        }),\n      };\n    }\n    return { ok: true, value: brand(dashFormToBytes(dashForm)) };\n  },\n\n  /**\n   * Format an AssetGuid as a 36-char RFC 4122 lowercase dash-form string.\n   */\n  format(guid: AssetGuid): string {\n    return bytesToDashForm(guid);\n  },\n\n  /**\n   * Test byte-by-byte equality between two AssetGuids.\n   */\n  equals(a: AssetGuid, b: AssetGuid): boolean {\n    for (let i = 0; i < 16; i++) {\n      if (a[i] !== b[i]) return false;\n    }\n    return true;\n  },\n\n  /**\n   * Mint a new time-ordered UUIDv7 as an AssetGuid.\n   * Works in both Node.js and browser environments.\n   */\n  random(): AssetGuid {\n    return brand(randomUuidBytes());\n  },\n\n  /** Derive the stable UUIDv5 projection for one Pack subject and sourceKey. */\n  derive(namespace: PackageId, sourceKey: string): AssetGuid {\n    return derivedGuid(namespace, sourceKey);\n  },\n} as const;\n","import type { AssetGuid } from './guid.js';\nimport { AssetGuid as AssetGuidNS } from './guid.js';\nimport { uuidV5 } from './uuid-v5.js';\n\n/**\n * ForgeaX engine namespace UUID for UUIDv5 derivation.\n * Value: 9a09805a-7623-482e-b322-9fc3591f2a38\n * This is a custom namespace; it is intentionally NOT the RFC 4122 X.500 namespace.\n */\nconst _nsResult = AssetGuidNS.parse('9a09805a-7623-482e-b322-9fc3591f2a38');\nif (!_nsResult.ok) throw new Error('builtin: FORGEAX_NAMESPACE is not a valid UUID');\nexport const FORGEAX_NAMESPACE: AssetGuid = _nsResult.value;\n\n/**\n * Derive a stable UUIDv5 AssetGuid from a name within the ForgeaX namespace.\n * Synchronous SHA-1 keeps builtin imports usable in default IIFE Workers.\n * Names retain their exact UTF-8 bytes and are not Pack source keys.\n */\nexport function deriveBuiltin(name: string): AssetGuid {\n  return uuidV5(FORGEAX_NAMESPACE, name) as AssetGuid;\n}\n\nfunction deriveString(name: string): string {\n  return AssetGuidNS.format(deriveBuiltin(name));\n}\n\n/**\n * Stable module constant for the HANDLE_CUBE builtin GUID.\n * Derived from: deriveBuiltin('HANDLE_CUBE') under FORGEAX_NAMESPACE.\n */\nexport const BUILTIN_HANDLE_CUBE = deriveString('HANDLE_CUBE');\n\n/**\n * Stable module constant for the HANDLE_TRIANGLE builtin GUID.\n * Derived from: deriveBuiltin('HANDLE_TRIANGLE') under FORGEAX_NAMESPACE.\n */\nexport const BUILTIN_HANDLE_TRIANGLE = deriveString('HANDLE_TRIANGLE');\n\n/**\n * Stable module constant for the HANDLE_QUAD builtin GUID.\n * Derived from: deriveBuiltin('HANDLE_QUAD') under FORGEAX_NAMESPACE.\n */\nexport const BUILTIN_HANDLE_QUAD = deriveString('HANDLE_QUAD');\n\n/** Stable UUIDv5 for the Engine-owned sphere mesh descriptor. */\nexport const BUILTIN_HANDLE_SPHERE = deriveString('HANDLE_SPHERE');\n\n/** Stable UUIDv5 for the Engine-owned nine-slice quad descriptor. */\nexport const BUILTIN_HANDLE_NINESLICE_QUAD = deriveString('HANDLE_NINESLICE_QUAD');\n\n/** Stable UUIDv5 for the Engine-owned cylinder mesh descriptor. */\nexport const BUILTIN_HANDLE_CYLINDER = deriveString('HANDLE_CYLINDER');\n\nexport type BuiltinMeshGeometry =\n  | 'procedural-cube'\n  | 'procedural-triangle'\n  | 'procedural-quad'\n  | 'procedural-sphere'\n  | 'procedural-nine-slice-quad'\n  | 'procedural-cylinder';\n\n/**\n * The complete Engine-owned procedural mesh catalog.\n *\n * These are Pack descriptors, not runtime payloads: the Geometry decoder\n * expands each `geometry` token into its validated MeshAsset. DevKit uses this\n * list to materialize only the descriptors a standalone project does not\n * already author, keeping the shipped game self-contained without duplicate\n * GUID declarations.\n */\nexport const BUILTIN_MESH_ASSETS: ReadonlyArray<{\n  readonly guid: string;\n  readonly geometry: BuiltinMeshGeometry;\n}> = Object.freeze([\n  { guid: BUILTIN_HANDLE_CUBE, geometry: 'procedural-cube' },\n  { guid: BUILTIN_HANDLE_TRIANGLE, geometry: 'procedural-triangle' },\n  { guid: BUILTIN_HANDLE_QUAD, geometry: 'procedural-quad' },\n  { guid: BUILTIN_HANDLE_SPHERE, geometry: 'procedural-sphere' },\n  { guid: BUILTIN_HANDLE_NINESLICE_QUAD, geometry: 'procedural-nine-slice-quad' },\n  { guid: BUILTIN_HANDLE_CYLINDER, geometry: 'procedural-cylinder' },\n]);\n"]}