@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
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @ankhorage/contracts
2
2
 
3
+ ## 26.3.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 00b6b21: Add provider-neutral, serializable Ads contracts at `@ankhorage/contracts/ads`.
8
+
9
+ ## 26.2.2
10
+
11
+ ### Patch Changes
12
+
13
+ - be64e00: Fix native Node ESM resolution for published package entrypoints.
14
+
3
15
  ## 26.2.1
4
16
 
5
17
  ### Patch Changes
package/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
 
4
4
  # @ankhorage/contracts
5
5
 
6
- ![license: MIT](././paradox/badges/license.svg) ![npm: v26.2.1](././paradox/badges/npm.svg) ![runtime: bun](././paradox/badges/runtime.svg) ![typescript: strict](././paradox/badges/typescript.svg) ![eslint: checked](././paradox/badges/eslint.svg) ![prettier: checked](././paradox/badges/prettier.svg) ![build: checked](././paradox/badges/build.svg) ![tests: checked](././paradox/badges/tests.svg) ![paradox: warnings](././paradox/badges/docs.svg)
6
+ ![license: MIT](././paradox/badges/license.svg) ![npm: v26.3.0](././paradox/badges/npm.svg) ![runtime: bun](././paradox/badges/runtime.svg) ![typescript: strict](././paradox/badges/typescript.svg) ![eslint: checked](././paradox/badges/eslint.svg) ![prettier: checked](././paradox/badges/prettier.svg) ![build: checked](././paradox/badges/build.svg) ![tests: checked](././paradox/badges/tests.svg) ![paradox: warnings](././paradox/badges/docs.svg)
7
7
 
8
8
  Serializable app, capability, binding, theme, auth, and secret-store contracts for Ankhorage.
9
9
 
package/dist/ads.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ /** Provider-neutral, serializable advertising contracts. */
2
+ export type * from './types/ads.js';
3
+ //# sourceMappingURL=ads.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ads.d.ts","sourceRoot":"","sources":["../src/ads.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,mBAAmB,gBAAgB,CAAC"}
package/dist/ads.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ads.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ads.js","sourceRoot":"","sources":["../src/ads.ts"],"names":[],"mappings":"","sourcesContent":["/** Provider-neutral, serializable advertising contracts. */\nexport type * from './types/ads.js';\n"]}
@@ -1,6 +1,6 @@
1
1
  import { isRecord } from '@ankhorage/utility/object';
2
2
  import { isOptionalString } from '@ankhorage/utility/string';
3
- import { isManifestValue } from './isManifestValue';
3
+ import { isManifestValue } from './isManifestValue.js';
4
4
  /*** Validate every component binding in the authored registry. */
