@toa.io/extensions.configuration 1.0.0-alpha.283 → 1.0.0-alpha.286

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 (130) hide show
  1. package/components/configuration.values/manifest.toa.yaml +14 -21
  2. package/components/configuration.values/migrations/0001-system-properties.yaml +14 -0
  3. package/components/configuration.values/migrations/0002-indexes.yaml +7 -0
  4. package/components/configuration.values/operations/create.js +1 -2
  5. package/components/configuration.values/operations/fetch.js +1 -1
  6. package/components/configuration.values/operations/get.js +1 -1
  7. package/components/configuration.values/operations/lib/map.js +1 -1
  8. package/components/configuration.values/operations/lib/resolve.js +3 -3
  9. package/components/configuration.values/operations/list.js +1 -1
  10. package/components/configuration.values/source/create.ts +3 -5
  11. package/components/configuration.values/source/fetch.ts +12 -10
  12. package/components/configuration.values/source/get.ts +2 -3
  13. package/components/configuration.values/source/lib/map.test.ts +7 -2
  14. package/components/configuration.values/source/lib/map.ts +3 -3
  15. package/components/configuration.values/source/lib/resolve.ts +9 -6
  16. package/components/configuration.values/source/list.ts +8 -6
  17. package/components/configuration.values/tsconfig.json +1 -1
  18. package/components/configuration.values/tsconfig.tsbuildinfo +1 -1
  19. package/components/configuration.values/types/index.d.ts +1 -1
  20. package/components/configuration.values/types/toa.d.ts +5 -5
  21. package/cucumber.mjs +3 -0
  22. package/features/site/index.html +6 -2
  23. package/features/steps/UI.ts +20 -13
  24. package/notes/consistency.md +10 -9
  25. package/package.json +6 -6
  26. package/readme.md +15 -14
  27. package/schemas/annotation.cos.yaml +1 -1
  28. package/source/Aspect.test.ts +32 -8
  29. package/source/Aspect.ts +28 -19
  30. package/source/Client.test.ts +31 -14
  31. package/source/Client.ts +41 -48
  32. package/source/Composition.ts +6 -6
  33. package/source/Factory.ts +7 -7
  34. package/source/Secret.test.ts +1 -1
  35. package/source/Secret.ts +5 -5
  36. package/source/UI.ts +33 -32
  37. package/source/configuration.test.ts +14 -8
  38. package/source/configuration.ts +11 -15
  39. package/source/const.ts +13 -1
  40. package/source/context.ts +2 -2
  41. package/source/deployment.test.ts +37 -12
  42. package/source/deployment.ts +45 -19
  43. package/source/epoch.test.ts +8 -2
  44. package/source/epoch.ts +6 -5
  45. package/source/index.ts +1 -1
  46. package/source/manifest.test.ts +12 -6
  47. package/source/manifest.ts +1 -1
  48. package/transpiled/Aspect.d.ts +2 -1
  49. package/transpiled/Aspect.js +15 -3
  50. package/transpiled/Aspect.js.map +1 -1
  51. package/transpiled/Client.d.ts +1 -1
  52. package/transpiled/Client.js +8 -2
  53. package/transpiled/Client.js.map +1 -1
  54. package/transpiled/Composition.js +2 -2
  55. package/transpiled/Composition.js.map +1 -1
  56. package/transpiled/Factory.d.ts +2 -1
  57. package/transpiled/Factory.js.map +1 -1
  58. package/transpiled/Secret.js.map +1 -1
  59. package/transpiled/UI.js +2 -1
  60. package/transpiled/UI.js.map +1 -1
  61. package/transpiled/configuration.js.map +1 -1
  62. package/transpiled/const.d.ts +8 -1
  63. package/transpiled/const.js +10 -0
  64. package/transpiled/const.js.map +1 -1
  65. package/transpiled/context.d.ts +1 -1
  66. package/transpiled/context.js.map +1 -1
  67. package/transpiled/deployment.d.ts +3 -0
  68. package/transpiled/deployment.js +19 -5
  69. package/transpiled/deployment.js.map +1 -1
  70. package/transpiled/epoch.js +3 -1
  71. package/transpiled/epoch.js.map +1 -1
  72. package/transpiled/index.d.ts +1 -1
  73. package/transpiled/index.js +1 -1
  74. package/transpiled/index.js.map +1 -1
  75. package/transpiled/manifest.js.map +1 -1
  76. package/tsconfig.json +3 -0
  77. package/tsconfig.tsbuildinfo +1 -1
  78. package/ui/dist/_app/immutable/chunks/{4P-VMHlb.js → 6fUKYVLr.js} +2 -2
  79. package/ui/dist/_app/immutable/chunks/{BR0r7ehv.js → BGxZNgfH.js} +1 -1
  80. package/ui/dist/_app/immutable/chunks/{D4R3sAUA.js → By3hKJVT.js} +2 -2
  81. package/ui/dist/_app/immutable/chunks/{C6SvLx74.js → DamfpXnK.js} +1 -1
  82. package/ui/dist/_app/immutable/chunks/{pcT5puVp.js → vHown6GG.js} +1 -1
  83. package/ui/dist/_app/immutable/entry/{app.iFQBmOia.js → app.cjzrCTnf.js} +2 -2
  84. package/ui/dist/_app/immutable/entry/start.C18omPso.js +1 -0
  85. package/ui/dist/_app/immutable/nodes/{0.COfWb7Uk.js → 0.DjKXI3st.js} +1 -1
  86. package/ui/dist/_app/immutable/nodes/{1.Do_XXsj8.js → 1.Dh71z_Aw.js} +1 -1
  87. package/ui/dist/_app/immutable/nodes/{2.YNbZtxbt.js → 2.TzrOmdn2.js} +1 -1
  88. package/ui/dist/_app/immutable/nodes/3.DlvWZctZ.js +1 -0
  89. package/ui/dist/_app/immutable/nodes/{4.BDs6ujpw.js → 4.D8kjaqXl.js} +1 -1
  90. package/ui/dist/_app/version.json +1 -1
  91. package/ui/dist/index.html +28 -23
  92. package/CHANGELOG.md +0 -361
  93. package/components/configuration.values/operations/create.d.ts +0 -16
  94. package/components/configuration.values/operations/create.js.map +0 -1
  95. package/components/configuration.values/operations/fetch.d.ts +0 -11
  96. package/components/configuration.values/operations/fetch.js.map +0 -1
  97. package/components/configuration.values/operations/get.d.ts +0 -17
  98. package/components/configuration.values/operations/get.js.map +0 -1
  99. package/components/configuration.values/operations/lib/map.d.ts +0 -11
  100. package/components/configuration.values/operations/lib/map.js.map +0 -1
  101. package/components/configuration.values/operations/lib/map.test.d.ts +0 -1
  102. package/components/configuration.values/operations/lib/map.test.js +0 -26
  103. package/components/configuration.values/operations/lib/map.test.js.map +0 -1
  104. package/components/configuration.values/operations/lib/resolve.d.ts +0 -27
  105. package/components/configuration.values/operations/lib/resolve.js.map +0 -1
  106. package/components/configuration.values/operations/list.d.ts +0 -10
  107. package/components/configuration.values/operations/list.js.map +0 -1
  108. package/transpiled/Aspect.test.d.ts +0 -1
  109. package/transpiled/Aspect.test.js +0 -66
  110. package/transpiled/Aspect.test.js.map +0 -1
  111. package/transpiled/Client.test.d.ts +0 -1
  112. package/transpiled/Client.test.js +0 -78
  113. package/transpiled/Client.test.js.map +0 -1
  114. package/transpiled/Secret.test.d.ts +0 -1
  115. package/transpiled/Secret.test.js +0 -26
  116. package/transpiled/Secret.test.js.map +0 -1
  117. package/transpiled/configuration.test.d.ts +0 -1
  118. package/transpiled/configuration.test.js +0 -111
  119. package/transpiled/configuration.test.js.map +0 -1
  120. package/transpiled/deployment.test.d.ts +0 -1
  121. package/transpiled/deployment.test.js +0 -66
  122. package/transpiled/deployment.test.js.map +0 -1
  123. package/transpiled/epoch.test.d.ts +0 -1
  124. package/transpiled/epoch.test.js +0 -22
  125. package/transpiled/epoch.test.js.map +0 -1
  126. package/transpiled/manifest.test.d.ts +0 -1
  127. package/transpiled/manifest.test.js +0 -14
  128. package/transpiled/manifest.test.js.map +0 -1
  129. package/ui/dist/_app/immutable/entry/start.BJ8wH2bz.js +0 -1
  130. package/ui/dist/_app/immutable/nodes/3.DPdUtAMe.js +0 -1
