@inf-monkeys-tech/monkeys-cli 0.12.20 → 0.12.21

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 (94) hide show
  1. package/README.md +27 -2
  2. package/README.zh.md +27 -2
  3. package/dist/command/metadata.d.ts.map +1 -1
  4. package/dist/command/metadata.js +20 -0
  5. package/dist/command/metadata.js.map +1 -1
  6. package/dist/commands/navigation/export.d.ts +3 -0
  7. package/dist/commands/navigation/export.d.ts.map +1 -0
  8. package/dist/commands/navigation/export.js +3 -0
  9. package/dist/commands/navigation/export.js.map +1 -0
  10. package/dist/commands/navigation/get.d.ts +3 -0
  11. package/dist/commands/navigation/get.d.ts.map +1 -0
  12. package/dist/commands/navigation/get.js +3 -0
  13. package/dist/commands/navigation/get.js.map +1 -0
  14. package/dist/commands/navigation/history.d.ts +3 -0
  15. package/dist/commands/navigation/history.d.ts.map +1 -0
  16. package/dist/commands/navigation/history.js +3 -0
  17. package/dist/commands/navigation/history.js.map +1 -0
  18. package/dist/commands/navigation/import.d.ts +3 -0
  19. package/dist/commands/navigation/import.d.ts.map +1 -0
  20. package/dist/commands/navigation/import.js +3 -0
  21. package/dist/commands/navigation/import.js.map +1 -0
  22. package/dist/commands/navigation/list.d.ts +3 -0
  23. package/dist/commands/navigation/list.d.ts.map +1 -0
  24. package/dist/commands/navigation/list.js +3 -0
  25. package/dist/commands/navigation/list.js.map +1 -0
  26. package/dist/commands/navigation/publish.d.ts +3 -0
  27. package/dist/commands/navigation/publish.d.ts.map +1 -0
  28. package/dist/commands/navigation/publish.js +3 -0
  29. package/dist/commands/navigation/publish.js.map +1 -0
  30. package/dist/commands/navigation/rollback.d.ts +3 -0
  31. package/dist/commands/navigation/rollback.d.ts.map +1 -0
  32. package/dist/commands/navigation/rollback.js +3 -0
  33. package/dist/commands/navigation/rollback.js.map +1 -0
  34. package/dist/commands/navigation/validate.d.ts +3 -0
  35. package/dist/commands/navigation/validate.d.ts.map +1 -0
  36. package/dist/commands/navigation/validate.js +3 -0
  37. package/dist/commands/navigation/validate.js.map +1 -0
  38. package/dist/commands/page/export.d.ts +3 -0
  39. package/dist/commands/page/export.d.ts.map +1 -0
  40. package/dist/commands/page/export.js +3 -0
  41. package/dist/commands/page/export.js.map +1 -0
  42. package/dist/commands/page/get.d.ts +3 -0
  43. package/dist/commands/page/get.d.ts.map +1 -0
  44. package/dist/commands/page/get.js +3 -0
  45. package/dist/commands/page/get.js.map +1 -0
  46. package/dist/commands/page/history.d.ts +3 -0
  47. package/dist/commands/page/history.d.ts.map +1 -0
  48. package/dist/commands/page/history.js +3 -0
  49. package/dist/commands/page/history.js.map +1 -0
  50. package/dist/commands/page/import.d.ts +3 -0
  51. package/dist/commands/page/import.d.ts.map +1 -0
  52. package/dist/commands/page/import.js +3 -0
  53. package/dist/commands/page/import.js.map +1 -0
  54. package/dist/commands/page/list.d.ts +3 -0
  55. package/dist/commands/page/list.d.ts.map +1 -0
  56. package/dist/commands/page/list.js +3 -0
  57. package/dist/commands/page/list.js.map +1 -0
  58. package/dist/commands/page/publish.d.ts +3 -0
  59. package/dist/commands/page/publish.d.ts.map +1 -0
  60. package/dist/commands/page/publish.js +3 -0
  61. package/dist/commands/page/publish.js.map +1 -0
  62. package/dist/commands/page/rollback.d.ts +3 -0
  63. package/dist/commands/page/rollback.d.ts.map +1 -0
  64. package/dist/commands/page/rollback.js +3 -0
  65. package/dist/commands/page/rollback.js.map +1 -0
  66. package/dist/commands/page/validate.d.ts +3 -0
  67. package/dist/commands/page/validate.d.ts.map +1 -0
  68. package/dist/commands/page/validate.js +3 -0
  69. package/dist/commands/page/validate.js.map +1 -0
  70. package/dist/contracts/version.d.ts +1 -1
  71. package/dist/contracts/version.d.ts.map +1 -1
  72. package/dist/contracts/version.js +1 -0
  73. package/dist/contracts/version.js.map +1 -1
  74. package/dist/declarative/client.d.ts +34077 -0
  75. package/dist/declarative/client.d.ts.map +1 -0
  76. package/dist/declarative/client.js +109 -0
  77. package/dist/declarative/client.js.map +1 -0
  78. package/dist/declarative/command.d.ts +5 -0
  79. package/dist/declarative/command.d.ts.map +1 -0
  80. package/dist/declarative/command.js +100 -0
  81. package/dist/declarative/command.js.map +1 -0
  82. package/dist/declarative/lifecycle.d.ts +22 -0
  83. package/dist/declarative/lifecycle.d.ts.map +1 -0
  84. package/dist/declarative/lifecycle.js +315 -0
  85. package/dist/declarative/lifecycle.js.map +1 -0
  86. package/dist/declarative/target.d.ts +12 -0
  87. package/dist/declarative/target.d.ts.map +1 -0
  88. package/dist/declarative/target.js +18 -0
  89. package/dist/declarative/target.js.map +1 -0
  90. package/oclif.manifest.json +1775 -1
  91. package/package.json +9 -3
  92. package/skills/monkeys-pages/SKILL.md +20 -0
  93. package/skills/monkeys-pages/agents/openai.yaml +4 -0
  94. package/skills/monkeys-shared/references/compatibility.md +1 -1
