@ankhorage/contracts 26.2.1 → 26.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (273) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +1 -1
  3. package/dist/ads.d.ts +3 -0
  4. package/dist/ads.d.ts.map +1 -0
  5. package/dist/ads.js +2 -0
  6. package/dist/ads.js.map +1 -0
  7. package/dist/appManifest/bindings.js +1 -1
  8. package/dist/appManifest/bindings.js.map +1 -1
  9. package/dist/appManifest/constants.js.map +1 -1
  10. package/dist/appManifest/dataSources.js +2 -2
  11. package/dist/appManifest/dataSources.js.map +1 -1
  12. package/dist/appManifest/isAppManifest.d.ts +1 -1
  13. package/dist/appManifest/isAppManifest.d.ts.map +1 -1
  14. package/dist/appManifest/isAppManifest.js +8 -8
  15. package/dist/appManifest/isAppManifest.js.map +1 -1
  16. package/dist/appManifest/isAppStateSpec.d.ts +1 -1
  17. package/dist/appManifest/isAppStateSpec.d.ts.map +1 -1
  18. package/dist/appManifest/isAppStateSpec.js.map +1 -1
  19. package/dist/appManifest/isManifestValue.js +1 -1
  20. package/dist/appManifest/isManifestValue.js.map +1 -1
  21. package/dist/appManifest/media.d.ts +1 -1
  22. package/dist/appManifest/media.d.ts.map +1 -1
  23. package/dist/appManifest/media.js +1 -1
  24. package/dist/appManifest/media.js.map +1 -1
  25. package/dist/appManifest/navigator.d.ts +1 -1
  26. package/dist/appManifest/navigator.d.ts.map +1 -1
  27. package/dist/appManifest/navigator.js +3 -3
  28. package/dist/appManifest/navigator.js.map +1 -1
  29. package/dist/appManifest/navigatorOptions.js +1 -1
  30. package/dist/appManifest/navigatorOptions.js.map +1 -1
  31. package/dist/appManifest/parseAppManifest.d.ts +1 -1
  32. package/dist/appManifest/parseAppManifest.d.ts.map +1 -1
  33. package/dist/appManifest/parseAppManifest.js +1 -1
  34. package/dist/appManifest/parseAppManifest.js.map +1 -1
  35. package/dist/appManifest/screens.d.ts +2 -2
  36. package/dist/appManifest/screens.d.ts.map +1 -1
  37. package/dist/appManifest/screens.js +6 -6
  38. package/dist/appManifest/screens.js.map +1 -1
  39. package/dist/appManifest.d.ts +4 -4
  40. package/dist/appManifest.d.ts.map +1 -1
  41. package/dist/appManifest.js +2 -2
  42. package/dist/appManifest.js.map +1 -1
  43. package/dist/auth.d.ts +5 -5
  44. package/dist/auth.d.ts.map +1 -1
  45. package/dist/auth.js.map +1 -1
  46. package/dist/bindings.d.ts +3 -3
  47. package/dist/bindings.d.ts.map +1 -1
  48. package/dist/bindings.js.map +1 -1
  49. package/dist/cli/index.d.ts +1 -1
  50. package/dist/cli/index.d.ts.map +1 -1
  51. package/dist/cli/index.js.map +1 -1
  52. package/dist/data/apis.d.ts +6 -6
  53. package/dist/data/apis.d.ts.map +1 -1
  54. package/dist/data/apis.js.map +1 -1
  55. package/dist/data/diagnostics.d.ts +1 -1
  56. package/dist/data/diagnostics.d.ts.map +1 -1
  57. package/dist/data/diagnostics.js.map +1 -1
  58. package/dist/data/endpoints.d.ts +5 -5
  59. package/dist/data/endpoints.d.ts.map +1 -1
  60. package/dist/data/endpoints.js.map +1 -1
  61. package/dist/data/index.d.ts +10 -10
  62. package/dist/data/index.d.ts.map +1 -1
  63. package/dist/data/index.js +10 -10
  64. package/dist/data/index.js.map +1 -1
  65. package/dist/data/isApiDefinitionRegistry.d.ts +1 -1
  66. package/dist/data/isApiDefinitionRegistry.d.ts.map +1 -1
  67. package/dist/data/isApiDefinitionRegistry.js +2 -2
  68. package/dist/data/isApiDefinitionRegistry.js.map +1 -1
  69. package/dist/data/operations.d.ts +5 -5
  70. package/dist/data/operations.d.ts.map +1 -1
  71. package/dist/data/operations.js.map +1 -1
  72. package/dist/data/refs.d.ts +2 -2
  73. package/dist/data/refs.d.ts.map +1 -1
  74. package/dist/data/refs.js.map +1 -1
  75. package/dist/data/schemas.d.ts +3 -3
  76. package/dist/data/schemas.d.ts.map +1 -1
  77. package/dist/data/schemas.js.map +1 -1
  78. package/dist/data/sources.d.ts +6 -6
  79. package/dist/data/sources.d.ts.map +1 -1
  80. package/dist/data/sources.js.map +1 -1
  81. package/dist/data/values.d.ts +1 -1
  82. package/dist/data/values.d.ts.map +1 -1
  83. package/dist/data/values.js.map +1 -1
  84. package/dist/icon.js +1 -1
  85. package/dist/icon.js.map +1 -1
  86. package/dist/index.d.ts +25 -24
  87. package/dist/index.d.ts.map +1 -1
  88. package/dist/index.js +25 -24
  89. package/dist/index.js.map +1 -1
  90. package/dist/infra/isInfraAdapterDescriptor.d.ts +1 -1
  91. package/dist/infra/isInfraAdapterDescriptor.d.ts.map +1 -1
  92. package/dist/infra/isInfraAdapterDescriptor.js +2 -2
  93. package/dist/infra/isInfraAdapterDescriptor.js.map +1 -1
  94. package/dist/infra/isInfraAuthSpec.d.ts +1 -1
  95. package/dist/infra/isInfraAuthSpec.d.ts.map +1 -1
  96. package/dist/infra/isInfraAuthSpec.js +4 -4
  97. package/dist/infra/isInfraAuthSpec.js.map +1 -1
  98. package/dist/infra/isInfraCredentialRef.js +1 -1
  99. package/dist/infra/isInfraCredentialRef.js.map +1 -1
  100. package/dist/infra/isInfraDeploymentSpec.d.ts +1 -1
  101. package/dist/infra/isInfraDeploymentSpec.d.ts.map +1 -1
  102. package/dist/infra/isInfraDeploymentSpec.js +4 -4
  103. package/dist/infra/isInfraDeploymentSpec.js.map +1 -1
  104. package/dist/infra/isInfraEnvironmentSpec.d.ts +1 -1
  105. package/dist/infra/isInfraEnvironmentSpec.d.ts.map +1 -1
  106. package/dist/infra/isInfraEnvironmentSpec.js +8 -8
  107. package/dist/infra/isInfraEnvironmentSpec.js.map +1 -1
  108. package/dist/infra/isInfraManifest.d.ts +1 -1
  109. package/dist/infra/isInfraManifest.d.ts.map +1 -1
  110. package/dist/infra/isInfraManifest.js +5 -5
  111. package/dist/infra/isInfraManifest.js.map +1 -1
  112. package/dist/infra/isInfraWorkloadHealth.js +2 -2
  113. package/dist/infra/isInfraWorkloadHealth.js.map +1 -1
  114. package/dist/infra/isInfraWorkloadSpec.d.ts +1 -1
  115. package/dist/infra/isInfraWorkloadSpec.d.ts.map +1 -1
  116. package/dist/infra/isInfraWorkloadSpec.js +5 -5
  117. package/dist/infra/isInfraWorkloadSpec.js.map +1 -1
  118. package/dist/infra/isInfraWorkloadValue.js +3 -3
  119. package/dist/infra/isInfraWorkloadValue.js.map +1 -1
  120. package/dist/infra/parseInfraManifest.d.ts +2 -2
  121. package/dist/infra/parseInfraManifest.d.ts.map +1 -1
  122. package/dist/infra/parseInfraManifest.js +1 -1
  123. package/dist/infra/parseInfraManifest.js.map +1 -1
  124. package/dist/infra/validateInfraAdapterSelection.d.ts +3 -3
  125. package/dist/infra/validateInfraAdapterSelection.d.ts.map +1 -1
  126. package/dist/infra/validateInfraAdapterSelection.js +2 -2
  127. package/dist/infra/validateInfraAdapterSelection.js.map +1 -1
  128. package/dist/infra.d.ts +15 -15
  129. package/dist/infra.d.ts.map +1 -1
  130. package/dist/infra.js +9 -9
  131. package/dist/infra.js.map +1 -1
  132. package/dist/media.d.ts +1 -1
  133. package/dist/media.d.ts.map +1 -1
  134. package/dist/media.js.map +1 -1
  135. package/dist/navigator/catalog.d.ts +3 -3
  136. package/dist/navigator/catalog.d.ts.map +1 -1
  137. package/dist/navigator/catalog.js.map +1 -1
  138. package/dist/navigator/extensions.d.ts +2 -2
  139. package/dist/navigator/extensions.d.ts.map +1 -1
  140. package/dist/navigator/extensions.js.map +1 -1
  141. package/dist/navigator/generation.d.ts +1 -1
  142. package/dist/navigator/generation.d.ts.map +1 -1
  143. package/dist/navigator/generation.js.map +1 -1
  144. package/dist/navigator/planning.d.ts +3 -3
  145. package/dist/navigator/planning.d.ts.map +1 -1
  146. package/dist/navigator/planning.js.map +1 -1
  147. package/dist/navigator.d.ts +7 -7
  148. package/dist/navigator.d.ts.map +1 -1
  149. package/dist/navigator.js +1 -1
  150. package/dist/navigator.js.map +1 -1
  151. package/dist/requirements.d.ts +1 -1
  152. package/dist/requirements.d.ts.map +1 -1
  153. package/dist/requirements.js.map +1 -1
  154. package/dist/runtimeCallbacks.d.ts +1 -1
  155. package/dist/runtimeCallbacks.d.ts.map +1 -1
  156. package/dist/runtimeCallbacks.js.map +1 -1
  157. package/dist/state.d.ts +1 -1
  158. package/dist/state.d.ts.map +1 -1
  159. package/dist/state.js.map +1 -1
  160. package/dist/structure/generated.d.ts +2 -2
  161. package/dist/structure/generated.js +2 -2
  162. package/dist/structure/generated.js.map +1 -1
  163. package/dist/structure/index.d.ts +1 -1
  164. package/dist/structure/index.d.ts.map +1 -1
  165. package/dist/structure/index.js.map +1 -1
  166. package/dist/structure/isStructureDescriptor.d.ts +1 -1
  167. package/dist/structure/isStructureDescriptor.d.ts.map +1 -1
  168. package/dist/structure/isStructureDescriptor.js.map +1 -1
  169. package/dist/structure/types.d.ts +1 -1
  170. package/dist/structure/types.d.ts.map +1 -1
  171. package/dist/structure/types.js.map +1 -1
  172. package/dist/theme.d.ts +1 -1
  173. package/dist/theme.d.ts.map +1 -1
  174. package/dist/theme.js.map +1 -1
  175. package/dist/types/ads.d.ts +109 -0
  176. package/dist/types/ads.d.ts.map +1 -0
  177. package/dist/types/ads.js +8 -0
  178. package/dist/types/ads.js.map +1 -0
  179. package/dist/types/appManifest.d.ts +1 -1
  180. package/dist/types/appManifest.d.ts.map +1 -1
  181. package/dist/types/appManifest.js.map +1 -1
  182. package/dist/types/infraAdapters.d.ts +7 -7
  183. package/dist/types/infraAdapters.d.ts.map +1 -1
  184. package/dist/types/infraAdapters.js.map +1 -1
  185. package/dist/types/infraLifecycle.d.ts +4 -4
  186. package/dist/types/infraLifecycle.d.ts.map +1 -1
  187. package/dist/types/infraLifecycle.js.map +1 -1
  188. package/dist/types/infraManifest.d.ts +8 -8
  189. package/dist/types/infraManifest.d.ts.map +1 -1
  190. package/dist/types/infraManifest.js.map +1 -1
  191. package/dist/types/infraSecrets.d.ts +1 -1
  192. package/dist/types/infraSecrets.d.ts.map +1 -1
  193. package/dist/types/infraSecrets.js.map +1 -1
  194. package/dist/types/infraTargets.d.ts +1 -1
  195. package/dist/types/infraTargets.d.ts.map +1 -1
  196. package/dist/types/infraTargets.js.map +1 -1
  197. package/dist/types/infraWorkload.d.ts +2 -2
  198. package/dist/types/infraWorkload.d.ts.map +1 -1
  199. package/dist/types/infraWorkload.js.map +1 -1
  200. package/dist/types.d.ts +13 -13
  201. package/dist/types.d.ts.map +1 -1
  202. package/dist/types.js.map +1 -1
  203. package/dist/ui.d.ts +2 -2
  204. package/dist/ui.d.ts.map +1 -1
  205. package/dist/ui.js.map +1 -1
  206. package/package.json +8 -4
  207. package/src/ads.test.ts +42 -0
  208. package/src/ads.ts +2 -0
  209. package/src/adsPackedConsumer.test.ts +98 -0
  210. package/src/appManifest/bindings.ts +1 -1
  211. package/src/appManifest/constants.ts +1 -1
  212. package/src/appManifest/dataSources.ts +2 -2
  213. package/src/appManifest/isAppManifest.ts +9 -9
  214. package/src/appManifest/isAppStateSpec.ts +1 -1
  215. package/src/appManifest/isManifestValue.ts +1 -1
  216. package/src/appManifest/media.ts +1 -1
  217. package/src/appManifest/navigator.ts +3 -3
  218. package/src/appManifest/navigatorOptions.ts +1 -1
  219. package/src/appManifest/parseAppManifest.ts +2 -2
  220. package/src/appManifest/screens.ts +6 -6
  221. package/src/appManifest.ts +4 -4
  222. package/src/auth.ts +6 -6
  223. package/src/bindings.ts +3 -3
  224. package/src/cli/index.ts +1 -1
  225. package/src/data/apis.ts +6 -6
  226. package/src/data/diagnostics.ts +1 -1
  227. package/src/data/endpoints.ts +5 -5
  228. package/src/data/index.ts +10 -10
  229. package/src/data/isApiDefinitionRegistry.ts +3 -3
  230. package/src/data/operations.ts +5 -5
  231. package/src/data/refs.ts +2 -2
  232. package/src/data/schemas.ts +3 -3
  233. package/src/data/sources.ts +6 -6
  234. package/src/data/values.ts +1 -1
  235. package/src/icon.ts +1 -1
  236. package/src/index.ts +25 -24
  237. package/src/infra/isInfraAdapterDescriptor.ts +3 -3
  238. package/src/infra/isInfraAuthSpec.ts +6 -6
  239. package/src/infra/isInfraCredentialRef.ts +1 -1
  240. package/src/infra/isInfraDeploymentSpec.ts +6 -6
  241. package/src/infra/isInfraEnvironmentSpec.ts +10 -10
  242. package/src/infra/isInfraManifest.ts +7 -7
  243. package/src/infra/isInfraWorkloadHealth.ts +2 -2
  244. package/src/infra/isInfraWorkloadSpec.ts +7 -7
  245. package/src/infra/isInfraWorkloadValue.ts +4 -4
  246. package/src/infra/parseInfraManifest.ts +3 -3
  247. package/src/infra/validateInfraAdapterSelection.ts +5 -5
  248. package/src/infra.ts +15 -15
  249. package/src/infraPackedConsumer.test.ts +102 -0
  250. package/src/media.ts +1 -1
  251. package/src/navigator/catalog.ts +3 -3
  252. package/src/navigator/extensions.ts +2 -2
  253. package/src/navigator/generation.ts +1 -1
  254. package/src/navigator/planning.ts +3 -3
  255. package/src/navigator.ts +7 -7
  256. package/src/requirements.ts +1 -1
  257. package/src/runtimeCallbacks.ts +1 -1
  258. package/src/state.ts +1 -1
  259. package/src/structure/generated.ts +2 -2
  260. package/src/structure/index.ts +1 -1
  261. package/src/structure/isStructureDescriptor.ts +1 -1
  262. package/src/structure/types.ts +1 -1
  263. package/src/theme.ts +1 -1
  264. package/src/types/ads.ts +125 -0
  265. package/src/types/appManifest.ts +1 -1
  266. package/src/types/infraAdapters.ts +7 -7
  267. package/src/types/infraLifecycle.ts +4 -4
  268. package/src/types/infraManifest.ts +8 -8
  269. package/src/types/infraSecrets.ts +1 -1
  270. package/src/types/infraTargets.ts +1 -1
  271. package/src/types/infraWorkload.ts +2 -2
  272. package/src/types.ts +13 -13
  273. package/src/ui.ts +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"isInfraEnvironmentSpec.js","sourceRoot":"","sources":["../../src/infra/isInfraEnvironmentSpec.ts"],"names":[],"mappings":"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","sourcesContent":["import { isRecord } from '@ankhorage/utility/object';\nimport { isNonEmptyString } from '@ankhorage/utility/string';\n\nimport { isSerializableSet } from '../collections';\nimport { INFRA_ADAPTER_CATALOG } from '../infraCatalog';\nimport type {\n InfraEnvironmentSpec,\n InfraObjectStorageSpec,\n InfraS3PersistenceTarget,\n InfraScheduledDatabaseBackupSpec,\n} from '../types/infraManifest';\nimport type { InfraShape } from '../types/infraValidation';\nimport { infraFields } from './infraFields';\nimport { isInfraAuthSpec } from './isInfraAuthSpec';\nimport { isInfraCredentialRef } from './isInfraCredentialRef';\nimport { isInfraDeploymentSpec } from './isInfraDeploymentSpec';\nimport { isInfraShape } from './isInfraShape';\nimport { isInfraWorkloadSpec } from './isInfraWorkloadSpec';\n\n/*** Validate sibling capabilities and their required relationships within one environment. */\nexport function isInfraEnvironmentSpec(value: unknown): value is InfraEnvironmentSpec {\n return (\n isEnvironmentShape(value) &&\n hasServiceDependencies(value) &&\n hasNetworkingRelationships(value) &&\n hasUniquePublishedPorts(value)\n );\n}\n\n/*** Check all environment field shapes before inspecting canonical dependency metadata. */\nfunction isEnvironmentShape(value: unknown): value is InfraEnvironmentSpec {\n return isInfraShape(value, {\n deployment: isInfraDeploymentSpec,\n database: (database) =>\n database === undefined ||\n isInfraShape(database, {\n provider: (provider) => provider === 'supabase',\n tier: (tier) => tier === undefined || tier === 'dev' || tier === 'prod',\n backup: (backup) => backup === undefined || isScheduledDatabaseBackup(backup),\n }),\n objectStorage: (storage) => storage === undefined || isObjectStorage(storage),\n auth: (auth) => auth === undefined || isInfraAuthSpec(auth),\n authz: (authz) =>\n authz === undefined ||\n isInfraShape(authz, {\n provider: (provider) => provider === 'cerbos',\n kind: (kind) => kind === 'ABAC' || kind === 'RBAC',\n policies: (policies) => policies === undefined || isPolicyFiles(policies),\n }),\n secretStore: (store) =>\n store === undefined ||\n isInfraShape(store, {\n provider: (provider) => provider === 'supabase-vault',\n schema: infraFields.optionalText,\n }),\n networking: (networking) =>\n networking === undefined ||\n isInfraShape(networking, {\n domain: infraFields.optionalText,\n publicBaseUrl: (publicBaseUrl) =>\n publicBaseUrl === undefined || isPublicHttpOrigin(publicBaseUrl),\n tls: (tls) =>\n tls === undefined ||\n isInfraShape(tls, {\n mode: (mode) => mode === 'acme-http-01',\n contactEmail: isNonEmptyString,\n }),\n }),\n workloads: (workloads) => workloads === undefined || isWorkloads(workloads),\n } satisfies InfraShape<InfraEnvironmentSpec>);\n}\n\n/*** Public workload configuration uses one canonical absolute HTTP(S) origin without path state. */\nfunction isPublicHttpOrigin(value: unknown): boolean {\n if (!isNonEmptyString(value)) return false;\n try {\n const url = new URL(value);\n return (url.protocol === 'http:' || url.protocol === 'https:') && url.origin === value;\n } catch {\n return false;\n }\n}\n\n/*** Automatic TLS requires one matching HTTPS origin and public DNS hostname. */\nfunction hasNetworkingRelationships(value: InfraEnvironmentSpec): boolean {\n const { networking } = value;\n if (networking?.tls === undefined) return true;\n if (networking.domain === undefined || networking.publicBaseUrl === undefined) return false;\n const url = new URL(networking.publicBaseUrl);\n return url.protocol === 'https:' && url.hostname === networking.domain;\n}\n\n/*** Validate portable, unique Cerbos policy files without host paths or traversal. */\nfunction isPolicyFiles(value: unknown): boolean {\n return (\n isRecord(value) &&\n Object.entries(value).every(\n ([path, content]) =>\n isNonEmptyString(path) &&\n !path.startsWith('/') &&\n !path.split('/').includes('..') &&\n isNonEmptyString(content),\n )\n );\n}\n\n/*** Validate provider-neutral scheduled database backup intent. */\nfunction isScheduledDatabaseBackup(value: unknown): value is InfraScheduledDatabaseBackupSpec {\n return isInfraShape(value, {\n mode: (mode) => mode === 'scheduled',\n target: isS3PersistenceTarget,\n intervalHours: (interval) =>\n interval === undefined ||\n (typeof interval === 'number' && Number.isInteger(interval) && interval > 0),\n });\n}\n\n/*** Validate one portable S3-compatible persistence target without resolving credentials. */\nfunction isS3PersistenceTarget(value: unknown): value is InfraS3PersistenceTarget {\n return isInfraShape(value, {\n endpoint: isPublicHttpOrigin,\n region: isNonEmptyString,\n bucket: isNonEmptyString,\n credentials: isInfraCredentialRef,\n forcePathStyle: (forcePathStyle) =>\n forcePathStyle === undefined || typeof forcePathStyle === 'boolean',\n });\n}\n\n/*** Object storage can vary independently from database/auth; there is no implicit auto provider. */\nfunction isObjectStorage(value: unknown): boolean {\n if (!isRecord(value)) return false;\n const common = {\n provider: (provider: unknown) => provider === value.provider,\n buckets: (buckets: unknown) => buckets === undefined || isSerializableSet(buckets),\n };\n if (value.provider === 'supabase') {\n return isInfraShape(value, {\n ...common,\n provider: (provider) => provider === 'supabase',\n backend: (backend) => backend === undefined || isS3PersistenceTarget(backend),\n } satisfies InfraShape<Extract<InfraObjectStorageSpec, { readonly provider: 'supabase' }>>);\n }\n return isInfraShape(value, {\n ...common,\n provider: (provider) => provider === 'r2',\n accountId: infraFields.optionalText,\n credentials: (credentials) => credentials === undefined || isInfraCredentialRef(credentials),\n } satisfies InfraShape<Extract<InfraObjectStorageSpec, { readonly provider: 'r2' }>>);\n}\n\n/*** Duplicate desired workload identities cannot be reconciled safely. */\nfunction isWorkloads(value: unknown): boolean {\n return (\n isRecord(value) &&\n Object.entries(value).every(\n ([workloadId, workload]) => isInfraWorkloadSpec(workload) && workload.id === workloadId,\n )\n );\n}\n\n/*** Prevent two workloads in one environment from claiming the same external listener. */\nfunction hasUniquePublishedPorts(value: InfraEnvironmentSpec): boolean {\n const ports = Object.values(value.workloads ?? {}).flatMap((workload) =>\n Object.values(workload.ports ?? {}).flatMap(({ publishedPort }) =>\n publishedPort === undefined ? [] : [publishedPort],\n ),\n );\n return new Set(ports).size === ports.length;\n}\n\n/*** Check catalog dependencies against selected sibling capabilities and runtime capabilities. */\nfunction hasServiceDependencies(value: InfraEnvironmentSpec): boolean {\n const selections = [\n value.database,\n value.auth,\n value.authz,\n value.objectStorage,\n value.secretStore,\n ];\n const runtime = Object.values(INFRA_ADAPTER_CATALOG).find(\n (entry) => entry.id === value.deployment.runtime.provider,\n );\n const capabilities = new Set<string>([\n 'compute',\n ...(runtime?.capabilities ?? []),\n ...Object.entries(value)\n .filter(([, selection]) => selection !== undefined)\n .map(([capability]) => capability),\n ]);\n return Object.values(INFRA_ADAPTER_CATALOG)\n .filter((entry) => selections.some((selection) => selection?.provider === entry.id))\n .every((entry) => entry.dependencies.every((dependency) => capabilities.has(dependency)));\n}\n"]}