@@ -8,27 +8,20 @@ name: values
8
8
  # prototype's `created` event.
9
9
 
10
10
  entity:
11
- schema:
12
- type: object
13
- properties:
14
- component:
15
- type: string
16
- epoch:
17
- type: string
18
- configuration:
19
- type: object
20
- originator:
21
- type: string
22
- required:
23
- - component
24
- - epoch
25
- - configuration
26
- - originator
27
- index:
28
- lookup:
29
- component: asc
30
- epoch: asc
31
- _created: desc
11
+ properties:
12
+ component:
13
+ type: string
14
+ epoch:
15
+ type: string
16
+ configuration:
17
+ type: object
18
+ originator:
19
+ type: string
20
+ required:
21
+ - component
22
+ - epoch
23
+ - configuration
24
+ - originator
32
25
 
33
26
  operations:
34
27
  # the latest configuration of a component: created, else deployed defaults, else none
@@ -0,0 +1,14 @@
1
+ # 1.0.0-alpha.286 renamed the four system properties of a record. A database written before it
2
+ # holds them under the old names, where nothing reads them: such a record is never created,
3
+ # never updated, never deleted, and at version zero.
4
+ #
5
+ # `$rename` leaves a record that has none of them alone, so this is a no-op for a component
6
+ # that has only ever run this release.
7
+ - update:
8
+ filter: {}
9
+ update:
10
+ $rename:
11
+ _version: VERSION
12
+ _created: CREATED
13
+ _updated: UPDATED
14
+ _deleted: DELETED
@@ -0,0 +1,7 @@
1
+ - index:
2
+ name: index_lookup
3
+ keys:
4
+ component: asc
5
+ epoch: asc
6
+ CREATED: desc
7
+ sparse: true
@@ -4,7 +4,6 @@ export async function transition(input, object) {
4
4
  const known = entry(input.component);
5
5
  if (known === undefined)
6
6
  return new UnknownComponentError(input.component);
7
- // the schema fills its defaults, so what is stored is whole
8
7
  const configuration = structuredClone(input.configuration);
9
8
  const schema = schemas.schema(known.schema);
10
9
  try {
@@ -28,4 +27,4 @@ class UnknownComponentError extends Error {
28
27
  class InvalidConfigurationError extends Error {
29
28
  code = 'INVALID_CONFIGURATION';
30
29
  }
31
- //# sourceMappingURL=create.js.map
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc291cmNlL2NyZWF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGlCQUFpQixDQUFBO0FBQzFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFHcEMsTUFBTSxDQUFDLEtBQUssVUFBVSxVQUFVLENBQUMsS0FBWSxFQUFFLE1BQWM7SUFDM0QsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUVwQyxJQUFJLEtBQUssS0FBSyxTQUFTO1FBQUUsT0FBTyxJQUFJLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUUxRSxNQUFNLGFBQWEsR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFBO0lBRTFELE1BQU0sTUFBTSxHQUFnQixPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUV4RCxJQUFJLENBQUM7UUFDSCxNQUFNLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFBO0lBQ2hDLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsT0FBTyxJQUFJLHlCQUF5QixDQUFFLEtBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUNoRSxDQUFDO0lBRUQsTUFBTSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFBO0lBQ2xDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQTtJQUMxQixNQUFNLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQTtJQUNwQyxNQUFNLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFBO0lBRXZDLE9BQU8sTUFBTSxDQUFBO0FBQ2YsQ0FBQztBQUVELE1BQU0scUJBQXNCLFNBQVEsS0FBSztJQUN2QixJQUFJLEdBQUcsbUJBQW1CLENBQUE7SUFFMUMsWUFBbUIsU0FBaUI7UUFDbEMsS0FBSyxDQUFDLGNBQWMsU0FBUyxxQkFBcUIsQ0FBQyxDQUFBO0lBQ3JELENBQUM7Q0FDRjtBQUVELE1BQU0seUJBQTBCLFNBQVEsS0FBSztJQUMzQixJQUFJLEdBQUcsdUJBQXVCLENBQUE7Q0FDL0MifQ==
@@ -10,4 +10,4 @@ export async function computation(input, context) {
10
10
  };
11
11
  }));
