@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
package/CHANGELOG.md DELETED
@@ -1,361 +0,0 @@
1
- # Change Log
2
-
3
- All notable changes to this project will be documented in this file.
4
- See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
-
6
- # [1.0.0-alpha.283](https://github.com/toa-io/toa/compare/v1.0.0-alpha.282...v1.0.0-alpha.283) (2026-09-04)
7
-
8
- ### Bug Fixes
9
-
10
- * **cli:** an assignment hands back the new state, not nothing ([91304e9](https://github.com/toa-io/toa/commit/91304e9e9a3bba5933b7421b7a0ffff0c2e47795))
11
- * **storages:** take `Maybe` from core, not from the deprecated package ([bcaeeb3](https://github.com/toa-io/toa/commit/bcaeeb3c76c89af34e94ff569a210d21b7e87f64))
12
-
13
- ### Features
14
-
15
- * **cli:** a type module is declarations, so it sits beside a component's source ([ca755d9](https://github.com/toa-io/toa/commit/ca755d93d1a04b7697dd0dd12eb59e5b6e2a71d1))
16
- * **cli:** the built-in components ship types generated from their manifests ([bd7db9e](https://github.com/toa-io/toa/commit/bd7db9e88e46c1060223761898932239127f389a))
17
- * **extensions:** an extension declares what it puts on a component's context ([133bc2a](https://github.com/toa-io/toa/commit/133bc2aad1e45a2d4aa68a08a5e44ca48d3b7414))
18
-
19
-
20
- # [1.0.0-alpha.282](https://github.com/toa-io/toa/compare/v1.0.0-alpha.281...v1.0.0-alpha.282) (2026-09-03)
21
-
22
- ### Features
23
-
24
- * **core:** a Host for extensions ([6315eac](https://github.com/toa-io/toa/commit/6315eac1e9fb05be472272de06385c54ad5934ce))
25
-
26
-
27
- # [1.0.0-alpha.281](https://github.com/toa-io/toa/compare/v1.0.0-alpha.280...v1.0.0-alpha.281) (2026-09-03)
28
-
29
- ### Bug Fixes
30
-
31
- * **deps:** state the cookie bump where npm can resolve it ([11fcdf8](https://github.com/toa-io/toa/commit/11fcdf874ee33107901b5c06435ab10fba64870f))
32
-
33
-
34
- # [1.0.0-alpha.280](https://github.com/toa-io/toa/compare/v1.0.0-alpha.279...v1.0.0-alpha.280) (2026-09-03)
35
-
36
- ### Bug Fixes
37
-
38
- * **deps:** update cookie in UI lockfiles ([d32106b](https://github.com/toa-io/toa/commit/d32106be40728156e82858f37b4d04163d1e1652))
39
-
40
-
41
- # [1.0.0-alpha.278](https://github.com/toa-io/toa/compare/v1.0.0-alpha.277...v1.0.0-alpha.278) (2026-09-03)
42
-
43
- **Note:** Version bump only for package @toa.io/extensions.configuration
44
-
45
-
46
-
47
-
48
-
49
- # [1.0.0-alpha.277](https://github.com/toa-io/toa/compare/v1.0.0-alpha.276...v1.0.0-alpha.277) (2026-09-03)
50
-
51
- ### Bug Fixes
52
-
53
- * drop the build output that landed beside the sources ([a724f69](https://github.com/toa-io/toa/commit/a724f6921190e5c9d945e33c6035bb12d832e5c8))
54
-
55
-
56
- # [1.0.0-alpha.276](https://github.com/toa-io/toa/compare/v1.0.0-alpha.275...v1.0.0-alpha.276) (2026-09-03)
57
-
58
-
59
- ### Features
60
-
61
- * **configuration:** log the epoch a value was resolved under ([ff51ff6](https://github.com/toa-io/toa/commit/ff51ff629592159eeac562059ceb944f193ad7e8))
62
-
63
-
64
-
65
-
66
-
67
- # [1.0.0-alpha.275](https://github.com/toa-io/toa/compare/v1.0.0-alpha.274...v1.0.0-alpha.275) (2026-09-02)
68
-
69
-
70
- ### Bug Fixes
71
-
72
- * **configuration:** ship the component's code and the built page ([6ffe988](https://github.com/toa-io/toa/commit/6ffe988a9e67025c114e74ba94665b28a2cafaa1))
73
- * **introspection:** keep a sideways scroll off the browser's back gesture ([419e012](https://github.com/toa-io/toa/commit/419e012ce093bcd0429dc93fe457bbd964cfc11c))
74
-
75
-
76
- ### Features
77
-
78
- * **ui:** give both consoles a favicon ([27d3881](https://github.com/toa-io/toa/commit/27d3881eda10e59dc4c9c5ef38c2a58b71e1448d))
79
- * **ui:** leave signing out to its icon ([a82fbab](https://github.com/toa-io/toa/commit/a82fbab513706436254348a5e35115dc3721873f))
80
-
81
-
82
-
83
-
84
-
85
- # [1.0.0-alpha.274](https://github.com/toa-io/toa/compare/v1.0.0-alpha.273...v1.0.0-alpha.274) (2026-09-02)
86
-
87
-
88
- * Configuration is served by a component, followed live, and kept per epoch (#1017) ([b05997d](https://github.com/toa-io/toa/commit/b05997d3adb784f238a222cb46878b23859339a2)), closes [#1017](https://github.com/toa-io/toa/issues/1017)
89
-
90
-
91
- ### Features
92
-
93
- * **configuration:** drop the label from the epoch ([4baaff5](https://github.com/toa-io/toa/commit/4baaff5b22d00719142a65d56b50a1b100b29fbd))
94
-
95
-
96
- ### BREAKING CHANGES
97
-
98
- * a secret configuration value is an object, not a string;
99
- read it with `unwrap()`.
100
-
101
- Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
102
-
103
- * test(configuration): wait for the second round rather than assume it
104
-
105
- Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
106
-
107
- * refactor(configuration)!: read a secret with its own unwrap
108
-
109
- Component code depends on no Toa package, so a secret is read as
110
- `context.configuration.apiKey.unwrap()` and the helper in `@toa.io/generic`
111
- goes. A value a component reads as a secret is therefore given as a reference:
112
- `identity.basic` no longer defaults `pepper` to `''`, the development context
113
- and the feature harness give the token keys, the federation client secret and
114
- the signing key as references, and the harness has a step for the secrets a
115
- scenario refers to. CONTRIBUTING states the rule.
116
- * `identity.basic` `pepper` has no default; a value read as a
117
- secret must be given as a `$NAME` reference.
118
-
119
- Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
120
-
121
- * feat(configuration): list the configurations
122
-
123
- `configuration.values.list` returns every component's configuration for its
124
- deployed epoch, by component name, and `GET /configuration/values/` serves it
125
- behind `system:configuration:get`.
126
-
127
- Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
128
-
129
- * fix(exposition): write a value in YAML the way its toJSON says
130
-
131
- A redacted secret in a reply was dumped as an empty object; it is written as
132
- `<REDACTED>`, as JSON and msgpack already write it.
133
-
134
- Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
135
-
136
- * test(configuration): a secret is an object, and stays redacted in a reply
137
-
138
- A component with `{ a: 1, b: $SECRET_B }` returns its configuration as
139
- `{ a: 1, b: '<REDACTED>' }` and the secret itself through `unwrap()`. The reply
140
- step also accepts a reply as a caller across a process boundary receives it,
141
- since a call within the process hands the object over as it is.
142
-
143
- Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
144
-
145
- * chore(schemas): bump the dependencies
146
-
147
- ajv 8.18.0 to 8.20.0, ajv-formats 2.1.1 to 3.0.1, better-ajv-errors 1.2.0
148
- to 2.0.3, fast-glob 3.2.12 to 3.3.3 and js-yaml 4.3.1 to 5.4.1 — the version
149
- exposition already uses. The three majors keep the CommonJS entry points this
150
- library calls: ajv-formats as a function, better-ajv-errors as .default, and
151
- js-yaml's load.
152
-
153
- Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
154
-
155
- * feat(configuration)!: serve the schema with the value
156
-
157
- GET /configuration/values/:component/ answers { configuration, schema, epoch }
158
- where it answered with the configuration alone, and list carries the schema of
159
- every component. Nothing reads a configuration without needing to know what it
160
- is checked against, and the schema was only ever on the values service.
161
-
162
- An epoch the deployment does not know has no schema; the value stored for it
163
- is still returned.
164
-
165
- Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
166
-
167
- * feat(configuration): publish a configuration UI
168
-
169
- The values service serves a page at /.configuration on port 8003, out of the
170
- directory ui builds: the configured components, a screen per component showing
171
- what it holds now, and a dialog creating the next one. Reading needs
172
- system:configuration:get and creating needs system:configuration:create.
173
-
174
- A configuration is immutable, so the dialog opens on the current value and what
175
- is left out of it is left out of the component. The editor takes YAML, the
176
- schema is applied before anything is sent, and a secret is a reference the page
177
- never shows.
178
-
179
- The page is always published: the annotation is the per-component values map
180
- and has nowhere to carry a switch.
181
-
182
- Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
183
-
184
- * feat(introspection): link a component to its configuration
185
-
186
- A card carrying @toa.io/extensions.configuration reads that extension as a link
187
- to the configuration UI rather than as a name, and configuration joins the
188
- namespaces the runtime provides, so its components band under System.
189
-
190
- Deployed, both pages sit behind the same ingress and the path alone is right;
191
- locally each console has its own port.
192
-
193
- Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
194
-
195
- * feat(introspection): scroll the map, zoom with a modifier
196
-
197
- The map was grabbed to move and zoomed with a bare wheel, which is neither what
198
- a page does nor what the wheel does anywhere else. A plain scroll now pans on
199
- both axes and the wheel scales only with the modifier held — a trackpad pinch
200
- arrives as one of those on every platform.
201
-
202
- A card's own scrollable box keeps its wheel, in both paths.
203
-
204
- Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
205
-
206
- * refactor(introspection): centre the filter in the header
207
-
208
- The sides take equal space, which is what leaves the filter between them.
209
- Neither side may shrink under what it holds, or the tabs run out from under
210
- their side and across the filter, and the filter across the sign-out button;
211
- the title gives way instead.
212
-
213
- Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
214
-
215
- * fix(configuration): connect the UI to the values service
216
-
217
- The page was declared as a dependency from inside `open`, and a connector connects
218
- what it depends on before `open` runs — so the server was constructed and never
219
- listened. Nothing caught it: the UI feature builds the server itself.
220
-
221
- Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
222
-
223
- * feat(configuration)!: reserve resources in the annotation
224
-
225
- The values service deploys like any other and must state what it may take, but the
226
- annotation is a map of component ids and had nowhere to put it — so `toa env` failed
227
- for every context using configuration unless it declared a context-wide `resources`.
228
-
229
- `resources` is now the service's own, read the way `introspection` and `realtime` read
230
- theirs. A component actually named `resources` is written `default.resources`, which is
231
- what its id is anyway.
232
-
233
- Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
234
-
235
- * feat(configuration): follow the system colour scheme
236
-
237
- The dark tokens were behind a `.dark` class nothing sets, and the `dark:` variant was
238
- pointed at that class too — so a component's own dark styling never applied either.
239
- Both now key off `prefers-color-scheme`, and `color-scheme` hands the native chrome
240
- the same answer.
241
-
242
- Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
243
-
244
- * feat(introspection): follow the system colour scheme
245
-
246
- The dark tokens were behind a `.dark` class nothing sets, and the `dark:` variant was
247
- pointed at that class too — so a component's own dark styling never applied either.
248
- Both now key off `prefers-color-scheme`, and `color-scheme` hands the native chrome
249
- the same answer.
250
-
251
- Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
252
-
253
- * feat(configuration): present a change as an edit of what is there
254
-
255
- A configuration is immutable and creating one replaces the whole of it, but the dialog
256
- opens on the current value and the page never shows an older one — so what the reader
257
- does is edit. The words follow: Edit rather than New, Update rather than Create, and
258
- the paragraph explaining the model goes, along with the field's label, which the title
259
- above it already said.
260
-
261
- The editor also stayed as wide as its longest line — `field-sizing: content` sizes to
262
- content, and no `max-width` clamps that — so a long value painted outside the dialog.
263
- It is fixed now, the dialog takes the width the screen has rather than a fixed step,
264
- and the band held for errors no longer leaves a gap when there are none.
265
-
266
- Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
267
-
268
- * feat(configuration): mark a component that keeps a secret
269
-
270
- A key after the name on the row, wherever the configuration holds a reference, however
271
- deep. The predicate reads the same lines the value screen renders, so the two cannot
272
- disagree about what counts as a secret.
273
-
274
- Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
275
-
276
- * feat(configuration): lead back to the list from the title
277
-
278
- Every address ends in a slash, so the way up is the address itself on the list and one
279
- level above it on a component's screen — which holds wherever the page is mounted.
280
-
281
- Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
282
-
283
-
284
-
285
-
286
-
287
- # [1.0.0-alpha.273](https://github.com/toa-io/toa/compare/v1.0.0-alpha.272...v1.0.0-alpha.273) (2026-09-02)
288
-
289
- **Note:** Version bump only for package @toa.io/extensions.configuration
290
-
291
-
292
-
293
-
294
-
295
- # [1.0.0-alpha.272](https://github.com/toa-io/toa/compare/v1.0.0-alpha.271...v1.0.0-alpha.272) (2026-09-01)
296
-
297
- **Note:** Version bump only for package @toa.io/extensions.configuration
298
-
299
-
300
-
301
-
302
-
303
- # [1.0.0-alpha.270](https://github.com/toa-io/toa/compare/v1.0.0-alpha.269...v1.0.0-alpha.270) (2026-08-31)
304
-
305
- **Note:** Version bump only for package @toa.io/extensions.configuration
306
-
307
-
308
-
309
-
310
-
311
- # [1.0.0-alpha.266](https://github.com/toa-io/toa/compare/v1.0.0-alpha.265...v1.0.0-alpha.266) (2026-08-29)
312
-
313
- **Note:** Version bump only for package @toa.io/extensions.configuration
314
-
315
-
316
-
317
-
318
-
319
- # [1.0.0-alpha.265](https://github.com/toa-io/toa/compare/v1.0.0-alpha.264...v1.0.0-alpha.265) (2026-08-29)
320
-
321
- **Note:** Version bump only for package @toa.io/extensions.configuration
322
-
323
-
324
-
325
-
326
-
327
- # [1.0.0-alpha.264](https://github.com/toa-io/toa/compare/v1.0.0-alpha.263...v1.0.0-alpha.264) (2026-08-29)
328
-
329
- **Note:** Version bump only for package @toa.io/extensions.configuration
330
-
331
-
332
-
333
-
334
-
335
- # [1.0.0-alpha.263](https://github.com/toa-io/toa/compare/v1.0.0-alpha.262...v1.0.0-alpha.263) (2026-08-29)
336
-
337
- **Note:** Version bump only for package @toa.io/extensions.configuration
338
-
339
-
340
-
341
-
342
-
343
- # [1.0.0-alpha.262](https://github.com/toa-io/toa/compare/v1.0.0-alpha.261...v1.0.0-alpha.262) (2026-08-28)
344
-
345
- **Note:** Version bump only for package @toa.io/extensions.configuration
346
-
347
-
348
-
349
-
350
-
351
- # [1.0.0-alpha.259](https://github.com/toa-io/toa/compare/v1.0.0-alpha.258...v1.0.0-alpha.259) (2026-08-24)
352
-
353
- **Note:** Version bump only for package @toa.io/extensions.configuration
354
-
355
-
356
-
357
-
358
-
359
- # [1.0.0-alpha.257](https://github.com/toa-io/toa/compare/v1.0.0-alpha.256...v1.0.0-alpha.257) (2026-08-24)
360
-
361
- **Note:** Version bump only for package @toa.io/extensions.configuration
@@ -1,16 +0,0 @@
1
- export declare function transition(input: Input, object: Entity): Promise<Entity | Error>;
2
- interface Input {
3
- component: string;
4
- configuration: object;
5
- originator: {
6
- id: string;
7
- };
8
- }
9
- interface Entity {
10
- id: string;
11
- component: string;
12
- epoch: string;
13
- configuration: object;
14
- originator: string;
15
- }
16
- export {};
@@ -1 +0,0 @@
1
- {"version":3,"file":"create.js","sourceRoot":"","sources":["../source/create.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAA;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AAGpC,MAAM,CAAC,KAAK,UAAU,UAAU,CAAE,KAAY,EAAE,MAAc;IAC5D,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;IAEpC,IAAI,KAAK,KAAK,SAAS;QACrB,OAAO,IAAI,qBAAqB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;IAEnD,4DAA4D;IAC5D,MAAM,aAAa,GAAG,eAAe,CAAC,KAAK,CAAC,aAAa,CAAC,CAAA;IAE1D,MAAM,MAAM,GAAgB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IAExD,IAAI,CAAC;QACH,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAA;IAChC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,IAAI,yBAAyB,CAAE,KAAe,CAAC,OAAO,CAAC,CAAA;IAChE,CAAC;IAED,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAA;IAClC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;IAC1B,MAAM,CAAC,aAAa,GAAG,aAAa,CAAA;IACpC,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,EAAE,CAAA;IAEvC,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,qBAAsB,SAAQ,KAAK;IACvB,IAAI,GAAG,mBAAmB,CAAA;IAE1C,YAAoB,SAAiB;QACnC,KAAK,CAAC,cAAc,SAAS,qBAAqB,CAAC,CAAA;IACrD,CAAC;CACF;AAED,MAAM,yBAA0B,SAAQ,KAAK;IAC3B,IAAI,GAAG,uBAAuB,CAAA;CAC/C"}
@@ -1,11 +0,0 @@
1
- import { type Context } from './lib/resolve.js';
2
- export declare function computation(input: Pair[], context: Context): Promise<Fetched[]>;
3
- interface Pair {
4
- component: string;
5
- epoch: string;
6
- }
7
- interface Fetched extends Pair {
8
- configuration: object | null;
9
- created: number;
10
- }
11
- export {};
@@ -1 +0,0 @@
1
- {"version":3,"file":"fetch.js","sourceRoot":"","sources":["../source/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAgB,MAAM,kBAAkB,CAAA;AAExD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAE,KAAa,EAAE,OAAgB;IAChE,OAAO,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE;QAChE,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,CAAA;QAEtD,OAAO;YACL,SAAS;YACT,KAAK;YACL,aAAa,EAAE,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa;YAC1D,OAAO,EAAE,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO;SAC5C,CAAA;IACH,CAAC,CAAC,CAAC,CAAA;AACL,CAAC"}
@@ -1,17 +0,0 @@
1
- import { type Context } from './lib/resolve.js';
2
- /**
3
- * The latest configuration of a component, with the schema it is checked against. The
4
- * schema is the deployment's, so an epoch the deployment does not know has none — the
5
- * value is still what was stored for it.
6
- */
7
- export declare function computation(input: Input, context: Context): Promise<Item | null>;
8
- interface Input {
9
- component: string;
10
- epoch?: string;
11
- }
12
- interface Item {
13
- configuration: object;
14
- schema?: object;
15
- epoch: string;
16
- }
17
- export {};
@@ -1 +0,0 @@
1
- {"version":3,"file":"get.js","sourceRoot":"","sources":["../source/get.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AACpC,OAAO,EAAE,OAAO,EAAgB,MAAM,kBAAkB,CAAA;AAExD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAE,KAAY,EAAE,OAAgB;IAC/D,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;IAElE,IAAI,KAAK,KAAK,IAAI;QAChB,OAAO,IAAI,CAAA;IAEb,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;IAEpC,OAAO;QACL,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,MAAM,EAAE,KAAK,EAAE,MAAM;QACrB,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,KAAM,CAAC,KAAK;KACnC,CAAA;AACH,CAAC"}
@@ -1,11 +0,0 @@
1
- /** What the deployment told the service about every configured component. */
2
- export declare function entry(component: string): Entry | undefined;
3
- /** The configured components, by name. */
4
- export declare function components(): string[];
5
- export declare const VARIABLE = "TOA_CONFIGURATION_VALUES";
6
- export interface Entry {
7
- epoch: string;
8
- schema: object;
9
- defaults?: object;
10
- }
11
- export type Values = Record<string, Entry>;
@@ -1 +0,0 @@
1
- {"version":3,"file":"map.js","sourceRoot":"","sources":["../../source/lib/map.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,MAAM,UAAU,KAAK,CAAE,SAAiB;IACtC,OAAO,IAAI,EAAE,CAAC,SAAS,CAAC,CAAA;AAC1B,CAAC;AAED,0CAA0C;AAC1C,MAAM,UAAU,UAAU;IACxB,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;AACnC,CAAC;AAED,SAAS,IAAI;IACX,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAA;IAE5C,oFAAoF;IACpF,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAW,CAAA;QACrC,MAAM,GAAG,MAAM,CAAA;IACjB,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED,IAAI,MAAM,GAAkB,IAAI,CAAA;AAChC,IAAI,MAAM,GAAW,EAAE,CAAA;AAEvB,MAAM,CAAC,MAAM,QAAQ,GAAG,0BAA0B,CAAA"}
@@ -1,26 +0,0 @@
1
- import { it, afterEach } from 'node:test';
2
- import assert from 'node:assert/strict';
3
- import { VARIABLE, components, entry } from './map.js';
4
- afterEach(() => {
5
- delete process.env[VARIABLE];
6
- });
7
- it('should be empty without the variable', () => {
8
- assert.strictEqual(entry('a.b'), undefined);
9
- });
10
- it('should read the variable', () => {
11
- const values = { 'a.b': { epoch: 'e', schema: { type: 'object' }, defaults: { foo: 1 } } };
12
- process.env[VARIABLE] = JSON.stringify(values);
13
- assert.deepStrictEqual(entry('a.b'), values['a.b']);
14
- assert.strictEqual(entry('a.c'), undefined);
15
- });
16
- it('should follow the variable', () => {
17
- process.env[VARIABLE] = JSON.stringify({ 'a.b': { epoch: 'e1', schema: {} } });
18
- assert.deepStrictEqual(entry('a.b')?.epoch, 'e1');
19
- process.env[VARIABLE] = JSON.stringify({ 'a.b': { epoch: 'e2', schema: {} } });
20
- assert.deepStrictEqual(entry('a.b')?.epoch, 'e2');
21
- });
22
- it('should list the components by name', () => {
23
- process.env[VARIABLE] = JSON.stringify({ 'b.two': { epoch: 'e', schema: {} }, 'a.one': { epoch: 'e', schema: {} } });
24
- assert.deepStrictEqual(components(), ['a.one', 'b.two']);
25
- });
26
- //# sourceMappingURL=map.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"map.test.js","sourceRoot":"","sources":["../../source/lib/map.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,MAAM,MAAM,oBAAoB,CAAA;AAEvC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AAEtD,SAAS,CAAC,GAAG,EAAE;IACb,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;AAC9B,CAAC,CAAC,CAAA;AAEF,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;IAC9C,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,CAAA;AAC7C,CAAC,CAAC,CAAA;AAEF,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;IAClC,MAAM,MAAM,GAAG,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAA;IAE1F,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;IAE9C,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;IACnD,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,CAAA;AAC7C,CAAC,CAAC,CAAA;AAEF,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;IACpC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;IAE9E,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;IAEjD,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;IAE9E,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;AACnD,CAAC,CAAC,CAAA;AAEF,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;IAC5C,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;IAEpH,MAAM,CAAC,eAAe,CAAC,UAAU,EAAE,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA;AAC1D,CAAC,CAAC,CAAA"}
@@ -1,27 +0,0 @@
1
- /**
2
- * The latest configuration created for the component and the epoch; the deployed
3
- * defaults when none was; `null` when the epoch is not the one deployed.
4
- */
5
- export declare function resolve(context: Context, component: string, epoch?: string): Promise<Value | null>;
6
- /** A configuration and when it was created; `0` for the deployed defaults. */
7
- export interface Value {
8
- configuration: object;
9
- created: number;
10
- }
11
- export interface Context {
12
- local: {
13
- enumerate: (request: {
14
- query: Query;
15
- }) => Promise<Stored[]>;
16
- };
17
- }
18
- interface Query {
19
- criteria: string;
20
- sort: string[];
21
- limit: number;
22
- }
23
- interface Stored {
24
- configuration: object;
25
- _created: number;
26
- }
27
- export {};
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../source/lib/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AAEhC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAE,OAAgB,EAAE,SAAiB,EAAE,KAAc;IAChF,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAA;IAE9B,KAAK,KAAK,KAAK,EAAE,KAAK,CAAA;IAEtB,IAAI,KAAK,KAAK,SAAS;QACrB,OAAO,IAAI,CAAA;IAEb,wFAAwF;IACxF,MAAM,KAAK,GAAU;QACnB,QAAQ,EAAE,eAAe,SAAS,aAAa,KAAK,GAAG;QACvD,IAAI,EAAE,CAAC,eAAe,CAAC;QACvB,KAAK,EAAE,CAAC;KACT,CAAA;IAED,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;IAExD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QACpB,OAAO,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;IAElF,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK;QAC9C,OAAO,EAAE,aAAa,EAAE,KAAK,CAAC,QAAQ,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAA;IAE5D,OAAO,IAAI,CAAA;AACb,CAAC"}
@@ -1,10 +0,0 @@
1
- import { type Context } from './lib/resolve.js';
2
- /** The configuration of every component for its deployed epoch, by component name. */
3
- export declare function computation(_: null, context: Context): Promise<Item[]>;
4
- interface Item {
5
- component: string;
6
- epoch: string;
7
- schema: object;
8
- configuration: object;
9
- }
10
- export {};
@@ -1 +0,0 @@
1
- {"version":3,"file":"list.js","sourceRoot":"","sources":["../source/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AAChD,OAAO,EAAE,OAAO,EAAgB,MAAM,kBAAkB,CAAA;AAExD,sFAAsF;AACtF,MAAM,CAAC,KAAK,UAAU,WAAW,CAAE,CAAO,EAAE,OAAgB;IAC1D,OAAO,MAAM,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE;QAC5D,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,SAAS,CAAE,CAAA;QAC3C,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,CAAA;QAEtD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,KAAM,CAAC,aAAa,EAAE,CAAA;IAC1E,CAAC,CAAC,CAAC,CAAA;AACL,CAAC"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,66 +0,0 @@
1
- import { it, beforeEach, afterEach, mock } from 'node:test';
2
- import assert from 'node:assert/strict';
3
- import { isDeepStrictEqual } from 'node:util';
4
- import { Connector, Locator } from '@toa.io/core';
5
- import { generate } from 'randomstring';
6
- import { Aspect } from './Aspect.js';
7
- class Fake extends Connector {
8
- fetch = mock.fn(async () => ({ configuration: { foo: 'served' }, created: 5 }));
9
- subscribe = mock.fn();
10
- unsubscribe = mock.fn();
11
- }
12
- const manifest = {
13
- schema: {
14
- type: 'object',
15
- properties: {
16
- foo: { type: 'string' },
17
- bar: { type: 'object', properties: { baz: { type: 'string' } }, default: { baz: 'quux' } }
18
- }
19
- }
20
- };
21
- let locator;
22
- beforeEach(() => {
23
- locator = new Locator(generate(), generate());
24
- });
25
- afterEach(() => {
26
- delete process.env['TOA_CONFIGURATION_' + locator.uppercase];
27
- });
28
- it('should be named', async () => {
29
- assert.deepStrictEqual(new Aspect(locator, manifest, null).name, 'configuration');
30
- });
31
- it('should resolve locally without a client', async () => {
32
- process.env['TOA_CONFIGURATION_' + locator.uppercase] = JSON.stringify({ foo: 'local' });
33
- const aspect = new Aspect(locator, manifest, null);
34
- await aspect.connect();
35
- assert.deepStrictEqual(aspect.invoke(), { foo: 'local', bar: { baz: 'quux' } });
36
- assert.deepStrictEqual(aspect.invoke(['foo']), 'local');
37
- assert.deepStrictEqual(aspect.invoke(['bar', 'baz']), 'quux');
38
- });
39
- it('should fetch from the client and follow it', async () => {
40
- const client = new Fake();
41
- const aspect = new Aspect(locator, manifest, client);
42
- await aspect.connect();
43
- assert.deepStrictEqual(client.connected, true);
44
- assert.strictEqual(client.fetch.mock.callCount(), 1);
45
- const [component, epoch] = client.fetch.mock.calls[0].arguments;
46
- assert.deepStrictEqual(component, locator.id);
47
- assert.match(epoch, /^[a-f0-9]{64}$/);
48
- assert.deepStrictEqual(aspect.invoke(), { foo: 'served', bar: { baz: 'quux' } });
49
- assert.ok(client.subscribe.mock.calls.some((call) => call.arguments.length === 3 && isDeepStrictEqual(call.arguments[0], component) && isDeepStrictEqual(call.arguments[1], epoch) && typeof call.arguments[2] === 'function'));
50
- const listener = client.subscribe.mock.calls[0].arguments[2];
51
- listener({ configuration: { foo: 'updated' }, created: 6 });
52
- assert.deepStrictEqual(aspect.invoke(['foo']), 'updated');
53
- // what is not newer than the held value is left alone
54
- listener({ configuration: { foo: 'stale' }, created: 6 });
55
- listener({ configuration: { foo: 'older' }, created: 4 });
56
- assert.deepStrictEqual(aspect.invoke(['foo']), 'updated');
57
- // a value that does not fit keeps the previous one
58
- listener({ configuration: { foo: { nested: true } }, created: 7 });
59
- assert.deepStrictEqual(aspect.invoke(['foo']), 'updated');
60
- // and the one after it still applies
61
- listener({ configuration: { foo: 'latest' }, created: 8 });
62
- assert.deepStrictEqual(aspect.invoke(['foo']), 'latest');
63
- await aspect.disconnect();
64
- assert.ok(client.unsubscribe.mock.calls.some((call) => call.arguments.length === 3 && isDeepStrictEqual(call.arguments[0], component) && isDeepStrictEqual(call.arguments[1], epoch) && isDeepStrictEqual(call.arguments[2], listener)));
65
- });
66
- //# sourceMappingURL=Aspect.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Aspect.test.js","sourceRoot":"","sources":["../source/Aspect.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAC3D,OAAO,MAAM,MAAM,oBAAoB,CAAA;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAE7C,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAIpC,MAAM,IAAK,SAAQ,SAAS;IACV,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,aAAa,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAC/E,SAAS,GAAG,IAAI,CAAC,EAAE,EAAE,CAAA;IACrB,WAAW,GAAG,IAAI,CAAC,EAAE,EAAE,CAAA;CACxC;AAED,MAAM,QAAQ,GAAa;IACzB,MAAM,EAAE;QACN,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACvB,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE;SAC3F;KACF;CACF,CAAA;AAED,IAAI,OAAgB,CAAA;AAEpB,UAAU,CAAC,GAAG,EAAE;IACd,OAAO,GAAG,IAAI,OAAO,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAA;AAC/C,CAAC,CAAC,CAAA;AAEF,SAAS,CAAC,GAAG,EAAE;IACb,OAAO,OAAO,CAAC,GAAG,CAAC,oBAAoB,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA;AAC9D,CAAC,CAAC,CAAA;AAEF,EAAE,CAAC,iBAAiB,EAAE,KAAK,IAAI,EAAE;IAC/B,MAAM,CAAC,eAAe,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,eAAe,CAAC,CAAA;AACnF,CAAC,CAAC,CAAA;AAEF,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;IACvD,OAAO,CAAC,GAAG,CAAC,oBAAoB,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAA;IAExF,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAA;IAElD,MAAM,MAAM,CAAC,OAAO,EAAE,CAAA;IAEtB,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,CAAA;IAC/E,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;IACvD,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;AAC/D,CAAC,CAAC,CAAA;AAEF,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;IAC1D,MAAM,MAAM,GAAG,IAAI,IAAI,EAAE,CAAA;IACzB,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,MAA2B,CAAC,CAAA;IAEzE,MAAM,MAAM,CAAC,OAAO,EAAE,CAAA;IAEtB,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;IAC9C,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAA;IAEpD,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAwC,CAAA;IAE9F,MAAM,CAAC,eAAe,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC,CAAA;IAC7C,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAA;IACrC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,CAAA;IAEhF,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,CAAA;IAEpO,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAa,CAAA;IAExE,QAAQ,CAAC,EAAE,aAAa,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAA;IAE3D,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAA;IAEzD,sDAAsD;IACtD,QAAQ,CAAC,EAAE,aAAa,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAA;IACzD,QAAQ,CAAC,EAAE,aAAa,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAA;IAEzD,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAA;IAEzD,mDAAmD;IACnD,QAAQ,CAAC,EAAE,aAAa,EAAE,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAA;IAElE,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAA;IAEzD,qCAAqC;IACrC,QAAQ,CAAC,EAAE,aAAa,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAA;IAE1D,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAA;IAExD,MAAM,MAAM,CAAC,UAAU,EAAE,CAAA;IAEzB,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAA;AAC/O,CAAC,CAAC,CAAA"}
@@ -1 +0,0 @@
1
- export {};