5
5
  export function isComponentDataBindingRegistry(value) {
6
6
  return (isRecord(value) &&
@@ -1 +1 @@
1
- {"version":3,"file":"bindings.js","sourceRoot":"","sources":["../../src/appManifest/bindings.ts"],"names":[],"mappings":"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","sourcesContent":["import { isRecord } from '@ankhorage/utility/object';\nimport { isOptionalString } from '@ankhorage/utility/string';\n\nimport { isManifestValue } from './isManifestValue';\n\n/*** Validate every component binding in the authored registry. */\nexport function isComponentDataBindingRegistry(value: unknown): boolean {\n return (\n isRecord(value) &&\n Object.entries(value).every(\n ([componentId, binding]) =>\n isComponentDataBinding(binding) && isRecord(binding) && binding.componentId === componentId,\n )\n );\n}\n\n/*** Validate a readable capability reference or a recursive binding expression. */\nexport function isBindingExpression(value: unknown): boolean {\n return isBindingCapabilityReference(value) || isBindingExpressionNode(value);\n}\n\n/*** Validate a screen loader as one portable capability invocation. */\nexport function isScreenDataLoaderDefinition(value: unknown): boolean {\n return isBindingInvocation(value);\n}\n\n/*** Validate component identity and its property and event bindings. */\nfunction isComponentDataBinding(value: unknown): boolean {\n return (\n isRecord(value) &&\n typeof value.componentId === 'string' &&\n isOptionalString(value.componentType) &&\n (value.props === undefined ||\n (isRecord(value.props) && Object.values(value.props).every(isPropBinding))) &&\n (value.events === undefined ||\n (isRecord(value.events) &&\n Object.values(value.events).every(\n (bindings) => Array.isArray(bindings) && bindings.every(isEventBinding),\n )))\n );\n}\n\n/*** Validate a property expression and its lifecycle-specific render behavior. */\nfunction isPropBinding(value: unknown): boolean {\n return (\n isRecord(value) &&\n isBindingExpression(value.value) &&\n (value.loading === undefined || isBindingLifecycleBehavior(value.loading)) &&\n (value.error === undefined || isBindingLifecycleBehavior(value.error)) &&\n (value.empty === undefined || isBindingLifecycleBehavior(value.empty))\n );\n}\n\n/*** Validate an event binding and its one canonical invocation target. */\nfunction isEventBinding(value: unknown): boolean {\n return (\n isRecord(value) &&\n isBindingInvocation(value.target) &&\n (value.when === undefined || isBindingCondition(value.when))\n );\n}\n\n/*** Validate a serializable capability invocation and optional result slot. */\nfunction isBindingInvocation(value: unknown): boolean {\n return (\n isBindingCapabilityReference(value) &&\n (value.input === undefined || isBindingInputMap(value.input))\n );\n}\n\n/*** Validate a capability identity with optional output path or cached-result slot. */\nfunction isBindingCapabilityReference(value: unknown): value is Record<string, unknown> {\n return (\n isRecord(value) &&\n typeof value.capability === 'string' &&\n value.capability.includes('.') &&\n isOptionalString(value.path) &&\n isOptionalString(value.result)\n );\n}\n\n/*** Validate array, fallback, literal, object and transform expression forms. */\nfunction isBindingExpressionNode(value: unknown): boolean {\n return (\n isRecord(value) &&\n ((value.kind === 'array' &&\n Array.isArray(value.items) &&\n value.items.every(isBindingExpression)) ||\n (value.kind === 'fallback' &&\n isBindingExpression(value.value) &&\n isBindingExpression(value.fallback)) ||\n (value.kind === 'literal' && isManifestValue(value.value)) ||\n (value.kind === 'object' && isBindingInputMap(value.fields)) ||\n (value.kind === 'transform' &&\n isBindingExpression(value.value) &&\n isBindingTransforms(value.transforms)))\n );\n}\n\n/*** Validate a condition expressed through the same recursive binding vocabulary. */\nfunction isBindingCondition(value: unknown): boolean {\n return (\n isRecord(value) &&\n isBindingExpression(value.source) &&\n ['eq', 'exists', 'neq', 'notExists'].includes(String(value.operator)) &&\n (value.value === undefined || isBindingExpression(value.value))\n );\n}\n\n/*** Validate a lifecycle state and its optional bound display expression. */\nfunction isBindingLifecycleBehavior(value: unknown): boolean {\n return (\n isRecord(value) &&\n typeof value.state === 'string' &&\n ['empty', 'error', 'loading'].includes(value.state) &&\n (value.value === undefined || isBindingExpression(value.value)) &&\n isOptionalString(value.message)\n );\n}\n\n/*** Validate every recursively authored invocation input expression. */\nfunction isBindingInputMap(value: unknown): boolean {\n return isRecord(value) && Object.values(value).every(isBindingExpression);\n}\n\n/*** Validate ordered expression transforms. */\nfunction isBindingTransforms(value: unknown): boolean {\n return (\n Array.isArray(value) &&\n value.every((transform) =>\n ['length', 'lowercase', 'trim', 'uppercase'].includes(String(transform)),\n )\n );\n}\n"]}
1
+ {"version":3,"file":"bindings.js","sourceRoot":"","sources":["../../src/appManifest/bindings.ts"],"names":[],"mappings":"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","sourcesContent":["import { isRecord } from '@ankhorage/utility/object';\nimport { isOptionalString } from '@ankhorage/utility/string';\n\nimport { isManifestValue } from './isManifestValue.js';\n\n/*** Validate every component binding in the authored registry. */\nexport function isComponentDataBindingRegistry(value: unknown): boolean {\n return (\n isRecord(value) &&\n Object.entries(value).every(\n ([componentId, binding]) =>\n isComponentDataBinding(binding) && isRecord(binding) && binding.componentId === componentId,\n )\n );\n}\n\n/*** Validate a readable capability reference or a recursive binding expression. */\nexport function isBindingExpression(value: unknown): boolean {\n return isBindingCapabilityReference(value) || isBindingExpressionNode(value);\n}\n\n/*** Validate a screen loader as one portable capability invocation. */\nexport function isScreenDataLoaderDefinition(value: unknown): boolean {\n return isBindingInvocation(value);\n}\n\n/*** Validate component identity and its property and event bindings. */\nfunction isComponentDataBinding(value: unknown): boolean {\n return (\n isRecord(value) &&\n typeof value.componentId === 'string' &&\n isOptionalString(value.componentType) &&\n (value.props === undefined ||\n (isRecord(value.props) && Object.values(value.props).every(isPropBinding))) &&\n (value.events === undefined ||\n (isRecord(value.events) &&\n Object.values(value.events).every(\n (bindings) => Array.isArray(bindings) && bindings.every(isEventBinding),\n )))\n );\n}\n\n/*** Validate a property expression and its lifecycle-specific render behavior. */\nfunction isPropBinding(value: unknown): boolean {\n return (\n isRecord(value) &&\n isBindingExpression(value.value) &&\n (value.loading === undefined || isBindingLifecycleBehavior(value.loading)) &&\n (value.error === undefined || isBindingLifecycleBehavior(value.error)) &&\n (value.empty === undefined || isBindingLifecycleBehavior(value.empty))\n );\n}\n\n/*** Validate an event binding and its one canonical invocation target. */\nfunction isEventBinding(value: unknown): boolean {\n return (\n isRecord(value) &&\n isBindingInvocation(value.target) &&\n (value.when === undefined || isBindingCondition(value.when))\n );\n}\n\n/*** Validate a serializable capability invocation and optional result slot. */\nfunction isBindingInvocation(value: unknown): boolean {\n return (\n isBindingCapabilityReference(value) &&\n (value.input === undefined || isBindingInputMap(value.input))\n );\n}\n\n/*** Validate a capability identity with optional output path or cached-result slot. */\nfunction isBindingCapabilityReference(value: unknown): value is Record<string, unknown> {\n return (\n isRecord(value) &&\n typeof value.capability === 'string' &&\n value.capability.includes('.') &&\n isOptionalString(value.path) &&\n isOptionalString(value.result)\n );\n}\n\n/*** Validate array, fallback, literal, object and transform expression forms. */\nfunction isBindingExpressionNode(value: unknown): boolean {\n return (\n isRecord(value) &&\n ((value.kind === 'array' &&\n Array.isArray(value.items) &&\n value.items.every(isBindingExpression)) ||\n (value.kind === 'fallback' &&\n isBindingExpression(value.value) &&\n isBindingExpression(value.fallback)) ||\n (value.kind === 'literal' && isManifestValue(value.value)) ||\n (value.kind === 'object' && isBindingInputMap(value.fields)) ||\n (value.kind === 'transform' &&\n isBindingExpression(value.value) &&\n isBindingTransforms(value.transforms)))\n );\n}\n\n/*** Validate a condition expressed through the same recursive binding vocabulary. */\nfunction isBindingCondition(value: unknown): boolean {\n return (\n isRecord(value) &&\n isBindingExpression(value.source) &&\n ['eq', 'exists', 'neq', 'notExists'].includes(String(value.operator)) &&\n (value.value === undefined || isBindingExpression(value.value))\n );\n}\n\n/*** Validate a lifecycle state and its optional bound display expression. */\nfunction isBindingLifecycleBehavior(value: unknown): boolean {\n return (\n isRecord(value) &&\n typeof value.state === 'string' &&\n ['empty', 'error', 'loading'].includes(value.state) &&\n (value.value === undefined || isBindingExpression(value.value)) &&\n isOptionalString(value.message)\n );\n}\n\n/*** Validate every recursively authored invocation input expression. */\nfunction isBindingInputMap(value: unknown): boolean {\n return isRecord(value) && Object.values(value).every(isBindingExpression);\n}\n\n/*** Validate ordered expression transforms. */\nfunction isBindingTransforms(value: unknown): boolean {\n return (\n Array.isArray(value) &&\n value.every((transform) =>\n ['length', 'lowercase', 'trim', 'uppercase'].includes(String(transform)),\n )\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/appManifest/constants.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,QAAQ,EAAE,UAAU;IACpB,MAAM,EAAE,UAAU;IAClB,aAAa,EAAE,UAAU;IACzB,eAAe,EAAE,UAAU;IAC3B,YAAY,EAAE,UAAU;IACxB,KAAK,EAAE,UAAU;IACjB,MAAM,EAAE,UAAU;IAClB,KAAK,EAAE,UAAU;IACjB,KAAK,EAAE,UAAU;IACjB,SAAS,EAAE,UAAU;IACrB,OAAO,EAAE,UAAU;IACnB,WAAW,EAAE,UAAU;IACvB,YAAY,EAAE,UAAU;IACxB,UAAU,EAAE,UAAU;IACtB,QAAQ,EAAE,UAAU;CACiD,CAAC","sourcesContent":["import type { AppManifest } from '../types';\n\nexport const APP_MANIFEST_KEY_POLICY = {\n metadata: 'required',\n themes: 'required',\n activeThemeId: 'required',\n activeThemeMode: 'optional',\n splashScreen: 'optional',\n media: 'optional',\n deploy: 'optional',\n state: 'optional',\n infra: 'required',\n navigator: 'required',\n screens: 'required',\n dataSources: 'optional',\n dataBindings: 'optional',\n repository: 'optional',\n settings: 'required',\n} as const satisfies Record<keyof AppManifest, 'optional' | 'required'>;\n"]}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/appManifest/constants.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,QAAQ,EAAE,UAAU;IACpB,MAAM,EAAE,UAAU;IAClB,aAAa,EAAE,UAAU;IACzB,eAAe,EAAE,UAAU;IAC3B,YAAY,EAAE,UAAU;IACxB,KAAK,EAAE,UAAU;IACjB,MAAM,EAAE,UAAU;IAClB,KAAK,EAAE,UAAU;IACjB,KAAK,EAAE,UAAU;IACjB,SAAS,EAAE,UAAU;IACrB,OAAO,EAAE,UAAU;IACnB,WAAW,EAAE,UAAU;IACvB,YAAY,EAAE,UAAU;IACxB,UAAU,EAAE,UAAU;IACtB,QAAQ,EAAE,UAAU;CACiD,CAAC","sourcesContent":["import type { AppManifest } from '../types.js';\n\nexport const APP_MANIFEST_KEY_POLICY = {\n metadata: 'required',\n themes: 'required',\n activeThemeId: 'required',\n activeThemeMode: 'optional',\n splashScreen: 'optional',\n media: 'optional',\n deploy: 'optional',\n state: 'optional',\n infra: 'required',\n navigator: 'required',\n screens: 'required',\n dataSources: 'optional',\n dataBindings: 'optional',\n repository: 'optional',\n settings: 'required',\n} as const satisfies Record<keyof AppManifest, 'optional' | 'required'>;\n"]}
@@ -1,7 +1,7 @@
1
1
  import { hasOnlyKeys, isRecord } from '@ankhorage/utility/object';
2
2
  import { isOptionalString } from '@ankhorage/utility/string';
3
- import { isAdapterRef, isCredentialRef, isDataEndpointRegistry, isDataSchemaRegistry, } from '../data/dataValidation';
4
- import { isManifestValue } from './isManifestValue';
3
+ import { isAdapterRef, isCredentialRef, isDataEndpointRegistry, isDataSchemaRegistry, } from '../data/dataValidation.js';
4
+ import { isManifestValue } from './isManifestValue.js';
5
5
  const DATABASE_SOURCE_KEYS = [
6
6
  'id',
7
7
  'kind',
@@ -1 +1 @@
1
- {"version":3,"file":"dataSources.js","sourceRoot":"","sources":["../../src/appManifest/dataSources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAE7D,OAAO,EACL,YAAY,EACZ,eAAe,EACf,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,oBAAoB,GAAG;IAC3B,IAAI;IACJ,MAAM;IACN,MAAM;IACN,aAAa;IACb,YAAY;IACZ,SAAS;IACT,WAAW;IACX,SAAS;IACT,UAAU;CACF,CAAC;AAEX,mEAAmE;AACnE,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,OAAO,CACL,QAAQ,CAAC,KAAK,CAAC;QACf,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,oBAAoB,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAChG,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,SAAS,oBAAoB,CAAC,KAAc;IAC1C,OAAO,CACL,QAAQ,CAAC,KAAK,CAAC;QACf,WAAW,CAAC,KAAK,EAAE,oBAAoB,CAAC;QACxC,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ;QAC5B,KAAK,CAAC,IAAI,KAAK,UAAU;QACzB,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC;QAC5B,gBAAgB,CAAC,KAAK,CAAC,WAAW,CAAC;QACnC,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS,IAAI,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACrE,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC;QACvB,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,UAAU;QACjC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC;QAC3B,sBAAsB,CAAC,KAAK,CAAC,SAAS,CAAC;QACvC,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,oBAAoB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACpE,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAClE,CAAC;AACJ,CAAC","sourcesContent":["import { hasOnlyKeys, isRecord } from '@ankhorage/utility/object';\nimport { isOptionalString } from '@ankhorage/utility/string';\n\nimport {\n isAdapterRef,\n isCredentialRef,\n isDataEndpointRegistry,\n isDataSchemaRegistry,\n} from '../data/dataValidation';\nimport { isManifestValue } from './isManifestValue';\n\nconst DATABASE_SOURCE_KEYS = [\n 'id',\n 'kind',\n 'name',\n 'description',\n 'credential',\n 'adapter',\n 'endpoints',\n 'schemas',\n 'metadata',\n] as const;\n\n/*** Validate the supported data-source entries in the registry. */\nexport function isDataSourceRegistry(value: unknown): boolean {\n return (\n isRecord(value) &&\n Object.entries(value).every(([id, source]) => isDatabaseDataSource(source) && source.id === id)\n );\n}\n\n/*** Validate database adapter identity and supported configuration fields. */\nfunction isDatabaseDataSource(value: unknown): value is Record<string, unknown> {\n return (\n isRecord(value) &&\n hasOnlyKeys(value, DATABASE_SOURCE_KEYS) &&\n typeof value.id === 'string' &&\n value.kind === 'database' &&\n isOptionalString(value.name) &&\n isOptionalString(value.description) &&\n (value.credential === undefined || isCredentialRef(value.credential)) &&\n isRecord(value.adapter) &&\n value.adapter.kind === 'database' &&\n isAdapterRef(value.adapter) &&\n isDataEndpointRegistry(value.endpoints) &&\n (value.schemas === undefined || isDataSchemaRegistry(value.schemas)) &&\n (value.metadata === undefined || isManifestValue(value.metadata))\n );\n}\n"]}
1
+ {"version":3,"file":"dataSources.js","sourceRoot":"","sources":["../../src/appManifest/dataSources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAE7D,OAAO,EACL,YAAY,EACZ,eAAe,EACf,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,oBAAoB,GAAG;IAC3B,IAAI;IACJ,MAAM;IACN,MAAM;IACN,aAAa;IACb,YAAY;IACZ,SAAS;IACT,WAAW;IACX,SAAS;IACT,UAAU;CACF,CAAC;AAEX,mEAAmE;AACnE,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,OAAO,CACL,QAAQ,CAAC,KAAK,CAAC;QACf,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,oBAAoB,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAChG,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,SAAS,oBAAoB,CAAC,KAAc;IAC1C,OAAO,CACL,QAAQ,CAAC,KAAK,CAAC;QACf,WAAW,CAAC,KAAK,EAAE,oBAAoB,CAAC;QACxC,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ;QAC5B,KAAK,CAAC,IAAI,KAAK,UAAU;QACzB,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC;QAC5B,gBAAgB,CAAC,KAAK,CAAC,WAAW,CAAC;QACnC,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS,IAAI,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACrE,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC;QACvB,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,UAAU;QACjC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC;QAC3B,sBAAsB,CAAC,KAAK,CAAC,SAAS,CAAC;QACvC,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,oBAAoB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACpE,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAClE,CAAC;AACJ,CAAC","sourcesContent":["import { hasOnlyKeys, isRecord } from '@ankhorage/utility/object';\nimport { isOptionalString } from '@ankhorage/utility/string';\n\nimport {\n isAdapterRef,\n isCredentialRef,\n isDataEndpointRegistry,\n isDataSchemaRegistry,\n} from '../data/dataValidation.js';\nimport { isManifestValue } from './isManifestValue.js';\n\nconst DATABASE_SOURCE_KEYS = [\n 'id',\n 'kind',\n 'name',\n 'description',\n 'credential',\n 'adapter',\n 'endpoints',\n 'schemas',\n 'metadata',\n] as const;\n\n/*** Validate the supported data-source entries in the registry. */\nexport function isDataSourceRegistry(value: unknown): boolean {\n return (\n isRecord(value) &&\n Object.entries(value).every(([id, source]) => isDatabaseDataSource(source) && source.id === id)\n );\n}\n\n/*** Validate database adapter identity and supported configuration fields. */\nfunction isDatabaseDataSource(value: unknown): value is Record<string, unknown> {\n return (\n isRecord(value) &&\n hasOnlyKeys(value, DATABASE_SOURCE_KEYS) &&\n typeof value.id === 'string' &&\n value.kind === 'database' &&\n isOptionalString(value.name) &&\n isOptionalString(value.description) &&\n (value.credential === undefined || isCredentialRef(value.credential)) &&\n isRecord(value.adapter) &&\n value.adapter.kind === 'database' &&\n isAdapterRef(value.adapter) &&\n isDataEndpointRegistry(value.endpoints) &&\n (value.schemas === undefined || isDataSchemaRegistry(value.schemas)) &&\n (value.metadata === undefined || isManifestValue(value.metadata))\n );\n}\n"]}
@@ -1,4 +1,4 @@
1
- import type { AppManifest } from '../types';
1
+ import type { AppManifest } from '../types.js';
2
2
  /*** Return whether an unknown value satisfies the canonical AppManifest shape. */
3
3
  export declare function isAppManifest(value: unknown): value is AppManifest;
4
4
  //# sourceMappingURL=isAppManifest.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"isAppManifest.d.ts","sourceRoot":"","sources":["../../src/appManifest/isAppManifest.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAe5C,kFAAkF;AAClF,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,WAAW,CAalE"}
1
+ {"version":3,"file":"isAppManifest.d.ts","sourceRoot":"","sources":["../../src/appManifest/isAppManifest.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAe/C,kFAAkF;AAClF,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,WAAW,CAalE"}
@@ -1,13 +1,13 @@
1
1
  import { isStringArray } from '@ankhorage/utility/array';
2
2
  import { isRecord } from '@ankhorage/utility/object';
3
- import { isInfraManifest } from '../infra/isInfraManifest';
4
- import { isComponentDataBindingRegistry } from './bindings';
5
- import { APP_MANIFEST_KEY_POLICY } from './constants';
6
- import { isDataSourceRegistry } from './dataSources';
7
- import { isAppDeployManifest } from './deploy';
8
- import { isAppStateSpec } from './isAppStateSpec';
9
- import { isMediaManifest } from './media';
10
- import { isAppNavigatorManifest, isManifestMetadata, isScreenRegistry, isSplashScreenSpec, isThemeRegistry, } from './screens';
3
+ import { isInfraManifest } from '../infra/isInfraManifest.js';
4
+ import { isComponentDataBindingRegistry } from './bindings.js';
5
+ import { APP_MANIFEST_KEY_POLICY } from './constants.js';
6
+ import { isDataSourceRegistry } from './dataSources.js';
7
+ import { isAppDeployManifest } from './deploy.js';
8
+ import { isAppStateSpec } from './isAppStateSpec.js';
9
+ import { isMediaManifest } from './media.js';
10
+ import { isAppNavigatorManifest, isManifestMetadata, isScreenRegistry, isSplashScreenSpec, isThemeRegistry, } from './screens.js';
11
11
  /*** Return whether an unknown value satisfies the canonical AppManifest shape. */
12
12
  export function isAppManifest(value) {
13
13
  return (isRecord(value) &&
@@ -1 +1 @@
1
- {"version":3,"file":"isAppManifest.js","sourceRoot":"","sources":["../../src/appManifest/isAppManifest.ts"],"names":[],"mappings":"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","sourcesContent":["import { isStringArray } from '@ankhorage/utility/array';\nimport { isRecord } from '@ankhorage/utility/object';\n\nimport { isInfraManifest } from '../infra/isInfraManifest';\nimport type { AppManifest } from '../types';\nimport { isComponentDataBindingRegistry } from './bindings';\nimport { APP_MANIFEST_KEY_POLICY } from './constants';\nimport { isDataSourceRegistry } from './dataSources';\nimport { isAppDeployManifest } from './deploy';\nimport { isAppStateSpec } from './isAppStateSpec';\nimport { isMediaManifest } from './media';\nimport {\n isAppNavigatorManifest,\n isManifestMetadata,\n isScreenRegistry,\n isSplashScreenSpec,\n isThemeRegistry,\n} from './screens';\n\n/*** Return whether an unknown value satisfies the canonical AppManifest shape. */\nexport function isAppManifest(value: unknown): value is AppManifest {\n return (\n isRecord(value) &&\n hasRequiredManifestKeys(value) &&\n !('generatedApis' in value) &&\n isManifestMetadata(value.metadata) &&\n isPresentation(value) &&\n isOptionalCapabilities(value) &&\n isInfraManifest(value.infra) &&\n isAppNavigatorManifest(value.navigator) &&\n isScreenRegistry(value.screens) &&\n isAppSettings(value.settings)\n );\n}\n\n/*** Validate the canonical application manifest field policy. */\nfunction hasRequiredManifestKeys(value: Record<string, unknown>): boolean {\n return Object.entries(APP_MANIFEST_KEY_POLICY).every(\n ([key, policy]) => policy === 'optional' || key in value,\n );\n}\n\n/*** Validate the canonical application manifest field policy. */\nfunction isActiveThemeMode(value: unknown): boolean {\n return value === undefined || value === 'dark' || value === 'light';\n}\n\n/*** Validate the canonical application manifest field policy. */\nfunction isRepositoryManifest(value: unknown): boolean {\n return (\n isRecord(value) &&\n value.provider === 'github' &&\n typeof value.owner === 'string' &&\n value.owner.length > 0 &&\n typeof value.name === 'string' &&\n value.name.length > 0 &&\n typeof value.url === 'string' &&\n value.url.length > 0 &&\n value.defaultBranch === 'main'\n );\n}\n\n/*** Validate the canonical application manifest field policy. */\nfunction isAppSettings(value: unknown): boolean {\n return (\n isRecord(value) &&\n !('apiBaseUrl' in value) &&\n isRecord(value.localization) &&\n typeof value.localization.defaultLocale === 'string' &&\n isStringArray(value.localization.locales)\n );\n}\n\n/*** Validate authored appearance as one cohesive manifest concern. */\nfunction isPresentation(value: Record<string, unknown>): boolean {\n return (\n isThemeRegistry(value.themes) &&\n typeof value.activeThemeId === 'string' &&\n Object.hasOwn(value.themes, value.activeThemeId) &&\n isActiveThemeMode(value.activeThemeMode) &&\n (value.splashScreen === undefined || isSplashScreenSpec(value.splashScreen)) &&\n (value.media === undefined || isMediaManifest(value.media))\n );\n}\n\n/*** Validate independently optional application capability selections. */\nfunction isOptionalCapabilities(value: Record<string, unknown>): boolean {\n return (\n (value.deploy === undefined || isAppDeployManifest(value.deploy)) &&\n (value.state === undefined || isAppStateSpec(value.state)) &&\n (value.dataSources === undefined || isDataSourceRegistry(value.dataSources)) &&\n (value.dataBindings === undefined || isComponentDataBindingRegistry(value.dataBindings)) &&\n (value.repository === undefined || isRepositoryManifest(value.repository))\n );\n}\n"]}
1
+ {"version":3,"file":"isAppManifest.js","sourceRoot":"","sources":["../../src/appManifest/isAppManifest.ts"],"names":[],"mappings":"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","sourcesContent":["import { isStringArray } from '@ankhorage/utility/array';\nimport { isRecord } from '@ankhorage/utility/object';\n\nimport { isInfraManifest } from '../infra/isInfraManifest.js';\nimport type { AppManifest } from '../types.js';\nimport { isComponentDataBindingRegistry } from './bindings.js';\nimport { APP_MANIFEST_KEY_POLICY } from './constants.js';\nimport { isDataSourceRegistry } from './dataSources.js';\nimport { isAppDeployManifest } from './deploy.js';\nimport { isAppStateSpec } from './isAppStateSpec.js';\nimport { isMediaManifest } from './media.js';\nimport {\n isAppNavigatorManifest,\n isManifestMetadata,\n isScreenRegistry,\n isSplashScreenSpec,\n isThemeRegistry,\n} from './screens.js';\n\n/*** Return whether an unknown value satisfies the canonical AppManifest shape. */\nexport function isAppManifest(value: unknown): value is AppManifest {\n return (\n isRecord(value) &&\n hasRequiredManifestKeys(value) &&\n !('generatedApis' in value) &&\n isManifestMetadata(value.metadata) &&\n isPresentation(value) &&\n isOptionalCapabilities(value) &&\n isInfraManifest(value.infra) &&\n isAppNavigatorManifest(value.navigator) &&\n isScreenRegistry(value.screens) &&\n isAppSettings(value.settings)\n );\n}\n\n/*** Validate the canonical application manifest field policy. */\nfunction hasRequiredManifestKeys(value: Record<string, unknown>): boolean {\n return Object.entries(APP_MANIFEST_KEY_POLICY).every(\n ([key, policy]) => policy === 'optional' || key in value,\n );\n}\n\n/*** Validate the canonical application manifest field policy. */\nfunction isActiveThemeMode(value: unknown): boolean {\n return value === undefined || value === 'dark' || value === 'light';\n}\n\n/*** Validate the canonical application manifest field policy. */\nfunction isRepositoryManifest(value: unknown): boolean {\n return (\n isRecord(value) &&\n value.provider === 'github' &&\n typeof value.owner === 'string' &&\n value.owner.length > 0 &&\n typeof value.name === 'string' &&\n value.name.length > 0 &&\n typeof value.url === 'string' &&\n value.url.length > 0 &&\n value.defaultBranch === 'main'\n );\n}\n\n/*** Validate the canonical application manifest field policy. */\nfunction isAppSettings(value: unknown): boolean {\n return (\n isRecord(value) &&\n !('apiBaseUrl' in value) &&\n isRecord(value.localization) &&\n typeof value.localization.defaultLocale === 'string' &&\n isStringArray(value.localization.locales)\n );\n}\n\n/*** Validate authored appearance as one cohesive manifest concern. */\nfunction isPresentation(value: Record<string, unknown>): boolean {\n return (\n isThemeRegistry(value.themes) &&\n typeof value.activeThemeId === 'string' &&\n Object.hasOwn(value.themes, value.activeThemeId) &&\n isActiveThemeMode(value.activeThemeMode) &&\n (value.splashScreen === undefined || isSplashScreenSpec(value.splashScreen)) &&\n (value.media === undefined || isMediaManifest(value.media))\n );\n}\n\n/*** Validate independently optional application capability selections. */\nfunction isOptionalCapabilities(value: Record<string, unknown>): boolean {\n return (\n (value.deploy === undefined || isAppDeployManifest(value.deploy)) &&\n (value.state === undefined || isAppStateSpec(value.state)) &&\n (value.dataSources === undefined || isDataSourceRegistry(value.dataSources)) &&\n (value.dataBindings === undefined || isComponentDataBindingRegistry(value.dataBindings)) &&\n (value.repository === undefined || isRepositoryManifest(value.repository))\n );\n}\n"]}
@@ -1,4 +1,4 @@
1
- import type { AppStateSpec } from '../state';
1
+ import type { AppStateSpec } from '../state.js';
2
2
  /*** Application state cannot claim persistence unsupported by the selected Legend adapter. */
3
3
  export declare function isAppStateSpec(value: unknown): value is AppStateSpec;
4
4
  //# sourceMappingURL=isAppStateSpec.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"isAppStateSpec.d.ts","sourceRoot":"","sources":["../../src/appManifest/isAppStateSpec.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,8FAA8F;AAC9F,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,YAAY,CAOpE"}
1
+ {"version":3,"file":"isAppStateSpec.d.ts","sourceRoot":"","sources":["../../src/appManifest/isAppStateSpec.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,8FAA8F;AAC9F,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,YAAY,CAOpE"}
@@ -1 +1 @@
1
- {"version":3,"file":"isAppStateSpec.js","sourceRoot":"","sources":["../../src/appManifest/isAppStateSpec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAIrD,8FAA8F;AAC9F,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,OAAO,CACL,QAAQ,CAAC,KAAK,CAAC;QACf,KAAK,CAAC,QAAQ,KAAK,QAAQ;QAC3B,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS,IAAI,KAAK,CAAC,WAAW,KAAK,KAAK,CAAC;QAChE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,UAAU,IAAI,GAAG,KAAK,aAAa,CAAC,CAC/E,CAAC;AACJ,CAAC","sourcesContent":["import { isRecord } from '@ankhorage/utility/object';\n\nimport type { AppStateSpec } from '../state';\n\n/*** Application state cannot claim persistence unsupported by the selected Legend adapter. */\nexport function isAppStateSpec(value: unknown): value is AppStateSpec {\n return (\n isRecord(value) &&\n value.provider === 'legend' &&\n (value.persistence === undefined || value.persistence === false) &&\n Object.keys(value).every((key) => key === 'provider' || key === 'persistence')\n );\n}\n"]}
1
+ {"version":3,"file":"isAppStateSpec.js","sourceRoot":"","sources":["../../src/appManifest/isAppStateSpec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAIrD,8FAA8F;AAC9F,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,OAAO,CACL,QAAQ,CAAC,KAAK,CAAC;QACf,KAAK,CAAC,QAAQ,KAAK,QAAQ;QAC3B,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS,IAAI,KAAK,CAAC,WAAW,KAAK,KAAK,CAAC;QAChE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,UAAU,IAAI,GAAG,KAAK,aAAa,CAAC,CAC/E,CAAC;AACJ,CAAC","sourcesContent":["import { isRecord } from '@ankhorage/utility/object';\n\nimport type { AppStateSpec } from '../state.js';\n\n/*** Application state cannot claim persistence unsupported by the selected Legend adapter. */\nexport function isAppStateSpec(value: unknown): value is AppStateSpec {\n return (\n isRecord(value) &&\n value.provider === 'legend' &&\n (value.persistence === undefined || value.persistence === false) &&\n Object.keys(value).every((key) => key === 'provider' || key === 'persistence')\n );\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { isSerializableValue } from '../serializable';
1
+ import { isSerializableValue } from '../serializable.js';
2
2
  /*** Validate authored values through the canonical serializable-value contract. */
3
3
  export function isManifestValue(value) {
4
4
  return isSerializableValue(value);
@@ -1 +1 @@
1
- {"version":3,"file":"isManifestValue.js","sourceRoot":"","sources":["../../src/appManifest/isManifestValue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD,mFAAmF;AACnF,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;AACpC,CAAC","sourcesContent":["import { isSerializableValue } from '../serializable';\n\n/*** Validate authored values through the canonical serializable-value contract. */\nexport function isManifestValue(value: unknown): boolean {\n return isSerializableValue(value);\n}\n"]}
1
+ {"version":3,"file":"isManifestValue.js","sourceRoot":"","sources":["../../src/appManifest/isManifestValue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,mFAAmF;AACnF,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;AACpC,CAAC","sourcesContent":["import { isSerializableValue } from '../serializable.js';\n\n/*** Validate authored values through the canonical serializable-value contract. */\nexport function isManifestValue(value: unknown): boolean {\n return isSerializableValue(value);\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { type MediaManifest } from '../media';
1
+ import { type MediaManifest } from '../media.js';
2
2
  /*** Validate authored media assets and their registry identity. */
3
3
  export declare function isMediaManifest(value: unknown): value is MediaManifest;
4
4
  //# sourceMappingURL=media.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../src/appManifest/media.ts"],"names":[],"mappings":"AAGA,OAAO,EAKL,KAAK,aAAa,EACnB,MAAM,UAAU,CAAC;AAIlB,mEAAmE;AACnE,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAMtE"}
1
+ {"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../src/appManifest/media.ts"],"names":[],"mappings":"AAGA,OAAO,EAKL,KAAK,aAAa,EACnB,MAAM,aAAa,CAAC;AAIrB,mEAAmE;AACnE,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAMtE"}
@@ -1,6 +1,6 @@
1
1
  import { hasOnlyKeys, isRecord } from '@ankhorage/utility/object';
2
2
  import { isNonEmptyString, isOptionalString } from '@ankhorage/utility/string';
3
- import { MEDIA_ASSET_KINDS, } from '../media';
3
+ import { MEDIA_ASSET_KINDS, } from '../media.js';
4
4
  const MEDIA_ASSET_KIND_SET = new Set(MEDIA_ASSET_KINDS);
5
5
  /*** Validate authored media assets and their registry identity. */
6
6
  export function isMediaManifest(value) {
@@ -1 +1 @@
1
- {"version":3,"file":"media.js","sourceRoot":"","sources":["../../src/appManifest/media.ts"],"names":[],"mappings":"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","sourcesContent":["import { hasOnlyKeys, isRecord } from '@ankhorage/utility/object';\nimport { isNonEmptyString, isOptionalString } from '@ankhorage/utility/string';\n\nimport {\n MEDIA_ASSET_KINDS,\n type MediaAsset,\n type MediaAssetMetadata,\n type MediaAssetSource,\n type MediaManifest,\n} from '../media';\n\nconst MEDIA_ASSET_KIND_SET = new Set<string>(MEDIA_ASSET_KINDS);\n\n/*** Validate authored media assets and their registry identity. */\nexport function isMediaManifest(value: unknown): value is MediaManifest {\n if (!isRecord(value) || !hasOnlyKeys(value, ['assets']) || !isRecord(value.assets)) return false;\n\n return Object.entries(value.assets).every(\n ([assetId, asset]) => isMediaAsset(asset) && asset.id === assetId,\n );\n}\n\n/*** Validate media identity, kind, source and optional metadata. */\nfunction isMediaAsset(value: unknown): value is MediaAsset {\n return (\n isRecord(value) &&\n hasOnlyKeys(value, ['id', 'name', 'kind', 'source', 'contentType', 'metadata']) &&\n isNonEmptyString(value.id) &&\n isNonEmptyString(value.name) &&\n typeof value.kind === 'string' &&\n MEDIA_ASSET_KIND_SET.has(value.kind) &&\n isMediaAssetSource(value.source) &&\n isOptionalString(value.contentType) &&\n (value.metadata === undefined || isMediaAssetMetadata(value.metadata))\n );\n}\n\n/*** Validate the selected bundled, URL or storage-backed media source. */\nfunction isMediaAssetSource(value: unknown): value is MediaAssetSource {\n if (!isRecord(value) || typeof value.kind !== 'string') return false;\n\n if (value.kind === 'storage') {\n return (\n hasOnlyKeys(value, ['kind', 'storageId', 'bucket', 'path']) &&\n isOptionalString(value.storageId) &&\n isNonEmptyString(value.bucket) &&\n isNonEmptyString(value.path)\n );\n }\n\n if (value.kind === 'url') {\n return hasOnlyKeys(value, ['kind', 'url']) && isStableRemoteUrl(value.url);\n }\n\n return (\n value.kind === 'bundled' && hasOnlyKeys(value, ['kind', 'path']) && isBundledPath(value.path)\n );\n}\n\n/*** Validate optional descriptive and numeric media metadata. */\nfunction isMediaAssetMetadata(value: unknown): value is MediaAssetMetadata {\n return (\n isRecord(value) &&\n hasOnlyKeys(value, [\n 'originalFileName',\n 'sizeBytes',\n 'createdAt',\n 'width',\n 'height',\n 'durationMs',\n ]) &&\n isOptionalString(value.originalFileName) &&\n isOptionalString(value.createdAt) &&\n isOptionalFiniteNonNegativeNumber(value.sizeBytes) &&\n isOptionalFinitePositiveNumber(value.width) &&\n isOptionalFinitePositiveNumber(value.height) &&\n isOptionalFiniteNonNegativeNumber(value.durationMs)\n );\n}\n\n/*** Validate an authored HTTP or HTTPS media URL. */\nfunction isStableRemoteUrl(value: unknown): boolean {\n return typeof value === 'string' && /^https?:\\/\\//iu.test(value.trim());\n}\n\n/*** Validate a portable bundled-media path. */\nfunction isBundledPath(value: unknown): boolean {\n if (!isNonEmptyString(value)) return false;\n const path = value.trim();\n if (path.startsWith('/') || /^[a-z][a-z0-9+.-]*:/iu.test(path)) return false;\n return !path.split('/').includes('..');\n}\n\n/*** Accept an omitted media metric or a finite non-negative number. */\nfunction isOptionalFiniteNonNegativeNumber(value: unknown): boolean {\n return value === undefined || (typeof value === 'number' && Number.isFinite(value) && value >= 0);\n}\n\n/*** Accept an omitted media metric or a finite positive number. */\nfunction isOptionalFinitePositiveNumber(value: unknown): boolean {\n return value === undefined || (typeof value === 'number' && Number.isFinite(value) && value > 0);\n}\n"]}
1
+ {"version":3,"file":"media.js","sourceRoot":"","sources":["../../src/appManifest/media.ts"],"names":[],"mappings":"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","sourcesContent":["import { hasOnlyKeys, isRecord } from '@ankhorage/utility/object';\nimport { isNonEmptyString, isOptionalString } from '@ankhorage/utility/string';\n\nimport {\n MEDIA_ASSET_KINDS,\n type MediaAsset,\n type MediaAssetMetadata,\n type MediaAssetSource,\n type MediaManifest,\n} from '../media.js';\n\nconst MEDIA_ASSET_KIND_SET = new Set<string>(MEDIA_ASSET_KINDS);\n\n/*** Validate authored media assets and their registry identity. */\nexport function isMediaManifest(value: unknown): value is MediaManifest {\n if (!isRecord(value) || !hasOnlyKeys(value, ['assets']) || !isRecord(value.assets)) return false;\n\n return Object.entries(value.assets).every(\n ([assetId, asset]) => isMediaAsset(asset) && asset.id === assetId,\n );\n}\n\n/*** Validate media identity, kind, source and optional metadata. */\nfunction isMediaAsset(value: unknown): value is MediaAsset {\n return (\n isRecord(value) &&\n hasOnlyKeys(value, ['id', 'name', 'kind', 'source', 'contentType', 'metadata']) &&\n isNonEmptyString(value.id) &&\n isNonEmptyString(value.name) &&\n typeof value.kind === 'string' &&\n MEDIA_ASSET_KIND_SET.has(value.kind) &&\n isMediaAssetSource(value.source) &&\n isOptionalString(value.contentType) &&\n (value.metadata === undefined || isMediaAssetMetadata(value.metadata))\n );\n}\n\n/*** Validate the selected bundled, URL or storage-backed media source. */\nfunction isMediaAssetSource(value: unknown): value is MediaAssetSource {\n if (!isRecord(value) || typeof value.kind !== 'string') return false;\n\n if (value.kind === 'storage') {\n return (\n hasOnlyKeys(value, ['kind', 'storageId', 'bucket', 'path']) &&\n isOptionalString(value.storageId) &&\n isNonEmptyString(value.bucket) &&\n isNonEmptyString(value.path)\n );\n }\n\n if (value.kind === 'url') {\n return hasOnlyKeys(value, ['kind', 'url']) && isStableRemoteUrl(value.url);\n }\n\n return (\n value.kind === 'bundled' && hasOnlyKeys(value, ['kind', 'path']) && isBundledPath(value.path)\n );\n}\n\n/*** Validate optional descriptive and numeric media metadata. */\nfunction isMediaAssetMetadata(value: unknown): value is MediaAssetMetadata {\n return (\n isRecord(value) &&\n hasOnlyKeys(value, [\n 'originalFileName',\n 'sizeBytes',\n 'createdAt',\n 'width',\n 'height',\n 'durationMs',\n ]) &&\n isOptionalString(value.originalFileName) &&\n isOptionalString(value.createdAt) &&\n isOptionalFiniteNonNegativeNumber(value.sizeBytes) &&\n isOptionalFinitePositiveNumber(value.width) &&\n isOptionalFinitePositiveNumber(value.height) &&\n isOptionalFiniteNonNegativeNumber(value.durationMs)\n );\n}\n\n/*** Validate an authored HTTP or HTTPS media URL. */\nfunction isStableRemoteUrl(value: unknown): boolean {\n return typeof value === 'string' && /^https?:\\/\\//iu.test(value.trim());\n}\n\n/*** Validate a portable bundled-media path. */\nfunction isBundledPath(value: unknown): boolean {\n if (!isNonEmptyString(value)) return false;\n const path = value.trim();\n if (path.startsWith('/') || /^[a-z][a-z0-9+.-]*:/iu.test(path)) return false;\n return !path.split('/').includes('..');\n}\n\n/*** Accept an omitted media metric or a finite non-negative number. */\nfunction isOptionalFiniteNonNegativeNumber(value: unknown): boolean {\n return value === undefined || (typeof value === 'number' && Number.isFinite(value) && value >= 0);\n}\n\n/*** Accept an omitted media metric or a finite positive number. */\nfunction isOptionalFinitePositiveNumber(value: unknown): boolean {\n return value === undefined || (typeof value === 'number' && Number.isFinite(value) && value > 0);\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { type AppNavigatorManifest } from '../navigator';
1
+ import { type AppNavigatorManifest } from '../navigator.js';
2
2
  /*** Validate the complete serialized `AppManifest.navigator` slice. */
3
3
  export declare function isAppNavigatorManifest(value: unknown): value is AppNavigatorManifest;
4
4
  //# sourceMappingURL=navigator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"navigator.d.ts","sourceRoot":"","sources":["../../src/appManifest/navigator.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,oBAAoB,EAAsC,MAAM,cAAc,CAAC;AAS7F,uEAAuE;AACvE,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,oBAAoB,CAUpF"}
1
+ {"version":3,"file":"navigator.d.ts","sourceRoot":"","sources":["../../src/appManifest/navigator.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,oBAAoB,EAAsC,MAAM,iBAAiB,CAAC;AAShG,uEAAuE;AACvE,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,oBAAoB,CAUpF"}
@@ -1,9 +1,9 @@
1
1
  import { isStringArray } from '@ankhorage/utility/array';
2
2
  import { hasOnlyKeys, isRecord } from '@ankhorage/utility/object';
3
3
  import { isOptionalString } from '@ankhorage/utility/string';
4
- import { isIconSpec } from '../icon';
5
- import { NAVIGATOR_PRESETS, NAVIGATOR_TYPES } from '../navigator';
6
- import { isDrawerNavigatorOptions, isNavigatorScreenReference, isStackImplementationConfig, isStackScreenOptions, isTabsImplementationConfig, } from './navigatorOptions';
4
+ import { isIconSpec } from '../icon.js';
5
+ import { NAVIGATOR_PRESETS, NAVIGATOR_TYPES } from '../navigator.js';
6
+ import { isDrawerNavigatorOptions, isNavigatorScreenReference, isStackImplementationConfig, isStackScreenOptions, isTabsImplementationConfig, } from './navigatorOptions.js';
7
7
  /*** Validate the complete serialized `AppManifest.navigator` slice. */
8
8
  export function isAppNavigatorManifest(value) {
9
9
  return (isRecord(value) &&
@@ -1 +1 @@
1
- {"version":3,"file":"navigator.js","sourceRoot":"","sources":["../../src/appManifest/navigator.ts"],"names":[],"mappings":"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","sourcesContent":["import { isStringArray } from '@ankhorage/utility/array';\nimport { hasOnlyKeys, isRecord } from '@ankhorage/utility/object';\nimport { isOptionalString } from '@ankhorage/utility/string';\n\nimport { isIconSpec } from '../icon';\nimport { type AppNavigatorManifest, NAVIGATOR_PRESETS, NAVIGATOR_TYPES } from '../navigator';\nimport {\n isDrawerNavigatorOptions,\n isNavigatorScreenReference,\n isStackImplementationConfig,\n isStackScreenOptions,\n isTabsImplementationConfig,\n} from './navigatorOptions';\n\n/*** Validate the complete serialized `AppManifest.navigator` slice. */\nexport function isAppNavigatorManifest(value: unknown): value is AppNavigatorManifest {\n return (\n isRecord(value) &&\n isNavigatorNode(value) &&\n (value.preset === undefined ||\n (typeof value.preset === 'string' && hasNavigatorPreset(value.preset))) &&\n value.flows === undefined &&\n (value.defaults === undefined || isNavigatorDefaults(value.defaults)) &&\n (value.platforms === undefined || isNavigatorPlatforms(value.platforms))\n );\n}\n\n/*** Validate one nested navigator node independently from app-level authoring metadata. */\nfunction isNavigatorNode(value: unknown): boolean {\n if (\n !isRecord(value) ||\n typeof value.type !== 'string' ||\n !hasNavigatorType(value.type) ||\n !isOptionalString(value.initialRouteName) ||\n !Array.isArray(value.routes) ||\n !value.routes.every(isRouteDefinition)\n ) {\n return false;\n }\n\n switch (value.type) {\n case 'slot':\n return value.options === undefined && value.implementation === undefined;\n case 'stack':\n return isStackImplementationConfig(value);\n case 'tabs':\n return isTabsImplementationConfig(value);\n case 'drawer':\n return (\n value.implementation === undefined &&\n (value.options === undefined || isDrawerNavigatorOptions(value.options))\n );\n case 'split-view':\n return isSplitViewNavigatorNode(value);\n case 'custom':\n return isCustomNavigatorNode(value);\n default:\n return false;\n }\n}\n\n/*** Check a serialized preset against the public contract without eager cyclic initialization. */\nfunction hasNavigatorPreset(value: string): boolean {\n return (NAVIGATOR_PRESETS as readonly string[]).includes(value);\n}\n\n/*** Check a serialized topology against the public contract without eager cyclic initialization. */\nfunction hasNavigatorType(value: string): boolean {\n return (NAVIGATOR_TYPES as readonly string[]).includes(value);\n}\n\n/*** Validate one route and preserve its portable metadata and nested navigator. */\nfunction isRouteDefinition(value: unknown): boolean {\n return (\n isRecord(value) &&\n typeof value.name === 'string' &&\n [value.path, value.expoRouterPath, value.label, value.screenId].every(isOptionalString) &&\n (value.icon === undefined || isIconSpec(value.icon)) &&\n (value.showInPrimaryNavigation === undefined ||\n typeof value.showInPrimaryNavigation === 'boolean') &&\n (value.guards === undefined || isStringArray(value.guards)) &&\n (value.stackOptions === undefined || isStackScreenOptions(value.stackOptions)) &&\n (value.navigator === undefined || isNavigatorNode(value.navigator))\n );\n}\n\n/*** Validate Split View screen references without duplicating the routed secondary tree. */\nfunction isSplitViewNavigatorNode(value: Record<string, unknown>): boolean {\n return (\n value.implementation === undefined &&\n value.options === undefined &&\n isRecord(value.columns) &&\n hasOnlyKeys(value.columns, ['primary', 'supplementary']) &&\n isNavigatorScreenReference(value.columns.primary) &&\n (value.columns.supplementary === undefined ||\n isNavigatorScreenReference(value.columns.supplementary)) &&\n (value.inspector === undefined || isNavigatorScreenReference(value.inspector)) &&\n (value.topColumnForCollapsing === undefined ||\n value.topColumnForCollapsing === 'primary' ||\n value.topColumnForCollapsing === 'supplementary' ||\n value.topColumnForCollapsing === 'secondary')\n );\n}\n\n/*** Validate a registered custom navigator with JSON-safe configuration only. */\nfunction isCustomNavigatorNode(value: Record<string, unknown>): boolean {\n return (\n value.implementation === undefined &&\n value.options === undefined &&\n typeof value.navigatorId === 'string' &&\n (value.config === undefined || isNavigatorJsonRecord(value.config))\n );\n}\n\n/*** Validate an acyclic, finite JSON object used by a custom navigator adapter. */\nfunction isNavigatorJsonRecord(value: unknown): boolean {\n return isRecord(value) && isNavigatorJsonValue(value, new Set<object>());\n}\n\n/*** Recursively validate the portable manifest value domain and reject cycles. */\nfunction isNavigatorJsonValue(value: unknown, ancestors: Set<object>): boolean {\n if (value === null || typeof value === 'string' || typeof value === 'boolean') return true;\n if (typeof value === 'number') return Number.isFinite(value);\n if (typeof value !== 'object' || ancestors.has(value)) return false;\n\n if (Array.isArray(value)) {\n if (\n Object.keys(value).length !== value.length ||\n Object.getOwnPropertySymbols(value).length > 0\n ) {\n return false;\n }\n } else {\n const prototype = Object.getPrototypeOf(value) as object | null;\n if (prototype !== Object.prototype && prototype !== null) return false;\n if (Reflect.ownKeys(value).some((key) => typeof key !== 'string')) return false;\n }\n\n ancestors.add(value);\n const isValid = Object.values(value).every((entry) => isNavigatorJsonValue(entry, ancestors));\n ancestors.delete(value);\n return isValid;\n}\n\n/*** Validate package-owned navigator defaults without requiring a navigator node type. */\nfunction isNavigatorDefaults(value: unknown): boolean {\n return (\n isRecord(value) &&\n hasOnlyKeys(value, ['tabs', 'stack']) &&\n (value.tabs === undefined ||\n (isRecord(value.tabs) && isTabsImplementationConfig(value.tabs))) &&\n (value.stack === undefined ||\n (isRecord(value.stack) && isStackImplementationConfig(value.stack)))\n );\n}\n\n/*** Validate per-platform navigator implementation overrides. */\nfunction isNavigatorPlatforms(value: unknown): boolean {\n return (\n isRecord(value) &&\n hasOnlyKeys(value, ['android', 'ios', 'web']) &&\n (value.android === undefined || isNavigatorPlatformConfig(value.android)) &&\n (value.ios === undefined || isNavigatorPlatformConfig(value.ios)) &&\n (value.web === undefined || isNavigatorPlatformConfig(value.web))\n );\n}\n\n/*** Validate one platform-specific navigator override slice. */\nfunction isNavigatorPlatformConfig(value: unknown): boolean {\n return (\n isRecord(value) &&\n hasOnlyKeys(value, ['tabs', 'stack']) &&\n (value.tabs === undefined ||\n (isRecord(value.tabs) && isTabsImplementationConfig(value.tabs))) &&\n (value.stack === undefined ||\n (isRecord(value.stack) && isStackImplementationConfig(value.stack)))\n );\n}\n"]}
1
+ {"version":3,"file":"navigator.js","sourceRoot":"","sources":["../../src/appManifest/navigator.ts"],"names":[],"mappings":"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","sourcesContent":["import { isStringArray } from '@ankhorage/utility/array';\nimport { hasOnlyKeys, isRecord } from '@ankhorage/utility/object';\nimport { isOptionalString } from '@ankhorage/utility/string';\n\nimport { isIconSpec } from '../icon.js';\nimport { type AppNavigatorManifest, NAVIGATOR_PRESETS, NAVIGATOR_TYPES } from '../navigator.js';\nimport {\n isDrawerNavigatorOptions,\n isNavigatorScreenReference,\n isStackImplementationConfig,\n isStackScreenOptions,\n isTabsImplementationConfig,\n} from './navigatorOptions.js';\n\n/*** Validate the complete serialized `AppManifest.navigator` slice. */\nexport function isAppNavigatorManifest(value: unknown): value is AppNavigatorManifest {\n return (\n isRecord(value) &&\n isNavigatorNode(value) &&\n (value.preset === undefined ||\n (typeof value.preset === 'string' && hasNavigatorPreset(value.preset))) &&\n value.flows === undefined &&\n (value.defaults === undefined || isNavigatorDefaults(value.defaults)) &&\n (value.platforms === undefined || isNavigatorPlatforms(value.platforms))\n );\n}\n\n/*** Validate one nested navigator node independently from app-level authoring metadata. */\nfunction isNavigatorNode(value: unknown): boolean {\n if (\n !isRecord(value) ||\n typeof value.type !== 'string' ||\n !hasNavigatorType(value.type) ||\n !isOptionalString(value.initialRouteName) ||\n !Array.isArray(value.routes) ||\n !value.routes.every(isRouteDefinition)\n ) {\n return false;\n }\n\n switch (value.type) {\n case 'slot':\n return value.options === undefined && value.implementation === undefined;\n case 'stack':\n return isStackImplementationConfig(value);\n case 'tabs':\n return isTabsImplementationConfig(value);\n case 'drawer':\n return (\n value.implementation === undefined &&\n (value.options === undefined || isDrawerNavigatorOptions(value.options))\n );\n case 'split-view':\n return isSplitViewNavigatorNode(value);\n case 'custom':\n return isCustomNavigatorNode(value);\n default:\n return false;\n }\n}\n\n/*** Check a serialized preset against the public contract without eager cyclic initialization. */\nfunction hasNavigatorPreset(value: string): boolean {\n return (NAVIGATOR_PRESETS as readonly string[]).includes(value);\n}\n\n/*** Check a serialized topology against the public contract without eager cyclic initialization. */\nfunction hasNavigatorType(value: string): boolean {\n return (NAVIGATOR_TYPES as readonly string[]).includes(value);\n}\n\n/*** Validate one route and preserve its portable metadata and nested navigator. */\nfunction isRouteDefinition(value: unknown): boolean {\n return (\n isRecord(value) &&\n typeof value.name === 'string' &&\n [value.path, value.expoRouterPath, value.label, value.screenId].every(isOptionalString) &&\n (value.icon === undefined || isIconSpec(value.icon)) &&\n (value.showInPrimaryNavigation === undefined ||\n typeof value.showInPrimaryNavigation === 'boolean') &&\n (value.guards === undefined || isStringArray(value.guards)) &&\n (value.stackOptions === undefined || isStackScreenOptions(value.stackOptions)) &&\n (value.navigator === undefined || isNavigatorNode(value.navigator))\n );\n}\n\n/*** Validate Split View screen references without duplicating the routed secondary tree. */\nfunction isSplitViewNavigatorNode(value: Record<string, unknown>): boolean {\n return (\n value.implementation === undefined &&\n value.options === undefined &&\n isRecord(value.columns) &&\n hasOnlyKeys(value.columns, ['primary', 'supplementary']) &&\n isNavigatorScreenReference(value.columns.primary) &&\n (value.columns.supplementary === undefined ||\n isNavigatorScreenReference(value.columns.supplementary)) &&\n (value.inspector === undefined || isNavigatorScreenReference(value.inspector)) &&\n (value.topColumnForCollapsing === undefined ||\n value.topColumnForCollapsing === 'primary' ||\n value.topColumnForCollapsing === 'supplementary' ||\n value.topColumnForCollapsing === 'secondary')\n );\n}\n\n/*** Validate a registered custom navigator with JSON-safe configuration only. */\nfunction isCustomNavigatorNode(value: Record<string, unknown>): boolean {\n return (\n value.implementation === undefined &&\n value.options === undefined &&\n typeof value.navigatorId === 'string' &&\n (value.config === undefined || isNavigatorJsonRecord(value.config))\n );\n}\n\n/*** Validate an acyclic, finite JSON object used by a custom navigator adapter. */\nfunction isNavigatorJsonRecord(value: unknown): boolean {\n return isRecord(value) && isNavigatorJsonValue(value, new Set<object>());\n}\n\n/*** Recursively validate the portable manifest value domain and reject cycles. */\nfunction isNavigatorJsonValue(value: unknown, ancestors: Set<object>): boolean {\n if (value === null || typeof value === 'string' || typeof value === 'boolean') return true;\n if (typeof value === 'number') return Number.isFinite(value);\n if (typeof value !== 'object' || ancestors.has(value)) return false;\n\n if (Array.isArray(value)) {\n if (\n Object.keys(value).length !== value.length ||\n Object.getOwnPropertySymbols(value).length > 0\n ) {\n return false;\n }\n } else {\n const prototype = Object.getPrototypeOf(value) as object | null;\n if (prototype !== Object.prototype && prototype !== null) return false;\n if (Reflect.ownKeys(value).some((key) => typeof key !== 'string')) return false;\n }\n\n ancestors.add(value);\n const isValid = Object.values(value).every((entry) => isNavigatorJsonValue(entry, ancestors));\n ancestors.delete(value);\n return isValid;\n}\n\n/*** Validate package-owned navigator defaults without requiring a navigator node type. */\nfunction isNavigatorDefaults(value: unknown): boolean {\n return (\n isRecord(value) &&\n hasOnlyKeys(value, ['tabs', 'stack']) &&\n (value.tabs === undefined ||\n (isRecord(value.tabs) && isTabsImplementationConfig(value.tabs))) &&\n (value.stack === undefined ||\n (isRecord(value.stack) && isStackImplementationConfig(value.stack)))\n );\n}\n\n/*** Validate per-platform navigator implementation overrides. */\nfunction isNavigatorPlatforms(value: unknown): boolean {\n return (\n isRecord(value) &&\n hasOnlyKeys(value, ['android', 'ios', 'web']) &&\n (value.android === undefined || isNavigatorPlatformConfig(value.android)) &&\n (value.ios === undefined || isNavigatorPlatformConfig(value.ios)) &&\n (value.web === undefined || isNavigatorPlatformConfig(value.web))\n );\n}\n\n/*** Validate one platform-specific navigator override slice. */\nfunction isNavigatorPlatformConfig(value: unknown): boolean {\n return (\n isRecord(value) &&\n hasOnlyKeys(value, ['tabs', 'stack']) &&\n (value.tabs === undefined ||\n (isRecord(value.tabs) && isTabsImplementationConfig(value.tabs))) &&\n (value.stack === undefined ||\n (isRecord(value.stack) && isStackImplementationConfig(value.stack)))\n );\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  import { hasOnlyKeys, isRecord } from '@ankhorage/utility/object';
2
2
  import { isOptionalString } from '@ankhorage/utility/string';
3
- import { DRAWER_POSITIONS, DRAWER_TYPES, FIXED_HEADLESS_TABS_PRESENTATIONS, HEADLESS_TABS_PRESENTATIONS, JAVASCRIPT_STACK_PRESENTATIONS, JAVASCRIPT_TABS_PRESENTATIONS, NATIVE_TABS_MINIMIZE_BEHAVIORS, STACK_PRESENTATIONS, } from '../navigator';
3
+ import { DRAWER_POSITIONS, DRAWER_TYPES, FIXED_HEADLESS_TABS_PRESENTATIONS, HEADLESS_TABS_PRESENTATIONS, JAVASCRIPT_STACK_PRESENTATIONS, JAVASCRIPT_TABS_PRESENTATIONS, NATIVE_TABS_MINIMIZE_BEHAVIORS, STACK_PRESENTATIONS, } from '../navigator.js';
4
4
  /*** Validate stable native, JavaScript, or alpha Experimental Stack desired state. */
5
5
  export function isStackImplementationConfig(value) {
6
6
  if (!hasNoDefinedKeys(value, [
@@ -1 +1 @@
1
- {"version":3,"file":"navigatorOptions.js","sourceRoot":"","sources":["../../src/appManifest/navigatorOptions.ts"],"names":[],"mappings":"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","sourcesContent":["import { hasOnlyKeys, isRecord } from '@ankhorage/utility/object';\nimport { isOptionalString } from '@ankhorage/utility/string';\n\nimport {\n DRAWER_POSITIONS,\n DRAWER_TYPES,\n FIXED_HEADLESS_TABS_PRESENTATIONS,\n HEADLESS_TABS_PRESENTATIONS,\n JAVASCRIPT_STACK_PRESENTATIONS,\n JAVASCRIPT_TABS_PRESENTATIONS,\n NATIVE_TABS_MINIMIZE_BEHAVIORS,\n STACK_PRESENTATIONS,\n} from '../navigator';\n\n/*** Validate stable native, JavaScript, or alpha Experimental Stack desired state. */\nexport function isStackImplementationConfig(value: Record<string, unknown>): boolean {\n if (\n !hasNoDefinedKeys(value, [\n 'native',\n 'web',\n 'presentation',\n 'responsive',\n 'customPresentationId',\n 'minimizeBehavior',\n 'bottomAccessory',\n ])\n ) {\n return false;\n }\n if (value.implementation === undefined || value.implementation === 'native') {\n return value.options === undefined || isStackScreenOptions(value.options);\n }\n if (value.implementation === 'javascript') {\n return value.options === undefined || isJavaScriptStackScreenOptions(value.options);\n }\n return (\n value.implementation === 'experimental' &&\n (value.options === undefined || isStackHeaderOptions(value.options))\n );\n}\n\n/*** Validate the serializable native-stack screen option subset. */\nexport function isStackScreenOptions(value: unknown): boolean {\n if (\n !isRecord(value) ||\n !hasOnlyKeys(value, [\n 'title',\n 'headerShown',\n 'headerTransparent',\n 'headerBackVisible',\n 'presentation',\n 'sheetAllowedDetents',\n 'sheetGrabberVisible',\n ]) ||\n !isStackHeaderOptionsShape(value) ||\n (value.presentation !== undefined &&\n (typeof value.presentation !== 'string' ||\n !contains(STACK_PRESENTATIONS, value.presentation)))\n ) {\n return false;\n }\n\n if (value.presentation !== 'formSheet') {\n return value.sheetAllowedDetents === undefined && value.sheetGrabberVisible === undefined;\n }\n return (\n (value.sheetAllowedDetents === undefined || isSheetAllowedDetents(value.sheetAllowedDetents)) &&\n (value.sheetGrabberVisible === undefined || typeof value.sheetGrabberVisible === 'boolean')\n );\n}\n\n/*** Validate the finite serializable Drawer option subset. */\nexport function isDrawerNavigatorOptions(value: unknown): boolean {\n return (\n isRecord(value) &&\n hasOnlyKeys(value, ['drawerPosition', 'drawerType', 'swipeEnabled', 'headerShown']) &&\n (value.drawerPosition === undefined ||\n (typeof value.drawerPosition === 'string' &&\n contains(DRAWER_POSITIONS, value.drawerPosition))) &&\n (value.drawerType === undefined ||\n (typeof value.drawerType === 'string' && contains(DRAWER_TYPES, value.drawerType))) &&\n (value.swipeEnabled === undefined || typeof value.swipeEnabled === 'boolean') &&\n (value.headerShown === undefined || typeof value.headerShown === 'boolean')\n );\n}\n\n/*** Validate tabs implementation desired state, with omitted implementation meaning adaptive. */\nexport function isTabsImplementationConfig(value: Record<string, unknown>): boolean {\n if (value.implementation === undefined || value.implementation === 'adaptive') {\n return isAdaptiveTabsConfig(value);\n }\n if (value.implementation === 'native') return isFullNativeTabsConfig(value);\n if (value.implementation === 'javascript') return isJavaScriptTabsConfig(value);\n return (\n value.implementation === 'headless' &&\n hasNoDefinedKeys(value, ['options', 'native', 'web', 'minimizeBehavior', 'bottomAccessory']) &&\n isHeadlessTabsPresentationConfig(value)\n );\n}\n\n/*** Validate a reference into the app-owned screen registry. */\nexport function isNavigatorScreenReference(value: unknown): boolean {\n return isRecord(value) && hasOnlyKeys(value, ['screenId']) && typeof value.screenId === 'string';\n}\n\n/*** Validate JavaScript Stack options without accepting native-only presentations. */\nfunction isJavaScriptStackScreenOptions(value: unknown): boolean {\n return (\n isRecord(value) &&\n hasOnlyKeys(value, [\n 'title',\n 'headerShown',\n 'headerTransparent',\n 'headerBackVisible',\n 'presentation',\n ]) &&\n isStackHeaderOptionsShape(value) &&\n (value.presentation === undefined ||\n (typeof value.presentation === 'string' &&\n contains(JAVASCRIPT_STACK_PRESENTATIONS, value.presentation)))\n );\n}\n\n/*** Validate the portable header subset supported by Experimental Stack. */\nfunction isStackHeaderOptions(value: unknown): boolean {\n return (\n isRecord(value) &&\n hasOnlyKeys(value, ['title', 'headerShown', 'headerTransparent', 'headerBackVisible']) &&\n isStackHeaderOptionsShape(value)\n );\n}\n\n/*** Validate shared stack header field values after branch-specific key filtering. */\nfunction isStackHeaderOptionsShape(value: Record<string, unknown>): boolean {\n return (\n isOptionalString(value.title) &&\n (value.headerShown === undefined || typeof value.headerShown === 'boolean') &&\n (value.headerTransparent === undefined || typeof value.headerTransparent === 'boolean') &&\n (value.headerBackVisible === undefined || typeof value.headerBackVisible === 'boolean')\n );\n}\n\n/*** Validate sorted, finite native sheet detents or the fit-to-content sentinel. */\nfunction isSheetAllowedDetents(value: unknown): boolean {\n if (value === 'fitToContents') return true;\n if (!Array.isArray(value) || value.length === 0) return false;\n return value.every(\n (detent, index) =>\n typeof detent === 'number' &&\n Number.isFinite(detent) &&\n detent > 0 &&\n detent <= 1 &&\n (index === 0 || detent > value[index - 1]),\n );\n}\n\n/*** Validate an adaptive tabs branch and reject implementation-specific conflicts. */\nfunction isAdaptiveTabsConfig(value: Record<string, unknown>): boolean {\n return (\n hasNoDefinedKeys(value, [\n 'options',\n 'presentation',\n 'responsive',\n 'customPresentationId',\n 'minimizeBehavior',\n 'bottomAccessory',\n ]) &&\n (value.native === undefined || isNativeTabsConfig(value.native)) &&\n (value.web === undefined || isHeadlessTabsWebConfig(value.web))\n );\n}\n\n/*** Validate the top-level native tabs implementation. */\nfunction isFullNativeTabsConfig(value: Record<string, unknown>): boolean {\n return (\n hasNoDefinedKeys(value, [\n 'options',\n 'native',\n 'web',\n 'presentation',\n 'responsive',\n 'customPresentationId',\n ]) && isNativeTabsFields(value)\n );\n}\n\n/*** Validate the top-level JavaScript tabs implementation. */\nfunction isJavaScriptTabsConfig(value: Record<string, unknown>): boolean {\n return (\n hasNoDefinedKeys(value, [\n 'options',\n 'native',\n 'web',\n 'responsive',\n 'customPresentationId',\n 'minimizeBehavior',\n 'bottomAccessory',\n ]) &&\n (value.presentation === undefined ||\n (typeof value.presentation === 'string' &&\n contains(JAVASCRIPT_TABS_PRESENTATIONS, value.presentation)))\n );\n}\n\n/*** Validate the native branch used by adaptive tabs. */\nfunction isNativeTabsConfig(value: unknown): boolean {\n return (\n isRecord(value) &&\n hasOnlyKeys(value, ['implementation', 'minimizeBehavior', 'bottomAccessory']) &&\n value.implementation === 'native' &&\n isNativeTabsFields(value)\n );\n}\n\n/*** Validate fields supported by the native tabs branch. */\nfunction isNativeTabsFields(value: Record<string, unknown>): boolean {\n return (\n (value.minimizeBehavior === undefined ||\n (typeof value.minimizeBehavior === 'string' &&\n contains(NATIVE_TABS_MINIMIZE_BEHAVIORS, value.minimizeBehavior))) &&\n (value.bottomAccessory === undefined || isNavigatorScreenReference(value.bottomAccessory))\n );\n}\n\n/*** Validate the implementation-free headless-tabs Web branch inside adaptive tabs. */\nfunction isHeadlessTabsWebConfig(value: unknown): boolean {\n return (\n isRecord(value) &&\n hasOnlyKeys(value, ['presentation', 'responsive', 'customPresentationId']) &&\n isHeadlessTabsPresentationConfig(value)\n );\n}\n\n/*** Validate headless-tab presentation and its conditional serializable configuration. */\nfunction isHeadlessTabsPresentationConfig(value: Record<string, unknown>): boolean {\n if (\n typeof value.presentation !== 'string' ||\n !contains(HEADLESS_TABS_PRESENTATIONS, value.presentation)\n ) {\n return false;\n }\n if (value.responsive !== undefined && !isResponsiveTabsPresentation(value.responsive)) {\n return false;\n }\n if (!isOptionalString(value.customPresentationId)) return false;\n if (contains(FIXED_HEADLESS_TABS_PRESENTATIONS, value.presentation)) {\n return value.responsive === undefined && value.customPresentationId === undefined;\n }\n if (value.presentation === 'responsive') {\n return value.responsive !== undefined && value.customPresentationId === undefined;\n }\n return (\n value.responsive === undefined &&\n typeof value.customPresentationId === 'string' &&\n value.customPresentationId.length > 0\n );\n}\n\n/*** Validate semantic compact/medium/expanded headless-tab presentation mapping. */\nfunction isResponsiveTabsPresentation(value: unknown): boolean {\n return (\n isRecord(value) &&\n hasOnlyKeys(value, ['compact', 'medium', 'expanded']) &&\n typeof value.compact === 'string' &&\n contains(FIXED_HEADLESS_TABS_PRESENTATIONS, value.compact) &&\n (value.medium === undefined ||\n (typeof value.medium === 'string' &&\n contains(FIXED_HEADLESS_TABS_PRESENTATIONS, value.medium))) &&\n typeof value.expanded === 'string' &&\n contains(FIXED_HEADLESS_TABS_PRESENTATIONS, value.expanded)\n );\n}\n\n/*** Check a string against a public finite contract without eager cyclic initialization. */\nfunction contains(values: readonly string[], value: string): boolean {\n return values.includes(value);\n}\n\n/*** Check that mutually exclusive branch fields are absent. */\nfunction hasNoDefinedKeys(value: Record<string, unknown>, keys: readonly string[]): boolean {\n const prohibited = new Set(keys);\n return !Object.entries(value).some(([key, entry]) => prohibited.has(key) && entry !== undefined);\n}\n"]}
1
+ {"version":3,"file":"navigatorOptions.js","sourceRoot":"","sources":["../../src/appManifest/navigatorOptions.ts"],"names":[],"mappings":"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","sourcesContent":["import { hasOnlyKeys, isRecord } from '@ankhorage/utility/object';\nimport { isOptionalString } from '@ankhorage/utility/string';\n\nimport {\n DRAWER_POSITIONS,\n DRAWER_TYPES,\n FIXED_HEADLESS_TABS_PRESENTATIONS,\n HEADLESS_TABS_PRESENTATIONS,\n JAVASCRIPT_STACK_PRESENTATIONS,\n JAVASCRIPT_TABS_PRESENTATIONS,\n NATIVE_TABS_MINIMIZE_BEHAVIORS,\n STACK_PRESENTATIONS,\n} from '../navigator.js';\n\n/*** Validate stable native, JavaScript, or alpha Experimental Stack desired state. */\nexport function isStackImplementationConfig(value: Record<string, unknown>): boolean {\n if (\n !hasNoDefinedKeys(value, [\n 'native',\n 'web',\n 'presentation',\n 'responsive',\n 'customPresentationId',\n 'minimizeBehavior',\n 'bottomAccessory',\n ])\n ) {\n return false;\n }\n if (value.implementation === undefined || value.implementation === 'native') {\n return value.options === undefined || isStackScreenOptions(value.options);\n }\n if (value.implementation === 'javascript') {\n return value.options === undefined || isJavaScriptStackScreenOptions(value.options);\n }\n return (\n value.implementation === 'experimental' &&\n (value.options === undefined || isStackHeaderOptions(value.options))\n );\n}\n\n/*** Validate the serializable native-stack screen option subset. */\nexport function isStackScreenOptions(value: unknown): boolean {\n if (\n !isRecord(value) ||\n !hasOnlyKeys(value, [\n 'title',\n 'headerShown',\n 'headerTransparent',\n 'headerBackVisible',\n 'presentation',\n 'sheetAllowedDetents',\n 'sheetGrabberVisible',\n ]) ||\n !isStackHeaderOptionsShape(value) ||\n (value.presentation !== undefined &&\n (typeof value.presentation !== 'string' ||\n !contains(STACK_PRESENTATIONS, value.presentation)))\n ) {\n return false;\n }\n\n if (value.presentation !== 'formSheet') {\n return value.sheetAllowedDetents === undefined && value.sheetGrabberVisible === undefined;\n }\n return (\n (value.sheetAllowedDetents === undefined || isSheetAllowedDetents(value.sheetAllowedDetents)) &&\n (value.sheetGrabberVisible === undefined || typeof value.sheetGrabberVisible === 'boolean')\n );\n}\n\n/*** Validate the finite serializable Drawer option subset. */\nexport function isDrawerNavigatorOptions(value: unknown): boolean {\n return (\n isRecord(value) &&\n hasOnlyKeys(value, ['drawerPosition', 'drawerType', 'swipeEnabled', 'headerShown']) &&\n (value.drawerPosition === undefined ||\n (typeof value.drawerPosition === 'string' &&\n contains(DRAWER_POSITIONS, value.drawerPosition))) &&\n (value.drawerType === undefined ||\n (typeof value.drawerType === 'string' && contains(DRAWER_TYPES, value.drawerType))) &&\n (value.swipeEnabled === undefined || typeof value.swipeEnabled === 'boolean') &&\n (value.headerShown === undefined || typeof value.headerShown === 'boolean')\n );\n}\n\n/*** Validate tabs implementation desired state, with omitted implementation meaning adaptive. */\nexport function isTabsImplementationConfig(value: Record<string, unknown>): boolean {\n if (value.implementation === undefined || value.implementation === 'adaptive') {\n return isAdaptiveTabsConfig(value);\n }\n if (value.implementation === 'native') return isFullNativeTabsConfig(value);\n if (value.implementation === 'javascript') return isJavaScriptTabsConfig(value);\n return (\n value.implementation === 'headless' &&\n hasNoDefinedKeys(value, ['options', 'native', 'web', 'minimizeBehavior', 'bottomAccessory']) &&\n isHeadlessTabsPresentationConfig(value)\n );\n}\n\n/*** Validate a reference into the app-owned screen registry. */\nexport function isNavigatorScreenReference(value: unknown): boolean {\n return isRecord(value) && hasOnlyKeys(value, ['screenId']) && typeof value.screenId === 'string';\n}\n\n/*** Validate JavaScript Stack options without accepting native-only presentations. */\nfunction isJavaScriptStackScreenOptions(value: unknown): boolean {\n return (\n isRecord(value) &&\n hasOnlyKeys(value, [\n 'title',\n 'headerShown',\n 'headerTransparent',\n 'headerBackVisible',\n 'presentation',\n ]) &&\n isStackHeaderOptionsShape(value) &&\n (value.presentation === undefined ||\n (typeof value.presentation === 'string' &&\n contains(JAVASCRIPT_STACK_PRESENTATIONS, value.presentation)))\n );\n}\n\n/*** Validate the portable header subset supported by Experimental Stack. */\nfunction isStackHeaderOptions(value: unknown): boolean {\n return (\n isRecord(value) &&\n hasOnlyKeys(value, ['title', 'headerShown', 'headerTransparent', 'headerBackVisible']) &&\n isStackHeaderOptionsShape(value)\n );\n}\n\n/*** Validate shared stack header field values after branch-specific key filtering. */\nfunction isStackHeaderOptionsShape(value: Record<string, unknown>): boolean {\n return (\n isOptionalString(value.title) &&\n (value.headerShown === undefined || typeof value.headerShown === 'boolean') &&\n (value.headerTransparent === undefined || typeof value.headerTransparent === 'boolean') &&\n (value.headerBackVisible === undefined || typeof value.headerBackVisible === 'boolean')\n );\n}\n\n/*** Validate sorted, finite native sheet detents or the fit-to-content sentinel. */\nfunction isSheetAllowedDetents(value: unknown): boolean {\n if (value === 'fitToContents') return true;\n if (!Array.isArray(value) || value.length === 0) return false;\n return value.every(\n (detent, index) =>\n typeof detent === 'number' &&\n Number.isFinite(detent) &&\n detent > 0 &&\n detent <= 1 &&\n (index === 0 || detent > value[index - 1]),\n );\n}\n\n/*** Validate an adaptive tabs branch and reject implementation-specific conflicts. */\nfunction isAdaptiveTabsConfig(value: Record<string, unknown>): boolean {\n return (\n hasNoDefinedKeys(value, [\n 'options',\n 'presentation',\n 'responsive',\n 'customPresentationId',\n 'minimizeBehavior',\n 'bottomAccessory',\n ]) &&\n (value.native === undefined || isNativeTabsConfig(value.native)) &&\n (value.web === undefined || isHeadlessTabsWebConfig(value.web))\n );\n}\n\n/*** Validate the top-level native tabs implementation. */\nfunction isFullNativeTabsConfig(value: Record<string, unknown>): boolean {\n return (\n hasNoDefinedKeys(value, [\n 'options',\n 'native',\n 'web',\n 'presentation',\n 'responsive',\n 'customPresentationId',\n ]) && isNativeTabsFields(value)\n );\n}\n\n/*** Validate the top-level JavaScript tabs implementation. */\nfunction isJavaScriptTabsConfig(value: Record<string, unknown>): boolean {\n return (\n hasNoDefinedKeys(value, [\n 'options',\n 'native',\n 'web',\n 'responsive',\n 'customPresentationId',\n 'minimizeBehavior',\n 'bottomAccessory',\n ]) &&\n (value.presentation === undefined ||\n (typeof value.presentation === 'string' &&\n contains(JAVASCRIPT_TABS_PRESENTATIONS, value.presentation)))\n );\n}\n\n/*** Validate the native branch used by adaptive tabs. */\nfunction isNativeTabsConfig(value: unknown): boolean {\n return (\n isRecord(value) &&\n hasOnlyKeys(value, ['implementation', 'minimizeBehavior', 'bottomAccessory']) &&\n value.implementation === 'native' &&\n isNativeTabsFields(value)\n );\n}\n\n/*** Validate fields supported by the native tabs branch. */\nfunction isNativeTabsFields(value: Record<string, unknown>): boolean {\n return (\n (value.minimizeBehavior === undefined ||\n (typeof value.minimizeBehavior === 'string' &&\n contains(NATIVE_TABS_MINIMIZE_BEHAVIORS, value.minimizeBehavior))) &&\n (value.bottomAccessory === undefined || isNavigatorScreenReference(value.bottomAccessory))\n );\n}\n\n/*** Validate the implementation-free headless-tabs Web branch inside adaptive tabs. */\nfunction isHeadlessTabsWebConfig(value: unknown): boolean {\n return (\n isRecord(value) &&\n hasOnlyKeys(value, ['presentation', 'responsive', 'customPresentationId']) &&\n isHeadlessTabsPresentationConfig(value)\n );\n}\n\n/*** Validate headless-tab presentation and its conditional serializable configuration. */\nfunction isHeadlessTabsPresentationConfig(value: Record<string, unknown>): boolean {\n if (\n typeof value.presentation !== 'string' ||\n !contains(HEADLESS_TABS_PRESENTATIONS, value.presentation)\n ) {\n return false;\n }\n if (value.responsive !== undefined && !isResponsiveTabsPresentation(value.responsive)) {\n return false;\n }\n if (!isOptionalString(value.customPresentationId)) return false;\n if (contains(FIXED_HEADLESS_TABS_PRESENTATIONS, value.presentation)) {\n return value.responsive === undefined && value.customPresentationId === undefined;\n }\n if (value.presentation === 'responsive') {\n return value.responsive !== undefined && value.customPresentationId === undefined;\n }\n return (\n value.responsive === undefined &&\n typeof value.customPresentationId === 'string' &&\n value.customPresentationId.length > 0\n );\n}\n\n/*** Validate semantic compact/medium/expanded headless-tab presentation mapping. */\nfunction isResponsiveTabsPresentation(value: unknown): boolean {\n return (\n isRecord(value) &&\n hasOnlyKeys(value, ['compact', 'medium', 'expanded']) &&\n typeof value.compact === 'string' &&\n contains(FIXED_HEADLESS_TABS_PRESENTATIONS, value.compact) &&\n (value.medium === undefined ||\n (typeof value.medium === 'string' &&\n contains(FIXED_HEADLESS_TABS_PRESENTATIONS, value.medium))) &&\n typeof value.expanded === 'string' &&\n contains(FIXED_HEADLESS_TABS_PRESENTATIONS, value.expanded)\n );\n}\n\n/*** Check a string against a public finite contract without eager cyclic initialization. */\nfunction contains(values: readonly string[], value: string): boolean {\n return values.includes(value);\n}\n\n/*** Check that mutually exclusive branch fields are absent. */\nfunction hasNoDefinedKeys(value: Record<string, unknown>, keys: readonly string[]): boolean {\n const prohibited = new Set(keys);\n return !Object.entries(value).some(([key, entry]) => prohibited.has(key) && entry !== undefined);\n}\n"]}
@@ -1,4 +1,4 @@
1
- import type { AppManifestParseResult } from '../types/appManifest';
1
+ import type { AppManifestParseResult } from '../types/appManifest.js';
2
2
  /**
3
3
  * Parse unknown JSON-compatible input at the canonical AppManifest boundary.
4
4
  *
@@ -1 +1 @@
1
- {"version":3,"file":"parseAppManifest.d.ts","sourceRoot":"","sources":["../../src/appManifest/parseAppManifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAGnE;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,sBAAsB,CAIvE"}
1
+ {"version":3,"file":"parseAppManifest.d.ts","sourceRoot":"","sources":["../../src/appManifest/parseAppManifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAGtE;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,sBAAsB,CAIvE"}
@@ -1,4 +1,4 @@
1
- import { isAppManifest } from './isAppManifest';
1
+ import { isAppManifest } from './isAppManifest.js';
2
2
  /**
3
3
  * Parse unknown JSON-compatible input at the canonical AppManifest boundary.
4
4
  *
@@ -1 +1 @@
1
- {"version":3,"file":"parseAppManifest.js","sourceRoot":"","sources":["../../src/appManifest/parseAppManifest.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,OAAO,aAAa,CAAC,KAAK,CAAC;QACzB,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;QAC/B,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,uCAAuC,EAAE,CAAC;AACtE,CAAC","sourcesContent":["import type { AppManifestParseResult } from '../types/appManifest';\nimport { isAppManifest } from './isAppManifest';\n\n/**\n * Parse unknown JSON-compatible input at the canonical AppManifest boundary.\n *\n * Contracts owns structural manifest validation. Consumers may add semantic\n * diagnostics after this parser succeeds, but should not reconstruct the\n * AppManifest shape in their own packages.\n */\nexport function parseAppManifest(value: unknown): AppManifestParseResult {\n return isAppManifest(value)\n ? { ok: true, manifest: value }\n : { ok: false, message: 'Value is not a canonical AppManifest.' };\n}\n"]}
1
+ {"version":3,"file":"parseAppManifest.js","sourceRoot":"","sources":["../../src/appManifest/parseAppManifest.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,OAAO,aAAa,CAAC,KAAK,CAAC;QACzB,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;QAC/B,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,uCAAuC,EAAE,CAAC;AACtE,CAAC","sourcesContent":["import type { AppManifestParseResult } from '../types/appManifest.js';\nimport { isAppManifest } from './isAppManifest.js';\n\n/**\n * Parse unknown JSON-compatible input at the canonical AppManifest boundary.\n *\n * Contracts owns structural manifest validation. Consumers may add semantic\n * diagnostics after this parser succeeds, but should not reconstruct the\n * AppManifest shape in their own packages.\n */\nexport function parseAppManifest(value: unknown): AppManifestParseResult {\n return isAppManifest(value)\n ? { ok: true, manifest: value }\n : { ok: false, message: 'Value is not a canonical AppManifest.' };\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { type ThemeRegistry } from '../types';
2
- export { isAppNavigatorManifest } from './navigator';
1
+ import { type ThemeRegistry } from '../types.js';
2
+ export { isAppNavigatorManifest } from './navigator.js';
3
3
  /*** Validate application identity and optional authored metadata. */
4
4
  export declare function isManifestMetadata(value: unknown): boolean;
5
5
  /*** Validate themes in the authored theme registry and require registry keys to match theme identity. */
@@ -1 +1 @@
1
- {"version":3,"file":"screens.d.ts","sourceRoot":"","sources":["../../src/appManifest/screens.ts"],"names":[],"mappings":"AAOA,OAAO,EAAkB,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AAG9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAQrD,qEAAqE;AACrE,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAY1D;AAaD,yGAAyG;AACzG,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAOtE;AAED,yDAAyD;AACzD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAQxD;AAED,qEAAqE;AACrE,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAM1D"}
1
+ {"version":3,"file":"screens.d.ts","sourceRoot":"","sources":["../../src/appManifest/screens.ts"],"names":[],"mappings":"AAOA,OAAO,EAAkB,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAQxD,qEAAqE;AACrE,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAY1D;AAaD,yGAAyG;AACzG,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAOtE;AAED,yDAAyD;AACzD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAQxD;AAED,qEAAqE;AACrE,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAM1D"}
@@ -1,12 +1,12 @@
1
1
  import { COLOR_HARMONIES } from '@ankhorage/color-theory';
2
2
  import { isRecord } from '@ankhorage/utility/object';
3
3
  import { isOptionalString } from '@ankhorage/utility/string';
4
- import { isSerializableSet } from '../collections';
5
- import { isMediaAssetReference } from '../media';
6
- import { ANKHORAGE_CAPABILITY_NAMES, ANKHORAGE_PERMISSION_NAMES } from '../requirements';
7
- import { APP_CATEGORIES } from '../types';
8
- import { isBindingExpression, isScreenDataLoaderDefinition } from './bindings';
9
- export { isAppNavigatorManifest } from './navigator';
4
+ import { isSerializableSet } from '../collections.js';
5
+ import { isMediaAssetReference } from '../media.js';
6
+ import { ANKHORAGE_CAPABILITY_NAMES, ANKHORAGE_PERMISSION_NAMES } from '../requirements.js';
7
+ import { APP_CATEGORIES } from '../types.js';
8
+ import { isBindingExpression, isScreenDataLoaderDefinition } from './bindings.js';
9
+ export { isAppNavigatorManifest } from './navigator.js';
10
10
  const APP_CATEGORY_SET = new Set(APP_CATEGORIES);
11
11
  const COLOR_HARMONY_SET = new Set(COLOR_HARMONIES);
12
12
  const SPLASH_SCREEN_RESIZE_MODE_SET = new Set(['contain', 'cover', 'native']);