12
12
  }
13
- //# sourceMappingURL=fetch.js.map
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmV0Y2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zb3VyY2UvZmV0Y2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBZ0IsTUFBTSxrQkFBa0IsQ0FBQTtBQUV4RCxNQUFNLENBQUMsS0FBSyxVQUFVLFdBQVcsQ0FBQyxLQUFhLEVBQUUsT0FBZ0I7SUFDL0QsT0FBTyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ3RCLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUU7UUFDdkMsTUFBTSxLQUFLLEdBQUcsTUFBTSxPQUFPLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUV0RCxPQUFPO1lBQ0wsU0FBUztZQUNULEtBQUs7WUFDTCxhQUFhLEVBQUUsS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsYUFBYTtZQUMxRCxPQUFPLEVBQUUsS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTztTQUM1QyxDQUFBO0lBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQTtBQUNILENBQUMifQ==
@@ -16,4 +16,4 @@ export async function computation(input, context) {
16
16
  epoch: input.epoch ?? known.epoch
17
17
  };
18
18
  }
19
- //# sourceMappingURL=get.js.map
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc291cmNlL2dldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQ3BDLE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sa0JBQWtCLENBQUE7QUFFeEQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsV0FBVyxDQUFDLEtBQVksRUFBRSxPQUFnQjtJQUM5RCxNQUFNLEtBQUssR0FBRyxNQUFNLE9BQU8sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUE7SUFFbEUsSUFBSSxLQUFLLEtBQUssSUFBSTtRQUFFLE9BQU8sSUFBSSxDQUFBO0lBRS9CLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUE7SUFFcEMsT0FBTztRQUNMLGFBQWEsRUFBRSxLQUFLLENBQUMsYUFBYTtRQUNsQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU07UUFDckIsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLElBQUksS0FBTSxDQUFDLEtBQUs7S0FDbkMsQ0FBQTtBQUNILENBQUMifQ==
@@ -18,4 +18,4 @@ function read() {
18
18
  let parsed = null;
19
19
  let values = {};
20
20
  export const VARIABLE = 'TOA_CONFIGURATION_VALUES';
21
- //# sourceMappingURL=map.js.map
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc291cmNlL2xpYi9tYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNkVBQTZFO0FBQzdFLE1BQU0sVUFBVSxLQUFLLENBQUMsU0FBaUI7SUFDckMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQTtBQUMxQixDQUFDO0FBRUQsMENBQTBDO0FBQzFDLE1BQU0sVUFBVSxVQUFVO0lBQ3hCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFBO0FBQ25DLENBQUM7QUFFRCxTQUFTLElBQUk7SUFDWCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQTtJQUU1QyxvRkFBb0Y7SUFDcEYsSUFBSSxNQUFNLEtBQUssTUFBTSxFQUFFLENBQUM7UUFDdEIsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFXLENBQUE7UUFDckMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtJQUNqQixDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUE7QUFDZixDQUFDO0FBRUQsSUFBSSxNQUFNLEdBQWtCLElBQUksQ0FBQTtBQUNoQyxJQUFJLE1BQU0sR0FBVyxFQUFFLENBQUE7QUFFdkIsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLDBCQUEwQixDQUFBIn0=
@@ -11,14 +11,14 @@ export async function resolve(context, component, epoch) {
11
11
  // one query per pair, so that a component's latest is never behind another's newer ones
12
12
  const query = {
13
13
  criteria: `component=="${component}";epoch=="${epoch}"`,
14
- sort: ['_created:desc'],
14
+ sort: ['CREATED:desc'],
15
15
  limit: 1
16
16
  };
17
17
  const objects = await context.local.enumerate({ query });
18
18
  if (objects.length > 0)
19
- return { configuration: objects[0].configuration, created: objects[0]._created };
19
+ return { configuration: objects[0].configuration, created: objects[0].CREATED };
20
20
  if (known !== undefined && known.epoch === epoch)
21
21
  return { configuration: known.defaults ?? {}, created: 0 };
22
22
  return null;
23
23
  }
24
- //# sourceMappingURL=resolve.js.map
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9saWIvcmVzb2x2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBRWhDOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsT0FBTyxDQUMzQixPQUFnQixFQUNoQixTQUFpQixFQUNqQixLQUFjO0lBRWQsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBRTlCLEtBQUssS0FBSyxLQUFLLEVBQUUsS0FBSyxDQUFBO0lBRXRCLElBQUksS0FBSyxLQUFLLFNBQVM7UUFBRSxPQUFPLElBQUksQ0FBQTtJQUVwQyx3RkFBd0Y7SUFDeEYsTUFBTSxLQUFLLEdBQVU7UUFDbkIsUUFBUSxFQUFFLGVBQWUsU0FBUyxhQUFhLEtBQUssR0FBRztRQUN2RCxJQUFJLEVBQUUsQ0FBQyxjQUFjLENBQUM7UUFDdEIsS0FBSyxFQUFFLENBQUM7S0FDVCxDQUFBO0lBRUQsTUFBTSxPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUE7SUFFeEQsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUM7UUFDcEIsT0FBTyxFQUFFLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUE7SUFFakYsSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxLQUFLLEtBQUssS0FBSztRQUM5QyxPQUFPLEVBQUUsYUFBYSxFQUFFLEtBQUssQ0FBQyxRQUFRLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQTtJQUU1RCxPQUFPLElBQUksQ0FBQTtBQUNiLENBQUMifQ==
@@ -8,4 +8,4 @@ export async function computation(_, context) {
8
8
  return { component, epoch, schema, configuration: value.configuration };
9
9
  }));