1
+ {"version":3,"file":"isInfraEnvironmentSpec.js","sourceRoot":"","sources":["../../src/infra/isInfraEnvironmentSpec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAE7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAQ3D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,8FAA8F;AAC9F,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,OAAO,CACL,kBAAkB,CAAC,KAAK,CAAC;QACzB,sBAAsB,CAAC,KAAK,CAAC;QAC7B,0BAA0B,CAAC,KAAK,CAAC;QACjC,uBAAuB,CAAC,KAAK,CAAC,CAC/B,CAAC;AACJ,CAAC;AAED,2FAA2F;AAC3F,SAAS,kBAAkB,CAAC,KAAc;IACxC,OAAO,YAAY,CAAC,KAAK,EAAE;QACzB,UAAU,EAAE,qBAAqB;QACjC,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE,CACrB,QAAQ,KAAK,SAAS;YACtB,YAAY,CAAC,QAAQ,EAAE;gBACrB,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,KAAK,UAAU;gBAC/C,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,MAAM;gBACvE,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,SAAS,IAAI,yBAAyB,CAAC,MAAM,CAAC;aAC9E,CAAC;QACJ,aAAa,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,SAAS,IAAI,eAAe,CAAC,OAAO,CAAC;QAC7E,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,SAAS,IAAI,eAAe,CAAC,IAAI,CAAC;QAC3D,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CACf,KAAK,KAAK,SAAS;YACnB,YAAY,CAAC,KAAK,EAAE;gBAClB,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,KAAK,QAAQ;gBAC7C,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,MAAM;gBAClD,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,KAAK,SAAS,IAAI,aAAa,CAAC,QAAQ,CAAC;aAC1E,CAAC;QACJ,WAAW,EAAE,CAAC,KAAK,EAAE,EAAE,CACrB,KAAK,KAAK,SAAS;YACnB,YAAY,CAAC,KAAK,EAAE;gBAClB,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,KAAK,gBAAgB;gBACrD,MAAM,EAAE,WAAW,CAAC,YAAY;aACjC,CAAC;QACJ,UAAU,EAAE,CAAC,UAAU,EAAE,EAAE,CACzB,UAAU,KAAK,SAAS;YACxB,YAAY,CAAC,UAAU,EAAE;gBACvB,MAAM,EAAE,WAAW,CAAC,YAAY;gBAChC,aAAa,EAAE,CAAC,aAAa,EAAE,EAAE,CAC/B,aAAa,KAAK,SAAS,IAAI,kBAAkB,CAAC,aAAa,CAAC;gBAClE,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CACX,GAAG,KAAK,SAAS;oBACjB,YAAY,CAAC,GAAG,EAAE;wBAChB,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,cAAc;wBACvC,YAAY,EAAE,gBAAgB;qBAC/B,CAAC;aACL,CAAC;QACJ,SAAS,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,KAAK,SAAS,IAAI,WAAW,CAAC,SAAS,CAAC;KACjC,CAAC,CAAC;AAChD,CAAC;AAED,oGAAoG;AACpG,SAAS,kBAAkB,CAAC,KAAc;IACxC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,CAAC,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,CAAC;IACzF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,iFAAiF;AACjF,SAAS,0BAA0B,CAAC,KAA2B;IAC7D,MAAM,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;IAC7B,IAAI,UAAU,EAAE,GAAG,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAC/C,IAAI,UAAU,CAAC,MAAM,KAAK,SAAS,IAAI,UAAU,CAAC,aAAa,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAC5F,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IAC9C,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,GAAG,CAAC,QAAQ,KAAK,UAAU,CAAC,MAAM,CAAC;AACzE,CAAC;AAED,sFAAsF;AACtF,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,CACL,QAAQ,CAAC,KAAK,CAAC;QACf,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CACzB,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,CAClB,gBAAgB,CAAC,IAAI,CAAC;YACtB,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YACrB,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;YAC/B,gBAAgB,CAAC,OAAO,CAAC,CAC5B,CACF,CAAC;AACJ,CAAC;AAED,mEAAmE;AACnE,SAAS,yBAAyB,CAAC,KAAc;IAC/C,OAAO,YAAY,CAAC,KAAK,EAAE;QACzB,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,WAAW;QACpC,MAAM,EAAE,qBAAqB;QAC7B,aAAa,EAAE,CAAC,QAAQ,EAAE,EAAE,CAC1B,QAAQ,KAAK,SAAS;YACtB,CAAC,OAAO,QAAQ,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC,CAAC;KAC/E,CAAC,CAAC;AACL,CAAC;AAED,6FAA6F;AAC7F,SAAS,qBAAqB,CAAC,KAAc;IAC3C,OAAO,YAAY,CAAC,KAAK,EAAE;QACzB,QAAQ,EAAE,kBAAkB;QAC5B,MAAM,EAAE,gBAAgB;QACxB,MAAM,EAAE,gBAAgB;QACxB,WAAW,EAAE,oBAAoB;QACjC,cAAc,EAAE,CAAC,cAAc,EAAE,EAAE,CACjC,cAAc,KAAK,SAAS,IAAI,OAAO,cAAc,KAAK,SAAS;KACtE,CAAC,CAAC;AACL,CAAC;AAED,qGAAqG;AACrG,SAAS,eAAe,CAAC,KAAc;IACrC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,MAAM,MAAM,GAAG;QACb,QAAQ,EAAE,CAAC,QAAiB,EAAE,EAAE,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ;QAC5D,OAAO,EAAE,CAAC,OAAgB,EAAE,EAAE,CAAC,OAAO,KAAK,SAAS,IAAI,iBAAiB,CAAC,OAAO,CAAC;KACnF,CAAC;IACF,IAAI,KAAK,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;QAClC,OAAO,YAAY,CAAC,KAAK,EAAE;YACzB,GAAG,MAAM;YACT,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,KAAK,UAAU;YAC/C,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,SAAS,IAAI,qBAAqB,CAAC,OAAO,CAAC;SACW,CAAC,CAAC;IAC9F,CAAC;IACD,OAAO,YAAY,CAAC,KAAK,EAAE;QACzB,GAAG,MAAM;QACT,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,KAAK,IAAI;QACzC,SAAS,EAAE,WAAW,CAAC,YAAY;QACnC,WAAW,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,KAAK,SAAS,IAAI,oBAAoB,CAAC,WAAW,CAAC;KACV,CAAC,CAAC;AACxF,CAAC;AAED,0EAA0E;AAC1E,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,CACL,QAAQ,CAAC,KAAK,CAAC;QACf,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CACzB,CAAC,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,EAAE,KAAK,UAAU,CACxF,CACF,CAAC;AACJ,CAAC;AAED,0FAA0F;AAC1F,SAAS,uBAAuB,CAAC,KAA2B;IAC1D,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CACtE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,aAAa,EAAE,EAAE,EAAE,CAChE,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CACnD,CACF,CAAC;IACF,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,CAAC;AAC9C,CAAC;AAED,kGAAkG;AAClG,SAAS,sBAAsB,CAAC,KAA2B;IACzD,MAAM,UAAU,GAAG;QACjB,KAAK,CAAC,QAAQ;QACd,KAAK,CAAC,IAAI;QACV,KAAK,CAAC,KAAK;QACX,KAAK,CAAC,aAAa;QACnB,KAAK,CAAC,WAAW;KAClB,CAAC;IACF,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,IAAI,CACvD,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAC1D,CAAC;IACF,MAAM,YAAY,GAAG,IAAI,GAAG,CAAS;QACnC,SAAS;QACT,GAAG,CAAC,OAAO,EAAE,YAAY,IAAI,EAAE,CAAC;QAChC,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;aACrB,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,SAAS,KAAK,SAAS,CAAC;aAClD,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC;KACrC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC;SACxC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,QAAQ,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC;SACnF,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC9F,CAAC","sourcesContent":["import { isRecord } from '@ankhorage/utility/object';\nimport { isNonEmptyString } from '@ankhorage/utility/string';\n\nimport { isSerializableSet } from '../collections.js';\nimport { INFRA_ADAPTER_CATALOG } from '../infraCatalog.js';\nimport type {\n InfraEnvironmentSpec,\n InfraObjectStorageSpec,\n InfraS3PersistenceTarget,\n InfraScheduledDatabaseBackupSpec,\n} from '../types/infraManifest.js';\nimport type { InfraShape } from '../types/infraValidation.js';\nimport { infraFields } from './infraFields.js';\nimport { isInfraAuthSpec } from './isInfraAuthSpec.js';\nimport { isInfraCredentialRef } from './isInfraCredentialRef.js';\nimport { isInfraDeploymentSpec } from './isInfraDeploymentSpec.js';\nimport { isInfraShape } from './isInfraShape.js';\nimport { isInfraWorkloadSpec } from './isInfraWorkloadSpec.js';\n\n/*** Validate sibling capabilities and their required relationships within one environment. */\nexport function isInfraEnvironmentSpec(value: unknown): value is InfraEnvironmentSpec {\n return (\n isEnvironmentShape(value) &&\n hasServiceDependencies(value) &&\n hasNetworkingRelationships(value) &&\n hasUniquePublishedPorts(value)\n );\n}\n\n/*** Check all environment field shapes before inspecting canonical dependency metadata. */\nfunction isEnvironmentShape(value: unknown): value is InfraEnvironmentSpec {\n return isInfraShape(value, {\n deployment: isInfraDeploymentSpec,\n database: (database) =>\n database === undefined ||\n isInfraShape(database, {\n provider: (provider) => provider === 'supabase',\n tier: (tier) => tier === undefined || tier === 'dev' || tier === 'prod',\n backup: (backup) => backup === undefined || isScheduledDatabaseBackup(backup),\n }),\n objectStorage: (storage) => storage === undefined || isObjectStorage(storage),\n auth: (auth) => auth === undefined || isInfraAuthSpec(auth),\n authz: (authz) =>\n authz === undefined ||\n isInfraShape(authz, {\n provider: (provider) => provider === 'cerbos',\n kind: (kind) => kind === 'ABAC' || kind === 'RBAC',\n policies: (policies) => policies === undefined || isPolicyFiles(policies),\n }),\n secretStore: (store) =>\n store === undefined ||\n isInfraShape(store, {\n provider: (provider) => provider === 'supabase-vault',\n schema: infraFields.optionalText,\n }),\n networking: (networking) =>\n networking === undefined ||\n isInfraShape(networking, {\n domain: infraFields.optionalText,\n publicBaseUrl: (publicBaseUrl) =>\n publicBaseUrl === undefined || isPublicHttpOrigin(publicBaseUrl),\n tls: (tls) =>\n tls === undefined ||\n isInfraShape(tls, {\n mode: (mode) => mode === 'acme-http-01',\n contactEmail: isNonEmptyString,\n }),\n }),\n workloads: (workloads) => workloads === undefined || isWorkloads(workloads),\n } satisfies InfraShape<InfraEnvironmentSpec>);\n}\n\n/*** Public workload configuration uses one canonical absolute HTTP(S) origin without path state. */\nfunction isPublicHttpOrigin(value: unknown): boolean {\n if (!isNonEmptyString(value)) return false;\n try {\n const url = new URL(value);\n return (url.protocol === 'http:' || url.protocol === 'https:') && url.origin === value;\n } catch {\n return false;\n }\n}\n\n/*** Automatic TLS requires one matching HTTPS origin and public DNS hostname. */\nfunction hasNetworkingRelationships(value: InfraEnvironmentSpec): boolean {\n const { networking } = value;\n if (networking?.tls === undefined) return true;\n if (networking.domain === undefined || networking.publicBaseUrl === undefined) return false;\n const url = new URL(networking.publicBaseUrl);\n return url.protocol === 'https:' && url.hostname === networking.domain;\n}\n\n/*** Validate portable, unique Cerbos policy files without host paths or traversal. */\nfunction isPolicyFiles(value: unknown): boolean {\n return (\n isRecord(value) &&\n Object.entries(value).every(\n ([path, content]) =>\n isNonEmptyString(path) &&\n !path.startsWith('/') &&\n !path.split('/').includes('..') &&\n isNonEmptyString(content),\n )\n );\n}\n\n/*** Validate provider-neutral scheduled database backup intent. */\nfunction isScheduledDatabaseBackup(value: unknown): value is InfraScheduledDatabaseBackupSpec {\n return isInfraShape(value, {\n mode: (mode) => mode === 'scheduled',\n target: isS3PersistenceTarget,\n intervalHours: (interval) =>\n interval === undefined ||\n (typeof interval === 'number' && Number.isInteger(interval) && interval > 0),\n });\n}\n\n/*** Validate one portable S3-compatible persistence target without resolving credentials. */\nfunction isS3PersistenceTarget(value: unknown): value is InfraS3PersistenceTarget {\n return isInfraShape(value, {\n endpoint: isPublicHttpOrigin,\n region: isNonEmptyString,\n bucket: isNonEmptyString,\n credentials: isInfraCredentialRef,\n forcePathStyle: (forcePathStyle) =>\n forcePathStyle === undefined || typeof forcePathStyle === 'boolean',\n });\n}\n\n/*** Object storage can vary independently from database/auth; there is no implicit auto provider. */\nfunction isObjectStorage(value: unknown): boolean {\n if (!isRecord(value)) return false;\n const common = {\n provider: (provider: unknown) => provider === value.provider,\n buckets: (buckets: unknown) => buckets === undefined || isSerializableSet(buckets),\n };\n if (value.provider === 'supabase') {\n return isInfraShape(value, {\n ...common,\n provider: (provider) => provider === 'supabase',\n backend: (backend) => backend === undefined || isS3PersistenceTarget(backend),\n } satisfies InfraShape<Extract<InfraObjectStorageSpec, { readonly provider: 'supabase' }>>);\n }\n return isInfraShape(value, {\n ...common,\n provider: (provider) => provider === 'r2',\n accountId: infraFields.optionalText,\n credentials: (credentials) => credentials === undefined || isInfraCredentialRef(credentials),\n } satisfies InfraShape<Extract<InfraObjectStorageSpec, { readonly provider: 'r2' }>>);\n}\n\n/*** Duplicate desired workload identities cannot be reconciled safely. */\nfunction isWorkloads(value: unknown): boolean {\n return (\n isRecord(value) &&\n Object.entries(value).every(\n ([workloadId, workload]) => isInfraWorkloadSpec(workload) && workload.id === workloadId,\n )\n );\n}\n\n/*** Prevent two workloads in one environment from claiming the same external listener. */\nfunction hasUniquePublishedPorts(value: InfraEnvironmentSpec): boolean {\n const ports = Object.values(value.workloads ?? {}).flatMap((workload) =>\n Object.values(workload.ports ?? {}).flatMap(({ publishedPort }) =>\n publishedPort === undefined ? [] : [publishedPort],\n ),\n );\n return new Set(ports).size === ports.length;\n}\n\n/*** Check catalog dependencies against selected sibling capabilities and runtime capabilities. */\nfunction hasServiceDependencies(value: InfraEnvironmentSpec): boolean {\n const selections = [\n value.database,\n value.auth,\n value.authz,\n value.objectStorage,\n value.secretStore,\n ];\n const runtime = Object.values(INFRA_ADAPTER_CATALOG).find(\n (entry) => entry.id === value.deployment.runtime.provider,\n );\n const capabilities = new Set<string>([\n 'compute',\n ...(runtime?.capabilities ?? []),\n ...Object.entries(value)\n .filter(([, selection]) => selection !== undefined)\n .map(([capability]) => capability),\n ]);\n return Object.values(INFRA_ADAPTER_CATALOG)\n .filter((entry) => selections.some((selection) => selection?.provider === entry.id))\n .every((entry) => entry.dependencies.every((dependency) => capabilities.has(dependency)));\n}\n"]}
@@ -1,4 +1,4 @@
1
- import type { InfraManifest } from '../types/infraManifest';
1
+ import type { InfraManifest } from '../types/infraManifest.js';
2
2
  /*** Validate standalone infrastructure without AppManifest, Deploy or provider package side effects. */
3
3
  export declare function isInfraManifest(value: unknown): value is InfraManifest;
4
4
  //# sourceMappingURL=isInfraManifest.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"isInfraManifest.d.ts","sourceRoot":"","sources":["../../src/infra/isInfraManifest.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAmB,MAAM,wBAAwB,CAAC;AAK7E,wGAAwG;AACxG,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAMtE"}
1
+ {"version":3,"file":"isInfraManifest.d.ts","sourceRoot":"","sources":["../../src/infra/isInfraManifest.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAmB,MAAM,2BAA2B,CAAC;AAKhF,wGAAwG;AACxG,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAMtE"}
@@ -1,9 +1,9 @@
1
1
  import { isRecord } from '@ankhorage/utility/object';
2
- import { isApiDefinitionRegistry } from '../data/isApiDefinitionRegistry';
3
- import { APP_ENVIRONMENT_IDS } from '../environments';
4
- import { isSerializableValue } from '../serializable';
5
- import { isInfraEnvironmentSpec } from './isInfraEnvironmentSpec';
6
- import { isInfraShape } from './isInfraShape';
2
+ import { isApiDefinitionRegistry } from '../data/isApiDefinitionRegistry.js';
3
+ import { APP_ENVIRONMENT_IDS } from '../environments.js';
4
+ import { isSerializableValue } from '../serializable.js';
5
+ import { isInfraEnvironmentSpec } from './isInfraEnvironmentSpec.js';
6
+ import { isInfraShape } from './isInfraShape.js';
7
7
  /*** Validate standalone infrastructure without AppManifest, Deploy or provider package side effects. */
8
8
  export function isInfraManifest(value) {
9
9
  return isInfraShape(value, {
@@ -1 +1 @@
1
- {"version":3,"file":"isInfraManifest.js","sourceRoot":"","sources":["../../src/infra/isInfraManifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAErD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAGtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,wGAAwG;AACxG,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,OAAO,YAAY,CAAC,KAAK,EAAE;QACzB,YAAY,EAAE,cAAc;QAC5B,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,SAAS,IAAI,uBAAuB,CAAC,IAAI,CAAC;QACnE,OAAO,EAAE,gBAAgB;KACU,CAAC,CAAC;AACzC,CAAC;AAED,sGAAsG;AACtG,SAAS,cAAc,CAAC,KAAc;IACpC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3E,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAChC,CAAC,CAAC,GAAG,EAAE,WAAW,CAAC,EAAE,EAAE,CACrB,mBAAmB,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,GAAG,CAAC;QAC5C,CAAC,CAAC,WAAW,KAAK,SAAS,IAAI,GAAG,KAAK,OAAO,CAAC,IAAI,sBAAsB,CAAC,WAAW,CAAC,CAAC,CAC1F,CAAC;AACJ,CAAC;AAED,gGAAgG;AAChG,SAAS,gBAAgB,CAAC,KAAc;IACtC,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;AACrE,CAAC;AAED,2CAA2C;AAC3C,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,YAAY,CAAC,KAAK,EAAE;QACzB,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,SAAS,IAAI,mBAAmB,CAAC,MAAM,CAAC;KACxE,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { isRecord } from '@ankhorage/utility/object';\n\nimport { isApiDefinitionRegistry } from '../data/isApiDefinitionRegistry';\nimport { APP_ENVIRONMENT_IDS } from '../environments';\nimport { isSerializableValue } from '../serializable';\nimport type { InfraManifest, InfraModuleSpec } from '../types/infraManifest';\nimport type { InfraShape } from '../types/infraValidation';\nimport { isInfraEnvironmentSpec } from './isInfraEnvironmentSpec';\nimport { isInfraShape } from './isInfraShape';\n\n/*** Validate standalone infrastructure without AppManifest, Deploy or provider package side effects. */\nexport function isInfraManifest(value: unknown): value is InfraManifest {\n return isInfraShape(value, {\n environments: isEnvironments,\n apis: (apis) => apis === undefined || isApiDefinitionRegistry(apis),\n modules: isModuleRegistry,\n } satisfies InfraShape<InfraManifest>);\n}\n\n/*** Local is required; preview and production are optional but never inferred from arbitrary keys. */\nfunction isEnvironments(value: unknown): boolean {\n if (!isRecord(value) || !isInfraEnvironmentSpec(value.local)) return false;\n return Object.entries(value).every(\n ([key, environment]) =>\n APP_ENVIRONMENT_IDS.some((id) => id === key) &&\n ((environment === undefined && key !== 'local') || isInfraEnvironmentSpec(environment)),\n );\n}\n\n/*** Validate installed module identity and optional serializable module-owned configuration. */\nfunction isModuleRegistry(value: unknown): boolean {\n return isRecord(value) && Object.values(value).every(isModuleSpec);\n}\n\n/*** Validate one module registry entry. */\nfunction isModuleSpec(value: unknown): value is InfraModuleSpec {\n return isInfraShape(value, {\n config: (config) => config === undefined || isSerializableValue(config),\n });\n}\n"]}
1
+ {"version":3,"file":"isInfraManifest.js","sourceRoot":"","sources":["../../src/infra/isInfraManifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAErD,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAGzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,wGAAwG;AACxG,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,OAAO,YAAY,CAAC,KAAK,EAAE;QACzB,YAAY,EAAE,cAAc;QAC5B,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,SAAS,IAAI,uBAAuB,CAAC,IAAI,CAAC;QACnE,OAAO,EAAE,gBAAgB;KACU,CAAC,CAAC;AACzC,CAAC;AAED,sGAAsG;AACtG,SAAS,cAAc,CAAC,KAAc;IACpC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3E,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAChC,CAAC,CAAC,GAAG,EAAE,WAAW,CAAC,EAAE,EAAE,CACrB,mBAAmB,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,GAAG,CAAC;QAC5C,CAAC,CAAC,WAAW,KAAK,SAAS,IAAI,GAAG,KAAK,OAAO,CAAC,IAAI,sBAAsB,CAAC,WAAW,CAAC,CAAC,CAC1F,CAAC;AACJ,CAAC;AAED,gGAAgG;AAChG,SAAS,gBAAgB,CAAC,KAAc;IACtC,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;AACrE,CAAC;AAED,2CAA2C;AAC3C,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,YAAY,CAAC,KAAK,EAAE;QACzB,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,SAAS,IAAI,mBAAmB,CAAC,MAAM,CAAC;KACxE,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { isRecord } from '@ankhorage/utility/object';\n\nimport { isApiDefinitionRegistry } from '../data/isApiDefinitionRegistry.js';\nimport { APP_ENVIRONMENT_IDS } from '../environments.js';\nimport { isSerializableValue } from '../serializable.js';\nimport type { InfraManifest, InfraModuleSpec } from '../types/infraManifest.js';\nimport type { InfraShape } from '../types/infraValidation.js';\nimport { isInfraEnvironmentSpec } from './isInfraEnvironmentSpec.js';\nimport { isInfraShape } from './isInfraShape.js';\n\n/*** Validate standalone infrastructure without AppManifest, Deploy or provider package side effects. */\nexport function isInfraManifest(value: unknown): value is InfraManifest {\n return isInfraShape(value, {\n environments: isEnvironments,\n apis: (apis) => apis === undefined || isApiDefinitionRegistry(apis),\n modules: isModuleRegistry,\n } satisfies InfraShape<InfraManifest>);\n}\n\n/*** Local is required; preview and production are optional but never inferred from arbitrary keys. */\nfunction isEnvironments(value: unknown): boolean {\n if (!isRecord(value) || !isInfraEnvironmentSpec(value.local)) return false;\n return Object.entries(value).every(\n ([key, environment]) =>\n APP_ENVIRONMENT_IDS.some((id) => id === key) &&\n ((environment === undefined && key !== 'local') || isInfraEnvironmentSpec(environment)),\n );\n}\n\n/*** Validate installed module identity and optional serializable module-owned configuration. */\nfunction isModuleRegistry(value: unknown): boolean {\n return isRecord(value) && Object.values(value).every(isModuleSpec);\n}\n\n/*** Validate one module registry entry. */\nfunction isModuleSpec(value: unknown): value is InfraModuleSpec {\n return isInfraShape(value, {\n config: (config) => config === undefined || isSerializableValue(config),\n });\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  import { isRecord } from '@ankhorage/utility/object';
2
- import { infraFields } from './infraFields';
3
- import { isInfraShape } from './isInfraShape';
2
+ import { infraFields } from './infraFields.js';
3
+ import { isInfraShape } from './isInfraShape.js';
4
4
  /*** Validate runtime-neutral readiness probes and bounded numeric parameters. */
5
5
  export function isInfraWorkloadHealth(value) {
6
6
  if (!isRecord(value))
@@ -1 +1 @@
1
- {"version":3,"file":"isInfraWorkloadHealth.js","sourceRoot":"","sources":["../../src/infra/isInfraWorkloadHealth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAErD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,iFAAiF;AACjF,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,MAAM,MAAM,GAAG;QACb,eAAe,EAAE,WAAW,CAAC,uBAAuB;QACpD,cAAc,EAAE,WAAW,CAAC,uBAAuB;QACnD,gBAAgB,EAAE,WAAW,CAAC,uBAAuB;KACtD,CAAC;IACF,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,MAAM;YACT,OAAO,YAAY,CAAC,KAAK,EAAE;gBACzB,GAAG,MAAM;gBACT,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,MAAM;gBAC/B,IAAI,EAAE,WAAW,CAAC,IAAI;gBACtB,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;aACjE,CAAC,CAAC;QACL,KAAK,KAAK;YACR,OAAO,YAAY,CAAC,KAAK,EAAE;gBACzB,GAAG,MAAM;gBACT,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,KAAK;gBAC9B,IAAI,EAAE,WAAW,CAAC,IAAI;aACvB,CAAC,CAAC;QACL,KAAK,SAAS;YACZ,OAAO,YAAY,CAAC,KAAK,EAAE;gBACzB,GAAG,MAAM;gBACT,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,SAAS;gBAClC,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CACnB,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC;aAC/E,CAAC,CAAC;QACL;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC","sourcesContent":["import { isRecord } from '@ankhorage/utility/object';\n\nimport { infraFields } from './infraFields';\nimport { isInfraShape } from './isInfraShape';\n\n/*** Validate runtime-neutral readiness probes and bounded numeric parameters. */\nexport function isInfraWorkloadHealth(value: unknown): boolean {\n if (!isRecord(value)) return false;\n const timing = {\n intervalSeconds: infraFields.optionalPositiveInteger,\n timeoutSeconds: infraFields.optionalPositiveInteger,\n failureThreshold: infraFields.optionalPositiveInteger,\n };\n switch (value.kind) {\n case 'http':\n return isInfraShape(value, {\n ...timing,\n kind: (kind) => kind === 'http',\n port: infraFields.port,\n path: (path) => typeof path === 'string' && path.startsWith('/'),\n });\n case 'tcp':\n return isInfraShape(value, {\n ...timing,\n kind: (kind) => kind === 'tcp',\n port: infraFields.port,\n });\n case 'command':\n return isInfraShape(value, {\n ...timing,\n kind: (kind) => kind === 'command',\n command: (command) =>\n Array.isArray(command) && command.length > 0 && infraFields.strings(command),\n });\n default:\n return false;\n }\n}\n"]}
1
+ {"version":3,"file":"isInfraWorkloadHealth.js","sourceRoot":"","sources":["../../src/infra/isInfraWorkloadHealth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAErD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,iFAAiF;AACjF,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,MAAM,MAAM,GAAG;QACb,eAAe,EAAE,WAAW,CAAC,uBAAuB;QACpD,cAAc,EAAE,WAAW,CAAC,uBAAuB;QACnD,gBAAgB,EAAE,WAAW,CAAC,uBAAuB;KACtD,CAAC;IACF,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,MAAM;YACT,OAAO,YAAY,CAAC,KAAK,EAAE;gBACzB,GAAG,MAAM;gBACT,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,MAAM;gBAC/B,IAAI,EAAE,WAAW,CAAC,IAAI;gBACtB,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;aACjE,CAAC,CAAC;QACL,KAAK,KAAK;YACR,OAAO,YAAY,CAAC,KAAK,EAAE;gBACzB,GAAG,MAAM;gBACT,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,KAAK;gBAC9B,IAAI,EAAE,WAAW,CAAC,IAAI;aACvB,CAAC,CAAC;QACL,KAAK,SAAS;YACZ,OAAO,YAAY,CAAC,KAAK,EAAE;gBACzB,GAAG,MAAM;gBACT,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,SAAS;gBAClC,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CACnB,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC;aAC/E,CAAC,CAAC;QACL;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC","sourcesContent":["import { isRecord } from '@ankhorage/utility/object';\n\nimport { infraFields } from './infraFields.js';\nimport { isInfraShape } from './isInfraShape.js';\n\n/*** Validate runtime-neutral readiness probes and bounded numeric parameters. */\nexport function isInfraWorkloadHealth(value: unknown): boolean {\n if (!isRecord(value)) return false;\n const timing = {\n intervalSeconds: infraFields.optionalPositiveInteger,\n timeoutSeconds: infraFields.optionalPositiveInteger,\n failureThreshold: infraFields.optionalPositiveInteger,\n };\n switch (value.kind) {\n case 'http':\n return isInfraShape(value, {\n ...timing,\n kind: (kind) => kind === 'http',\n port: infraFields.port,\n path: (path) => typeof path === 'string' && path.startsWith('/'),\n });\n case 'tcp':\n return isInfraShape(value, {\n ...timing,\n kind: (kind) => kind === 'tcp',\n port: infraFields.port,\n });\n case 'command':\n return isInfraShape(value, {\n ...timing,\n kind: (kind) => kind === 'command',\n command: (command) =>\n Array.isArray(command) && command.length > 0 && infraFields.strings(command),\n });\n default:\n return false;\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import type { InfraWorkloadSpec } from '../types/infraWorkload';
1
+ import type { InfraWorkloadSpec } from '../types/infraWorkload.js';
2
2
  /*** Validate the portable desired workload; runtime-specific fields and plaintext secret objects fail. */
3
3
  export declare function isInfraWorkloadSpec(value: unknown): value is InfraWorkloadSpec;
4
4
  //# sourceMappingURL=isInfraWorkloadSpec.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"isInfraWorkloadSpec.d.ts","sourceRoot":"","sources":["../../src/infra/isInfraWorkloadSpec.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAMhE,0GAA0G;AAC1G,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,iBAAiB,CA8B9E"}
1
+ {"version":3,"file":"isInfraWorkloadSpec.d.ts","sourceRoot":"","sources":["../../src/infra/isInfraWorkloadSpec.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAMnE,0GAA0G;AAC1G,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,iBAAiB,CA8B9E"}
@@ -1,11 +1,11 @@
1
1
  import { isStringArray } from '@ankhorage/utility/array';
2
2
  import { isRecord } from '@ankhorage/utility/object';
3
3
  import { isNonEmptyString } from '@ankhorage/utility/string';
4
- import { isSerializableSet } from '../collections';
5
- import { infraFields } from './infraFields';
6
- import { isInfraShape } from './isInfraShape';
7
- import { isInfraWorkloadHealth } from './isInfraWorkloadHealth';
8
- import { isInfraWorkloadValue } from './isInfraWorkloadValue';
4
+ import { isSerializableSet } from '../collections.js';
5
+ import { infraFields } from './infraFields.js';
6
+ import { isInfraShape } from './isInfraShape.js';
7
+ import { isInfraWorkloadHealth } from './isInfraWorkloadHealth.js';
8
+ import { isInfraWorkloadValue } from './isInfraWorkloadValue.js';
9
9
  /*** Validate the portable desired workload; runtime-specific fields and plaintext secret objects fail. */
10
10
  export function isInfraWorkloadSpec(value) {
11
11
  if (!isInfraShape(value, {
@@ -1 +1 @@
1
- {"version":3,"file":"isInfraWorkloadSpec.js","sourceRoot":"","sources":["../../src/infra/isInfraWorkloadSpec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAE7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAGnD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,0GAA0G;AAC1G,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,IACE,CAAC,YAAY,CAAC,KAAK,EAAE;QACnB,EAAE,EAAE,gBAAgB;QACpB,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE,CACrB,YAAY,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC;QACvF,OAAO,EAAE,WAAW,CAAC,eAAe;QACpC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,SAAS,IAAI,aAAa,CAAC,IAAI,CAAC;QACzD,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,IAAI,cAAc,CAAC,KAAK,CAAC;QAC9D,WAAW,EAAE,CAAC,WAAW,EAAE,EAAE,CAC3B,WAAW,KAAK,SAAS;YACzB,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QACnF,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,IAAI,SAAS,CAAC,KAAK,CAAC;QACzD,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,SAAS,IAAI,qBAAqB,CAAC,MAAM,CAAC;QACzE,SAAS,EAAE,CAAC,SAAS,EAAE,EAAE,CACvB,SAAS,KAAK,SAAS;YACvB,YAAY,CAAC,SAAS,EAAE;gBACtB,SAAS,EAAE,WAAW,CAAC,uBAAuB;gBAC9C,SAAS,EAAE,WAAW,CAAC,uBAAuB;aAC/C,CAAC;QACJ,WAAW,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,SAAS,IAAI,gBAAgB,CAAC,OAAO,CAAC;QAC5E,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE,CACrB,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,UAAU,IAAI,QAAQ,KAAK,QAAQ;QAC5E,QAAQ,EAAE,WAAW,CAAC,0BAA0B;QAChD,SAAS,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,KAAK,SAAS,IAAI,iBAAiB,CAAC,SAAS,CAAC;KAC1C,CAAC,EAC1C,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,sBAAsB,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC;AAED,2EAA2E;AAC3E,SAAS,cAAc,CAAC,KAAc;IACpC,OAAO,CACL,QAAQ,CAAC,KAAK,CAAC;QACf,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CACtF,CAAC;AACJ,CAAC;AAED,2EAA2E;AAC3E,SAAS,MAAM,CAAC,KAAc;IAC5B,OAAO,YAAY,CAAC,KAAK,EAAE;QACzB,IAAI,EAAE,WAAW,CAAC,IAAI;QACtB,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,KAAK,IAAI,QAAQ,KAAK,KAAK;QAC1F,aAAa,EAAE,WAAW,CAAC,YAAY;KACxC,CAAC,CAAC;AACL,CAAC;AAED,kFAAkF;AAClF,SAAS,sBAAsB,CAAC,QAAiB;IAC/C,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IACtC,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5E,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QACvC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,aAAa,KAAK,QAAQ;YAAE,OAAO,EAAE,CAAC;QACzE,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IACH,OAAO,CACL,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,MAAM;QAC5C,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;YACrB,CAAC,QAAQ,CAAC,QAAQ,KAAK,QAAQ;gBAC7B,CAAC,QAAQ,CAAC,QAAQ,KAAK,SAAS;oBAC9B,CAAC,OAAO,QAAQ,CAAC,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAC3E,CAAC;AACJ,CAAC;AAED,qFAAqF;AACrF,SAAS,SAAS,CAAC,KAAc;IAC/B,OAAO,CACL,QAAQ,CAAC,KAAK,CAAC;QACf,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CACzB,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,sBAAsB,CAAC,QAAQ,CAAC,IAAI,oBAAoB,CAAC,OAAO,CAAC,CAC3F,CACF,CAAC;AACJ,CAAC;AAED,kGAAkG;AAClG,SAAS,gBAAgB,CAAC,KAAc;IACtC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACtC,IACE,CAAC,OAAO,CAAC,KAAK,CACZ,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,EAAE,KAAK,QAAQ,CACvF,EACD,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CACrD,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAChD,CAAC;IACF,OAAO,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,MAAM,CAAC;AACxD,CAAC;AAED,wGAAwG;AACxG,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,YAAY,CAAC,KAAK,EAAE;QACzB,EAAE,EAAE,gBAAgB;QACpB,SAAS,EAAE,sBAAsB;QACjC,OAAO,EAAE,WAAW,CAAC,eAAe;QACpC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,OAAO;QACtD,SAAS,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,mBAAmB;KACtF,CAAC,CAAC;AACL,CAAC;AAED,mFAAmF;AACnF,SAAS,sBAAsB,CAAC,KAAc;IAC5C,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;QACrB,KAAK,CAAC,MAAM,GAAG,CAAC;QAChB,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CACjC,CAAC;AACJ,CAAC","sourcesContent":["import { isStringArray } from '@ankhorage/utility/array';\nimport { isRecord } from '@ankhorage/utility/object';\nimport { isNonEmptyString } from '@ankhorage/utility/string';\n\nimport { isSerializableSet } from '../collections';\nimport type { InfraShape } from '../types/infraValidation';\nimport type { InfraWorkloadSpec } from '../types/infraWorkload';\nimport { infraFields } from './infraFields';\nimport { isInfraShape } from './isInfraShape';\nimport { isInfraWorkloadHealth } from './isInfraWorkloadHealth';\nimport { isInfraWorkloadValue } from './isInfraWorkloadValue';\n\n/*** Validate the portable desired workload; runtime-specific fields and plaintext secret objects fail. */\nexport function isInfraWorkloadSpec(value: unknown): value is InfraWorkloadSpec {\n if (\n !isInfraShape(value, {\n id: isNonEmptyString,\n artifact: (artifact) =>\n isInfraShape(artifact, { kind: (kind) => kind === 'image', image: isNonEmptyString }),\n command: infraFields.optionalStrings,\n args: (args) => args === undefined || isStringArray(args),\n ports: (ports) => ports === undefined || isPortRegistry(ports),\n environment: (environment) =>\n environment === undefined ||\n (isRecord(environment) && Object.values(environment).every(isInfraWorkloadValue)),\n files: (files) => files === undefined || isFileMap(files),\n health: (health) => health === undefined || isInfraWorkloadHealth(health),\n resources: (resources) =>\n resources === undefined ||\n isInfraShape(resources, {\n cpuMillis: infraFields.optionalPositiveInteger,\n memoryMiB: infraFields.optionalPositiveInteger,\n }),\n persistence: (volumes) => volumes === undefined || isVolumeRegistry(volumes),\n exposure: (exposure) =>\n exposure === undefined || exposure === 'internal' || exposure === 'public',\n replicas: infraFields.optionalNonnegativeInteger,\n dependsOn: (dependsOn) => dependsOn === undefined || isSerializableSet(dependsOn),\n } satisfies InfraShape<InfraWorkloadSpec>)\n ) {\n return false;\n }\n return hasValidPublishedPorts(value);\n}\n\n/*** Validate named transport ports keyed by their stable authored name. */\nfunction isPortRegistry(value: unknown): boolean {\n return (\n isRecord(value) &&\n Object.entries(value).every(([name, port]) => isNonEmptyString(name) && isPort(port))\n );\n}\n\n/*** Named transport ports stay independent from runtime resource types. */\nfunction isPort(value: unknown): boolean {\n return isInfraShape(value, {\n port: infraFields.port,\n protocol: (protocol) => protocol === undefined || protocol === 'tcp' || protocol === 'udp',\n publishedPort: infraFields.optionalPort,\n });\n}\n\n/*** Require fixed external listeners to belong to one public workload replica. */\nfunction hasValidPublishedPorts(workload: unknown): boolean {\n if (!isRecord(workload)) return false;\n const ports = isRecord(workload.ports) ? Object.values(workload.ports) : [];\n const published = ports.flatMap((port) => {\n if (!isRecord(port) || typeof port.publishedPort !== 'number') return [];\n return [port.publishedPort];\n });\n return (\n new Set(published).size === published.length &&\n (published.length === 0 ||\n (workload.exposure === 'public' &&\n (workload.replicas === undefined ||\n (typeof workload.replicas === 'number' && workload.replicas <= 1))))\n );\n}\n\n/*** Validate portable config/policy files keyed by their absolute container path. */\nfunction isFileMap(value: unknown): boolean {\n return (\n isRecord(value) &&\n Object.entries(value).every(\n ([filePath, content]) => isAbsoluteWorkloadPath(filePath) && isInfraWorkloadValue(content),\n )\n );\n}\n\n/*** Validate persistence volumes by stable ID and keep mount paths unique within one workload. */\nfunction isVolumeRegistry(value: unknown): boolean {\n if (!isRecord(value)) return false;\n const entries = Object.entries(value);\n if (\n !entries.every(\n ([volumeId, volume]) => isVolume(volume) && isRecord(volume) && volume.id === volumeId,\n )\n ) {\n return false;\n }\n const mountPaths = Object.values(value).map((volume) =>\n isRecord(volume) ? volume.mountPath : undefined,\n );\n return new Set(mountPaths).size === mountPaths.length;\n}\n\n/*** Persistence has explicit ownership-local identity, optional initialization and retention policy. */\nfunction isVolume(value: unknown): boolean {\n return isInfraShape(value, {\n id: isNonEmptyString,\n mountPath: isAbsoluteWorkloadPath,\n sizeGiB: infraFields.positiveInteger,\n seed: (seed) => seed === undefined || seed === 'image',\n retention: (retention) => retention === 'retain' || retention === 'delete-on-destroy',\n });\n}\n\n/*** Workload paths are absolute container paths, never relative host traversal. */\nfunction isAbsoluteWorkloadPath(value: unknown): boolean {\n return (\n typeof value === 'string' &&\n value.startsWith('/') &&\n value.length > 1 &&\n !value.split('/').includes('..')\n );\n}\n"]}
1
+ {"version":3,"file":"isInfraWorkloadSpec.js","sourceRoot":"","sources":["../../src/infra/isInfraWorkloadSpec.ts"],"names":[],"mappings":"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","sourcesContent":["import { isStringArray } from '@ankhorage/utility/array';\nimport { isRecord } from '@ankhorage/utility/object';\nimport { isNonEmptyString } from '@ankhorage/utility/string';\n\nimport { isSerializableSet } from '../collections.js';\nimport type { InfraShape } from '../types/infraValidation.js';\nimport type { InfraWorkloadSpec } from '../types/infraWorkload.js';\nimport { infraFields } from './infraFields.js';\nimport { isInfraShape } from './isInfraShape.js';\nimport { isInfraWorkloadHealth } from './isInfraWorkloadHealth.js';\nimport { isInfraWorkloadValue } from './isInfraWorkloadValue.js';\n\n/*** Validate the portable desired workload; runtime-specific fields and plaintext secret objects fail. */\nexport function isInfraWorkloadSpec(value: unknown): value is InfraWorkloadSpec {\n if (\n !isInfraShape(value, {\n id: isNonEmptyString,\n artifact: (artifact) =>\n isInfraShape(artifact, { kind: (kind) => kind === 'image', image: isNonEmptyString }),\n command: infraFields.optionalStrings,\n args: (args) => args === undefined || isStringArray(args),\n ports: (ports) => ports === undefined || isPortRegistry(ports),\n environment: (environment) =>\n environment === undefined ||\n (isRecord(environment) && Object.values(environment).every(isInfraWorkloadValue)),\n files: (files) => files === undefined || isFileMap(files),\n health: (health) => health === undefined || isInfraWorkloadHealth(health),\n resources: (resources) =>\n resources === undefined ||\n isInfraShape(resources, {\n cpuMillis: infraFields.optionalPositiveInteger,\n memoryMiB: infraFields.optionalPositiveInteger,\n }),\n persistence: (volumes) => volumes === undefined || isVolumeRegistry(volumes),\n exposure: (exposure) =>\n exposure === undefined || exposure === 'internal' || exposure === 'public',\n replicas: infraFields.optionalNonnegativeInteger,\n dependsOn: (dependsOn) => dependsOn === undefined || isSerializableSet(dependsOn),\n } satisfies InfraShape<InfraWorkloadSpec>)\n ) {\n return false;\n }\n return hasValidPublishedPorts(value);\n}\n\n/*** Validate named transport ports keyed by their stable authored name. */\nfunction isPortRegistry(value: unknown): boolean {\n return (\n isRecord(value) &&\n Object.entries(value).every(([name, port]) => isNonEmptyString(name) && isPort(port))\n );\n}\n\n/*** Named transport ports stay independent from runtime resource types. */\nfunction isPort(value: unknown): boolean {\n return isInfraShape(value, {\n port: infraFields.port,\n protocol: (protocol) => protocol === undefined || protocol === 'tcp' || protocol === 'udp',\n publishedPort: infraFields.optionalPort,\n });\n}\n\n/*** Require fixed external listeners to belong to one public workload replica. */\nfunction hasValidPublishedPorts(workload: unknown): boolean {\n if (!isRecord(workload)) return false;\n const ports = isRecord(workload.ports) ? Object.values(workload.ports) : [];\n const published = ports.flatMap((port) => {\n if (!isRecord(port) || typeof port.publishedPort !== 'number') return [];\n return [port.publishedPort];\n });\n return (\n new Set(published).size === published.length &&\n (published.length === 0 ||\n (workload.exposure === 'public' &&\n (workload.replicas === undefined ||\n (typeof workload.replicas === 'number' && workload.replicas <= 1))))\n );\n}\n\n/*** Validate portable config/policy files keyed by their absolute container path. */\nfunction isFileMap(value: unknown): boolean {\n return (\n isRecord(value) &&\n Object.entries(value).every(\n ([filePath, content]) => isAbsoluteWorkloadPath(filePath) && isInfraWorkloadValue(content),\n )\n );\n}\n\n/*** Validate persistence volumes by stable ID and keep mount paths unique within one workload. */\nfunction isVolumeRegistry(value: unknown): boolean {\n if (!isRecord(value)) return false;\n const entries = Object.entries(value);\n if (\n !entries.every(\n ([volumeId, volume]) => isVolume(volume) && isRecord(volume) && volume.id === volumeId,\n )\n ) {\n return false;\n }\n const mountPaths = Object.values(value).map((volume) =>\n isRecord(volume) ? volume.mountPath : undefined,\n );\n return new Set(mountPaths).size === mountPaths.length;\n}\n\n/*** Persistence has explicit ownership-local identity, optional initialization and retention policy. */\nfunction isVolume(value: unknown): boolean {\n return isInfraShape(value, {\n id: isNonEmptyString,\n mountPath: isAbsoluteWorkloadPath,\n sizeGiB: infraFields.positiveInteger,\n seed: (seed) => seed === undefined || seed === 'image',\n retention: (retention) => retention === 'retain' || retention === 'delete-on-destroy',\n });\n}\n\n/*** Workload paths are absolute container paths, never relative host traversal. */\nfunction isAbsoluteWorkloadPath(value: unknown): boolean {\n return (\n typeof value === 'string' &&\n value.startsWith('/') &&\n value.length > 1 &&\n !value.split('/').includes('..')\n );\n}\n"]}
@@ -1,8 +1,8 @@
1
1
  import { isRecord } from '@ankhorage/utility/object';
2
2
  import { isNonEmptyString } from '@ankhorage/utility/string';
3
- import { APP_ENVIRONMENT_IDS } from '../environments';
4
- import { isInfraCredentialRef } from './isInfraCredentialRef';
5
- import { isInfraShape } from './isInfraShape';
3
+ import { APP_ENVIRONMENT_IDS } from '../environments.js';
4
+ import { isInfraCredentialRef } from './isInfraCredentialRef.js';
5
+ import { isInfraShape } from './isInfraShape.js';
6
6
  /*** Workload values explicitly distinguish public literals, output dependencies and secret references. */
7
7
  export function isInfraWorkloadValue(value) {
8
8
  return (isInfraWorkloadScalarValue(value) ||
@@ -1 +1 @@
1
- {"version":3,"file":"isInfraWorkloadValue.js","sourceRoot":"","sources":["../../src/infra/isInfraWorkloadValue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAE7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,0GAA0G;AAC1G,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,OAAO,CACL,0BAA0B,CAAC,KAAK,CAAC;QACjC,YAAY,CAAC,KAAK,EAAE;YAClB,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,UAAU;YACnC,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE,CACrB,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;gBACvB,QAAQ,CAAC,MAAM,GAAG,CAAC;gBACnB,QAAQ,CAAC,KAAK,CAAC,0BAA0B,CAAC;SAC7C,CAAC,CACH,CAAC;AACJ,CAAC;AAED,0DAA0D;AAC1D,SAAS,0BAA0B,CAAC,KAAc;IAChD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,SAAS;YACZ,OAAO,YAAY,CAAC,KAAK,EAAE;gBACzB,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,SAAS;gBAClC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ;aAC5C,CAAC,CAAC;QACL,KAAK,QAAQ;YACX,OAAO,YAAY,CAAC,KAAK,EAAE;gBACzB,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,QAAQ;gBACjC,UAAU,EAAE,gBAAgB;gBAC5B,MAAM,EAAE,gBAAgB;aACzB,CAAC,CAAC;QACL,KAAK,QAAQ;YACX,OAAO,YAAY,CAAC,KAAK,EAAE;gBACzB,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,QAAQ;gBACjC,SAAS,EAAE,iBAAiB;aAC7B,CAAC,CAAC;QACL,KAAK,YAAY;YACf,OAAO,YAAY,CAAC,KAAK,EAAE;gBACzB,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,YAAY;gBACrC,SAAS,EAAE,oBAAoB;gBAC/B,GAAG,EAAE,gBAAgB;aACtB,CAAC,CAAC;QACL;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC;AAED,mFAAmF;AACnF,SAAS,iBAAiB,CAAC,KAAc;IACvC,OAAO,YAAY,CAAC,KAAK,EAAE;QACzB,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,cAAc;QAC7C,SAAS,EAAE,gBAAgB;QAC3B,WAAW,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,WAAW,CAAC;QAClF,GAAG,EAAE,gBAAgB;QACrB,GAAG,EAAE,gBAAgB;KACtB,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { isRecord } from '@ankhorage/utility/object';\nimport { isNonEmptyString } from '@ankhorage/utility/string';\n\nimport { APP_ENVIRONMENT_IDS } from '../environments';\nimport type { InfraWorkloadScalarValue } from '../types/infraWorkload';\nimport { isInfraCredentialRef } from './isInfraCredentialRef';\nimport { isInfraShape } from './isInfraShape';\n\n/*** Workload values explicitly distinguish public literals, output dependencies and secret references. */\nexport function isInfraWorkloadValue(value: unknown): boolean {\n return (\n isInfraWorkloadScalarValue(value) ||\n isInfraShape(value, {\n kind: (kind) => kind === 'template',\n segments: (segments) =>\n Array.isArray(segments) &&\n segments.length > 0 &&\n segments.every(isInfraWorkloadScalarValue),\n })\n );\n}\n\n/*** Validate one non-composite workload value segment. */\nfunction isInfraWorkloadScalarValue(value: unknown): value is InfraWorkloadScalarValue {\n if (!isRecord(value)) return false;\n switch (value.kind) {\n case 'literal':\n return isInfraShape(value, {\n kind: (kind) => kind === 'literal',\n value: (field) => typeof field === 'string',\n });\n case 'output':\n return isInfraShape(value, {\n kind: (kind) => kind === 'output',\n resourceId: isNonEmptyString,\n output: isNonEmptyString,\n });\n case 'secret':\n return isInfraShape(value, {\n kind: (kind) => kind === 'secret',\n reference: isSecretReference,\n });\n case 'credential':\n return isInfraShape(value, {\n kind: (kind) => kind === 'credential',\n reference: isInfraCredentialRef,\n key: isNonEmptyString,\n });\n default:\n return false;\n }\n}\n\n/*** Managed secret references contain identity only, never privileged payloads. */\nfunction isSecretReference(value: unknown): boolean {\n return isInfraShape(value, {\n source: (source) => source === 'secret-store',\n projectId: isNonEmptyString,\n environment: (environment) => APP_ENVIRONMENT_IDS.some((id) => id === environment),\n ref: isNonEmptyString,\n key: isNonEmptyString,\n });\n}\n"]}
1
+ {"version":3,"file":"isInfraWorkloadValue.js","sourceRoot":"","sources":["../../src/infra/isInfraWorkloadValue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAE7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,0GAA0G;AAC1G,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,OAAO,CACL,0BAA0B,CAAC,KAAK,CAAC;QACjC,YAAY,CAAC,KAAK,EAAE;YAClB,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,UAAU;YACnC,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE,CACrB,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;gBACvB,QAAQ,CAAC,MAAM,GAAG,CAAC;gBACnB,QAAQ,CAAC,KAAK,CAAC,0BAA0B,CAAC;SAC7C,CAAC,CACH,CAAC;AACJ,CAAC;AAED,0DAA0D;AAC1D,SAAS,0BAA0B,CAAC,KAAc;IAChD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,SAAS;YACZ,OAAO,YAAY,CAAC,KAAK,EAAE;gBACzB,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,SAAS;gBAClC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ;aAC5C,CAAC,CAAC;QACL,KAAK,QAAQ;YACX,OAAO,YAAY,CAAC,KAAK,EAAE;gBACzB,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,QAAQ;gBACjC,UAAU,EAAE,gBAAgB;gBAC5B,MAAM,EAAE,gBAAgB;aACzB,CAAC,CAAC;QACL,KAAK,QAAQ;YACX,OAAO,YAAY,CAAC,KAAK,EAAE;gBACzB,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,QAAQ;gBACjC,SAAS,EAAE,iBAAiB;aAC7B,CAAC,CAAC;QACL,KAAK,YAAY;YACf,OAAO,YAAY,CAAC,KAAK,EAAE;gBACzB,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,YAAY;gBACrC,SAAS,EAAE,oBAAoB;gBAC/B,GAAG,EAAE,gBAAgB;aACtB,CAAC,CAAC;QACL;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC;AAED,mFAAmF;AACnF,SAAS,iBAAiB,CAAC,KAAc;IACvC,OAAO,YAAY,CAAC,KAAK,EAAE;QACzB,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,cAAc;QAC7C,SAAS,EAAE,gBAAgB;QAC3B,WAAW,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,WAAW,CAAC;QAClF,GAAG,EAAE,gBAAgB;QACrB,GAAG,EAAE,gBAAgB;KACtB,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { isRecord } from '@ankhorage/utility/object';\nimport { isNonEmptyString } from '@ankhorage/utility/string';\n\nimport { APP_ENVIRONMENT_IDS } from '../environments.js';\nimport type { InfraWorkloadScalarValue } from '../types/infraWorkload.js';\nimport { isInfraCredentialRef } from './isInfraCredentialRef.js';\nimport { isInfraShape } from './isInfraShape.js';\n\n/*** Workload values explicitly distinguish public literals, output dependencies and secret references. */\nexport function isInfraWorkloadValue(value: unknown): boolean {\n return (\n isInfraWorkloadScalarValue(value) ||\n isInfraShape(value, {\n kind: (kind) => kind === 'template',\n segments: (segments) =>\n Array.isArray(segments) &&\n segments.length > 0 &&\n segments.every(isInfraWorkloadScalarValue),\n })\n );\n}\n\n/*** Validate one non-composite workload value segment. */\nfunction isInfraWorkloadScalarValue(value: unknown): value is InfraWorkloadScalarValue {\n if (!isRecord(value)) return false;\n switch (value.kind) {\n case 'literal':\n return isInfraShape(value, {\n kind: (kind) => kind === 'literal',\n value: (field) => typeof field === 'string',\n });\n case 'output':\n return isInfraShape(value, {\n kind: (kind) => kind === 'output',\n resourceId: isNonEmptyString,\n output: isNonEmptyString,\n });\n case 'secret':\n return isInfraShape(value, {\n kind: (kind) => kind === 'secret',\n reference: isSecretReference,\n });\n case 'credential':\n return isInfraShape(value, {\n kind: (kind) => kind === 'credential',\n reference: isInfraCredentialRef,\n key: isNonEmptyString,\n });\n default:\n return false;\n }\n}\n\n/*** Managed secret references contain identity only, never privileged payloads. */\nfunction isSecretReference(value: unknown): boolean {\n return isInfraShape(value, {\n source: (source) => source === 'secret-store',\n projectId: isNonEmptyString,\n environment: (environment) => APP_ENVIRONMENT_IDS.some((id) => id === environment),\n ref: isNonEmptyString,\n key: isNonEmptyString,\n });\n}\n"]}
@@ -1,5 +1,5 @@
1
- import type { InfraResult } from '../types/infraLifecycle';
2
- import type { InfraManifest } from '../types/infraManifest';
1
+ import type { InfraResult } from '../types/infraLifecycle.js';
2
+ import type { InfraManifest } from '../types/infraManifest.js';
3
3
  /** Parse unknown infrastructure input; package availability and credentials are separate validation stages. */
4
4
  export declare function parseInfraManifest(value: unknown): InfraResult<InfraManifest>;
5
5
  //# sourceMappingURL=parseInfraManifest.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"parseInfraManifest.d.ts","sourceRoot":"","sources":["../../src/infra/parseInfraManifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAG5D,+GAA+G;AAC/G,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,aAAa,CAAC,CAc7E"}
1
+ {"version":3,"file":"parseInfraManifest.d.ts","sourceRoot":"","sources":["../../src/infra/parseInfraManifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAG/D,+GAA+G;AAC/G,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,aAAa,CAAC,CAc7E"}
@@ -1,4 +1,4 @@
1
- import { isInfraManifest } from './isInfraManifest';
1
+ import { isInfraManifest } from './isInfraManifest.js';
2
2
  /** Parse unknown infrastructure input; package availability and credentials are separate validation stages. */
3
3
  export function parseInfraManifest(value) {
4
4
  return isInfraManifest(value)
@@ -1 +1 @@
1
- {"version":3,"file":"parseInfraManifest.js","sourceRoot":"","sources":["../../src/infra/parseInfraManifest.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,+GAA+G;AAC/G,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAC/C,OAAO,eAAe,CAAC,KAAK,CAAC;QAC3B,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE;QACtC,CAAC,CAAC;YACE,EAAE,EAAE,KAAK;YACT,WAAW,EAAE;gBACX;oBACE,QAAQ,EAAE,OAAO;oBACjB,IAAI,EAAE,kBAAkB;oBACxB,OAAO,EACL,gHAAgH;iBACnH;aACF;SACF,CAAC;AACR,CAAC","sourcesContent":["import type { InfraResult } from '../types/infraLifecycle';\nimport type { InfraManifest } from '../types/infraManifest';\nimport { isInfraManifest } from './isInfraManifest';\n\n/** Parse unknown infrastructure input; package availability and credentials are separate validation stages. */\nexport function parseInfraManifest(value: unknown): InfraResult<InfraManifest> {\n return isInfraManifest(value)\n ? { ok: true, value, diagnostics: [] }\n : {\n ok: false,\n diagnostics: [\n {\n severity: 'error',\n code: 'invalid_manifest',\n message:\n 'Expected canonical Infra environments with supported provider configuration and compute/runtime compatibility.',\n },\n ],\n };\n}\n"]}
1
+ {"version":3,"file":"parseInfraManifest.js","sourceRoot":"","sources":["../../src/infra/parseInfraManifest.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,+GAA+G;AAC/G,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAC/C,OAAO,eAAe,CAAC,KAAK,CAAC;QAC3B,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE;QACtC,CAAC,CAAC;YACE,EAAE,EAAE,KAAK;YACT,WAAW,EAAE;gBACX;oBACE,QAAQ,EAAE,OAAO;oBACjB,IAAI,EAAE,kBAAkB;oBACxB,OAAO,EACL,gHAAgH;iBACnH;aACF;SACF,CAAC;AACR,CAAC","sourcesContent":["import type { InfraResult } from '../types/infraLifecycle.js';\nimport type { InfraManifest } from '../types/infraManifest.js';\nimport { isInfraManifest } from './isInfraManifest.js';\n\n/** Parse unknown infrastructure input; package availability and credentials are separate validation stages. */\nexport function parseInfraManifest(value: unknown): InfraResult<InfraManifest> {\n return isInfraManifest(value)\n ? { ok: true, value, diagnostics: [] }\n : {\n ok: false,\n diagnostics: [\n {\n severity: 'error',\n code: 'invalid_manifest',\n message:\n 'Expected canonical Infra environments with supported provider configuration and compute/runtime compatibility.',\n },\n ],\n };\n}\n"]}
@@ -1,6 +1,6 @@
1
- import type { InfraAdapterDescriptor } from '../types/infraAdapters';
2
- import type { InfraResult } from '../types/infraLifecycle';
3
- import type { InfraEnvironmentSpec } from '../types/infraManifest';
1
+ import type { InfraAdapterDescriptor } from '../types/infraAdapters.js';
2
+ import type { InfraResult } from '../types/infraLifecycle.js';
3
+ import type { InfraEnvironmentSpec } from '../types/infraManifest.js';
4
4
  /** Validate supplied installed descriptors without imports or filesystem access; only selected packages matter. */
5
5
  export declare function validateInfraAdapterSelection(environment: InfraEnvironmentSpec, installed: readonly unknown[]): InfraResult<readonly InfraAdapterDescriptor[]>;
6
6
  //# sourceMappingURL=validateInfraAdapterSelection.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validateInfraAdapterSelection.d.ts","sourceRoot":"","sources":["../../src/infra/validateInfraAdapterSelection.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,KAAK,EAAmB,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC5E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAGnE,mHAAmH;AACnH,wBAAgB,6BAA6B,CAC3C,WAAW,EAAE,oBAAoB,EACjC,SAAS,EAAE,SAAS,OAAO,EAAE,GAC5B,WAAW,CAAC,SAAS,sBAAsB,EAAE,CAAC,CA+BhD"}
1
+ {"version":3,"file":"validateInfraAdapterSelection.d.ts","sourceRoot":"","sources":["../../src/infra/validateInfraAdapterSelection.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,KAAK,EAAmB,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC/E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAGtE,mHAAmH;AACnH,wBAAgB,6BAA6B,CAC3C,WAAW,EAAE,oBAAoB,EACjC,SAAS,EAAE,SAAS,OAAO,EAAE,GAC5B,WAAW,CAAC,SAAS,sBAAsB,EAAE,CAAC,CA+BhD"}
@@ -1,5 +1,5 @@
1
- import { INFRA_ADAPTER_CATALOG } from '../infraCatalog';
2
- import { isInfraAdapterDescriptor } from './isInfraAdapterDescriptor';
1
+ import { INFRA_ADAPTER_CATALOG } from '../infraCatalog.js';
2
+ import { isInfraAdapterDescriptor } from './isInfraAdapterDescriptor.js';
3
3
  /** Validate supplied installed descriptors without imports or filesystem access; only selected packages matter. */
4
4
  export function validateInfraAdapterSelection(environment, installed) {
5
5
  const ids = new Set([
@@ -1 +1 @@
1
- {"version":3,"file":"validateInfraAdapterSelection.js","sourceRoot":"","sources":["../../src/infra/validateInfraAdapterSelection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAIxD,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAEtE,mHAAmH;AACnH,MAAM,UAAU,6BAA6B,CAC3C,WAAiC,EACjC,SAA6B;IAE7B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC;QAClB,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ;QACvC,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ;QACvC,WAAW,CAAC,QAAQ,EAAE,QAAQ;QAC9B,WAAW,CAAC,aAAa,EAAE,QAAQ;QACnC,WAAW,CAAC,IAAI,EAAE,QAAQ;QAC1B,WAAW,CAAC,KAAK,EAAE,QAAQ;QAC3B,WAAW,CAAC,WAAW,EAAE,QAAQ;KAClC,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3F,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC;IAC/D,MAAM,WAAW,GAA+B,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QACzE,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC;QAC/E,OAAO,OAAO,CAAC,MAAM,KAAK,CAAC;YACzB,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC;gBACE;oBACE,QAAQ,EAAE,OAAO;oBACjB,IAAI,EAAE,qBAAqB;oBAC3B,OAAO,EAAE,oBAAoB,KAAK,CAAC,EAAE,mCAAmC,KAAK,CAAC,OAAO,iDAAiD,KAAK,CAAC,aAAa,WAAW,OAAO,CAAC,MAAM,GAAG;iBACtL;aACF,CAAC;IACR,CAAC,CAAC,CAAC;IACH,OAAO,WAAW,CAAC,MAAM,GAAG,CAAC;QAC3B,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE;QAC5B,CAAC,CAAC;YACE,EAAE,EAAE,IAAI;YACR,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YACjE,WAAW;SACZ,CAAC;AACR,CAAC","sourcesContent":["import { INFRA_ADAPTER_CATALOG } from '../infraCatalog';\nimport type { InfraAdapterDescriptor } from '../types/infraAdapters';\nimport type { InfraDiagnostic, InfraResult } from '../types/infraLifecycle';\nimport type { InfraEnvironmentSpec } from '../types/infraManifest';\nimport { isInfraAdapterDescriptor } from './isInfraAdapterDescriptor';\n\n/** Validate supplied installed descriptors without imports or filesystem access; only selected packages matter. */\nexport function validateInfraAdapterSelection(\n environment: InfraEnvironmentSpec,\n installed: readonly unknown[],\n): InfraResult<readonly InfraAdapterDescriptor[]> {\n const ids = new Set([\n environment.deployment.compute.provider,\n environment.deployment.runtime.provider,\n environment.database?.provider,\n environment.objectStorage?.provider,\n environment.auth?.provider,\n environment.authz?.provider,\n environment.secretStore?.provider,\n ]);\n const selected = Object.values(INFRA_ADAPTER_CATALOG).filter((entry) => ids.has(entry.id));\n const descriptors = installed.filter(isInfraAdapterDescriptor);\n const diagnostics: readonly InfraDiagnostic[] = selected.flatMap((entry) => {\n const matches = descriptors.filter((descriptor) => descriptor.id === entry.id);\n return matches.length === 1\n ? []\n : [\n {\n severity: 'error',\n code: 'adapter_unavailable',\n message: `Selected adapter ${entry.id} requires exactly one installed ${entry.package} descriptor matching Contracts config version ${entry.configVersion}; found ${matches.length}.`,\n },\n ];\n });\n return diagnostics.length > 0\n ? { ok: false, diagnostics }\n : {\n ok: true,\n value: descriptors.filter((descriptor) => ids.has(descriptor.id)),\n diagnostics,\n };\n}\n"]}
1
+ {"version":3,"file":"validateInfraAdapterSelection.js","sourceRoot":"","sources":["../../src/infra/validateInfraAdapterSelection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAI3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,mHAAmH;AACnH,MAAM,UAAU,6BAA6B,CAC3C,WAAiC,EACjC,SAA6B;IAE7B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC;QAClB,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ;QACvC,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ;QACvC,WAAW,CAAC,QAAQ,EAAE,QAAQ;QAC9B,WAAW,CAAC,aAAa,EAAE,QAAQ;QACnC,WAAW,CAAC,IAAI,EAAE,QAAQ;QAC1B,WAAW,CAAC,KAAK,EAAE,QAAQ;QAC3B,WAAW,CAAC,WAAW,EAAE,QAAQ;KAClC,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3F,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC;IAC/D,MAAM,WAAW,GAA+B,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QACzE,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC;QAC/E,OAAO,OAAO,CAAC,MAAM,KAAK,CAAC;YACzB,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC;gBACE;oBACE,QAAQ,EAAE,OAAO;oBACjB,IAAI,EAAE,qBAAqB;oBAC3B,OAAO,EAAE,oBAAoB,KAAK,CAAC,EAAE,mCAAmC,KAAK,CAAC,OAAO,iDAAiD,KAAK,CAAC,aAAa,WAAW,OAAO,CAAC,MAAM,GAAG;iBACtL;aACF,CAAC;IACR,CAAC,CAAC,CAAC;IACH,OAAO,WAAW,CAAC,MAAM,GAAG,CAAC;QAC3B,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE;QAC5B,CAAC,CAAC;YACE,EAAE,EAAE,IAAI;YACR,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YACjE,WAAW;SACZ,CAAC;AACR,CAAC","sourcesContent":["import { INFRA_ADAPTER_CATALOG } from '../infraCatalog.js';\nimport type { InfraAdapterDescriptor } from '../types/infraAdapters.js';\nimport type { InfraDiagnostic, InfraResult } from '../types/infraLifecycle.js';\nimport type { InfraEnvironmentSpec } from '../types/infraManifest.js';\nimport { isInfraAdapterDescriptor } from './isInfraAdapterDescriptor.js';\n\n/** Validate supplied installed descriptors without imports or filesystem access; only selected packages matter. */\nexport function validateInfraAdapterSelection(\n environment: InfraEnvironmentSpec,\n installed: readonly unknown[],\n): InfraResult<readonly InfraAdapterDescriptor[]> {\n const ids = new Set([\n environment.deployment.compute.provider,\n environment.deployment.runtime.provider,\n environment.database?.provider,\n environment.objectStorage?.provider,\n environment.auth?.provider,\n environment.authz?.provider,\n environment.secretStore?.provider,\n ]);\n const selected = Object.values(INFRA_ADAPTER_CATALOG).filter((entry) => ids.has(entry.id));\n const descriptors = installed.filter(isInfraAdapterDescriptor);\n const diagnostics: readonly InfraDiagnostic[] = selected.flatMap((entry) => {\n const matches = descriptors.filter((descriptor) => descriptor.id === entry.id);\n return matches.length === 1\n ? []\n : [\n {\n severity: 'error',\n code: 'adapter_unavailable',\n message: `Selected adapter ${entry.id} requires exactly one installed ${entry.package} descriptor matching Contracts config version ${entry.configVersion}; found ${matches.length}.`,\n },\n ];\n });\n return diagnostics.length > 0\n ? { ok: false, diagnostics }\n : {\n ok: true,\n value: descriptors.filter((descriptor) => ids.has(descriptor.id)),\n diagnostics,\n };\n}\n"]}
package/dist/infra.d.ts CHANGED
@@ -1,17 +1,17 @@
1
1
  /** Canonical standalone infrastructure contracts, catalog and side-effect-free validation. */
2
- export { isInfraAdapterDescriptor } from './infra/isInfraAdapterDescriptor';
3
- export { isInfraAuthSpec } from './infra/isInfraAuthSpec';
4
- export { isInfraDeploymentSpec } from './infra/isInfraDeploymentSpec';
5
- export { isInfraEnvironmentSpec } from './infra/isInfraEnvironmentSpec';
6
- export { isInfraManifest } from './infra/isInfraManifest';
7
- export { isInfraWorkloadSpec } from './infra/isInfraWorkloadSpec';
8
- export { parseInfraManifest } from './infra/parseInfraManifest';
9
- export { validateInfraAdapterSelection } from './infra/validateInfraAdapterSelection';
10
- export { INFRA_ADAPTER_CATALOG, INFRA_RUNTIME_COMPATIBILITY } from './infraCatalog';
11
- export type * from './types/infraAdapters';
12
- export type * from './types/infraLifecycle';
13
- export type * from './types/infraManifest';
14
- export type * from './types/infraSecrets';
15
- export type * from './types/infraTargets';
16
- export type * from './types/infraWorkload';
2
+ export { isInfraAdapterDescriptor } from './infra/isInfraAdapterDescriptor.js';
3
+ export { isInfraAuthSpec } from './infra/isInfraAuthSpec.js';
4
+ export { isInfraDeploymentSpec } from './infra/isInfraDeploymentSpec.js';
5
+ export { isInfraEnvironmentSpec } from './infra/isInfraEnvironmentSpec.js';
6
+ export { isInfraManifest } from './infra/isInfraManifest.js';
7
+ export { isInfraWorkloadSpec } from './infra/isInfraWorkloadSpec.js';
8
+ export { parseInfraManifest } from './infra/parseInfraManifest.js';
9
+ export { validateInfraAdapterSelection } from './infra/validateInfraAdapterSelection.js';
10
+ export { INFRA_ADAPTER_CATALOG, INFRA_RUNTIME_COMPATIBILITY } from './infraCatalog.js';
11
+ export type * from './types/infraAdapters.js';
12
+ export type * from './types/infraLifecycle.js';
13
+ export type * from './types/infraManifest.js';
14
+ export type * from './types/infraSecrets.js';
15
+ export type * from './types/infraTargets.js';
16
+ export type * from './types/infraWorkload.js';
17
17
  //# sourceMappingURL=infra.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"infra.d.ts","sourceRoot":"","sources":["../src/infra.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,6BAA6B,EAAE,MAAM,uCAAuC,CAAC;AACtF,OAAO,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,MAAM,gBAAgB,CAAC;AACpF,mBAAmB,uBAAuB,CAAC;AAC3C,mBAAmB,wBAAwB,CAAC;AAC5C,mBAAmB,uBAAuB,CAAC;AAC3C,mBAAmB,sBAAsB,CAAC;AAC1C,mBAAmB,sBAAsB,CAAC;AAC1C,mBAAmB,uBAAuB,CAAC"}
1
+ {"version":3,"file":"infra.d.ts","sourceRoot":"","sources":["../src/infra.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,6BAA6B,EAAE,MAAM,0CAA0C,CAAC;AACzF,OAAO,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AACvF,mBAAmB,0BAA0B,CAAC;AAC9C,mBAAmB,2BAA2B,CAAC;AAC/C,mBAAmB,0BAA0B,CAAC;AAC9C,mBAAmB,yBAAyB,CAAC;AAC7C,mBAAmB,yBAAyB,CAAC;AAC7C,mBAAmB,0BAA0B,CAAC"}
package/dist/infra.js CHANGED
@@ -1,11 +1,11 @@
1
1
  /** Canonical standalone infrastructure contracts, catalog and side-effect-free validation. */
2
- export { isInfraAdapterDescriptor } from './infra/isInfraAdapterDescriptor';
3
- export { isInfraAuthSpec } from './infra/isInfraAuthSpec';
4
- export { isInfraDeploymentSpec } from './infra/isInfraDeploymentSpec';
5
- export { isInfraEnvironmentSpec } from './infra/isInfraEnvironmentSpec';
6
- export { isInfraManifest } from './infra/isInfraManifest';
7
- export { isInfraWorkloadSpec } from './infra/isInfraWorkloadSpec';
8
- export { parseInfraManifest } from './infra/parseInfraManifest';
9
- export { validateInfraAdapterSelection } from './infra/validateInfraAdapterSelection';
10
- export { INFRA_ADAPTER_CATALOG, INFRA_RUNTIME_COMPATIBILITY } from './infraCatalog';
2
+ export { isInfraAdapterDescriptor } from './infra/isInfraAdapterDescriptor.js';
3
+ export { isInfraAuthSpec } from './infra/isInfraAuthSpec.js';
4
+ export { isInfraDeploymentSpec } from './infra/isInfraDeploymentSpec.js';
5
+ export { isInfraEnvironmentSpec } from './infra/isInfraEnvironmentSpec.js';
6
+ export { isInfraManifest } from './infra/isInfraManifest.js';
7
+ export { isInfraWorkloadSpec } from './infra/isInfraWorkloadSpec.js';
8
+ export { parseInfraManifest } from './infra/parseInfraManifest.js';
9
+ export { validateInfraAdapterSelection } from './infra/validateInfraAdapterSelection.js';
10
+ export { INFRA_ADAPTER_CATALOG, INFRA_RUNTIME_COMPATIBILITY } from './infraCatalog.js';
11
11
  //# sourceMappingURL=infra.js.map
package/dist/infra.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"infra.js","sourceRoot":"","sources":["../src/infra.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,6BAA6B,EAAE,MAAM,uCAAuC,CAAC;AACtF,OAAO,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,MAAM,gBAAgB,CAAC","sourcesContent":["/** Canonical standalone infrastructure contracts, catalog and side-effect-free validation. */\nexport { isInfraAdapterDescriptor } from './infra/isInfraAdapterDescriptor';\nexport { isInfraAuthSpec } from './infra/isInfraAuthSpec';\nexport { isInfraDeploymentSpec } from './infra/isInfraDeploymentSpec';\nexport { isInfraEnvironmentSpec } from './infra/isInfraEnvironmentSpec';\nexport { isInfraManifest } from './infra/isInfraManifest';\nexport { isInfraWorkloadSpec } from './infra/isInfraWorkloadSpec';\nexport { parseInfraManifest } from './infra/parseInfraManifest';\nexport { validateInfraAdapterSelection } from './infra/validateInfraAdapterSelection';\nexport { INFRA_ADAPTER_CATALOG, INFRA_RUNTIME_COMPATIBILITY } from './infraCatalog';\nexport type * from './types/infraAdapters';\nexport type * from './types/infraLifecycle';\nexport type * from './types/infraManifest';\nexport type * from './types/infraSecrets';\nexport type * from './types/infraTargets';\nexport type * from './types/infraWorkload';\n"]}
1
+ {"version":3,"file":"infra.js","sourceRoot":"","sources":["../src/infra.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,6BAA6B,EAAE,MAAM,0CAA0C,CAAC;AACzF,OAAO,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC","sourcesContent":["/** Canonical standalone infrastructure contracts, catalog and side-effect-free validation. */\nexport { isInfraAdapterDescriptor } from './infra/isInfraAdapterDescriptor.js';\nexport { isInfraAuthSpec } from './infra/isInfraAuthSpec.js';\nexport { isInfraDeploymentSpec } from './infra/isInfraDeploymentSpec.js';\nexport { isInfraEnvironmentSpec } from './infra/isInfraEnvironmentSpec.js';\nexport { isInfraManifest } from './infra/isInfraManifest.js';\nexport { isInfraWorkloadSpec } from './infra/isInfraWorkloadSpec.js';\nexport { parseInfraManifest } from './infra/parseInfraManifest.js';\nexport { validateInfraAdapterSelection } from './infra/validateInfraAdapterSelection.js';\nexport { INFRA_ADAPTER_CATALOG, INFRA_RUNTIME_COMPATIBILITY } from './infraCatalog.js';\nexport type * from './types/infraAdapters.js';\nexport type * from './types/infraLifecycle.js';\nexport type * from './types/infraManifest.js';\nexport type * from './types/infraSecrets.js';\nexport type * from './types/infraTargets.js';\nexport type * from './types/infraWorkload.js';\n"]}
package/dist/media.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { EntityRegistry } from './collections';
1
+ import type { EntityRegistry } from './collections.js';
2
2
  export declare const MEDIA_ASSET_KINDS: readonly ["image", "audio", "video", "font", "file"];
3
3
  export type MediaAssetKind = (typeof MEDIA_ASSET_KINDS)[number];
4
4
  export interface MediaStorageSource {
@@ -1 +1 @@
1
- {"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../src/media.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,eAAO,MAAM,iBAAiB,sDAAuD,CAAC;AAEtF,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,qFAAqF;IACrF,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IACrB,uFAAuF;IACvF,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,+EAA+E;IAC/E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,MAAM,gBAAgB,GAAG,kBAAkB,GAAG,cAAc,GAAG,kBAAkB,CAAC;AAExF,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,uDAAuD;AACvD,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,kBAAkB,CAAC;CACxC;AAED,MAAM,MAAM,kBAAkB,GAAG,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;AAE1E,oFAAoF;AACpF,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;CACrC;AAED,uFAAuF;AACvF,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,sGAAsG;AACtG,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,mBAAmB,CAOlF"}
1
+ {"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../src/media.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,eAAO,MAAM,iBAAiB,sDAAuD,CAAC;AAEtF,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,qFAAqF;IACrF,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IACrB,uFAAuF;IACvF,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,+EAA+E;IAC/E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,MAAM,gBAAgB,GAAG,kBAAkB,GAAG,cAAc,GAAG,kBAAkB,CAAC;AAExF,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,uDAAuD;AACvD,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,kBAAkB,CAAC;CACxC;AAED,MAAM,MAAM,kBAAkB,GAAG,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;AAE1E,oFAAoF;AACpF,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;CACrC;AAED,uFAAuF;AACvF,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,sGAAsG;AACtG,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,mBAAmB,CAOlF"}
package/dist/media.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"media.js","sourceRoot":"","sources":["../src/media.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAI7D,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAU,CAAC;AAyDtF,sGAAsG;AACtG,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,OAAO,CACL,QAAQ,CAAC,KAAK,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC;QAC/B,SAAS,IAAI,KAAK;QAClB,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAChC,CAAC;AACJ,CAAC","sourcesContent":["import { isRecord } from '@ankhorage/utility/object';\nimport { isNonEmptyString } from '@ankhorage/utility/string';\n\nimport type { EntityRegistry } from './collections';\n\nexport const MEDIA_ASSET_KINDS = ['image', 'audio', 'video', 'font', 'file'] as const;\n\nexport type MediaAssetKind = (typeof MEDIA_ASSET_KINDS)[number];\n\nexport interface MediaStorageSource {\n readonly kind: 'storage';\n /*** Optional logical storage connection identifier for future multi-storage apps. */\n readonly storageId?: string;\n readonly bucket: string;\n readonly path: string;\n}\n\nexport interface MediaUrlSource {\n readonly kind: 'url';\n /*** Stable remote URL. Transient/local URL schemes are not canonical media sources. */\n readonly url: string;\n}\n\nexport interface MediaBundledSource {\n readonly kind: 'bundled';\n /*** App-relative bundled asset path resolved by the generated/runtime host. */\n readonly path: string;\n}\n\nexport type MediaAssetSource = MediaStorageSource | MediaUrlSource | MediaBundledSource;\n\nexport interface MediaAssetMetadata {\n readonly originalFileName?: string;\n readonly sizeBytes?: number;\n readonly createdAt?: string;\n readonly width?: number;\n readonly height?: number;\n readonly durationMs?: number;\n}\n\n/*** Canonical Studio-managed authoring media entry. */\nexport interface MediaAsset {\n readonly id: string;\n readonly name: string;\n readonly kind: MediaAssetKind;\n readonly source: MediaAssetSource;\n readonly contentType?: string;\n readonly metadata?: MediaAssetMetadata;\n}\n\nexport type MediaAssetRegistry = EntityRegistry<string, MediaAsset, 'id'>;\n\n/*** App-authoring media pool. Runtime/user-generated uploads do not belong here. */\nexport interface MediaManifest {\n readonly assets: MediaAssetRegistry;\n}\n\n/*** Stable component/property reference to one entry in `AppManifest.media.assets`. */\nexport interface MediaAssetReference {\n readonly mediaId: string;\n}\n\n/*** Validate an authored media reference with exactly one enumerable key and a non-empty media ID. */\nexport function isMediaAssetReference(value: unknown): value is MediaAssetReference {\n return (\n isRecord(value) &&\n Object.keys(value).length === 1 &&\n 'mediaId' in value &&\n isNonEmptyString(value.mediaId)\n );\n}\n"]}
1
+ {"version":3,"file":"media.js","sourceRoot":"","sources":["../src/media.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAI7D,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAU,CAAC;AAyDtF,sGAAsG;AACtG,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,OAAO,CACL,QAAQ,CAAC,KAAK,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC;QAC/B,SAAS,IAAI,KAAK;QAClB,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAChC,CAAC;AACJ,CAAC","sourcesContent":["import { isRecord } from '@ankhorage/utility/object';\nimport { isNonEmptyString } from '@ankhorage/utility/string';\n\nimport type { EntityRegistry } from './collections.js';\n\nexport const MEDIA_ASSET_KINDS = ['image', 'audio', 'video', 'font', 'file'] as const;\n\nexport type MediaAssetKind = (typeof MEDIA_ASSET_KINDS)[number];\n\nexport interface MediaStorageSource {\n readonly kind: 'storage';\n /*** Optional logical storage connection identifier for future multi-storage apps. */\n readonly storageId?: string;\n readonly bucket: string;\n readonly path: string;\n}\n\nexport interface MediaUrlSource {\n readonly kind: 'url';\n /*** Stable remote URL. Transient/local URL schemes are not canonical media sources. */\n readonly url: string;\n}\n\nexport interface MediaBundledSource {\n readonly kind: 'bundled';\n /*** App-relative bundled asset path resolved by the generated/runtime host. */\n readonly path: string;\n}\n\nexport type MediaAssetSource = MediaStorageSource | MediaUrlSource | MediaBundledSource;\n\nexport interface MediaAssetMetadata {\n readonly originalFileName?: string;\n readonly sizeBytes?: number;\n readonly createdAt?: string;\n readonly width?: number;\n readonly height?: number;\n readonly durationMs?: number;\n}\n\n/*** Canonical Studio-managed authoring media entry. */\nexport interface MediaAsset {\n readonly id: string;\n readonly name: string;\n readonly kind: MediaAssetKind;\n readonly source: MediaAssetSource;\n readonly contentType?: string;\n readonly metadata?: MediaAssetMetadata;\n}\n\nexport type MediaAssetRegistry = EntityRegistry<string, MediaAsset, 'id'>;\n\n/*** App-authoring media pool. Runtime/user-generated uploads do not belong here. */\nexport interface MediaManifest {\n readonly assets: MediaAssetRegistry;\n}\n\n/*** Stable component/property reference to one entry in `AppManifest.media.assets`. */\nexport interface MediaAssetReference {\n readonly mediaId: string;\n}\n\n/*** Validate an authored media reference with exactly one enumerable key and a non-empty media ID. */\nexport function isMediaAssetReference(value: unknown): value is MediaAssetReference {\n return (\n isRecord(value) &&\n Object.keys(value).length === 1 &&\n 'mediaId' in value &&\n isNonEmptyString(value.mediaId)\n );\n}\n"]}
@@ -1,6 +1,6 @@
1
- import type { HeadlessTabsPresentation, JavaScriptTabsPresentation, NavigatorPreset, NavigatorType, StackPresentation } from '../navigator';
2
- import type { NavigatorDependencyRequirement } from './generation';
3
- import type { NavigatorApiStability, NavigatorCapabilityId, NavigatorRuntimePlatform, NavigatorSupportStatus } from './planning';
1
+ import type { HeadlessTabsPresentation, JavaScriptTabsPresentation, NavigatorPreset, NavigatorType, StackPresentation } from '../navigator.js';
2
+ import type { NavigatorDependencyRequirement } from './generation.js';
3
+ import type { NavigatorApiStability, NavigatorCapabilityId, NavigatorRuntimePlatform, NavigatorSupportStatus } from './planning.js';
4
4
  export type NavigatorVerificationKind = 'structural' | 'generation' | 'format' | 'lint' | 'dependency' | 'typescript' | 'install' | 'build' | 'export' | 'browser' | 'simulator' | 'device';
5
5
  export type NavigatorVerificationStatus = 'verified' | 'unverified';
6
6
  export type NavigatorImplementation = 'native' | 'javascript' | 'headless' | 'experimental';
@@ -1 +1 @@
1
- {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/navigator/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,0BAA0B,EAC1B,eAAe,EACf,aAAa,EACb,iBAAiB,EAClB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,KAAK,EACV,qBAAqB,EACrB,qBAAqB,EACrB,wBAAwB,EACxB,sBAAsB,EACvB,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,yBAAyB,GACjC,YAAY,GACZ,YAAY,GACZ,QAAQ,GACR,MAAM,GACN,YAAY,GACZ,YAAY,GACZ,SAAS,GACT,OAAO,GACP,QAAQ,GACR,SAAS,GACT,WAAW,GACX,QAAQ,CAAC;AAEb,MAAM,MAAM,2BAA2B,GAAG,UAAU,GAAG,YAAY,CAAC;AAEpE,MAAM,MAAM,uBAAuB,GAAG,QAAQ,GAAG,YAAY,GAAG,UAAU,GAAG,cAAc,CAAC;AAE5F,MAAM,MAAM,qBAAqB,GAC7B,iBAAiB,GACjB,wBAAwB,GACxB,0BAA0B,GAC1B,YAAY,GACZ,cAAc,CAAC;AAEnB,MAAM,WAAW,+BAA+B;IAC9C,IAAI,EAAE,yBAAyB,CAAC;IAChC,MAAM,EAAE,2BAA2B,CAAC;CACrC;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,wBAAwB,CAAC;IACnC,OAAO,EAAE,sBAAsB,CAAC;IAChC,YAAY,EAAE,SAAS,+BAA+B,EAAE,CAAC;CAC1D;AAED,MAAM,WAAW,8BAA8B;IAC7C,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,6BAA6B;IAC5C,EAAE,EAAE,qBAAqB,CAAC;IAC1B,QAAQ,EAAE,aAAa,CAAC;IACxB,cAAc,CAAC,EAAE,uBAAuB,CAAC;IACzC,YAAY,CAAC,EAAE,qBAAqB,CAAC;IACrC,SAAS,EAAE,qBAAqB,CAAC;IACjC,OAAO,EAAE,SAAS,yBAAyB,EAAE,CAAC;IAC9C,YAAY,EAAE,SAAS,8BAA8B,EAAE,CAAC;IACxD,YAAY,EAAE,SAAS,8BAA8B,EAAE,CAAC;IACxD,iBAAiB,EAAE,SAAS,qBAAqB,EAAE,CAAC;IACpD,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,yBAAyB;IACxC,EAAE,EAAE,eAAe,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,SAAS,aAAa,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,SAAS,6BAA6B,EAAE,CAAC;IACvD,OAAO,EAAE,SAAS,yBAAyB,EAAE,CAAC;CAC/C"}
1
+ {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/navigator/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,0BAA0B,EAC1B,eAAe,EACf,aAAa,EACb,iBAAiB,EAClB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,KAAK,EACV,qBAAqB,EACrB,qBAAqB,EACrB,wBAAwB,EACxB,sBAAsB,EACvB,MAAM,eAAe,CAAC;AAEvB,MAAM,MAAM,yBAAyB,GACjC,YAAY,GACZ,YAAY,GACZ,QAAQ,GACR,MAAM,GACN,YAAY,GACZ,YAAY,GACZ,SAAS,GACT,OAAO,GACP,QAAQ,GACR,SAAS,GACT,WAAW,GACX,QAAQ,CAAC;AAEb,MAAM,MAAM,2BAA2B,GAAG,UAAU,GAAG,YAAY,CAAC;AAEpE,MAAM,MAAM,uBAAuB,GAAG,QAAQ,GAAG,YAAY,GAAG,UAAU,GAAG,cAAc,CAAC;AAE5F,MAAM,MAAM,qBAAqB,GAC7B,iBAAiB,GACjB,wBAAwB,GACxB,0BAA0B,GAC1B,YAAY,GACZ,cAAc,CAAC;AAEnB,MAAM,WAAW,+BAA+B;IAC9C,IAAI,EAAE,yBAAyB,CAAC;IAChC,MAAM,EAAE,2BAA2B,CAAC;CACrC;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,wBAAwB,CAAC;IACnC,OAAO,EAAE,sBAAsB,CAAC;IAChC,YAAY,EAAE,SAAS,+BAA+B,EAAE,CAAC;CAC1D;AAED,MAAM,WAAW,8BAA8B;IAC7C,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,6BAA6B;IAC5C,EAAE,EAAE,qBAAqB,CAAC;IAC1B,QAAQ,EAAE,aAAa,CAAC;IACxB,cAAc,CAAC,EAAE,uBAAuB,CAAC;IACzC,YAAY,CAAC,EAAE,qBAAqB,CAAC;IACrC,SAAS,EAAE,qBAAqB,CAAC;IACjC,OAAO,EAAE,SAAS,yBAAyB,EAAE,CAAC;IAC9C,YAAY,EAAE,SAAS,8BAA8B,EAAE,CAAC;IACxD,YAAY,EAAE,SAAS,8BAA8B,EAAE,CAAC;IACxD,iBAAiB,EAAE,SAAS,qBAAqB,EAAE,CAAC;IACpD,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,yBAAyB;IACxC,EAAE,EAAE,eAAe,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,SAAS,aAAa,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,SAAS,6BAA6B,EAAE,CAAC;IACvD,OAAO,EAAE,SAAS,yBAAyB,EAAE,CAAC;CAC/C"}
@@ -1 +1 @@
1
- {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/navigator/catalog.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n HeadlessTabsPresentation,\n JavaScriptTabsPresentation,\n NavigatorPreset,\n NavigatorType,\n StackPresentation,\n} from '../navigator';\nimport type { NavigatorDependencyRequirement } from './generation';\nimport type {\n NavigatorApiStability,\n NavigatorCapabilityId,\n NavigatorRuntimePlatform,\n NavigatorSupportStatus,\n} from './planning';\n\nexport type NavigatorVerificationKind =\n | 'structural'\n | 'generation'\n | 'format'\n | 'lint'\n | 'dependency'\n | 'typescript'\n | 'install'\n | 'build'\n | 'export'\n | 'browser'\n | 'simulator'\n | 'device';\n\nexport type NavigatorVerificationStatus = 'verified' | 'unverified';\n\nexport type NavigatorImplementation = 'native' | 'javascript' | 'headless' | 'experimental';\n\nexport type NavigatorPresentation =\n | StackPresentation\n | HeadlessTabsPresentation\n | JavaScriptTabsPresentation\n | 'two-column'\n | 'three-column';\n\nexport interface NavigatorCapabilityVerification {\n kind: NavigatorVerificationKind;\n status: NavigatorVerificationStatus;\n}\n\nexport interface NavigatorCapabilityTarget {\n platform: NavigatorRuntimePlatform;\n support: NavigatorSupportStatus;\n verification: readonly NavigatorCapabilityVerification[];\n}\n\nexport interface NavigatorCapabilityRequirement {\n id: string;\n description: string;\n}\n\nexport interface NavigatorCapabilityDescriptor {\n id: NavigatorCapabilityId;\n topology: NavigatorType;\n implementation?: NavigatorImplementation;\n presentation?: NavigatorPresentation;\n stability: NavigatorApiStability;\n targets: readonly NavigatorCapabilityTarget[];\n dependencies: readonly NavigatorDependencyRequirement[];\n requirements: readonly NavigatorCapabilityRequirement[];\n incompatibilities: readonly NavigatorCapabilityId[];\n limitations: readonly string[];\n}\n\nexport interface NavigatorPresetDescriptor {\n id: NavigatorPreset;\n description: string;\n topology: readonly NavigatorType[];\n}\n\nexport interface NavigatorCatalog {\n capabilities: readonly NavigatorCapabilityDescriptor[];\n presets: readonly NavigatorPresetDescriptor[];\n}\n"]}
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/navigator/catalog.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n HeadlessTabsPresentation,\n JavaScriptTabsPresentation,\n NavigatorPreset,\n NavigatorType,\n StackPresentation,\n} from '../navigator.js';\nimport type { NavigatorDependencyRequirement } from './generation.js';\nimport type {\n NavigatorApiStability,\n NavigatorCapabilityId,\n NavigatorRuntimePlatform,\n NavigatorSupportStatus,\n} from './planning.js';\n\nexport type NavigatorVerificationKind =\n | 'structural'\n | 'generation'\n | 'format'\n | 'lint'\n | 'dependency'\n | 'typescript'\n | 'install'\n | 'build'\n | 'export'\n | 'browser'\n | 'simulator'\n | 'device';\n\nexport type NavigatorVerificationStatus = 'verified' | 'unverified';\n\nexport type NavigatorImplementation = 'native' | 'javascript' | 'headless' | 'experimental';\n\nexport type NavigatorPresentation =\n | StackPresentation\n | HeadlessTabsPresentation\n | JavaScriptTabsPresentation\n | 'two-column'\n | 'three-column';\n\nexport interface NavigatorCapabilityVerification {\n kind: NavigatorVerificationKind;\n status: NavigatorVerificationStatus;\n}\n\nexport interface NavigatorCapabilityTarget {\n platform: NavigatorRuntimePlatform;\n support: NavigatorSupportStatus;\n verification: readonly NavigatorCapabilityVerification[];\n}\n\nexport interface NavigatorCapabilityRequirement {\n id: string;\n description: string;\n}\n\nexport interface NavigatorCapabilityDescriptor {\n id: NavigatorCapabilityId;\n topology: NavigatorType;\n implementation?: NavigatorImplementation;\n presentation?: NavigatorPresentation;\n stability: NavigatorApiStability;\n targets: readonly NavigatorCapabilityTarget[];\n dependencies: readonly NavigatorDependencyRequirement[];\n requirements: readonly NavigatorCapabilityRequirement[];\n incompatibilities: readonly NavigatorCapabilityId[];\n limitations: readonly string[];\n}\n\nexport interface NavigatorPresetDescriptor {\n id: NavigatorPreset;\n description: string;\n topology: readonly NavigatorType[];\n}\n\nexport interface NavigatorCatalog {\n capabilities: readonly NavigatorCapabilityDescriptor[];\n presets: readonly NavigatorPresetDescriptor[];\n}\n"]}
@@ -1,5 +1,5 @@
1
- import type { CustomNavigatorNode } from '../navigator';
2
- import type { NavigatorApiStability, NavigatorRuntimePlatform } from './planning';
1
+ import type { CustomNavigatorNode } from '../navigator.js';
2
+ import type { NavigatorApiStability, NavigatorRuntimePlatform } from './planning.js';
3
3
  export interface CustomNavigatorConfigIssue {
4
4
  code: string;
5
5
  message: string;
@@ -1 +1 @@
1
- {"version":3,"file":"extensions.d.ts","sourceRoot":"","sources":["../../src/navigator/extensions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,KAAK,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAClF,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,SAAS,EAAE,SAAS,wBAAwB,EAAE,CAAC;IACxD,QAAQ,CAAC,SAAS,EAAE,qBAAqB,CAAC;IAC1C,QAAQ,CAAC,WAAW,EAAE,sBAAsB,CAAC;IAC7C,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,KAAK,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,cAAc,EAAE,CACvB,MAAM,EAAE,mBAAmB,CAAC,QAAQ,CAAC,KAClC,SAAS,0BAA0B,EAAE,CAAC;CAC5C;AAED,MAAM,MAAM,uBAAuB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,2BAA2B,CAAC,CAAC,GAAG;IAC5F,QAAQ,CAAC,CAAC,yBAAyB,CAAC,EAAE,IAAI,CAAC;CAC5C,CAAC;AAEF,OAAO,CAAC,MAAM,yBAAyB,EAAE,OAAO,MAAM,CAAC"}
1
+ {"version":3,"file":"extensions.d.ts","sourceRoot":"","sources":["../../src/navigator/extensions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,KAAK,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AACrF,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,SAAS,EAAE,SAAS,wBAAwB,EAAE,CAAC;IACxD,QAAQ,CAAC,SAAS,EAAE,qBAAqB,CAAC;IAC1C,QAAQ,CAAC,WAAW,EAAE,sBAAsB,CAAC;IAC7C,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,KAAK,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,cAAc,EAAE,CACvB,MAAM,EAAE,mBAAmB,CAAC,QAAQ,CAAC,KAClC,SAAS,0BAA0B,EAAE,CAAC;CAC5C;AAED,MAAM,MAAM,uBAAuB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,2BAA2B,CAAC,CAAC,GAAG;IAC5F,QAAQ,CAAC,CAAC,yBAAyB,CAAC,EAAE,IAAI,CAAC;CAC5C,CAAC;AAEF,OAAO,CAAC,MAAM,yBAAyB,EAAE,OAAO,MAAM,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"extensions.js","sourceRoot":"","sources":["../../src/navigator/extensions.ts"],"names":[],"mappings":"","sourcesContent":["import type { CustomNavigatorNode } from '../navigator';\nimport type { NavigatorApiStability, NavigatorRuntimePlatform } from './planning';\nexport interface CustomNavigatorConfigIssue {\n code: string;\n message: string;\n path?: string;\n}\n\nexport interface CustomNavigatorRegistration {\n readonly id: string;\n readonly platforms: readonly NavigatorRuntimePlatform[];\n readonly stability: NavigatorApiStability;\n readonly integration: 'expo-router-standard';\n readonly router: 'stack' | 'tab';\n readonly module: string;\n readonly exportName: string;\n readonly validateConfig: (\n config: CustomNavigatorNode['config'],\n ) => readonly CustomNavigatorConfigIssue[];\n}\n\nexport type CustomNavigatorRegistry = Readonly<Record<string, CustomNavigatorRegistration>> & {\n readonly [CUSTOM_NAVIGATOR_REGISTRY]: true;\n};\n\ndeclare const CUSTOM_NAVIGATOR_REGISTRY: unique symbol;\n"]}
1
+ {"version":3,"file":"extensions.js","sourceRoot":"","sources":["../../src/navigator/extensions.ts"],"names":[],"mappings":"","sourcesContent":["import type { CustomNavigatorNode } from '../navigator.js';\nimport type { NavigatorApiStability, NavigatorRuntimePlatform } from './planning.js';\nexport interface CustomNavigatorConfigIssue {\n code: string;\n message: string;\n path?: string;\n}\n\nexport interface CustomNavigatorRegistration {\n readonly id: string;\n readonly platforms: readonly NavigatorRuntimePlatform[];\n readonly stability: NavigatorApiStability;\n readonly integration: 'expo-router-standard';\n readonly router: 'stack' | 'tab';\n readonly module: string;\n readonly exportName: string;\n readonly validateConfig: (\n config: CustomNavigatorNode['config'],\n ) => readonly CustomNavigatorConfigIssue[];\n}\n\nexport type CustomNavigatorRegistry = Readonly<Record<string, CustomNavigatorRegistration>> & {\n readonly [CUSTOM_NAVIGATOR_REGISTRY]: true;\n};\n\ndeclare const CUSTOM_NAVIGATOR_REGISTRY: unique symbol;\n"]}
@@ -1,4 +1,4 @@
1
- import type { NavigatorCapabilityId, NavigatorDiagnostic, NavigatorPlan, NavigatorSupportStatus } from './planning';
1
+ import type { NavigatorCapabilityId, NavigatorDiagnostic, NavigatorPlan, NavigatorSupportStatus } from './planning.js';
2
2
  export interface NavigatorGeneratedFile {
3
3
  path: string;
4
4
  contents: string;
@@ -1 +1 @@
1
- {"version":3,"file":"generation.d.ts","sourceRoot":"","sources":["../../src/navigator/generation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,mBAAmB,EACnB,aAAa,EACb,sBAAsB,EACvB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC;IACzD,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC;IACxD,kBAAkB,CAAC,EAAE,qBAAqB,CAAC;IAC3C,gBAAgB,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC;CACpE;AAED,MAAM,WAAW,8BAA8B;IAC7C,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,YAAY,GAAG,gBAAgB,CAAC;CACvC;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,sBAAsB,CAAC;IAChC,aAAa,EAAE,SAAS,qBAAqB,EAAE,CAAC;IAChD,YAAY,EAAE,SAAS,8BAA8B,EAAE,CAAC;IACxD,WAAW,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAC5C,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,EAAE,SAAS,sBAAsB,EAAE,CAAC;CAC1C;AAED,+FAA+F;AAC/F,MAAM,WAAW,0BAA0B;IACzC,2GAA2G;IAC3G,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qFAAqF;IACrF,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB"}
1
+ {"version":3,"file":"generation.d.ts","sourceRoot":"","sources":["../../src/navigator/generation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,mBAAmB,EACnB,aAAa,EACb,sBAAsB,EACvB,MAAM,eAAe,CAAC;AAEvB,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC;IACzD,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC;IACxD,kBAAkB,CAAC,EAAE,qBAAqB,CAAC;IAC3C,gBAAgB,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC;CACpE;AAED,MAAM,WAAW,8BAA8B;IAC7C,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,YAAY,GAAG,gBAAgB,CAAC;CACvC;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,sBAAsB,CAAC;IAChC,aAAa,EAAE,SAAS,qBAAqB,EAAE,CAAC;IAChD,YAAY,EAAE,SAAS,8BAA8B,EAAE,CAAC;IACxD,WAAW,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAC5C,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,EAAE,SAAS,sBAAsB,EAAE,CAAC;CAC1C;AAED,+FAA+F;AAC/F,MAAM,WAAW,0BAA0B;IACzC,2GAA2G;IAC3G,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qFAAqF;IACrF,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB"}
@@ -1 +1 @@
1
- {"version":3,"file":"generation.js","sourceRoot":"","sources":["../../src/navigator/generation.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n NavigatorCapabilityId,\n NavigatorDiagnostic,\n NavigatorPlan,\n NavigatorSupportStatus,\n} from './planning';\n\nexport interface NavigatorGeneratedFile {\n path: string;\n contents: string;\n}\n\nexport interface NavigatorGenerationBindings {\n screens: Readonly<Record<string, NavigatorScreenModule>>;\n guards: Readonly<Record<string, NavigatorScreenModule>>;\n iconSourceResolver?: NavigatorScreenModule;\n tabPresentations?: Readonly<Record<string, NavigatorScreenModule>>;\n}\n\nexport interface NavigatorDependencyRequirement {\n packageName: string;\n versionRange: string;\n kind: 'dependency' | 'peerDependency';\n}\n\nexport interface NavigatorGenerationResult {\n support: NavigatorSupportStatus;\n capabilityIds: readonly NavigatorCapabilityId[];\n dependencies: readonly NavigatorDependencyRequirement[];\n diagnostics: readonly NavigatorDiagnostic[];\n plan: NavigatorPlan;\n files: readonly NavigatorGeneratedFile[];\n}\n\n/** Options for placing Navigator-owned files inside a consumer-owned Expo Router app shell. */\nexport interface NavigatorGenerationOptions {\n /** Directory that receives the root navigator layout. Must be `src/app` or one of its safe descendants. */\n rootDirectory?: string;\n /** Emit routed screen re-export modules in addition to layouts. Defaults to true. */\n includeScreenFiles?: boolean;\n}\n\nexport interface NavigatorScreenModule {\n module: string;\n exportName: string;\n}\n"]}
1
+ {"version":3,"file":"generation.js","sourceRoot":"","sources":["../../src/navigator/generation.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n NavigatorCapabilityId,\n NavigatorDiagnostic,\n NavigatorPlan,\n NavigatorSupportStatus,\n} from './planning.js';\n\nexport interface NavigatorGeneratedFile {\n path: string;\n contents: string;\n}\n\nexport interface NavigatorGenerationBindings {\n screens: Readonly<Record<string, NavigatorScreenModule>>;\n guards: Readonly<Record<string, NavigatorScreenModule>>;\n iconSourceResolver?: NavigatorScreenModule;\n tabPresentations?: Readonly<Record<string, NavigatorScreenModule>>;\n}\n\nexport interface NavigatorDependencyRequirement {\n packageName: string;\n versionRange: string;\n kind: 'dependency' | 'peerDependency';\n}\n\nexport interface NavigatorGenerationResult {\n support: NavigatorSupportStatus;\n capabilityIds: readonly NavigatorCapabilityId[];\n dependencies: readonly NavigatorDependencyRequirement[];\n diagnostics: readonly NavigatorDiagnostic[];\n plan: NavigatorPlan;\n files: readonly NavigatorGeneratedFile[];\n}\n\n/** Options for placing Navigator-owned files inside a consumer-owned Expo Router app shell. */\nexport interface NavigatorGenerationOptions {\n /** Directory that receives the root navigator layout. Must be `src/app` or one of its safe descendants. */\n rootDirectory?: string;\n /** Emit routed screen re-export modules in addition to layouts. Defaults to true. */\n includeScreenFiles?: boolean;\n}\n\nexport interface NavigatorScreenModule {\n module: string;\n exportName: string;\n}\n"]}
@@ -1,6 +1,6 @@
1
- import type { CustomNavigatorNode, DrawerNavigatorOptions, NavigatorType, RouteDefinition, StackImplementation, StackScreenOptions } from '../navigator';
2
- import type { CustomNavigatorRegistry } from './extensions';
3
- import type { NavigatorDependencyRequirement } from './generation';
1
+ import type { CustomNavigatorNode, DrawerNavigatorOptions, NavigatorType, RouteDefinition, StackImplementation, StackScreenOptions } from '../navigator.js';
2
+ import type { CustomNavigatorRegistry } from './extensions.js';
3
+ import type { NavigatorDependencyRequirement } from './generation.js';
4
4
  export interface ResolvedHeadlessTabsPresentation {
5
5
  presentation: ResolvedTabsPresentation;
6
6
  customPresentationId?: string;