@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/src/icon.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { isRecord } from '@ankhorage/utility/object';
2
2
  import { isOptionalString } from '@ankhorage/utility/string';
3
3
 
4
- import { isMediaAssetReference } from './media';
4
+ import { isMediaAssetReference } from './media.js';
5
5
 
6
6
  /*** Validate a serializable icon as either a named font glyph or an SVG media reference. */
7
7
  export function isIconSpec(value: unknown): boolean {
package/src/index.ts CHANGED
@@ -1,24 +1,25 @@
1
- export * from './appManifest';
2
- export * from './auth';
3
- export * from './bindings';
4
- export * from './cli';
5
- export * from './collections';
6
- export * from './data';
7
- export * from './db';
8
- export * from './deploy';
9
- export * from './deployProvider';
10
- export * from './environments';
11
- export * from './infra';
12
- export * from './media';
13
- export * from './navigator';
14
- export * from './repository';
15
- export * from './requirements';
16
- export * from './runtimeCallbacks';
17
- export * from './secrets';
18
- export * from './serializable';
19
- export * from './state';
20
- export * from './storage';
21
- export * from './structure';
22
- export * from './theme';
23
- export * from './types';
24
- export * from './ui';
1
+ export * from './ads.js';
2
+ export * from './appManifest.js';
3
+ export * from './auth.js';
4
+ export * from './bindings.js';
5
+ export * from './cli/index.js';
6
+ export * from './collections.js';
7
+ export * from './data/index.js';
8
+ export * from './db.js';
9
+ export * from './deploy.js';
10
+ export * from './deployProvider.js';
11
+ export * from './environments.js';
12
+ export * from './infra.js';
13
+ export * from './media.js';
14
+ export * from './navigator.js';
15
+ export * from './repository.js';
16
+ export * from './requirements.js';
17
+ export * from './runtimeCallbacks.js';
18
+ export * from './secrets.js';
19
+ export * from './serializable.js';
20
+ export * from './state.js';
21
+ export * from './storage.js';
22
+ export * from './structure/index.js';
23
+ export * from './theme.js';
24
+ export * from './types.js';
25
+ export * from './ui.js';
@@ -1,8 +1,8 @@
1
1
  import { isRecord } from '@ankhorage/utility/object';
2
2
 
3
- import { INFRA_ADAPTER_CATALOG } from '../infraCatalog';
4
- import type { InfraAdapterDescriptor } from '../types/infraAdapters';
5
- import { isInfraShape } from './isInfraShape';
3
+ import { INFRA_ADAPTER_CATALOG } from '../infraCatalog.js';
4
+ import type { InfraAdapterDescriptor } from '../types/infraAdapters.js';
5
+ import { isInfraShape } from './isInfraShape.js';
6
6
 
7
7
  /*** Installed adapters must match the canonical identity, capabilities, targets and config version exactly. */
8
8
  export function isInfraAdapterDescriptor(value: unknown): value is InfraAdapterDescriptor {
@@ -2,8 +2,8 @@ import { isStringArray } from '@ankhorage/utility/array';
2
2
  import { isRecordOf } from '@ankhorage/utility/object';
3
3
  import { isOptionalString } from '@ankhorage/utility/string';
4
4
 
5
- import { AUTH_OAUTH_PROVIDER_IDS } from '../auth';
6
- import { isIconSpec } from '../icon';
5
+ import { AUTH_OAUTH_PROVIDER_IDS } from '../auth.js';
6
+ import { isIconSpec } from '../icon.js';
7
7
  import {
8
8
  AUTH_PROFILE_CREATE_STRATEGIES,
9
9
  AUTH_PROFILE_PRIMARY_KEY_STRATEGIES,
@@ -11,10 +11,10 @@ import {
11
11
  AUTH_SCOPES,
12
12
  AUTH_SIGN_IN_IDENTIFIERS,
13
13
  AUTH_SIGN_UP_POLICIES,
14
- } from '../types';
15
- import type { InfraAuthSpec } from '../types/infraManifest';
16
- import type { InfraShape } from '../types/infraValidation';
17
- import { isInfraShape } from './isInfraShape';
14
+ } from '../types.js';
15
+ import type { InfraAuthSpec } from '../types/infraManifest.js';
16
+ import type { InfraShape } from '../types/infraValidation.js';
17
+ import { isInfraShape } from './isInfraShape.js';
18
18
 
19
19
  /*** Preserve application auth configuration while rejecting nested authorization and unknown providers. */
20
20
  export function isInfraAuthSpec(value: unknown): value is InfraAuthSpec {
@@ -1,6 +1,6 @@
1
1
  import { isNonEmptyString } from '@ankhorage/utility/string';
2
2
 
3
- import { isInfraShape } from './isInfraShape';
3
+ import { isInfraShape } from './isInfraShape.js';
4
4
 
5
5
  /*** Bootstrap credential references are explicitly separate from managed runtime secrets. */
6
6
  export function isInfraCredentialRef(value: unknown): boolean {
@@ -1,16 +1,16 @@
1
1
  import { isRecord } from '@ankhorage/utility/object';
2
2
  import { isNonEmptyString } from '@ankhorage/utility/string';
3
3
 
4
- import { INFRA_RUNTIME_COMPATIBILITY } from '../infraCatalog';
4
+ import { INFRA_RUNTIME_COMPATIBILITY } from '../infraCatalog.js';
5
5
  import type {
6
6
  InfraComputeSelection,
7
7
  InfraDeploymentSpec,
8
8
  InfraRuntimeSelection,
9
- } from '../types/infraManifest';
10
- import type { InfraShape } from '../types/infraValidation';
11
- import { infraFields } from './infraFields';
12
- import { isInfraCredentialRef } from './isInfraCredentialRef';
13
- import { isInfraShape } from './isInfraShape';
9
+ } from '../types/infraManifest.js';
10
+ import type { InfraShape } from '../types/infraValidation.js';
11
+ import { infraFields } from './infraFields.js';
12
+ import { isInfraCredentialRef } from './isInfraCredentialRef.js';
13
+ import { isInfraShape } from './isInfraShape.js';
14
14
 
15
15
  /*** Validate provider-specific config and the exact same compatibility map used by TypeScript. */
16
16
  export function isInfraDeploymentSpec(value: unknown): value is InfraDeploymentSpec {
@@ -1,21 +1,21 @@
1
1
  import { isRecord } from '@ankhorage/utility/object';
2
2
  import { isNonEmptyString } from '@ankhorage/utility/string';
3
3
 
4
- import { isSerializableSet } from '../collections';
5
- import { INFRA_ADAPTER_CATALOG } from '../infraCatalog';
4
+ import { isSerializableSet } from '../collections.js';
5
+ import { INFRA_ADAPTER_CATALOG } from '../infraCatalog.js';
6
6
  import type {
7
7
  InfraEnvironmentSpec,
8
8
  InfraObjectStorageSpec,
9
9
  InfraS3PersistenceTarget,
10
10
  InfraScheduledDatabaseBackupSpec,
11
- } from '../types/infraManifest';
12
- import type { InfraShape } from '../types/infraValidation';
13
- import { infraFields } from './infraFields';
14
- import { isInfraAuthSpec } from './isInfraAuthSpec';
15
- import { isInfraCredentialRef } from './isInfraCredentialRef';
16
- import { isInfraDeploymentSpec } from './isInfraDeploymentSpec';
17
- import { isInfraShape } from './isInfraShape';
18
- import { isInfraWorkloadSpec } from './isInfraWorkloadSpec';
11
+ } from '../types/infraManifest.js';
12
+ import type { InfraShape } from '../types/infraValidation.js';
13
+ import { infraFields } from './infraFields.js';
14
+ import { isInfraAuthSpec } from './isInfraAuthSpec.js';
15
+ import { isInfraCredentialRef } from './isInfraCredentialRef.js';
16
+ import { isInfraDeploymentSpec } from './isInfraDeploymentSpec.js';
17
+ import { isInfraShape } from './isInfraShape.js';
18
+ import { isInfraWorkloadSpec } from './isInfraWorkloadSpec.js';
19
19
 
20
20
  /*** Validate sibling capabilities and their required relationships within one environment. */
21
21
  export function isInfraEnvironmentSpec(value: unknown): value is InfraEnvironmentSpec {
@@ -1,12 +1,12 @@
1
1
  import { isRecord } from '@ankhorage/utility/object';
2
2
 
3
- import { isApiDefinitionRegistry } from '../data/isApiDefinitionRegistry';
4
- import { APP_ENVIRONMENT_IDS } from '../environments';
5
- import { isSerializableValue } from '../serializable';
6
- import type { InfraManifest, InfraModuleSpec } from '../types/infraManifest';
7
- import type { InfraShape } from '../types/infraValidation';
8
- import { isInfraEnvironmentSpec } from './isInfraEnvironmentSpec';
9
- import { isInfraShape } from './isInfraShape';
3
+ import { isApiDefinitionRegistry } from '../data/isApiDefinitionRegistry.js';
4
+ import { APP_ENVIRONMENT_IDS } from '../environments.js';
5
+ import { isSerializableValue } from '../serializable.js';
6
+ import type { InfraManifest, InfraModuleSpec } from '../types/infraManifest.js';
7
+ import type { InfraShape } from '../types/infraValidation.js';
8
+ import { isInfraEnvironmentSpec } from './isInfraEnvironmentSpec.js';
9
+ import { isInfraShape } from './isInfraShape.js';
10
10
 
11
11
  /*** Validate standalone infrastructure without AppManifest, Deploy or provider package side effects. */
12
12
  export function isInfraManifest(value: unknown): value is InfraManifest {
@@ -1,7 +1,7 @@
1
1
  import { isRecord } from '@ankhorage/utility/object';
2
2
 
3
- import { infraFields } from './infraFields';
4
- import { isInfraShape } from './isInfraShape';
3
+ import { infraFields } from './infraFields.js';
4
+ import { isInfraShape } from './isInfraShape.js';
5
5
 
6
6
  /*** Validate runtime-neutral readiness probes and bounded numeric parameters. */
7
7
  export function isInfraWorkloadHealth(value: unknown): boolean {
@@ -2,13 +2,13 @@ import { isStringArray } from '@ankhorage/utility/array';
2
2
  import { isRecord } from '@ankhorage/utility/object';
3
3
  import { isNonEmptyString } from '@ankhorage/utility/string';
4
4
 
5
- import { isSerializableSet } from '../collections';
6
- import type { InfraShape } from '../types/infraValidation';
7
- import type { InfraWorkloadSpec } from '../types/infraWorkload';
8
- import { infraFields } from './infraFields';
9
- import { isInfraShape } from './isInfraShape';
10
- import { isInfraWorkloadHealth } from './isInfraWorkloadHealth';
11
- import { isInfraWorkloadValue } from './isInfraWorkloadValue';
5
+ import { isSerializableSet } from '../collections.js';
6
+ import type { InfraShape } from '../types/infraValidation.js';
7
+ import type { InfraWorkloadSpec } from '../types/infraWorkload.js';
8
+ import { infraFields } from './infraFields.js';
9
+ import { isInfraShape } from './isInfraShape.js';
10
+ import { isInfraWorkloadHealth } from './isInfraWorkloadHealth.js';
11
+ import { isInfraWorkloadValue } from './isInfraWorkloadValue.js';
12
12
 
13
13
  /*** Validate the portable desired workload; runtime-specific fields and plaintext secret objects fail. */
14
14
  export function isInfraWorkloadSpec(value: unknown): value is InfraWorkloadSpec {
@@ -1,10 +1,10 @@
1
1
  import { isRecord } from '@ankhorage/utility/object';
2
2
  import { isNonEmptyString } from '@ankhorage/utility/string';
3
3
 
4
- import { APP_ENVIRONMENT_IDS } from '../environments';
5
- import type { InfraWorkloadScalarValue } from '../types/infraWorkload';
6
- import { isInfraCredentialRef } from './isInfraCredentialRef';
7
- import { isInfraShape } from './isInfraShape';
4
+ import { APP_ENVIRONMENT_IDS } from '../environments.js';
5
+ import type { InfraWorkloadScalarValue } from '../types/infraWorkload.js';
6
+ import { isInfraCredentialRef } from './isInfraCredentialRef.js';
7
+ import { isInfraShape } from './isInfraShape.js';
8
8
 
9
9
  /*** Workload values explicitly distinguish public literals, output dependencies and secret references. */
10
10
  export function isInfraWorkloadValue(value: unknown): boolean {
@@ -1,6 +1,6 @@
1
- import type { InfraResult } from '../types/infraLifecycle';
2
- import type { InfraManifest } from '../types/infraManifest';
3
- import { isInfraManifest } from './isInfraManifest';
1
+ import type { InfraResult } from '../types/infraLifecycle.js';
2
+ import type { InfraManifest } from '../types/infraManifest.js';
3
+ import { isInfraManifest } from './isInfraManifest.js';
4
4
 
5
5
  /** Parse unknown infrastructure input; package availability and credentials are separate validation stages. */
6
6
  export function parseInfraManifest(value: unknown): InfraResult<InfraManifest> {
@@ -1,8 +1,8 @@
1
- import { INFRA_ADAPTER_CATALOG } from '../infraCatalog';
2
- import type { InfraAdapterDescriptor } from '../types/infraAdapters';
3
- import type { InfraDiagnostic, InfraResult } from '../types/infraLifecycle';
4
- import type { InfraEnvironmentSpec } from '../types/infraManifest';
5
- import { isInfraAdapterDescriptor } from './isInfraAdapterDescriptor';
1
+ import { INFRA_ADAPTER_CATALOG } from '../infraCatalog.js';
2
+ import type { InfraAdapterDescriptor } from '../types/infraAdapters.js';
3
+ import type { InfraDiagnostic, InfraResult } from '../types/infraLifecycle.js';
4
+ import type { InfraEnvironmentSpec } from '../types/infraManifest.js';
5
+ import { isInfraAdapterDescriptor } from './isInfraAdapterDescriptor.js';
6
6
 
7
7
  /** Validate supplied installed descriptors without imports or filesystem access; only selected packages matter. */
8
8
  export function validateInfraAdapterSelection(
package/src/infra.ts CHANGED
@@ -1,16 +1,16 @@
1
1
  /** Canonical standalone infrastructure contracts, catalog and side-effect-free validation. */
2
- export { isInfraAdapterDescriptor } from './infra/isInfraAdapterDescriptor';
3
- export { isInfraAuthSpec } from './infra/isInfraAuthSpec';
4
- export { isInfraDeploymentSpec } from './infra/isInfraDeploymentSpec';
5
- export { isInfraEnvironmentSpec } from './infra/isInfraEnvironmentSpec';
6
- export { isInfraManifest } from './infra/isInfraManifest';
7
- export { isInfraWorkloadSpec } from './infra/isInfraWorkloadSpec';
8
- export { parseInfraManifest } from './infra/parseInfraManifest';
9
- export { validateInfraAdapterSelection } from './infra/validateInfraAdapterSelection';
10
- export { INFRA_ADAPTER_CATALOG, INFRA_RUNTIME_COMPATIBILITY } from './infraCatalog';
11
- export type * from './types/infraAdapters';
12
- export type * from './types/infraLifecycle';
13
- export type * from './types/infraManifest';
14
- export type * from './types/infraSecrets';
15
- export type * from './types/infraTargets';
16
- export type * from './types/infraWorkload';
2
+ export { isInfraAdapterDescriptor } from './infra/isInfraAdapterDescriptor.js';
3
+ export { isInfraAuthSpec } from './infra/isInfraAuthSpec.js';
4
+ export { isInfraDeploymentSpec } from './infra/isInfraDeploymentSpec.js';
5
+ export { isInfraEnvironmentSpec } from './infra/isInfraEnvironmentSpec.js';
6
+ export { isInfraManifest } from './infra/isInfraManifest.js';
7
+ export { isInfraWorkloadSpec } from './infra/isInfraWorkloadSpec.js';
8
+ export { parseInfraManifest } from './infra/parseInfraManifest.js';
9
+ export { validateInfraAdapterSelection } from './infra/validateInfraAdapterSelection.js';
10
+ export { INFRA_ADAPTER_CATALOG, INFRA_RUNTIME_COMPATIBILITY } from './infraCatalog.js';
11
+ export type * from './types/infraAdapters.js';
12
+ export type * from './types/infraLifecycle.js';
13
+ export type * from './types/infraManifest.js';
14
+ export type * from './types/infraSecrets.js';
15
+ export type * from './types/infraTargets.js';
16
+ export type * from './types/infraWorkload.js';
@@ -0,0 +1,102 @@
1
+ import { mkdirSync, mkdtempSync, readdirSync, rmSync, writeFileSync } from 'node:fs';
2
+ import { tmpdir } from 'node:os';
3
+ import { join } from 'node:path';
4
+
5
+ import { describe, expect, it } from 'bun:test';
6
+
7
+ const packageRoot = process.cwd();
8
+ const temporaryCacheDirectory = join(tmpdir(), 'contracts-infra-consumer-cache');
9
+
10
+ const runCommand = (command: string[], cwd: string): string => {
11
+ const result = Bun.spawnSync(command, {
12
+ cwd,
13
+ env: {
14
+ ...process.env,
15
+ BUN_INSTALL_CACHE_DIR: temporaryCacheDirectory,
16
+ npm_config_cache: temporaryCacheDirectory,
17
+ },
18
+ });
19
+ const output = `${result.stdout.toString()}${result.stderr.toString()}`;
20
+
21
+ expect(result.exitCode, output).toBe(0);
22
+ return output;
23
+ };
24
+
25
+ const writeConsumerFiles = (consumerDirectory: string): void => {
26
+ writeFileSync(
27
+ join(consumerDirectory, 'consumer.mjs'),
28
+ [
29
+ "import { INFRA_ADAPTER_CATALOG, isInfraAdapterDescriptor } from '@ankhorage/contracts/infra';",
30
+ 'const descriptor = INFRA_ADAPTER_CATALOG.hetzner;',
31
+ "if (!isInfraAdapterDescriptor(descriptor) || descriptor.package !== '@ankhorage/infra-hetzner') {",
32
+ " throw new Error('published infra contract is unavailable');",
33
+ '}',
34
+ ].join('\n'),
35
+ );
36
+ writeFileSync(
37
+ join(consumerDirectory, 'consumer.ts'),
38
+ [
39
+ "import { INFRA_ADAPTER_CATALOG, isInfraAdapterDescriptor } from '@ankhorage/contracts/infra';",
40
+ 'const descriptor = INFRA_ADAPTER_CATALOG.hetzner;',
41
+ 'const isCanonicalDescriptor: boolean = isInfraAdapterDescriptor(descriptor);',
42
+ 'void isCanonicalDescriptor;',
43
+ ].join('\n'),
44
+ );
45
+ };
46
+
47
+ const packAndInstall = (consumerDirectory: string, packedDirectory: string): void => {
48
+ runCommand(['bun', 'run', 'build'], packageRoot);
49
+ runCommand(
50
+ ['npm', 'pack', '--ignore-scripts', '--pack-destination', packedDirectory],
51
+ packageRoot,
52
+ );
53
+
54
+ const archiveName = readdirSync(packedDirectory).find((entry) => entry.endsWith('.tgz'));
55
+ expect(archiveName).toBeDefined();
56
+ runCommand(
57
+ ['bun', 'add', '--ignore-scripts', join(packedDirectory, archiveName ?? 'missing.tgz')],
58
+ consumerDirectory,
59
+ );
60
+ };
61
+
62
+ const verifyConsumer = (consumerDirectory: string): void => {
63
+ runCommand(['node', 'consumer.mjs'], consumerDirectory);
64
+ runCommand(['bun', 'consumer.mjs'], consumerDirectory);
65
+ runCommand(
66
+ [
67
+ join(packageRoot, 'node_modules/.bin/tsc'),
68
+ '--noEmit',
69
+ '--module',
70
+ 'NodeNext',
71
+ '--moduleResolution',
72
+ 'NodeNext',
73
+ '--target',
74
+ 'ES2022',
75
+ '--skipLibCheck',
76
+ 'consumer.ts',
77
+ ],
78
+ consumerDirectory,
79
+ );
80
+ };
81
+
82
+ describe('packed infra consumer', () => {
83
+ it('supports native Node ESM, Bun, and public declarations', () => {
84
+ const temporaryDirectory = mkdtempSync(join(tmpdir(), 'contracts-infra-consumer-'));
85
+ const consumerDirectory = join(temporaryDirectory, 'package');
86
+ const packedDirectory = join(temporaryDirectory, 'packed');
87
+
88
+ try {
89
+ mkdirSync(consumerDirectory);
90
+ mkdirSync(packedDirectory);
91
+ writeFileSync(
92
+ join(consumerDirectory, 'package.json'),
93
+ JSON.stringify({ name: 'contracts-infra-consumer', private: true, type: 'module' }),
94
+ );
95
+ writeConsumerFiles(consumerDirectory);
96
+ packAndInstall(consumerDirectory, packedDirectory);
97
+ verifyConsumer(consumerDirectory);
98
+ } finally {
99
+ rmSync(temporaryDirectory, { force: true, recursive: true });
100
+ }
101
+ });
102
+ });
package/src/media.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { isRecord } from '@ankhorage/utility/object';
2
2
  import { isNonEmptyString } from '@ankhorage/utility/string';
3
3
 
4
- import type { EntityRegistry } from './collections';
4
+ import type { EntityRegistry } from './collections.js';
5
5
 
6
6
  export const MEDIA_ASSET_KINDS = ['image', 'audio', 'video', 'font', 'file'] as const;
7
7
 
@@ -4,14 +4,14 @@ import type {
4
4
  NavigatorPreset,
5
5
  NavigatorType,
6
6
  StackPresentation,
7
- } from '../navigator';
8
- import type { NavigatorDependencyRequirement } from './generation';
7
+ } from '../navigator.js';
8
+ import type { NavigatorDependencyRequirement } from './generation.js';
9
9
  import type {
10
10
  NavigatorApiStability,
11
11
  NavigatorCapabilityId,
12
12
  NavigatorRuntimePlatform,
13
13
  NavigatorSupportStatus,
14
- } from './planning';
14
+ } from './planning.js';
15
15
 
16
16
  export type NavigatorVerificationKind =
17
17
  | 'structural'
@@ -1,5 +1,5 @@
1
- import type { CustomNavigatorNode } from '../navigator';
2
- import type { NavigatorApiStability, NavigatorRuntimePlatform } from './planning';
1
+ import type { CustomNavigatorNode } from '../navigator.js';
2
+ import type { NavigatorApiStability, NavigatorRuntimePlatform } from './planning.js';
3
3
  export interface CustomNavigatorConfigIssue {
4
4
  code: string;
5
5
  message: string;
@@ -3,7 +3,7 @@ import type {
3
3
  NavigatorDiagnostic,
4
4
  NavigatorPlan,
5
5
  NavigatorSupportStatus,
6
- } from './planning';
6
+ } from './planning.js';
7
7
 
8
8
  export interface NavigatorGeneratedFile {
9
9
  path: string;
@@ -5,9 +5,9 @@ import type {
5
5
  RouteDefinition,
6
6
  StackImplementation,
7
7
  StackScreenOptions,
8
- } from '../navigator';
9
- import type { CustomNavigatorRegistry } from './extensions';
10
- import type { NavigatorDependencyRequirement } from './generation';
8
+ } from '../navigator.js';
9
+ import type { CustomNavigatorRegistry } from './extensions.js';
10
+ import type { NavigatorDependencyRequirement } from './generation.js';
11
11
 
12
12
  export interface ResolvedHeadlessTabsPresentation {
13
13
  presentation: ResolvedTabsPresentation;
package/src/navigator.ts CHANGED
@@ -1,7 +1,7 @@
1
- import type { ValueMap } from './collections';
2
- import type { IconSpec, ManifestValue } from './types';
1
+ import type { ValueMap } from './collections.js';
2
+ import type { IconSpec, ManifestValue } from './types.js';
3
3
 
4
- export { isAppNavigatorManifest } from './appManifest/navigator';
4
+ export { isAppNavigatorManifest } from './appManifest/navigator.js';
5
5
 
6
6
  export const NAVIGATOR_TYPES = ['slot', 'stack', 'tabs', 'drawer', 'split-view', 'custom'] as const;
7
7
  export type NavigatorType = (typeof NAVIGATOR_TYPES)[number];
@@ -288,12 +288,12 @@ export type {
288
288
  NavigatorPresetDescriptor,
289
289
  NavigatorVerificationKind,
290
290
  NavigatorVerificationStatus,
291
- } from './navigator/catalog';
291
+ } from './navigator/catalog.js';
292
292
  export type {
293
293
  CustomNavigatorConfigIssue,
294
294
  CustomNavigatorRegistration,
295
295
  CustomNavigatorRegistry,
296
- } from './navigator/extensions';
296
+ } from './navigator/extensions.js';
297
297
  export type {
298
298
  NavigatorDependencyRequirement,
299
299
  NavigatorGeneratedFile,
@@ -301,7 +301,7 @@ export type {
301
301
  NavigatorGenerationOptions,
302
302
  NavigatorGenerationResult,
303
303
  NavigatorScreenModule,
304
- } from './navigator/generation';
304
+ } from './navigator/generation.js';
305
305
  export type {
306
306
  CreateNavigatorPlanOptions,
307
307
  ExpoRouterNavigatorModule,
@@ -321,4 +321,4 @@ export type {
321
321
  ResolvedTabsImplementation,
322
322
  ResolvedTabsPresentation,
323
323
  TabsNavigatorPlan,
324
- } from './navigator/planning';
324
+ } from './navigator/planning.js';
@@ -1,4 +1,4 @@
1
- import type { SerializableSet } from './collections';
1
+ import type { SerializableSet } from './collections.js';
2
2
 
3
3
  export const ANKHORAGE_PERMISSION_NAMES = [
4
4
  'camera',
@@ -1,4 +1,4 @@
1
- import type { UiNode } from './types';
1
+ import type { UiNode } from './types.js';
2
2
 
3
3
  export interface RuntimeResolveNodePropsArgs {
4
4
  readonly node: UiNode;
package/src/state.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { SerializableValue } from './serializable';
1
+ import type { SerializableValue } from './serializable.js';
2
2
 
3
3
  /** Legend currently implements in-memory state only; unsupported persistence cannot be selected. */
4
4
  export interface AppStateSpec {
@@ -2,12 +2,12 @@
2
2
  import type { StructureDescriptorDocument } from '@ankhorage/contracts/structure';
3
3
 
4
4
  export const STRUCTURE_DESCRIPTOR_COMPILER_VERSION = '6.0.3';
5
- export const STRUCTURE_DESCRIPTOR_FINGERPRINT = 'sha256:40a6d82fcd341a4ff88936d61be4a5fa36e88a9425e71fc31b04219efee79a48';
5
+ export const STRUCTURE_DESCRIPTOR_FINGERPRINT = 'sha256:2578c8fb72cc696035a43a19b8502123c56cd801648030ffa280f23a38029ea3';
6
6
 
7
7
  export const STRUCTURE_DESCRIPTOR = {
8
8
  "protocolVersion": 1,
9
9
  "packageName": "@ankhorage/contracts",
10
- "packageVersion": "26.2.1",
10
+ "packageVersion": "26.3.0",
11
11
  "roots": {
12
12
  "auth-flow": "AuthFlowConfig",
13
13
  "auth-profile": "AuthProfileSpec",
@@ -1,4 +1,4 @@
1
- export type { EntityRegistry, SerializableSet, ValueMap } from '../collections';
1
+ export type { EntityRegistry, SerializableSet, ValueMap } from '../collections.js';
2
2
  export {
3
3
  STRUCTURE_DESCRIPTOR,
4
4
  STRUCTURE_DESCRIPTOR_COMPILER_VERSION,
@@ -1,7 +1,7 @@
1
1
  import { hasOnlyKeys, isRecord } from '@ankhorage/utility/object';
2
2
  import { isNonEmptyString } from '@ankhorage/utility/string';
3
3
 
4
- import type { StructureDescriptor, StructureLiteralValue, StructureScalarType } from './types';
4
+ import type { StructureDescriptor, StructureLiteralValue, StructureScalarType } from './types.js';
5
5
 
6
6
  /*** Validate one standalone structural descriptor without resolving external/local references. */
7
7
  export function isStructureDescriptor(value: unknown): value is StructureDescriptor {
@@ -1,4 +1,4 @@
1
- import type { EntityRegistry, ValueMap } from '../collections';
1
+ import type { EntityRegistry, ValueMap } from '../collections.js';
2
2
 
3
3
  export type StructureDescriptorId = string;
4
4
 
package/src/theme.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { ValueMap } from './collections';
1
+ import type { ValueMap } from './collections.js';
2
2
 
3
3
  /** Numeric token values authored at theme level. */
4
4
  export type ThemeNumericTokenOverrides = ValueMap<string, number>;