10
10
  }
11
- //# sourceMappingURL=list.js.map
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NvdXJjZS9saXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQ2hELE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sa0JBQWtCLENBQUE7QUFFeEQsc0ZBQXNGO0FBQ3RGLE1BQU0sQ0FBQyxLQUFLLFVBQVUsV0FBVyxDQUFDLENBQU8sRUFBRSxPQUFnQjtJQUN6RCxPQUFPLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDdEIsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsRUFBRTtRQUNuQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUUsQ0FBQTtRQUMzQyxNQUFNLEtBQUssR0FBRyxNQUFNLE9BQU8sQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFBO1FBRXRELE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsS0FBTSxDQUFDLGFBQWEsRUFBRSxDQUFBO0lBQzFFLENBQUMsQ0FBQyxDQUNILENBQUE7QUFDSCxDQUFDIn0=
@@ -2,13 +2,11 @@ import * as schemas from '@toa.io/schemas'
2
2
  import { entry } from './lib/map.js'
3
3
  import type { Schema } from '@toa.io/schemas'
4
4
 
5
- export async function transition (input: Input, object: Entity): Promise<Entity | Error> {
5
+ export async function transition(input: Input, object: Entity): Promise<Entity | Error> {
6
6
  const known = entry(input.component)
7
7
 
8
- if (known === undefined)
9
- return new UnknownComponentError(input.component)
8
+ if (known === undefined) return new UnknownComponentError(input.component)
10
9
 
11
- // the schema fills its defaults, so what is stored is whole
12
10
  const configuration = structuredClone(input.configuration)
13
11
 
14
12
  const schema: Schema<any> = schemas.schema(known.schema)
@@ -30,7 +28,7 @@ export async function transition (input: Input, object: Entity): Promise<Entity
30
28
  class UnknownComponentError extends Error {
31
29
  public readonly code = 'UNKNOWN_COMPONENT'
32
30
 
33
- public constructor (component: string) {
31
+ public constructor(component: string) {
34
32
  super(`Component '${component}' is not configured`)
35
33
  }
36
34
  }
@@ -1,16 +1,18 @@
1
1
  import { resolve, type Context } from './lib/resolve.js'
2
2
 
3
- export async function computation (input: Pair[], context: Context): Promise<Fetched[]> {
4
- return await Promise.all(input.map(async ({ component, epoch }) => {
5
- const value = await resolve(context, component, epoch)
3
+ export async function computation(input: Pair[], context: Context): Promise<Fetched[]> {
4
+ return await Promise.all(
5
+ input.map(async ({ component, epoch }) => {
6
+ const value = await resolve(context, component, epoch)
6
7
 
7
- return {
8
- component,
9
- epoch,
10
- configuration: value === null ? null : value.configuration,
11
- created: value === null ? 0 : value.created
12
- }
13
- }))
8
+ return {
9
+ component,
10
+ epoch,
11
+ configuration: value === null ? null : value.configuration,
12
+ created: value === null ? 0 : value.created
13
+ }
14
+ })
15
+ )
14
16
  }
15
17
 
16
18
  interface Pair {
@@ -6,11 +6,10 @@ import { resolve, type Context } from './lib/resolve.js'
6
6
  * schema is the deployment's, so an epoch the deployment does not know has none — the
7
7
  * value is still what was stored for it.
8
8
  */
9
- export async function computation (input: Input, context: Context): Promise<Item | null> {
9
+ export async function computation(input: Input, context: Context): Promise<Item | null> {
10
10
  const value = await resolve(context, input.component, input.epoch)
11
11
 
12
- if (value === null)
13
- return null
12
+ if (value === null) return null
14
13
 
15
14
  const known = entry(input.component)
16
15
 
@@ -12,7 +12,9 @@ it('should be empty without the variable', () => {
12
12
  })
13
13
 
14
14
  it('should read the variable', () => {
15
- const values = { 'a.b': { epoch: 'e', schema: { type: 'object' }, defaults: { foo: 1 } } }
15
+ const values = {
16
+ 'a.b': { epoch: 'e', schema: { type: 'object' }, defaults: { foo: 1 } }
17
+ }
16
18
 
17
19
  process.env[VARIABLE] = JSON.stringify(values)
18
20
 
@@ -31,7 +33,10 @@ it('should follow the variable', () => {
31
33
  })
32
34
 
33
35
  it('should list the components by name', () => {
34
- process.env[VARIABLE] = JSON.stringify({ 'b.two': { epoch: 'e', schema: {} }, 'a.one': { epoch: 'e', schema: {} } })
36
+ process.env[VARIABLE] = JSON.stringify({
37
+ 'b.two': { epoch: 'e', schema: {} },
38
+ 'a.one': { epoch: 'e', schema: {} }
39
+ })
35
40
 
36
41
  assert.deepStrictEqual(components(), ['a.one', 'b.two'])
37
42
  })
@@ -1,14 +1,14 @@
1
1
  /** What the deployment told the service about every configured component. */
2
- export function entry (component: string): Entry | undefined {
2
+ export function entry(component: string): Entry | undefined {
3
3
  return read()[component]
4
4
  }
5
5
 
6
6
  /** The configured components, by name. */
7
- export function components (): string[] {
7
+ export function components(): string[] {
8
8
  return Object.keys(read()).sort()
9
9
  }
10
10
 
11
- function read (): Values {
11
+ function read(): Values {
12
12
  const source = process.env[VARIABLE] ?? '{}'
13
13
 
14
14
  // read again once the variable changes, as it does between scenarios of one process
@@ -4,25 +4,28 @@ import { entry } from './map.js'
4
4
  * The latest configuration created for the component and the epoch; the deployed
5
5
  * defaults when none was; `null` when the epoch is not the one deployed.
6
6
  */
7
- export async function resolve (context: Context, component: string, epoch?: string): Promise<Value | null> {
7
+ export async function resolve(
8
+ context: Context,
9
+ component: string,
10
+ epoch?: string
11
+ ): Promise<Value | null> {
8
12
  const known = entry(component)
9
13
 
10
14
  epoch ??= known?.epoch
11
15
 
12
- if (epoch === undefined)
13
- return null
16
+ if (epoch === undefined) return null
14
17
 
15
18
  // one query per pair, so that a component's latest is never behind another's newer ones
16
19
  const query: Query = {
17
20
  criteria: `component=="${component}";epoch=="${epoch}"`,
18
- sort: ['_created:desc'],
21
+ sort: ['CREATED:desc'],
19
22
  limit: 1
20
23
  }
21
24
 
22
25
  const objects = await context.local.enumerate({ query })
23
26
 
24
27
  if (objects.length > 0)
25
- return { configuration: objects[0].configuration, created: objects[0]._created }
28
+ return { configuration: objects[0].configuration, created: objects[0].CREATED }
26
29
 
27
30
  if (known !== undefined && known.epoch === epoch)
28
31
  return { configuration: known.defaults ?? {}, created: 0 }
@@ -50,5 +53,5 @@ interface Query {
50
53
 
51
54
  interface Stored {
52
55
  configuration: object
53
- _created: number
56
+ CREATED: number
54
57
  }
@@ -2,13 +2,15 @@ import { components, entry } from './lib/map.js'
2
2
  import { resolve, type Context } from './lib/resolve.js'
3
3
 
4
4
  /** The configuration of every component for its deployed epoch, by component name. */
5
- export async function computation (_: null, context: Context): Promise<Item[]> {
6
- return await Promise.all(components().map(async (component) => {
7
- const { epoch, schema } = entry(component)!
8
- const value = await resolve(context, component, epoch)
5
+ export async function computation(_: null, context: Context): Promise<Item[]> {
6
+ return await Promise.all(
7
+ components().map(async (component) => {
8
+ const { epoch, schema } = entry(component)!
9
+ const value = await resolve(context, component, epoch)
9
10
 
10
- return { component, epoch, schema, configuration: value!.configuration }
11
- }))
11
+ return { component, epoch, schema, configuration: value!.configuration }
12
+ })
13
+ )
12
14
  }
13
15
 
14
16
  interface Item {
@@ -1,5 +1,5 @@
1
1
  {
2
- "extends": "../../tsconfig.json",
2
+ "extends": "../../../../tsconfig.component.json",
3
3
  "compilerOptions": {
4
4
  "outDir": "./operations",
5
5
  "rootDir": "./source"