@hyperdreamer/pi-webui 1.15.2 → 1.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/THIRD_PARTY_NOTICES.md +25 -0
- package/dist/client/assets/{CodeViewer-CHZziPur.js → CodeViewer-D8_Y_D_Y.js} +1 -1
- package/dist/client/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- package/dist/client/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- package/dist/client/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- package/dist/client/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- package/dist/client/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- package/dist/client/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- package/dist/client/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- package/dist/client/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- package/dist/client/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- package/dist/client/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- package/dist/client/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- package/dist/client/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- package/dist/client/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- package/dist/client/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- package/dist/client/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- package/dist/client/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- package/dist/client/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- package/dist/client/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- package/dist/client/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- package/dist/client/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- package/dist/client/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- package/dist/client/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- package/dist/client/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- package/dist/client/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- package/dist/client/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- package/dist/client/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- package/dist/client/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- package/dist/client/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- package/dist/client/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- package/dist/client/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- package/dist/client/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- package/dist/client/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- package/dist/client/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- package/dist/client/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- package/dist/client/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- package/dist/client/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- package/dist/client/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- package/dist/client/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- package/dist/client/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- package/dist/client/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- package/dist/client/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- package/dist/client/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- package/dist/client/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- package/dist/client/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- package/dist/client/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- package/dist/client/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- package/dist/client/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- package/dist/client/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- package/dist/client/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- package/dist/client/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- package/dist/client/assets/{UnifiedDiffViewer-j1-AFZ8f.js → UnifiedDiffViewer-BTrnWTSL.js} +1 -1
- package/dist/client/assets/index-Dvk5qYPr.js +8001 -0
- package/dist/client/index.html +1 -1
- package/dist/config.js +10 -0
- package/dist/config.js.map +1 -1
- package/dist/configMutationCoordinator.js +10 -1
- package/dist/configMutationCoordinator.js.map +1 -1
- package/dist/pi-webui-plugins/workspace-tasks/config.js +3 -132
- package/dist/pi-webui-plugins/workspace-tasks/pi-webui-plugin.js +14 -2
- package/dist/pi-webui-plugins/workspace-tasks/taskDomain.js +203 -0
- package/dist/pi-webui-plugins/workspace-tasks/taskRunner.js +3 -2
- package/dist/pi-webui-plugins/workspace-tasks/tasksPanelElement.js +947 -673
- package/dist/server/app.js +20 -4
- package/dist/server/app.js.map +1 -1
- package/dist/server/configRoutes.js +5 -0
- package/dist/server/configRoutes.js.map +1 -1
- package/dist/server/machines/machineProxyRoutes.js +4 -4
- package/dist/server/machines/machineProxyRoutes.js.map +1 -1
- package/dist/server/workspaceExplorerRoutes.js +64 -4
- package/dist/server/workspaceExplorerRoutes.js.map +1 -1
- package/dist/server/workspaceTasks/workspaceTasksCatalogService.js +318 -0
- package/dist/server/workspaceTasks/workspaceTasksCatalogService.js.map +1 -0
- package/dist/server/workspaceTasks/workspaceTasksComposition.js +67 -0
- package/dist/server/workspaceTasks/workspaceTasksComposition.js.map +1 -0
- package/dist/server/workspaceTasks/workspaceTasksErrors.js +34 -0
- package/dist/server/workspaceTasks/workspaceTasksErrors.js.map +1 -0
- package/dist/server/workspaceTasks/workspaceTasksGlobalCatalogAdapter.js +169 -0
- package/dist/server/workspaceTasks/workspaceTasksGlobalCatalogAdapter.js.map +1 -0
- package/dist/server/workspaceTasks/workspaceTasksGlobalMutationGate.js +75 -0
- package/dist/server/workspaceTasks/workspaceTasksGlobalMutationGate.js.map +1 -0
- package/dist/server/workspaceTasks/workspaceTasksMoveProtocol.js +313 -0
- package/dist/server/workspaceTasks/workspaceTasksMoveProtocol.js.map +1 -0
- package/dist/server/workspaceTasks/workspaceTasksMoveRegistry.js +352 -0
- package/dist/server/workspaceTasks/workspaceTasksMoveRegistry.js.map +1 -0
- package/dist/server/workspaceTasks/workspaceTasksProxyRoutes.js +63 -0
- package/dist/server/workspaceTasks/workspaceTasksProxyRoutes.js.map +1 -0
- package/dist/server/workspaceTasks/workspaceTasksRoutes.js +153 -0
- package/dist/server/workspaceTasks/workspaceTasksRoutes.js.map +1 -0
- package/dist/server/workspaceTasks/workspaceTasksWorkspaceCatalogAdapter.js +171 -0
- package/dist/server/workspaceTasks/workspaceTasksWorkspaceCatalogAdapter.js.map +1 -0
- package/dist/server/workspaceTasks/workspaceTasksWorkspaceFile.js +227 -0
- package/dist/server/workspaceTasks/workspaceTasksWorkspaceFile.js.map +1 -0
- package/dist/server/workspaceTasks/workspaceTasksWorkspacePathGate.js +42 -0
- package/dist/server/workspaceTasks/workspaceTasksWorkspacePathGate.js.map +1 -0
- package/dist/server/workspaces/fileContentService.js +116 -6
- package/dist/server/workspaces/fileContentService.js.map +1 -1
- package/dist/shared/apiTypes.d.ts +132 -0
- package/dist/shared/apiTypes.js.map +1 -1
- package/dist/shared/federatedRoutes.js +15 -0
- package/dist/shared/federatedRoutes.js.map +1 -1
- package/dist/shared/workspaceFiles.js +2 -0
- package/dist/shared/workspaceFiles.js.map +1 -1
- package/dist/shared/workspaceTasks.d.ts +53 -0
- package/dist/shared/workspaceTasks.js +203 -0
- package/dist/shared/workspaceTasks.js.map +1 -0
- package/dist/shared/workspaceTasksApi.js +379 -0
- package/dist/shared/workspaceTasksApi.js.map +1 -0
- package/docs/config.md +22 -4
- package/docs/plugins.md +24 -13
- package/package.json +3 -1
- package/dist/client/assets/index-2RMTbgnM.js +0 -7737
- package/dist/pi-webui-plugins/workspace-tasks/workspaceTasksClient.js +0 -242
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { parseWorkspaceTasksConfig, serializeWorkspaceTasksConfig } from "../../shared/workspaceTasks.js";
|
|
2
|
+
import { WorkspaceTasksMoveRecoveryPendingError } from "./workspaceTasksMoveRegistry.js";
|
|
3
|
+
const WORKSPACE_TASKS_PLUGIN_ID = "workspace-tasks";
|
|
4
|
+
const GLOBAL_TASKS_SETTING = "globalTasks";
|
|
5
|
+
const GENERIC_CONFIG_EXPECTED_REVISION = "generic-config";
|
|
6
|
+
/**
|
|
7
|
+
* Adds the move registry boundary to first-party generic config mutations.
|
|
8
|
+
* The async reconciliation runs before coordinator entry; the synchronous
|
|
9
|
+
* assertion runs from the coordinator's mutation callback immediately before
|
|
10
|
+
* the underlying config service can publish the next projection.
|
|
11
|
+
*/
|
|
12
|
+
export class WorkspaceTasksGlobalMutationGate {
|
|
13
|
+
constructor(authorizer) {
|
|
14
|
+
this.authorizer = authorizer;
|
|
15
|
+
}
|
|
16
|
+
decorate(config) {
|
|
17
|
+
return {
|
|
18
|
+
read: () => config.read(),
|
|
19
|
+
write: (next) => this.mutateAfterReconciliation(config, () => next),
|
|
20
|
+
update: (mutate) => this.mutateAfterReconciliation(config, mutate),
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
async mutateAfterReconciliation(config, mutate) {
|
|
24
|
+
let recoveryError;
|
|
25
|
+
try {
|
|
26
|
+
await this.authorizer.reconcileGlobalMoveClaim({ scope: "global" });
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
if (!(error instanceof WorkspaceTasksMoveRecoveryPendingError))
|
|
30
|
+
throw error;
|
|
31
|
+
recoveryError = error;
|
|
32
|
+
}
|
|
33
|
+
return config.update((current) => {
|
|
34
|
+
const beforeProjection = globalTaskProjection(current);
|
|
35
|
+
const next = mutate(current);
|
|
36
|
+
if (beforeProjection === globalTaskProjection(next))
|
|
37
|
+
return next;
|
|
38
|
+
if (recoveryError !== undefined)
|
|
39
|
+
throw recoveryError;
|
|
40
|
+
this.authorizer.assertGlobalMutationAllowed(globalMutationIntent(next));
|
|
41
|
+
return next;
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function globalMutationIntent(config) {
|
|
46
|
+
return {
|
|
47
|
+
scope: "global",
|
|
48
|
+
expectedRevision: GENERIC_CONFIG_EXPECTED_REVISION,
|
|
49
|
+
config: parsedGlobalTaskCatalog(config),
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
function globalTaskProjection(config) {
|
|
53
|
+
const raw = config.plugins?.[WORKSPACE_TASKS_PLUGIN_ID]?.settings?.[GLOBAL_TASKS_SETTING];
|
|
54
|
+
const parsed = parseWorkspaceTasksConfig(raw === undefined ? emptyCatalog() : raw);
|
|
55
|
+
if (parsed.ok)
|
|
56
|
+
return serializeWorkspaceTasksConfig(parsed.config);
|
|
57
|
+
return `invalid:${serializedUnknownValue(raw)}`;
|
|
58
|
+
}
|
|
59
|
+
function parsedGlobalTaskCatalog(config) {
|
|
60
|
+
const raw = config.plugins?.[WORKSPACE_TASKS_PLUGIN_ID]?.settings?.[GLOBAL_TASKS_SETTING];
|
|
61
|
+
const parsed = parseWorkspaceTasksConfig(raw === undefined ? emptyCatalog() : raw);
|
|
62
|
+
return parsed.ok ? parsed.config : emptyCatalog();
|
|
63
|
+
}
|
|
64
|
+
function emptyCatalog() {
|
|
65
|
+
return { version: 1, tasks: [] };
|
|
66
|
+
}
|
|
67
|
+
function serializedUnknownValue(value) {
|
|
68
|
+
try {
|
|
69
|
+
return JSON.stringify(value);
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
return "unserializable";
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=workspaceTasksGlobalMutationGate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspaceTasksGlobalMutationGate.js","sourceRoot":"","sources":["../../../src/server/workspaceTasks/workspaceTasksGlobalMutationGate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { deriveWorkspaceTaskMove, isWorkspaceTaskId, parseWorkspaceTasksConfig, serializeWorkspaceTasksConfig, } from "../../shared/workspaceTasks.js";
|
|
3
|
+
import { WorkspaceTasksInvalidCatalogError, WorkspaceTasksRevisionConflictError, } from "./workspaceTasksErrors.js";
|
|
4
|
+
export class WorkspaceTasksMoveValidationError extends Error {
|
|
5
|
+
constructor(message) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.code = "WORKSPACE_TASKS_MOVE_VALIDATION";
|
|
8
|
+
this.name = "WorkspaceTasksMoveValidationError";
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Derives every catalog state a destination-first move is allowed to publish.
|
|
13
|
+
* The function only consumes already parsed wire data; filesystem and config
|
|
14
|
+
* observations stay outside this protocol boundary.
|
|
15
|
+
*/
|
|
16
|
+
export function deriveWorkspaceTasksMovePlan(address, request) {
|
|
17
|
+
assertAddress(address);
|
|
18
|
+
const operationId = Reflect.get(request, "operationId");
|
|
19
|
+
assertOperationId(operationId);
|
|
20
|
+
const intent = Reflect.get(request, "intent");
|
|
21
|
+
if (!isMoveIntent(intent))
|
|
22
|
+
throw new WorkspaceTasksMoveValidationError("Workspace task move intent is invalid");
|
|
23
|
+
const source = normalizeSource(request.source);
|
|
24
|
+
const destination = normalizeDestination(request.destination);
|
|
25
|
+
if (source.ref.scope === destination.scope) {
|
|
26
|
+
throw new WorkspaceTasksMoveValidationError("Workspace task moves must cross scopes");
|
|
27
|
+
}
|
|
28
|
+
const sourceTaskCount = source.expectedCatalog.config.tasks.filter((task) => task.id === source.ref.id).length;
|
|
29
|
+
if (sourceTaskCount !== 1) {
|
|
30
|
+
throw new WorkspaceTasksMoveValidationError(`Source task must resolve exactly once: ${source.ref.id}`);
|
|
31
|
+
}
|
|
32
|
+
const destinationCatalog = destination.expectedCatalog.kind === "missing"
|
|
33
|
+
? emptyCatalog()
|
|
34
|
+
: destination.expectedCatalog.config;
|
|
35
|
+
const transformed = deriveWorkspaceTaskMove({
|
|
36
|
+
source: { ref: source.ref, config: source.expectedCatalog.config },
|
|
37
|
+
destination: {
|
|
38
|
+
scope: destination.scope,
|
|
39
|
+
config: destinationCatalog,
|
|
40
|
+
task: destination.task,
|
|
41
|
+
},
|
|
42
|
+
});
|
|
43
|
+
const pristine = pairFor(source, destination);
|
|
44
|
+
const destinationApplied = pairAfterDestination(source, destination, transformed.destinationAfter);
|
|
45
|
+
const complete = pairAfterComplete(source, destination, transformed.sourceAfter, transformed.destinationAfter);
|
|
46
|
+
const destinationWrite = destinationWriteIntent(address, destination, transformed.destinationAfter);
|
|
47
|
+
const sourceRemoval = sourceRemovalIntent(address, source, transformed.sourceAfter);
|
|
48
|
+
const normalizedRequest = {
|
|
49
|
+
operationId,
|
|
50
|
+
intent,
|
|
51
|
+
source,
|
|
52
|
+
destination,
|
|
53
|
+
};
|
|
54
|
+
return {
|
|
55
|
+
address: { ...address },
|
|
56
|
+
operationId,
|
|
57
|
+
intent,
|
|
58
|
+
request: normalizedRequest,
|
|
59
|
+
source,
|
|
60
|
+
destination,
|
|
61
|
+
pristine,
|
|
62
|
+
destinationApplied,
|
|
63
|
+
complete,
|
|
64
|
+
destinationWrite,
|
|
65
|
+
sourceRemoval,
|
|
66
|
+
destinationIntent: destinationWrite,
|
|
67
|
+
sourceIntent: sourceRemoval,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Compares an authoritative observation with the three exact states derived
|
|
72
|
+
* from a move. Invalid and unavailable observations are deliberately
|
|
73
|
+
* unrecognized rather than being treated as an empty catalog.
|
|
74
|
+
*/
|
|
75
|
+
export function classifyWorkspaceTasksMovePair(plan, observed) {
|
|
76
|
+
if (matchesPair(plan.pristine, observed))
|
|
77
|
+
return "pristine";
|
|
78
|
+
if (matchesPair(plan.destinationApplied, observed))
|
|
79
|
+
return "destination-applied";
|
|
80
|
+
if (matchesPair(plan.complete, observed))
|
|
81
|
+
return "complete";
|
|
82
|
+
return "unrecognized";
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* A retry changes only the request intent. This identity intentionally keeps
|
|
86
|
+
* all semantic expectations, ordering, address, and derived publications.
|
|
87
|
+
*/
|
|
88
|
+
export function sameWorkspaceTasksMoveContext(left, right) {
|
|
89
|
+
return moveContextKey(left) === moveContextKey(right);
|
|
90
|
+
}
|
|
91
|
+
export function workspaceTasksGlobalCatalogRevision(config) {
|
|
92
|
+
return createHash("sha256").update(serializeWorkspaceTasksConfig(config), "utf8").digest("hex");
|
|
93
|
+
}
|
|
94
|
+
export function workspaceTasksWorkspaceCatalogRevision(config) {
|
|
95
|
+
const hash = createHash("sha256");
|
|
96
|
+
hash.update("workspace-task-file:present\0", "utf8");
|
|
97
|
+
hash.update(Buffer.from(serializeWorkspaceTasksConfig(config), "utf8"));
|
|
98
|
+
return hash.digest("hex");
|
|
99
|
+
}
|
|
100
|
+
function normalizeSource(source) {
|
|
101
|
+
assertTaskRef(source.ref);
|
|
102
|
+
if (source.ref.scope === "workspace") {
|
|
103
|
+
const expectedCatalog = normalizeLoadedWorkspaceExpectation(source.expectedCatalog, "source");
|
|
104
|
+
assertSourceTask(expectedCatalog.config, source.ref.id);
|
|
105
|
+
return {
|
|
106
|
+
ref: { scope: "workspace", id: source.ref.id },
|
|
107
|
+
expectedCatalog,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
const expectedCatalog = normalizeGlobalExpectation(source.expectedCatalog, "source");
|
|
111
|
+
assertSourceTask(expectedCatalog.config, source.ref.id);
|
|
112
|
+
return {
|
|
113
|
+
ref: { scope: "global", id: source.ref.id },
|
|
114
|
+
expectedCatalog,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
function normalizeDestination(destination) {
|
|
118
|
+
if (destination.scope === "workspace") {
|
|
119
|
+
return {
|
|
120
|
+
scope: "workspace",
|
|
121
|
+
expectedCatalog: normalizeWorkspaceExpectation(destination.expectedCatalog, "destination"),
|
|
122
|
+
task: normalizeTask(destination.task),
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
const expectedCatalog = normalizeGlobalExpectation(destination.expectedCatalog, "destination");
|
|
126
|
+
return {
|
|
127
|
+
scope: "global",
|
|
128
|
+
expectedCatalog,
|
|
129
|
+
task: normalizeTask(destination.task),
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
function normalizeGlobalExpectation(expectation, label) {
|
|
133
|
+
if (!isRecord(expectation) || expectation["kind"] !== "loaded" || typeof expectation["revision"] !== "string"
|
|
134
|
+
|| expectation["revision"].trim() === "") {
|
|
135
|
+
throw new WorkspaceTasksMoveValidationError(`Workspace task ${label} expectation is invalid`);
|
|
136
|
+
}
|
|
137
|
+
const config = normalizeCatalog(expectation["config"], `${label} expectation`);
|
|
138
|
+
const normalized = { kind: "loaded", revision: expectation["revision"], config };
|
|
139
|
+
if (normalized.revision !== workspaceTasksGlobalCatalogRevision(normalized.config)) {
|
|
140
|
+
throw new WorkspaceTasksRevisionConflictError();
|
|
141
|
+
}
|
|
142
|
+
return normalized;
|
|
143
|
+
}
|
|
144
|
+
function normalizeLoadedWorkspaceExpectation(expectation, label) {
|
|
145
|
+
if (!isRecord(expectation) || expectation["kind"] !== "loaded" || typeof expectation["revision"] !== "string"
|
|
146
|
+
|| expectation["revision"].trim() === "") {
|
|
147
|
+
throw new WorkspaceTasksMoveValidationError(`Workspace task ${label} expectation is invalid`);
|
|
148
|
+
}
|
|
149
|
+
return {
|
|
150
|
+
kind: "loaded",
|
|
151
|
+
revision: expectation["revision"],
|
|
152
|
+
config: normalizeCatalog(expectation["config"], `${label} expectation`),
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
function normalizeWorkspaceExpectation(expectation, label) {
|
|
156
|
+
if (!isRecord(expectation) || typeof expectation.revision !== "string" || expectation.revision.trim() === "") {
|
|
157
|
+
throw new WorkspaceTasksMoveValidationError(`Workspace task ${label} expectation is invalid`);
|
|
158
|
+
}
|
|
159
|
+
if (expectation.kind === "missing")
|
|
160
|
+
return { kind: "missing", revision: expectation.revision };
|
|
161
|
+
return normalizeLoadedWorkspaceExpectation(expectation, label);
|
|
162
|
+
}
|
|
163
|
+
function normalizeTask(task) {
|
|
164
|
+
const parsed = parseWorkspaceTasksConfig({ version: 1, tasks: [task] });
|
|
165
|
+
if (!parsed.ok)
|
|
166
|
+
throw new WorkspaceTasksInvalidCatalogError(parsed.error);
|
|
167
|
+
const normalized = parsed.config.tasks[0];
|
|
168
|
+
if (normalized === undefined)
|
|
169
|
+
throw new WorkspaceTasksInvalidCatalogError("Move destination task is missing");
|
|
170
|
+
return normalized;
|
|
171
|
+
}
|
|
172
|
+
function normalizeCatalog(value, label) {
|
|
173
|
+
const parsed = parseWorkspaceTasksConfig(value);
|
|
174
|
+
if (!parsed.ok)
|
|
175
|
+
throw new WorkspaceTasksInvalidCatalogError(`${label}: ${parsed.error}`);
|
|
176
|
+
return parsed.config;
|
|
177
|
+
}
|
|
178
|
+
function pairFor(source, destination) {
|
|
179
|
+
if (source.ref.scope === "workspace") {
|
|
180
|
+
if (destination.scope !== "global")
|
|
181
|
+
throw new WorkspaceTasksMoveValidationError("Workspace task moves must cross scopes");
|
|
182
|
+
return { workspace: source.expectedCatalog, global: destination.expectedCatalog };
|
|
183
|
+
}
|
|
184
|
+
if (destination.scope !== "workspace")
|
|
185
|
+
throw new WorkspaceTasksMoveValidationError("Workspace task moves must cross scopes");
|
|
186
|
+
return { workspace: destination.expectedCatalog, global: source.expectedCatalog };
|
|
187
|
+
}
|
|
188
|
+
function pairAfterDestination(source, destination, destinationAfter) {
|
|
189
|
+
const pristine = pairFor(source, destination);
|
|
190
|
+
if (destination.scope === "workspace") {
|
|
191
|
+
return {
|
|
192
|
+
workspace: { kind: "loaded", config: destinationAfter, revision: workspaceTasksWorkspaceCatalogRevision(destinationAfter) },
|
|
193
|
+
global: pristine.global,
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
return {
|
|
197
|
+
workspace: pristine.workspace,
|
|
198
|
+
global: { kind: "loaded", config: destinationAfter, revision: workspaceTasksGlobalCatalogRevision(destinationAfter) },
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
function pairAfterComplete(source, destination, sourceAfter, destinationAfter) {
|
|
202
|
+
const destinationPair = pairAfterDestination(source, destination, destinationAfter);
|
|
203
|
+
if (source.ref.scope === "workspace") {
|
|
204
|
+
return {
|
|
205
|
+
workspace: { kind: "loaded", config: sourceAfter, revision: workspaceTasksWorkspaceCatalogRevision(sourceAfter) },
|
|
206
|
+
global: destinationPair.global,
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
return {
|
|
210
|
+
workspace: destinationPair.workspace,
|
|
211
|
+
global: { kind: "loaded", config: sourceAfter, revision: workspaceTasksGlobalCatalogRevision(sourceAfter) },
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
function destinationWriteIntent(address, destination, destinationAfter) {
|
|
215
|
+
if (destination.scope === "workspace") {
|
|
216
|
+
return {
|
|
217
|
+
scope: "workspace",
|
|
218
|
+
address: { ...address },
|
|
219
|
+
expectedRevision: destination.expectedCatalog.revision,
|
|
220
|
+
config: destinationAfter,
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
return {
|
|
224
|
+
scope: "global",
|
|
225
|
+
expectedRevision: destination.expectedCatalog.revision,
|
|
226
|
+
config: destinationAfter,
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
function sourceRemovalIntent(address, source, sourceAfter) {
|
|
230
|
+
if (source.ref.scope === "workspace") {
|
|
231
|
+
return {
|
|
232
|
+
scope: "workspace",
|
|
233
|
+
address: { ...address },
|
|
234
|
+
expectedRevision: source.expectedCatalog.revision,
|
|
235
|
+
config: sourceAfter,
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
return {
|
|
239
|
+
scope: "global",
|
|
240
|
+
expectedRevision: source.expectedCatalog.revision,
|
|
241
|
+
config: sourceAfter,
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
function matchesPair(expected, observed) {
|
|
245
|
+
return matchesWorkspaceExpectation(expected.workspace, observed.workspace)
|
|
246
|
+
&& matchesGlobalExpectation(expected.global, observed.global);
|
|
247
|
+
}
|
|
248
|
+
function matchesWorkspaceExpectation(expected, observed) {
|
|
249
|
+
if (expected.kind === "missing")
|
|
250
|
+
return observed.kind === "missing" && observed.revision === expected.revision;
|
|
251
|
+
return observed.kind === "loaded"
|
|
252
|
+
&& observed.revision === expected.revision
|
|
253
|
+
&& semanticConfigEqual(expected.config, observed.config);
|
|
254
|
+
}
|
|
255
|
+
function matchesGlobalExpectation(expected, observed) {
|
|
256
|
+
return observed.kind === "loaded"
|
|
257
|
+
&& observed.revision === expected.revision
|
|
258
|
+
&& semanticConfigEqual(expected.config, observed.config);
|
|
259
|
+
}
|
|
260
|
+
function semanticConfigEqual(left, right) {
|
|
261
|
+
try {
|
|
262
|
+
const parsed = parseWorkspaceTasksConfig(right);
|
|
263
|
+
return parsed.ok && serializeWorkspaceTasksConfig(left) === serializeWorkspaceTasksConfig(parsed.config);
|
|
264
|
+
}
|
|
265
|
+
catch {
|
|
266
|
+
return false;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
function moveContextKey(plan) {
|
|
270
|
+
return JSON.stringify({
|
|
271
|
+
address: plan.address,
|
|
272
|
+
operationId: plan.operationId,
|
|
273
|
+
source: plan.source,
|
|
274
|
+
destination: plan.destination,
|
|
275
|
+
pristine: plan.pristine,
|
|
276
|
+
destinationApplied: plan.destinationApplied,
|
|
277
|
+
complete: plan.complete,
|
|
278
|
+
destinationWrite: plan.destinationWrite,
|
|
279
|
+
sourceRemoval: plan.sourceRemoval,
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
function assertAddress(address) {
|
|
283
|
+
if (!isRecord(address) || typeof address.projectId !== "string" || typeof address.workspaceId !== "string"
|
|
284
|
+
|| address.projectId.trim() === "" || address.workspaceId.trim() === "") {
|
|
285
|
+
throw new WorkspaceTasksMoveValidationError("Workspace catalog address is invalid");
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
function assertOperationId(operationId) {
|
|
289
|
+
if (typeof operationId !== "string" || operationId.trim() === "") {
|
|
290
|
+
throw new WorkspaceTasksMoveValidationError("Workspace task move operation ID is invalid");
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
function assertTaskRef(value) {
|
|
294
|
+
if (!isRecord(value) || (value["scope"] !== "global" && value["scope"] !== "workspace")
|
|
295
|
+
|| typeof value["id"] !== "string" || !isWorkspaceTaskId(value["id"])) {
|
|
296
|
+
throw new WorkspaceTasksMoveValidationError("Workspace task move source reference is invalid");
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
function assertSourceTask(config, id) {
|
|
300
|
+
const count = config.tasks.filter((task) => task.id === id).length;
|
|
301
|
+
if (count !== 1)
|
|
302
|
+
throw new WorkspaceTasksMoveValidationError(`Source task must resolve exactly once: ${id}`);
|
|
303
|
+
}
|
|
304
|
+
function isMoveIntent(value) {
|
|
305
|
+
return value === "start" || value === "retry";
|
|
306
|
+
}
|
|
307
|
+
function emptyCatalog() {
|
|
308
|
+
return { version: 1, tasks: [] };
|
|
309
|
+
}
|
|
310
|
+
function isRecord(value) {
|
|
311
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
312
|
+
}
|
|
313
|
+
//# sourceMappingURL=workspaceTasksMoveProtocol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspaceTasksMoveProtocol.js","sourceRoot":"","sources":["../../../src/server/workspaceTasks/workspaceTasksMoveProtocol.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAWzC,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EACjB,yBAAyB,EACzB,6BAA6B,GAI9B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,iCAAiC,EACjC,mCAAmC,GAEpC,MAAM,2BAA2B,CAAC;AAmCnC,MAAM,OAAO,iCAAkC,SAAQ,KAAK;IAG1D,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QAHR,SAAI,GAAG,iCAAiC,CAAC;QAIhD,IAAI,CAAC,IAAI,GAAG,mCAAmC,CAAC;IAClD,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,UAAU,4BAA4B,CAC1C,OAAgC,EAChC,OAAiC;IAEjC,aAAa,CAAC,OAAO,CAAC,CAAC;IACvB,MAAM,WAAW,GAAY,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IACjE,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAC/B,MAAM,MAAM,GAAY,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACvD,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;QAAE,MAAM,IAAI,iCAAiC,CAAC,uCAAuC,CAAC,CAAC;IAEhH,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,WAAW,GAAG,oBAAoB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC9D,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,KAAK,WAAW,CAAC,KAAK,EAAE,CAAC;QAC3C,MAAM,IAAI,iCAAiC,CAAC,wCAAwC,CAAC,CAAC;IACxF,CAAC;IAED,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC;IAC/G,IAAI,eAAe,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,iCAAiC,CAAC,0CAA0C,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IACzG,CAAC;IAED,MAAM,kBAAkB,GAAG,WAAW,CAAC,eAAe,CAAC,IAAI,KAAK,SAAS;QACvE,CAAC,CAAC,YAAY,EAAE;QAChB,CAAC,CAAC,WAAW,CAAC,eAAe,CAAC,MAAM,CAAC;IACvC,MAAM,WAAW,GAAG,uBAAuB,CAAC;QAC1C,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE;QAClE,WAAW,EAAE;YACX,KAAK,EAAE,WAAW,CAAC,KAAK;YACxB,MAAM,EAAE,kBAAkB;YAC1B,IAAI,EAAE,WAAW,CAAC,IAAI;SACvB;KACF,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC9C,MAAM,kBAAkB,GAAG,oBAAoB,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,CAAC,gBAAgB,CAAC,CAAC;IACnG,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,CAAC,WAAW,EAAE,WAAW,CAAC,gBAAgB,CAAC,CAAC;IAC/G,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,CAAC,gBAAgB,CAAC,CAAC;IACpG,MAAM,aAAa,GAAG,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;IACpF,MAAM,iBAAiB,GAA6B;QAClD,WAAW;QACX,MAAM;QACN,MAAM;QACN,WAAW;KACZ,CAAC;IAEF,OAAO;QACL,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE;QACvB,WAAW;QACX,MAAM;QACN,OAAO,EAAE,iBAAiB;QAC1B,MAAM;QACN,WAAW;QACX,QAAQ;QACR,kBAAkB;QAClB,QAAQ;QACR,gBAAgB;QAChB,aAAa;QACb,iBAAiB,EAAE,gBAAgB;QACnC,YAAY,EAAE,aAAa;KAC5B,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,8BAA8B,CAC5C,IAA4B,EAC5B,QAA2E;IAE3E,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC;QAAE,OAAO,UAAU,CAAC;IAC5D,IAAI,WAAW,CAAC,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAC;QAAE,OAAO,qBAAqB,CAAC;IACjF,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC;QAAE,OAAO,UAAU,CAAC;IAC5D,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,6BAA6B,CAC3C,IAA4B,EAC5B,KAA6B;IAE7B,OAAO,cAAc,CAAC,IAAI,CAAC,KAAK,cAAc,CAAC,KAAK,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,mCAAmC,CAAC,MAA4B;IAC9E,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,6BAA6B,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAClG,CAAC;AAED,MAAM,UAAU,sCAAsC,CAAC,MAA4B;IACjF,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAClC,IAAI,CAAC,MAAM,CAAC,+BAA+B,EAAE,MAAM,CAAC,CAAC;IACrD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACxE,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC;AAGD,SAAS,eAAe,CAAC,MAA+B;IACtD,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;QACrC,MAAM,eAAe,GAAG,mCAAmC,CAAC,MAAM,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;QAC9F,gBAAgB,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACxD,OAAO;YACL,GAAG,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE;YAC9C,eAAe;SAChB,CAAC;IACJ,CAAC;IAED,MAAM,eAAe,GAAG,0BAA0B,CAAC,MAAM,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;IACrF,gBAAgB,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACxD,OAAO;QACL,GAAG,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE;QAC3C,eAAe;KAChB,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,WAAyC;IACrE,IAAI,WAAW,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;QACtC,OAAO;YACL,KAAK,EAAE,WAAW;YAClB,eAAe,EAAE,6BAA6B,CAAC,WAAW,CAAC,eAAe,EAAE,aAAa,CAAC;YAC1F,IAAI,EAAE,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC;SACtC,CAAC;IACJ,CAAC;IACD,MAAM,eAAe,GAAG,0BAA0B,CAAC,WAAW,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;IAC/F,OAAO;QACL,KAAK,EAAE,QAAQ;QACf,eAAe;QACf,IAAI,EAAE,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC;KACtC,CAAC;AACJ,CAAC;AAED,SAAS,0BAA0B,CACjC,WAAoB,EACpB,KAAa;IAEb,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC,KAAK,QAAQ,IAAI,OAAO,WAAW,CAAC,UAAU,CAAC,KAAK,QAAQ;WACxG,WAAW,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC3C,MAAM,IAAI,iCAAiC,CAAC,kBAAkB,KAAK,yBAAyB,CAAC,CAAC;IAChG,CAAC;IACD,MAAM,MAAM,GAAG,gBAAgB,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,GAAG,KAAK,cAAc,CAAC,CAAC;IAC/E,MAAM,UAAU,GAA6B,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3G,IAAI,UAAU,CAAC,QAAQ,KAAK,mCAAmC,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACnF,MAAM,IAAI,mCAAmC,EAAE,CAAC;IAClD,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,mCAAmC,CAC1C,WAAoB,EACpB,KAAa;IAEb,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC,KAAK,QAAQ,IAAI,OAAO,WAAW,CAAC,UAAU,CAAC,KAAK,QAAQ;WACxG,WAAW,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC3C,MAAM,IAAI,iCAAiC,CAAC,kBAAkB,KAAK,yBAAyB,CAAC,CAAC;IAChG,CAAC;IACD,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,WAAW,CAAC,UAAU,CAAC;QACjC,MAAM,EAAE,gBAAgB,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,GAAG,KAAK,cAAc,CAAC;KACxE,CAAC;AACJ,CAAC;AAED,SAAS,6BAA6B,CACpC,WAAwC,EACxC,KAAa;IAEb,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,OAAO,WAAW,CAAC,QAAQ,KAAK,QAAQ,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC7G,MAAM,IAAI,iCAAiC,CAAC,kBAAkB,KAAK,yBAAyB,CAAC,CAAC;IAChG,CAAC;IACD,IAAI,WAAW,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,CAAC,QAAQ,EAAE,CAAC;IAC/F,OAAO,mCAAmC,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,aAAa,CAAC,IAAmB;IACxC,MAAM,MAAM,GAAG,yBAAyB,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxE,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,MAAM,IAAI,iCAAiC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1E,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1C,IAAI,UAAU,KAAK,SAAS;QAAE,MAAM,IAAI,iCAAiC,CAAC,kCAAkC,CAAC,CAAC;IAC9G,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc,EAAE,KAAa;IACrD,MAAM,MAAM,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;IAChD,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,MAAM,IAAI,iCAAiC,CAAC,GAAG,KAAK,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IACzF,OAAO,MAAM,CAAC,MAAM,CAAC;AACvB,CAAC;AAED,SAAS,OAAO,CACd,MAA+B,EAC/B,WAAyC;IAEzC,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;QACrC,IAAI,WAAW,CAAC,KAAK,KAAK,QAAQ;YAAE,MAAM,IAAI,iCAAiC,CAAC,wCAAwC,CAAC,CAAC;QAC1H,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,EAAE,WAAW,CAAC,eAAe,EAAE,CAAC;IACpF,CAAC;IACD,IAAI,WAAW,CAAC,KAAK,KAAK,WAAW;QAAE,MAAM,IAAI,iCAAiC,CAAC,wCAAwC,CAAC,CAAC;IAC7H,OAAO,EAAE,SAAS,EAAE,WAAW,CAAC,eAAe,EAAE,MAAM,EAAE,MAAM,CAAC,eAAe,EAAE,CAAC;AACpF,CAAC;AAED,SAAS,oBAAoB,CAC3B,MAA+B,EAC/B,WAAyC,EACzC,gBAAsC;IAEtC,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC9C,IAAI,WAAW,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;QACtC,OAAO;YACL,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,sCAAsC,CAAC,gBAAgB,CAAC,EAAE;YAC3H,MAAM,EAAE,QAAQ,CAAC,MAAM;SACxB,CAAC;IACJ,CAAC;IACD,OAAO;QACL,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,mCAAmC,CAAC,gBAAgB,CAAC,EAAE;KACtH,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CACxB,MAA+B,EAC/B,WAAyC,EACzC,WAAiC,EACjC,gBAAsC;IAEtC,MAAM,eAAe,GAAG,oBAAoB,CAAC,MAAM,EAAE,WAAW,EAAE,gBAAgB,CAAC,CAAC;IACpF,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;QACrC,OAAO;YACL,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,sCAAsC,CAAC,WAAW,CAAC,EAAE;YACjH,MAAM,EAAE,eAAe,CAAC,MAAM;SAC/B,CAAC;IACJ,CAAC;IACD,OAAO;QACL,SAAS,EAAE,eAAe,CAAC,SAAS;QACpC,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,mCAAmC,CAAC,WAAW,CAAC,EAAE;KAC5G,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAC7B,OAAgC,EAChC,WAAyC,EACzC,gBAAsC;IAEtC,IAAI,WAAW,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;QACtC,OAAO;YACL,KAAK,EAAE,WAAW;YAClB,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE;YACvB,gBAAgB,EAAE,WAAW,CAAC,eAAe,CAAC,QAAQ;YACtD,MAAM,EAAE,gBAAgB;SACzB,CAAC;IACJ,CAAC;IACD,OAAO;QACL,KAAK,EAAE,QAAQ;QACf,gBAAgB,EAAE,WAAW,CAAC,eAAe,CAAC,QAAQ;QACtD,MAAM,EAAE,gBAAgB;KACzB,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAC1B,OAAgC,EAChC,MAA+B,EAC/B,WAAiC;IAEjC,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;QACrC,OAAO;YACL,KAAK,EAAE,WAAW;YAClB,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE;YACvB,gBAAgB,EAAE,MAAM,CAAC,eAAe,CAAC,QAAQ;YACjD,MAAM,EAAE,WAAW;SACpB,CAAC;IACJ,CAAC;IACD,OAAO;QACL,KAAK,EAAE,QAAQ;QACf,gBAAgB,EAAE,MAAM,CAAC,eAAe,CAAC,QAAQ;QACjD,MAAM,EAAE,WAAW;KACpB,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAClB,QAAuC,EACvC,QAA2E;IAE3E,OAAO,2BAA2B,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC;WACrE,wBAAwB,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,2BAA2B,CAClC,QAAqC,EACrC,QAAqE;IAErE,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC,IAAI,KAAK,SAAS,IAAI,QAAQ,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ,CAAC;IAC/G,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ;WAC5B,QAAQ,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ;WACvC,mBAAmB,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,wBAAwB,CAC/B,QAAkC,EAClC,QAAiE;IAEjE,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ;WAC5B,QAAQ,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ;WACvC,mBAAmB,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,mBAAmB,CAAC,IAA0B,EAAE,KAA2B;IAClF,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;QAChD,OAAO,MAAM,CAAC,EAAE,IAAI,6BAA6B,CAAC,IAAI,CAAC,KAAK,6BAA6B,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3G,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,IAA4B;IAClD,OAAO,IAAI,CAAC,SAAS,CAAC;QACpB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;QAC3C,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;QACvC,aAAa,EAAE,IAAI,CAAC,aAAa;KAClC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,aAAa,CAAC,OAAgC;IACrD,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ,IAAI,OAAO,OAAO,CAAC,WAAW,KAAK,QAAQ;WACrG,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC1E,MAAM,IAAI,iCAAiC,CAAC,sCAAsC,CAAC,CAAC;IACtF,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,WAAoB;IAC7C,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACjE,MAAM,IAAI,iCAAiC,CAAC,6CAA6C,CAAC,CAAC;IAC7F,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,WAAW,CAAC;WAClF,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,iCAAiC,CAAC,iDAAiD,CAAC,CAAC;IACjG,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,MAA4B,EAAE,EAAU;IAChE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;IACnE,IAAI,KAAK,KAAK,CAAC;QAAE,MAAM,IAAI,iCAAiC,CAAC,0CAA0C,EAAE,EAAE,CAAC,CAAC;AAC/G,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,OAAO,CAAC;AAChD,CAAC;AAED,SAAS,YAAY;IACnB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AACnC,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC"}
|