@@ -0,0 +1,315 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { open } from 'node:fs/promises';
3
+ import { DeclarativeImportDocumentSchema, } from '@inf-monkeys-tech/monkeys/contracts';
4
+ import { canonicalContentHash } from '@inf-monkeys-tech/monkeys/runtime';
5
+ import { CliError, EXIT_CODES } from '../errors/cli-error.js';
6
+ import { assertConfirmation } from '../policy/risk.js';
7
+ import { loadSemanticRuntime, requireSemanticTeam } from '../semantic/runtime.js';
8
+ import { DeclarativeClient } from './client.js';
9
+ import { selectTarget } from './target.js';
10
+ export const documentId = (document) => document.contract === 'Page' ? document.pageId : document.navigationId;
11
+ const same = (left, right) => canonicalContentHash(left) === canonicalContentHash(right);
12
+ function failure(message, code, details) {
13
+ throw new CliError(message, { code, exitCode: EXIT_CODES.validation, ...(details ? { safeDetails: details } : {}) });
14
+ }
15
+ function confirm(options) {
16
+ assertConfirmation({ interactive: Boolean(process.stdin.isTTY), risk: 'privileged', yes: Boolean(options.yes) });
17
+ }
18
+ export async function readDocument(file, kind) {
19
+ const handle = await open(file, 'r');
20
+ try {
21
+ const stat = await handle.stat();
22
+ if (!stat.isFile() || stat.size > 8 * 1024 * 1024)
23
+ failure('The declaration must be a regular JSON file no larger than 8 MiB.', 'DECLARATIVE_FILE_INVALID');
24
+ let input;
25
+ try {
26
+ input = JSON.parse(await handle.readFile('utf8'));
27
+ }
28
+ catch {
29
+ failure('The declaration file must contain valid JSON.', 'DECLARATIVE_DOCUMENT_INVALID');
30
+ }
31
+ const document = DeclarativeImportDocumentSchema.safeParse(input);
32
+ if (!document.success)
33
+ failure('The JSON does not satisfy the shared Page or Navigation contract.', 'DECLARATIVE_DOCUMENT_INVALID', {
34
+ issues: document.error.issues.map((issue) => ({ path: issue.path, message: issue.message })),
35
+ });
36
+ if ((document.data.contract === 'Page' ? 'page' : 'navigation') !== kind)
37
+ failure('The JSON resource kind does not match this command.', 'DECLARATIVE_RESOURCE_KIND_MISMATCH');
38
+ return document.data;
39
+ }
40
+ finally {
41
+ await handle.close();
42
+ }
43
+ }
44
+ async function getDraft(client, id) {
45
+ const draft = await client.draft(id);
46
+ if (documentId(draft.body) !== id || (draft.body.contract === 'Page' ? 'page' : 'navigation') !== client.kind) {
47
+ failure('The returned draft does not identify the requested resource.', 'DECLARATIVE_RESPONSE_MISMATCH');
48
+ }
49
+ return draft;
50
+ }
51
+ async function observed(client, id, surface) {
52
+ try {
53
+ const state = await client.bootstrap(id, surface);
54
+ return {
55
+ resources: state.resources.filter((item) => item.resourceKind === client.kind && item.resourceId === id),
56
+ generation: state.generation,
57
+ };
58
+ }
59
+ catch {
60
+ return { available: false };
61
+ }
62
+ }
63
+ async function verifyPublication(client, id, releaseRef, definitionRef, surface) {
64
+ const state = await client.bootstrap(id, surface);
65
+ const resource = state.resources.find((entry) => entry.resourceId === id && entry.resourceKind === client.kind);
66
+ const placement = resource?.releasePlacements.find((entry) => same(entry.releaseRevisionRef, releaseRef) && same(entry.definitionRevisionRef, definitionRef));
67
+ if (!placement)
68
+ failure('The active release changed or could not be read back.', 'DECLARATIVE_RELEASE_NOT_ACTIVE');
69
+ const { bundle } = await client.runtimeBundle(releaseRef.id);
70
+ const bundleDefinition = bundle.contract === 'PageRuntimeBundle' ? bundle.pageRevisionRef : bundle.navigationRevisionRef;
71
+ if (!same(bundle.releaseRevisionRef, releaseRef) || !same(bundleDefinition, definitionRef) || bundle.surface !== surface) {
72
+ failure('The runtime does not match the published release and definition.', 'DECLARATIVE_RUNTIME_MISMATCH');
73
+ }
74
+ return {
75
+ releaseRevisionRef: releaseRef,
76
+ definitionRevisionRef: definitionRef,
77
+ runtimeContentHash: bundle.contentHash,
78
+ surface,
79
+ ...(placement.routePath ? { routePath: placement.routePath } : {}),
80
+ ...(placement.placement ? { placement: placement.placement } : {}),
81
+ };
82
+ }
83
+ export async function runLifecycle(kind, action, options, suppliedClient) {
84
+ const source = options.file && ['import', 'publish', 'validate'].includes(action) ? await readDocument(options.file, kind) : undefined;
85
+ const id = options.id ?? (source ? documentId(source) : undefined);
86
+ if (source && options.id && documentId(source) !== options.id)
87
+ failure('The requested ID differs from the JSON ID.', 'DECLARATIVE_RESOURCE_ID_MISMATCH');
88
+ if (action !== 'list' && !id)
89
+ failure('Provide a resource ID or a complete declaration with --file.', 'DECLARATIVE_RESOURCE_ID_REQUIRED');
90
+ if (action === 'import' && !source)
91
+ failure('Import requires --file.', 'DECLARATIVE_FILE_REQUIRED');
92
+ if (action === 'export' && !options.file)
93
+ failure('Export requires --file.', 'DECLARATIVE_FILE_REQUIRED');
94
+ if (action === 'rollback' && !options.releaseVersion)
95
+ failure('Rollback requires --release-version.', 'DECLARATIVE_RELEASE_VERSION_REQUIRED');
96
+ let surface = options.surface;
97
+ if (source) {
98
+ const surfaces = source.contract === 'Page' ? [source.surface] : source.supportedSurfaces;
99
+ surface ??= surfaces.length === 1 ? surfaces[0] : undefined;
100
+ if (!surface || !surfaces.includes(surface))
101
+ failure('Choose a surface supported by the JSON with --surface.', 'DECLARATIVE_SURFACE_REQUIRED');
102
+ }
103
+ const runtime = suppliedClient?.runtime ??
104
+ (await loadSemanticRuntime({
105
+ subscription: options.subscription,
106
+ inheritDefaultTeam: false,
107
+ ...(options.team ? { team: options.team } : {}),
108
+ }));
109
+ const client = suppliedClient ?? new DeclarativeClient(runtime, kind);
110
+ const meta = {
111
+ subscription: runtime.context.subscription,
112
+ baseUrl: runtime.context.baseUrl,
113
+ tenant: runtime.context.tenant,
114
+ resourceKind: kind,
115
+ };
116
+ if (surface === 'studio')
117
+ requireSemanticTeam(runtime, `${kind} ${action}`);
118
+ if (action === 'list')
119
+ return {
120
+ ...meta,
121
+ ...(await client.list({ surface, search: options.search, pageSize: options.pageSize ?? 60, pageToken: options.pageToken })),
122
+ };
123
+ if (!id)
124
+ throw new Error('Resource ID invariant failed.');
125
+ if (action === 'history')
126
+ return {
127
+ ...meta,
128
+ resourceId: id,
129
+ ...(await (options.releaseSlot
130
+ ? client.releaseHistory(id, options.releaseSlot, { pageSize: options.pageSize ?? 60, beforeVersion: options.beforeVersion })
131
+ : client.history(id, { pageSize: options.pageSize ?? 60, beforeVersion: options.beforeVersion }))),
132
+ };
133
+ if (action === 'get' || action === 'export') {
134
+ const draft = await getDraft(client, id);
135
+ if (action === 'get')
136
+ return { ...meta, resourceId: id, ...draft, publication: await observed(client, id, surface) };
137
+ const file = await open(options.file, 'wx', 0o600);
138
+ try {
139
+ await file.writeFile(`${JSON.stringify(draft.body, null, 2)}\n`);
140
+ }
141
+ finally {
142
+ await file.close();
143
+ }
144
+ return { ...meta, resourceId: id, version: draft.version, file: options.file };
145
+ }
146
+ let saved;
147
+ try {
148
+ if (source && surface) {
149
+ const input = { document: source, surface, ...(options.environment ? { environmentId: options.environment } : {}) };
150
+ const plan = await client.prepare(input);
151
+ const { planHash, ...planBody } = plan;
152
+ if (planHash !== canonicalContentHash(planBody) ||
153
+ plan.resourceId !== id ||
154
+ plan.resourceKind !== kind ||
155
+ plan.surface !== surface ||
156
+ (options.environment && plan.environmentRevisionRef.id !== options.environment) ||
157
+ plan.sourceContentHash !== canonicalContentHash(source))
158
+ failure('The import plan does not match the supplied document and target.', 'DECLARATIVE_RESPONSE_MISMATCH');
159
+ if (action === 'validate' || options.dryRun)
160
+ return {
161
+ ...meta,
162
+ action,
163
+ dryRun: Boolean(options.dryRun),
164
+ valid: !plan.diagnostics.some((entry) => entry.blocking),
165
+ validationCoverage: 'document-and-dependencies; publication requires validation of a saved draft',
166
+ plan,
167
+ };
168
+ if (plan.diagnostics.some((entry) => entry.blocking))
169
+ failure('Import is blocked by document or dependency diagnostics.', 'DECLARATIVE_IMPORT_BLOCKED', {
170
+ diagnostics: plan.diagnostics,
171
+ });
172
+ confirm(options);
173
+ saved = await client.import({
174
+ ...input,
175
+ expectedVersion: plan.expectedVersion,
176
+ expectedPlanHash: plan.planHash,
177
+ idempotencyKey: randomUUID(),
178
+ });
179
+ if (saved.plan.sourceContentHash !== plan.sourceContentHash ||
180
+ saved.plan.resourceId !== id ||
181
+ saved.plan.resourceKind !== kind ||
182
+ saved.revisionRef.contentHash !== canonicalContentHash(saved.plan.document)) {
183
+ failure('The import response does not identify the requested document.', 'DECLARATIVE_RESPONSE_MISMATCH');
184
+ }
185
+ const draft = await getDraft(client, id);
186
+ if (draft.version !== saved.revisionRef.revision || canonicalContentHash(draft.body) !== saved.revisionRef.contentHash)
187
+ failure('The saved draft changed or could not be read back.', 'DECLARATIVE_DRAFT_READBACK_MISMATCH');
188
+ if (action === 'import')
189
+ return {
190
+ ...meta,
191
+ resourceId: id,
192
+ action: 'import',
193
+ changed: saved.changed,
194
+ revisionRef: saved.revisionRef,
195
+ published: false,
196
+ verified: true,
197
+ };
198
+ }
199
+ const bootstrap = await client.bootstrap(id, surface);
200
+ const resources = bootstrap.resources.filter((entry) => entry.resourceKind === kind && entry.resourceId === id);
201
+ const resource = resources.length === 1 ? resources[0] : undefined;
202
+ if (!resource)
203
+ failure('The resource is absent or ambiguous in this context.', 'DECLARATIVE_RESOURCE_UNAVAILABLE');
204
+ if (saved && !same(resource.draftRevisionRef, saved.revisionRef))
205
+ failure('Another writer changed the draft after import. Publication was not sent.', 'DECLARATIVE_DRAFT_CHANGED');
206
+ const prepared = selectTarget(resource.preparedTargets, { ...options, ...(surface ? { surface } : {}) });
207
+ if (prepared.surface === 'studio')
208
+ requireSemanticTeam(runtime, `${kind} ${action}`);
209
+ const { releaseSlotId, releaseExpectedVersion, ...target } = prepared;
210
+ let definitionRef = resource.draftRevisionRef;
211
+ if (action === 'rollback') {
212
+ if (!releaseSlotId)
213
+ failure('Rollback requires an existing release slot.', 'DECLARATIVE_RELEASE_SLOT_REQUIRED');
214
+ const history = await client.releaseHistory(id, releaseSlotId, { pageSize: 1, beforeVersion: options.releaseVersion + 1 });
215
+ const historical = history.items.find((entry) => entry.version === options.releaseVersion);
216
+ if (!historical || historical.body.operation === 'deactivate')
217
+ failure('The requested historical release is unavailable.', 'DECLARATIVE_ROLLBACK_TARGET_UNAVAILABLE');
218
+ definitionRef = historical.body.contract === 'PageRelease' ? historical.body.pageRevisionRef : historical.body.navigationRevisionRef;
219
+ if (definitionRef.id !== id ||
220
+ !same(definitionRef.tenantScope, resource.tenantScope) ||
221
+ !same(historical.body.target.environmentRef, target.environmentRef) ||
222
+ historical.body.target.surface !== target.surface)
223
+ failure('The historical release does not match the selected target.', 'DECLARATIVE_ROLLBACK_TARGET_MISMATCH');
224
+ }
225
+ const intent = {
226
+ idempotencyKey: randomUUID(),
227
+ definitionVersion: definitionRef.revision,
228
+ ...(releaseSlotId ? { releaseSlotId } : {}),
229
+ releaseExpectedVersion,
230
+ publicationExpectedGeneration: bootstrap.generation,
231
+ target,
232
+ ...(action === 'rollback' ? { targetReleaseVersion: options.releaseVersion } : {}),
233
+ ...(options.reason ? { reason: options.reason } : {}),
234
+ };
235
+ if (action === 'rollback' && options.dryRun)
236
+ return {
237
+ ...meta,
238
+ resourceId: id,
239
+ action,
240
+ dryRun: true,
241
+ validationCoverage: 'historical-release-and-current-target; rollback recompiles on apply',
242
+ intent,
243
+ definitionRevisionRef: definitionRef,
244
+ };
245
+ if (action !== 'rollback') {
246
+ const validation = await client.validate(id, intent);
247
+ if (action === 'validate' || options.dryRun)
248
+ return { ...meta, resourceId: id, action, dryRun: Boolean(options.dryRun), target, validation };
249
+ const active = resource.releasePlacements.find((entry) => entry.releaseRevisionRef.id === releaseSlotId && same(entry.definitionRevisionRef, definitionRef));
250
+ if (active) {
251
+ const verification = await verifyPublication(client, id, active.releaseRevisionRef, definitionRef, target.surface);
252
+ return { ...meta, resourceId: id, action: 'publish', changed: false, verified: true, verification };
253
+ }
254
+ }
255
+ confirm(options);
256
+ const result = await client.publish(id, intent, action === 'rollback' ? 'rollback' : 'publish');
257
+ const item = result.items.length === 1 ? result.items[0] : undefined;
258
+ const returnedDefinition = item?.release.contract === 'PageRelease'
259
+ ? item.release.pageRevisionRef
260
+ : item?.release.contract === 'NavigationRelease'
261
+ ? item.release.navigationRevisionRef
262
+ : undefined;
263
+ if (!item ||
264
+ result.action !== action ||
265
+ item.resourceKind !== kind ||
266
+ item.resourceId !== id ||
267
+ !same(returnedDefinition, definitionRef) ||
268
+ (releaseSlotId && item.releaseRevisionRef.id !== releaseSlotId) ||
269
+ !same(item.release.target.environmentRef, target.environmentRef) ||
270
+ item.release.target.surface !== target.surface) {
271
+ throw new CliError('Publication was sent but the returned release does not match the requested target.', {
272
+ code: 'MUTATION_OUTCOME_UNKNOWN',
273
+ exitCode: EXIT_CODES.compatibility,
274
+ });
275
+ }
276
+ try {
277
+ const verification = await verifyPublication(client, id, item.releaseRevisionRef, definitionRef, target.surface);
278
+ return { ...meta, resourceId: id, action, changed: true, verified: true, verification };
279
+ }
280
+ catch (cause) {
281
+ throw new CliError('The release was published, but active runtime verification did not complete.', {
282
+ cause,
283
+ code: 'DECLARATIVE_PUBLICATION_UNVERIFIED',
284
+ exitCode: EXIT_CODES.partial,
285
+ safeDetails: {
286
+ publication: 'committed',
287
+ releaseRevisionRef: item.releaseRevisionRef,
288
+ definitionRevisionRef: definitionRef,
289
+ verificationError: cause instanceof CliError ? cause.code : 'READBACK_FAILED',
290
+ },
291
+ recovery: ['Read the active release and runtime as an authorized page audience member before retrying publication.'],
292
+ });
293
+ }
294
+ }
295
+ catch (cause) {
296
+ if (saved || (cause instanceof CliError && cause.code === 'MUTATION_OUTCOME_UNKNOWN')) {
297
+ throw new CliError(saved
298
+ ? 'The draft was saved; a later publication or verification stage did not complete.'
299
+ : 'The mutation outcome is unknown; current state was read without replaying the write.', {
300
+ cause,
301
+ code: saved ? 'DECLARATIVE_PARTIAL_RESULT' : 'MUTATION_OUTCOME_UNKNOWN',
302
+ exitCode: saved ? EXIT_CODES.partial : EXIT_CODES.network,
303
+ safeDetails: {
304
+ ...(saved ? { savedDraftRevisionRef: saved.revisionRef } : {}),
305
+ failedStage: cause instanceof CliError ? cause.code : 'UNEXPECTED_ERROR',
306
+ ...(cause instanceof CliError ? { details: cause.safeDetails } : {}),
307
+ observed: await observed(client, id, surface),
308
+ },
309
+ recovery: [`Inspect monkeys ${kind} get ${id} and its release history before the next write.`],
310
+ });
311
+ }
312
+ throw cause;
313
+ }
314
+ }
315
+ //# sourceMappingURL=lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/declarative/lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EACL,+BAA+B,GAIhC,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAClF,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,YAAY,EAAiC,MAAM,aAAa,CAAC;AAkB1E,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,QAAmC,EAAU,EAAE,CACxE,QAAQ,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC;AACzE,MAAM,IAAI,GAAG,CAAC,IAAa,EAAE,KAAc,EAAE,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,oBAAoB,CAAC,KAAK,CAAC,CAAC;AAC3G,SAAS,OAAO,CAAC,OAAe,EAAE,IAAY,EAAE,OAAiC;IAC/E,MAAM,IAAI,QAAQ,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC,UAAU,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACvH,CAAC;AACD,SAAS,OAAO,CAAC,OAAgB;IAC/B,kBAAkB,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACnH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAY,EAAE,IAAU;IACzD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACrC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QACjC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI;YAC/C,OAAO,CAAC,mEAAmE,EAAE,0BAA0B,CAAC,CAAC;QAC3G,IAAI,KAAc,CAAC;QACnB,IAAI,CAAC;YACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QACpD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,+CAA+C,EAAE,8BAA8B,CAAC,CAAC;QAC3F,CAAC;QACD,MAAM,QAAQ,GAAG,+BAA+B,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAClE,IAAI,CAAC,QAAQ,CAAC,OAAO;YACnB,OAAO,CAAC,mEAAmE,EAAE,8BAA8B,EAAE;gBAC3G,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;aAC7F,CAAC,CAAC;QACL,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,IAAI;YACtE,OAAO,CAAC,qDAAqD,EAAE,oCAAoC,CAAC,CAAC;QACvG,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,MAAyB,EAAE,EAAU;IAC3D,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACrC,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC;QAC9G,OAAO,CAAC,8DAA8D,EAAE,+BAA+B,CAAC,CAAC;IAC3G,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,MAAyB,EAAE,EAAU,EAAE,OAA6B;IAC1F,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAClD,OAAO;YACL,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,KAAK,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,KAAK,EAAE,CAAC;YACxG,UAAU,EAAE,KAAK,CAAC,UAAU;SAC7B,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,MAAyB,EACzB,EAAU,EACV,UAAuB,EACvB,aAA0B,EAC1B,OAA4B;IAE5B,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,KAAK,EAAE,IAAI,KAAK,CAAC,YAAY,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC;IAChH,MAAM,SAAS,GAAG,QAAQ,EAAE,iBAAiB,CAAC,IAAI,CAChD,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,UAAU,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,qBAAqB,EAAE,aAAa,CAAC,CAC1G,CAAC;IACF,IAAI,CAAC,SAAS;QAAE,OAAO,CAAC,uDAAuD,EAAE,gCAAgC,CAAC,CAAC;IACnH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IAC7D,MAAM,gBAAgB,GAAG,MAAM,CAAC,QAAQ,KAAK,mBAAmB,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,qBAAqB,CAAC;IACzH,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,aAAa,CAAC,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;QACzH,OAAO,CAAC,kEAAkE,EAAE,8BAA8B,CAAC,CAAC;IAC9G,CAAC;IACD,OAAO;QACL,kBAAkB,EAAE,UAAU;QAC9B,qBAAqB,EAAE,aAAa;QACpC,kBAAkB,EAAE,MAAM,CAAC,WAAW;QACtC,OAAO;QACP,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClE,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACnE,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAU,EAAE,MAAc,EAAE,OAAgB,EAAE,cAAkC;IACjH,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACvI,MAAM,EAAE,GAAG,OAAO,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACnE,IAAI,MAAM,IAAI,OAAO,CAAC,EAAE,IAAI,UAAU,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,EAAE;QAC3D,OAAO,CAAC,4CAA4C,EAAE,kCAAkC,CAAC,CAAC;IAC5F,IAAI,MAAM,KAAK,MAAM,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,8DAA8D,EAAE,kCAAkC,CAAC,CAAC;IAC1I,IAAI,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM;QAAE,OAAO,CAAC,yBAAyB,EAAE,2BAA2B,CAAC,CAAC;IACpG,IAAI,MAAM,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI;QAAE,OAAO,CAAC,yBAAyB,EAAE,2BAA2B,CAAC,CAAC;IAC1G,IAAI,MAAM,KAAK,UAAU,IAAI,CAAC,OAAO,CAAC,cAAc;QAClD,OAAO,CAAC,sCAAsC,EAAE,sCAAsC,CAAC,CAAC;IAC1F,IAAI,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAC9B,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC;QAC1F,OAAO,KAAK,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC5D,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;YACzC,OAAO,CAAC,wDAAwD,EAAE,8BAA8B,CAAC,CAAC;IACtG,CAAC;IACD,MAAM,OAAO,GACX,cAAc,EAAE,OAAO;QACvB,CAAC,MAAM,mBAAmB,CAAC;YACzB,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,kBAAkB,EAAE,KAAK;YACzB,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAChD,CAAC,CAAC,CAAC;IACN,MAAM,MAAM,GAAG,cAAc,IAAI,IAAI,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACtE,MAAM,IAAI,GAAG;QACX,YAAY,EAAE,OAAO,CAAC,OAAO,CAAC,YAAY;QAC1C,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO;QAChC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM;QAC9B,YAAY,EAAE,IAAI;KACnB,CAAC;IACF,IAAI,OAAO,KAAK,QAAQ;QAAE,mBAAmB,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,MAAM,EAAE,CAAC,CAAC;IAC5E,IAAI,MAAM,KAAK,MAAM;QACnB,OAAO;YACL,GAAG,IAAI;YACP,GAAG,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;SAC5H,CAAC;IACJ,IAAI,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IAC1D,IAAI,MAAM,KAAK,SAAS;QACtB,OAAO;YACL,GAAG,IAAI;YACP,UAAU,EAAE,EAAE;YACd,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW;gBAC5B,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,EAAE,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC;gBAC5H,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,EAAE,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;SACrG,CAAC;IACJ,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC5C,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACzC,IAAI,MAAM,KAAK,KAAK;YAAE,OAAO,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,GAAG,KAAK,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,CAAC;QACrH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QACpD,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QACnE,CAAC;gBAAS,CAAC;YACT,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC;QACD,OAAO,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;IACjF,CAAC;IACD,IAAI,KAAkD,CAAC;IACvD,IAAI,CAAC;QACH,IAAI,MAAM,IAAI,OAAO,EAAE,CAAC;YACtB,MAAM,KAAK,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YACpH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACzC,MAAM,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE,GAAG,IAAI,CAAC;YACvC,IACE,QAAQ,KAAK,oBAAoB,CAAC,QAAQ,CAAC;gBAC3C,IAAI,CAAC,UAAU,KAAK,EAAE;gBACtB,IAAI,CAAC,YAAY,KAAK,IAAI;gBAC1B,IAAI,CAAC,OAAO,KAAK,OAAO;gBACxB,CAAC,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,sBAAsB,CAAC,EAAE,KAAK,OAAO,CAAC,WAAW,CAAC;gBAC/E,IAAI,CAAC,iBAAiB,KAAK,oBAAoB,CAAC,MAAM,CAAC;gBAEvD,OAAO,CAAC,kEAAkE,EAAE,+BAA+B,CAAC,CAAC;YAC/G,IAAI,MAAM,KAAK,UAAU,IAAI,OAAO,CAAC,MAAM;gBACzC,OAAO;oBACL,GAAG,IAAI;oBACP,MAAM;oBACN,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;oBAC/B,KAAK,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC;oBACxD,kBAAkB,EAAE,6EAA6E;oBACjG,IAAI;iBACL,CAAC;YACJ,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC;gBAClD,OAAO,CAAC,0DAA0D,EAAE,4BAA4B,EAAE;oBAChG,WAAW,EAAE,IAAI,CAAC,WAAW;iBAC9B,CAAC,CAAC;YACL,OAAO,CAAC,OAAO,CAAC,CAAC;YACjB,KAAK,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;gBAC1B,GAAG,KAAK;gBACR,eAAe,EAAE,IAAI,CAAC,eAAe;gBACrC,gBAAgB,EAAE,IAAI,CAAC,QAAQ;gBAC/B,cAAc,EAAE,UAAU,EAAE;aAC7B,CAAC,CAAC;YACH,IACE,KAAK,CAAC,IAAI,CAAC,iBAAiB,KAAK,IAAI,CAAC,iBAAiB;gBACvD,KAAK,CAAC,IAAI,CAAC,UAAU,KAAK,EAAE;gBAC5B,KAAK,CAAC,IAAI,CAAC,YAAY,KAAK,IAAI;gBAChC,KAAK,CAAC,WAAW,CAAC,WAAW,KAAK,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAC3E,CAAC;gBACD,OAAO,CAAC,+DAA+D,EAAE,+BAA+B,CAAC,CAAC;YAC5G,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACzC,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,WAAW,CAAC,QAAQ,IAAI,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,WAAW,CAAC,WAAW;gBACpH,OAAO,CAAC,oDAAoD,EAAE,qCAAqC,CAAC,CAAC;YACvG,IAAI,MAAM,KAAK,QAAQ;gBACrB,OAAO;oBACL,GAAG,IAAI;oBACP,UAAU,EAAE,EAAE;oBACd,MAAM,EAAE,QAAQ;oBAChB,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,WAAW,EAAE,KAAK,CAAC,WAAW;oBAC9B,SAAS,EAAE,KAAK;oBAChB,QAAQ,EAAE,IAAI;iBACf,CAAC;QACN,CAAC;QACD,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QACtD,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,YAAY,KAAK,IAAI,IAAI,KAAK,CAAC,UAAU,KAAK,EAAE,CAAC,CAAC;QAChH,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACnE,IAAI,CAAC,QAAQ;YAAE,OAAO,CAAC,sDAAsD,EAAE,kCAAkC,CAAC,CAAC;QACnH,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,KAAK,CAAC,WAAW,CAAC;YAC9D,OAAO,CAAC,0EAA0E,EAAE,2BAA2B,CAAC,CAAC;QACnH,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC,eAAe,EAAE,EAAE,GAAG,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACzG,IAAI,QAAQ,CAAC,OAAO,KAAK,QAAQ;YAAE,mBAAmB,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,MAAM,EAAE,CAAC,CAAC;QACrF,MAAM,EAAE,aAAa,EAAE,sBAAsB,EAAE,GAAG,MAAM,EAAE,GAAG,QAAQ,CAAC;QACtE,IAAI,aAAa,GAAG,QAAQ,CAAC,gBAAgB,CAAC;QAC9C,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;YAC1B,IAAI,CAAC,aAAa;gBAAE,OAAO,CAAC,6CAA6C,EAAE,mCAAmC,CAAC,CAAC;YAChH,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,cAAe,GAAG,CAAC,EAAE,CAAC,CAAC;YAC5H,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;YAC3F,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,IAAI,CAAC,SAAS,KAAK,YAAY;gBAC3D,OAAO,CAAC,kDAAkD,EAAE,yCAAyC,CAAC,CAAC;YACzG,aAAa,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,KAAK,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,qBAAqB,CAAC;YACrI,IACE,aAAa,CAAC,EAAE,KAAK,EAAE;gBACvB,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,QAAQ,CAAC,WAAW,CAAC;gBACtD,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,cAAc,CAAC;gBACnE,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO;gBAEjD,OAAO,CAAC,4DAA4D,EAAE,sCAAsC,CAAC,CAAC;QAClH,CAAC;QACD,MAAM,MAAM,GAAG;YACb,cAAc,EAAE,UAAU,EAAE;YAC5B,iBAAiB,EAAE,aAAa,CAAC,QAAQ;YACzC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3C,sBAAsB;YACtB,6BAA6B,EAAE,SAAS,CAAC,UAAU;YACnD,MAAM;YACN,GAAG,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,OAAO,CAAC,cAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnF,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACtD,CAAC;QACF,IAAI,MAAM,KAAK,UAAU,IAAI,OAAO,CAAC,MAAM;YACzC,OAAO;gBACL,GAAG,IAAI;gBACP,UAAU,EAAE,EAAE;gBACd,MAAM;gBACN,MAAM,EAAE,IAAI;gBACZ,kBAAkB,EAAE,qEAAqE;gBACzF,MAAM;gBACN,qBAAqB,EAAE,aAAa;aACrC,CAAC;QACJ,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;YAC1B,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YACrD,IAAI,MAAM,KAAK,UAAU,IAAI,OAAO,CAAC,MAAM;gBACzC,OAAO,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;YAClG,MAAM,MAAM,GAAG,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAC5C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE,KAAK,aAAa,IAAI,IAAI,CAAC,KAAK,CAAC,qBAAqB,EAAE,aAAa,CAAC,CAC7G,CAAC;YACF,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,YAAY,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,kBAAkB,EAAE,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;gBACnH,OAAO,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;YACtG,CAAC;QACH,CAAC;QACD,OAAO,CAAC,OAAO,CAAC,CAAC;QACjB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAChG,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACrE,MAAM,kBAAkB,GACtB,IAAI,EAAE,OAAO,CAAC,QAAQ,KAAK,aAAa;YACtC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe;YAC9B,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,KAAK,mBAAmB;gBAC9C,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,qBAAqB;gBACpC,CAAC,CAAC,SAAS,CAAC;QAClB,IACE,CAAC,IAAI;YACL,MAAM,CAAC,MAAM,KAAK,MAAM;YACxB,IAAI,CAAC,YAAY,KAAK,IAAI;YAC1B,IAAI,CAAC,UAAU,KAAK,EAAE;YACtB,CAAC,IAAI,CAAC,kBAAkB,EAAE,aAAa,CAAC;YACxC,CAAC,aAAa,IAAI,IAAI,CAAC,kBAAkB,CAAC,EAAE,KAAK,aAAa,CAAC;YAC/D,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,cAAc,CAAC;YAChE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO,EAC9C,CAAC;YACD,MAAM,IAAI,QAAQ,CAAC,oFAAoF,EAAE;gBACvG,IAAI,EAAE,0BAA0B;gBAChC,QAAQ,EAAE,UAAU,CAAC,aAAa;aACnC,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC,kBAAkB,EAAE,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;YACjH,OAAO,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;QAC1F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,QAAQ,CAAC,8EAA8E,EAAE;gBACjG,KAAK;gBACL,IAAI,EAAE,oCAAoC;gBAC1C,QAAQ,EAAE,UAAU,CAAC,OAAO;gBAC5B,WAAW,EAAE;oBACX,WAAW,EAAE,WAAW;oBACxB,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;oBAC3C,qBAAqB,EAAE,aAAa;oBACpC,iBAAiB,EAAE,KAAK,YAAY,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,iBAAiB;iBAC9E;gBACD,QAAQ,EAAE,CAAC,wGAAwG,CAAC;aACrH,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,IAAI,CAAC,KAAK,YAAY,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,0BAA0B,CAAC,EAAE,CAAC;YACtF,MAAM,IAAI,QAAQ,CAChB,KAAK;gBACH,CAAC,CAAC,kFAAkF;gBACpF,CAAC,CAAC,sFAAsF,EAC1F;gBACE,KAAK;gBACL,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,0BAA0B;gBACvE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO;gBACzD,WAAW,EAAE;oBACX,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,qBAAqB,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC9D,WAAW,EAAE,KAAK,YAAY,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAkB;oBACxE,GAAG,CAAC,KAAK,YAAY,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACpE,QAAQ,EAAE,MAAM,QAAQ,CAAC,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC;iBAC9C;gBACD,QAAQ,EAAE,CAAC,mBAAmB,IAAI,QAAQ,EAAE,iDAAiD,CAAC;aAC/F,CACF,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { DeclarativeAuthoringBootstrap } from '@inf-monkeys-tech/monkeys/contracts';
2
+ export type Kind = 'page' | 'navigation';
3
+ export interface TargetOptions {
4
+ surface?: 'kernel' | 'studio';
5
+ environment?: string;
6
+ placement?: string;
7
+ routeIndex?: number;
8
+ releaseSlot?: string;
9
+ }
10
+ export type PreparedTarget = DeclarativeAuthoringBootstrap['resources'][number]['preparedTargets'][number];
11
+ export declare function selectTarget(targets: PreparedTarget[], options: TargetOptions): PreparedTarget;
12
+ //# sourceMappingURL=target.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"target.d.ts","sourceRoot":"","sources":["../../src/declarative/target.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,qCAAqC,CAAC;AAGzF,MAAM,MAAM,IAAI,GAAG,MAAM,GAAG,YAAY,CAAC;AACzC,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AACD,MAAM,MAAM,cAAc,GAAG,6BAA6B,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3G,wBAAgB,YAAY,CAAC,OAAO,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,aAAa,GAAG,cAAc,CAkB9F"}
@@ -0,0 +1,18 @@
1
+ import { CliError, EXIT_CODES } from '../errors/cli-error.js';
2
+ export function selectTarget(targets, options) {
3
+ const matches = targets.filter((target) => (!options.surface || target.surface === options.surface) &&
4
+ (!options.environment || target.environmentRef.id === options.environment) &&
5
+ (!options.placement || target.placement === options.placement) &&
6
+ (options.routeIndex === undefined || target.routeClaimIndex === options.routeIndex) &&
7
+ (!options.releaseSlot || target.releaseSlotId === options.releaseSlot));
8
+ const target = matches.length === 1 ? matches[0] : undefined;
9
+ if (!target)
10
+ throw new CliError(matches.length ? 'The publication target is ambiguous.' : 'The requested publication target is unavailable.', {
11
+ code: matches.length ? 'DECLARATIVE_TARGET_AMBIGUOUS' : 'DECLARATIVE_TARGET_UNAVAILABLE',
12
+ exitCode: EXIT_CODES.validation,
13
+ recovery: ['Select a server-prepared target with --surface, --environment, --placement, --route-index or --release-slot.'],
14
+ safeDetails: { targets },
15
+ });
16
+ return target;
17
+ }
18
+ //# sourceMappingURL=target.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"target.js","sourceRoot":"","sources":["../../src/declarative/target.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAY9D,MAAM,UAAU,YAAY,CAAC,OAAyB,EAAE,OAAsB;IAC5E,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAC5B,CAAC,MAAM,EAAE,EAAE,CACT,CAAC,CAAC,OAAO,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC;QACxD,CAAC,CAAC,OAAO,CAAC,WAAW,IAAI,MAAM,CAAC,cAAc,CAAC,EAAE,KAAK,OAAO,CAAC,WAAW,CAAC;QAC1E,CAAC,CAAC,OAAO,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,KAAK,OAAO,CAAC,SAAS,CAAC;QAC9D,CAAC,OAAO,CAAC,UAAU,KAAK,SAAS,IAAI,MAAM,CAAC,eAAe,KAAK,OAAO,CAAC,UAAU,CAAC;QACnF,CAAC,CAAC,OAAO,CAAC,WAAW,IAAI,MAAM,CAAC,aAAa,KAAK,OAAO,CAAC,WAAW,CAAC,CACzE,CAAC;IACF,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7D,IAAI,CAAC,MAAM;QACT,MAAM,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,sCAAsC,CAAC,CAAC,CAAC,kDAAkD,EAAE;YAC/H,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,gCAAgC;YACxF,QAAQ,EAAE,UAAU,CAAC,UAAU;YAC/B,QAAQ,EAAE,CAAC,8GAA8G,CAAC;YAC1H,WAAW,EAAE,EAAE,OAAO,EAAE;SACzB,CAAC,CAAC;IACL,OAAO,MAAM,CAAC;AAChB,CAAC"}