@highstate/backend 0.9.13 → 0.9.15

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.
@@ -110,7 +110,8 @@ var instancePageSchema = z2.object({
110
110
  var instanceTerminalMetaSchema = z2.object({
111
111
  name: z2.string(),
112
112
  title: z2.string(),
113
- description: z2.string().optional()
113
+ description: z2.string().optional(),
114
+ icon: z2.string().optional()
114
115
  });
115
116
  var instanceTerminalFileSchema = z2.object({
116
117
  content: z2.string().optional(),
@@ -201,20 +202,6 @@ function applyPartialInstanceState(states, patch) {
201
202
  function createInstanceStatePatch(update) {
202
203
  return omit(update, ["secrets", "logLine"]);
203
204
  }
204
- function buildDependentInstanceStateMap(instanceStates) {
205
- const dependentMap = /* @__PURE__ */ new Map();
206
- for (const state of instanceStates.values()) {
207
- for (const dependency of state.dependencyIds) {
208
- let dependents = dependentMap.get(dependency);
209
- if (!dependents) {
210
- dependents = [];
211
- dependentMap.set(dependency, dependents);
212
- }
213
- dependents.push(state.id);
214
- }
215
- }
216
- return dependentMap;
217
- }
218
205
  function getAllDependentInstanceIds(dependentMap, instanceId) {
219
206
  const result = /* @__PURE__ */ new Set();
220
207
  const visited = /* @__PURE__ */ new Set();
@@ -247,6 +234,7 @@ var operationOptionsSchema = z3.object({
247
234
  * Whether to force update all dependencies of the instances even if they are not changed.
248
235
  *
249
236
  * Only applicable for `update`, `preview`, `recreate`, and `refresh` operations.
237
+ *
250
238
  * By default, `false`.
251
239
  */
252
240
  forceUpdateDependencies: z3.boolean().default(false),
@@ -254,13 +242,15 @@ var operationOptionsSchema = z3.object({
254
242
  * Whether to force update all children of the composite instances even if they are not changed.
255
243
  *
256
244
  * Only applicable for `update`, `preview`, `recreate`, and `refresh` operations.
245
+ *
257
246
  * By default, `false`.
258
247
  */
259
248
  forceUpdateChildren: z3.boolean().default(false),
260
249
  /**
261
250
  * Whether to destroy all dependents of the instances when destroying them.
262
251
  *
263
- * Only applicable for `destroy`.
252
+ * Only applicable for `destroy` and `recreate` operations.
253
+ *
264
254
  * By default, `true`.
265
255
  */
266
256
  destroyDependentInstances: z3.boolean().default(true),
@@ -268,6 +258,7 @@ var operationOptionsSchema = z3.object({
268
258
  * Whether to invoke destroy triggers when destroying the instances.
269
259
  *
270
260
  * Only applicable for `destroy`.
261
+ *
271
262
  * By default, `true`.
272
263
  */
273
264
  invokeDestroyTriggers: z3.boolean().default(true),
@@ -285,6 +276,15 @@ var operationOptionsSchema = z3.object({
285
276
  * By default, `false`.
286
277
  */
287
278
  forceDeleteState: z3.boolean().default(false),
279
+ /**
280
+ * Whether to allow partial updates of composite instances when updating, destroying or recreating them.
281
+ *
282
+ * If `true`, the operation will only update/destroy composite instance children that are directly referenced by other affected instances.
283
+ * If `false`, the operation will update/destroy all children at of the composite instances at all levels if at least one of them is referenced by affected instances.
284
+ *
285
+ * By default, `false`.
286
+ */
287
+ allowPartialCompositeInstanceUpdates: z3.boolean().default(false),
288
288
  /**
289
289
  * Whether to refresh the state before running the operation.
290
290
  *
@@ -324,6 +324,7 @@ var GraphResolver = class {
324
324
  this.outputHandler = outputHandler;
325
325
  }
326
326
  workset = /* @__PURE__ */ new Set();
327
+ dependencyMap = /* @__PURE__ */ new Map();
327
328
  dependentMap = /* @__PURE__ */ new Map();
328
329
  outputMap = /* @__PURE__ */ new Map();
329
330
  addToWorkset(nodeId) {
@@ -347,6 +348,26 @@ var GraphResolver = class {
347
348
  }
348
349
  return output;
349
350
  }
351
+ /**
352
+ * Gets all identifiers of the nodes that depend on the given node directly or indirectly.
353
+ */
354
+ getAllDependents(nodeId) {
355
+ const result = /* @__PURE__ */ new Set();
356
+ const stack = [nodeId];
357
+ while (stack.length > 0) {
358
+ const dependents = this.dependentMap.get(stack.pop());
359
+ if (!dependents) {
360
+ continue;
361
+ }
362
+ for (const dependentId of dependents) {
363
+ if (!result.has(dependentId)) {
364
+ result.add(dependentId);
365
+ stack.push(dependentId);
366
+ }
367
+ }
368
+ }
369
+ return Array.from(result);
370
+ }
350
371
  /**
351
372
  * Invalidates the node and all nodes that depend on it.
352
373
  *
@@ -370,7 +391,6 @@ var GraphResolver = class {
370
391
  stack.push(dependentId);
371
392
  }
372
393
  }
373
- this.dependentMap.delete(nodeId2);
374
394
  }
375
395
  }
376
396
  /**
@@ -418,6 +438,16 @@ var GraphResolver = class {
418
438
  this.logger.warn({ nodeId }, "processing aborted, skipping output");
419
439
  return;
420
440
  }
441
+ const oldDependencies = this.dependencyMap.get(nodeId) ?? [];
442
+ for (const depId of oldDependencies) {
443
+ const dependantSet = this.dependentMap.get(depId);
444
+ if (dependantSet) {
445
+ dependantSet.delete(nodeId);
446
+ if (dependantSet.size === 0) {
447
+ this.dependentMap.delete(depId);
448
+ }
449
+ }
450
+ }
421
451
  for (const depId of stackItem.dependencies) {
422
452
  let dependantSet = this.dependentMap.get(depId);
423
453
  if (!dependantSet) {
@@ -428,6 +458,7 @@ var GraphResolver = class {
428
458
  }
429
459
  this.outputMap.set(nodeId, output);
430
460
  this.outputHandler?.(nodeId, output);
461
+ this.dependencyMap.set(nodeId, stackItem.dependencies);
431
462
  stack.pop();
432
463
  }
433
464
  this.workset.delete(rootNodeId);
@@ -435,6 +466,16 @@ var GraphResolver = class {
435
466
  }
436
467
  };
437
468
 
469
+ // src/shared/resolvers/state.ts
470
+ var StateResolver = class extends GraphResolver {
471
+ getNodeDependencies(node) {
472
+ return node.dependencyIds;
473
+ }
474
+ processNode() {
475
+ return;
476
+ }
477
+ };
478
+
438
479
  // src/shared/resolvers/input.ts
439
480
  import {
440
481
  isUnitModel
@@ -768,17 +809,19 @@ var ValidationResolver = class extends GraphResolver {
768
809
  var resolverFactories = {
769
810
  InputResolver,
770
811
  InputHashResolver,
771
- ValidationResolver
812
+ ValidationResolver,
813
+ StateResolver
772
814
  };
773
815
 
774
816
  // src/shared/terminal.ts
775
817
  import { z as z4 } from "zod";
776
818
  var terminalSessionSchema = z4.object({
777
- id: z4.string().nanoid(),
819
+ id: z4.string().uuid(),
778
820
  projectId: z4.string(),
779
821
  instanceId: z4.string(),
780
822
  terminalName: z4.string(),
781
823
  terminalTitle: z4.string(),
824
+ terminalIcon: z4.string().optional(),
782
825
  createdAt: z4.coerce.date(),
783
826
  finishedAt: z4.coerce.date().optional()
784
827
  });
@@ -912,7 +955,6 @@ export {
912
955
  createInstanceState,
913
956
  applyPartialInstanceState,
914
957
  createInstanceStatePatch,
915
- buildDependentInstanceStateMap,
916
958
  getAllDependentInstanceIds,
917
959
  operationTypeSchema,
918
960
  operationStatusSchema,
@@ -934,4 +976,4 @@ export {
934
976
  applyLibraryUpdate,
935
977
  createAsyncBatcher
936
978
  };
937
- //# sourceMappingURL=chunk-C2TJAQAD.js.map
979
+ //# sourceMappingURL=chunk-KTGKNSKM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/shared/project.ts","../src/shared/state.ts","../src/shared/operation.ts","../src/shared/resolvers/graph-resolver.ts","../src/shared/resolvers/state.ts","../src/shared/resolvers/input.ts","../src/shared/resolvers/input-hash.ts","../src/shared/resolvers/validation.ts","../src/shared/resolvers/registry.ts","../src/shared/terminal.ts","../src/shared/library.ts","../src/shared/async-batcher.ts"],"sourcesContent":["import { z } from \"zod\"\n\nexport const positionSchema = z.object({\n x: z.number(),\n y: z.number(),\n})\n\nexport const instanceInputSchema = z.object({\n instanceId: z.string(),\n output: z.string(),\n})\n\nexport const hubInstanceInputSchema = z.object({\n hubId: z.string(),\n})\n\nexport const instanceModelPatchSchema = z.object({\n args: z.record(z.unknown()).optional(),\n inputs: z.record(z.array(instanceInputSchema)).optional(),\n hubInputs: z.record(z.array(hubInstanceInputSchema)).optional(),\n injectionInputs: z.array(hubInstanceInputSchema).optional(),\n position: positionSchema.optional(),\n})\n\nexport const instanceModelSchema = z.object({\n id: z.string(),\n type: z.string(),\n name: z.string(),\n\n ...instanceModelPatchSchema.shape,\n resolvedInputs: z.record(z.array(instanceInputSchema)).optional(),\n\n parentId: z.string().optional(),\n outputs: z.record(z.array(instanceInputSchema)).optional(),\n resolvedOutputs: z.record(z.array(instanceInputSchema)).optional(),\n})\n\nexport const compositeInstanceSchema = z.object({\n instance: instanceModelSchema,\n children: z.array(instanceModelSchema),\n inputHash: z.string().optional(),\n})\n\nexport type CompositeInstance = z.infer<typeof compositeInstanceSchema>\n\nexport const hubModelPatchSchema = z.object({\n position: positionSchema.optional(),\n inputs: z.array(instanceInputSchema).optional(),\n injectionInputs: z.array(hubInstanceInputSchema).optional(),\n})\n\nexport const hubModelSchema = z.object({\n id: z.string().nanoid(),\n position: positionSchema,\n\n inputs: z.array(instanceInputSchema).optional(),\n injectionInputs: z.array(hubInstanceInputSchema).optional(),\n})\n\nexport type InstanceModelPatch = z.infer<typeof instanceModelPatchSchema>\nexport type HubModel = z.infer<typeof hubModelSchema>\nexport type HubModelPatch = z.infer<typeof hubModelPatchSchema>\n","import { omit } from \"remeda\"\nimport { z } from \"zod\"\n\nexport const instanceStatusSchema = z.enum([\n \"not_created\",\n \"updating\",\n \"previewing\",\n \"destroying\",\n \"refreshing\",\n \"created\",\n \"error\",\n \"pending\",\n \"unknown\",\n])\n\nexport const instanceStatusFieldValueSchema = z.union([\n z.string(),\n z.number(),\n z.boolean(),\n z.array(z.string()),\n])\n\nexport const instanceStatusFieldSchema = z.object({\n name: z.string(),\n value: instanceStatusFieldValueSchema.optional(),\n displayName: z.string().optional(),\n sensitive: z.boolean().optional(),\n url: z.string().optional(),\n complementaryTo: z.string().optional(),\n})\n\nexport const instanceFileMetaSchema = z.object({\n name: z.string(),\n contentType: z.string(),\n size: z.number(),\n isBinary: z.boolean().optional(),\n})\n\nexport const instanceFileSchema = z.object({\n meta: instanceFileMetaSchema,\n content: z.string(),\n})\n\nexport const instancePageBlockSchema = z.union([\n z.object({\n type: z.literal(\"markdown\"),\n content: z.string(),\n }),\n z.object({\n type: z.literal(\"qr\"),\n content: z.string(),\n showContent: z.coerce.boolean(),\n language: z.string().optional(),\n }),\n z.object({\n type: z.literal(\"file\"),\n fileMeta: instanceFileMetaSchema,\n }),\n])\n\nexport const instancePageMetaSchema = z.object({\n name: z.string(),\n title: z.string(),\n})\n\nexport const instancePageSchema = z.object({\n ...instancePageMetaSchema.shape,\n content: z.array(instancePageBlockSchema),\n})\n\nexport const instanceTerminalMetaSchema = z.object({\n name: z.string(),\n title: z.string(),\n description: z.string().optional(),\n icon: z.string().optional(),\n})\n\nexport const instanceTerminalFileSchema = z.object({\n content: z.string().optional(),\n isBinary: z.boolean().optional(),\n mode: z.number().optional(),\n})\n\nexport const instanceTerminalSchema = z.object({\n ...instanceTerminalMetaSchema.shape,\n image: z.string(),\n command: z.string().array(),\n cwd: z.string().optional(),\n env: z.record(z.string()).optional(),\n files: z.record(instanceTerminalFileSchema).optional(),\n})\n\nexport const instanceTriggerSpecSchema = z.union([\n z.object({\n type: z.literal(\"before-destroy\"),\n }),\n z.object({\n type: z.literal(\"schedule\"),\n schedule: z.string(),\n }),\n])\n\nexport const instanceTriggerSchema = z.object({\n name: z.string(),\n title: z.string(),\n description: z.string().optional(),\n spec: instanceTriggerSpecSchema,\n})\n\nexport const instanceTriggerInvocationSchema = z.object({\n name: z.string(),\n})\n\nexport const instanceStateSchema = z.object({\n id: z.string(),\n parentId: z.string().nullable().default(null),\n status: instanceStatusSchema,\n dependencyIds: z.array(z.string()).default(() => []),\n\n latestOperationId: z.string().nullable().default(null),\n\n currentResourceCount: z.number().nullable().default(null),\n totalResourceCount: z.number().nullable().default(null),\n inputHash: z.string().nullable().default(null),\n outputHash: z.string().nullable().default(null),\n\n error: z.string().nullable().default(null),\n evaluationError: z.string().nullable().default(null),\n\n statusFields: z.array(instanceStatusFieldSchema).default(() => []),\n files: z.array(instanceFileMetaSchema).default(() => []),\n pages: z.array(instancePageMetaSchema).default(() => []),\n terminals: z.array(instanceTerminalMetaSchema).default(() => []),\n triggers: z.array(instanceTriggerSchema).default(() => []),\n})\n\nexport const instanceStateUpdateSchema = z\n .object({\n ...instanceStateSchema.shape,\n\n // secrets updated by the unit\n secrets: z.record(z.string()).nullable(),\n\n // log line emitted by the unit\n logLine: z.string().nullable(),\n })\n .partial()\n\nexport type InstanceStatusFieldValue = z.infer<typeof instanceStatusFieldValueSchema>\nexport type InstanceStatusField = z.infer<typeof instanceStatusFieldSchema>\nexport type InstanceTerminalMeta = z.infer<typeof instanceTerminalMetaSchema>\nexport type InstanceTerminal = z.infer<typeof instanceTerminalSchema>\n\nexport type InstanceStatus = z.infer<typeof instanceStatusSchema>\nexport type InstanceState = z.infer<typeof instanceStateSchema>\n\nexport type InstanceStateUpdate = z.infer<typeof instanceStateUpdateSchema>\n\nexport type InstancePageBlock = z.infer<typeof instancePageBlockSchema>\nexport type InstancePageMeta = z.infer<typeof instancePageMetaSchema>\nexport type InstanceFileMeta = z.infer<typeof instanceFileMetaSchema>\n\nexport type InstanceTriggerSpec = z.infer<typeof instanceTriggerSpecSchema>\nexport type InstanceTrigger = z.infer<typeof instanceTriggerSchema>\nexport type InstanceTriggerInvocation = z.infer<typeof instanceTriggerInvocationSchema>\n\nexport function createInstanceState(\n id: string,\n status: InstanceStatus = \"not_created\",\n fields: Partial<InstanceState> = {},\n): InstanceState {\n return {\n id,\n parentId: null,\n dependencyIds: [],\n status: status,\n\n latestOperationId: null,\n\n currentResourceCount: null,\n totalResourceCount: null,\n inputHash: null,\n outputHash: null,\n\n error: null,\n evaluationError: null,\n\n statusFields: [],\n files: [],\n pages: [],\n terminals: [],\n triggers: [],\n\n ...fields,\n }\n}\n\nexport function applyPartialInstanceState(\n states: Map<string, InstanceState>,\n patch: Partial<InstanceState>,\n): InstanceState {\n if (!patch.id) {\n throw new Error(\"The ID of the instance state is required.\")\n }\n\n let state = states.get(patch.id) ?? createInstanceState(patch.id, \"unknown\")\n state = { ...state, ...patch }\n\n states.set(state.id, state)\n return state\n}\n\nexport function createInstanceStatePatch(update: InstanceStateUpdate): Partial<InstanceState> {\n return omit(update, [\"secrets\", \"logLine\"])\n}\n\n/**\n * Gets all instance ids that depend on the given instance id (including recursively).\n * The instance id itself is not included in the result.\n *\n * @param dependentMap The dependent map.\n * @param instanceId The instance id to get all dependent instance ids.\n */\nexport function getAllDependentInstanceIds(\n dependentMap: Map<string, string[]>,\n instanceId: string,\n): string[] {\n const result = new Set<string>()\n const visited = new Set<string>()\n\n const traverse = (id: string) => {\n if (visited.has(id)) return\n visited.add(id)\n\n const dependents = dependentMap.get(id)\n if (!dependents) return\n\n for (const dependent of dependents) {\n result.add(dependent)\n traverse(dependent)\n }\n }\n\n traverse(instanceId)\n\n return Array.from(result)\n}\n","import { z } from \"zod\"\n\nexport const operationTypeSchema = z.enum([\"update\", \"preview\", \"destroy\", \"recreate\", \"refresh\"])\n\nexport const operationStatusSchema = z.enum([\n \"pending\",\n \"running\",\n \"completed\",\n \"failed\",\n \"cancelled\",\n])\n\nexport const operationOptionsSchema = z.object({\n /**\n * Whether to force update all dependencies of the instances even if they are not changed.\n *\n * Only applicable for `update`, `preview`, `recreate`, and `refresh` operations.\n *\n * By default, `false`.\n */\n forceUpdateDependencies: z.boolean().default(false),\n\n /**\n * Whether to force update all children of the composite instances even if they are not changed.\n *\n * Only applicable for `update`, `preview`, `recreate`, and `refresh` operations.\n *\n * By default, `false`.\n */\n forceUpdateChildren: z.boolean().default(false),\n\n /**\n * Whether to destroy all dependents of the instances when destroying them.\n *\n * Only applicable for `destroy` and `recreate` operations.\n *\n * By default, `true`.\n */\n destroyDependentInstances: z.boolean().default(true),\n\n /**\n * Whether to invoke destroy triggers when destroying the instances.\n *\n * Only applicable for `destroy`.\n *\n * By default, `true`.\n */\n invokeDestroyTriggers: z.boolean().default(true),\n\n /**\n * Whether to delete unreachable resources when updating or destroying the instances.\n * This is potentially dangerous and should be used with caution.\n *\n * By default, `false`.\n */\n deleteUnreachableResources: z.boolean().default(false),\n\n /**\n * Whether to delete the stack state even if the destroy operation fails.\n * This is very dangerous and should be used only when the stack is unrecoverable.\n *\n * By default, `false`.\n */\n forceDeleteState: z.boolean().default(false),\n\n /**\n * Whether to allow partial updates of composite instances when updating, destroying or recreating them.\n *\n * If `true`, the operation will only update/destroy composite instance children that are directly referenced by other affected instances.\n * If `false`, the operation will update/destroy all children at of the composite instances at all levels if at least one of them is referenced by affected instances.\n *\n * By default, `false`.\n */\n allowPartialCompositeInstanceUpdates: z.boolean().default(false),\n\n /**\n * Whether to refresh the state before running the operation.\n *\n * By default, `false`.\n */\n refresh: z.boolean().default(false),\n})\n\nexport const projectOperationRequestSchema = z.object({\n projectId: z.string(),\n type: operationTypeSchema,\n instanceIds: z.array(z.string()),\n options: operationOptionsSchema.partial().optional(),\n})\n\nexport const projectOperationSchema = z.object({\n id: z.string().uuid(),\n status: operationStatusSchema,\n\n projectId: z.string(),\n type: operationTypeSchema,\n\n requestedInstanceIds: z.array(z.string()),\n\n instanceIdsToUpdate: z.array(z.string()).default(() => []),\n instanceIdsToDestroy: z.array(z.string()).default(() => []),\n\n options: operationOptionsSchema.default(() => ({})),\n\n error: z.string().nullable(),\n startedAt: z.number(),\n completedAt: z.number().nullable(),\n})\n\nexport type OperationType = z.infer<typeof operationTypeSchema>\nexport type OperationStatus = z.infer<typeof operationStatusSchema>\nexport type ProjectOperation = z.infer<typeof projectOperationSchema>\nexport type ProjectOperationRequest = z.infer<typeof projectOperationRequestSchema>\nexport type OperationOptions = z.infer<typeof operationOptionsSchema>\n\nexport function isFinalOperationStatus(status: OperationStatus): boolean {\n return status === \"completed\" || status === \"failed\" || status === \"cancelled\"\n}\n","import type { Logger } from \"pino\"\nimport { unique } from \"remeda\"\n\nexport type ResolverOutputHandler<TOutput> = (id: string, value: TOutput) => void\n\nexport abstract class GraphResolver<TNode, TOutput> {\n private readonly workset: Set<string> = new Set()\n private readonly dependencyMap: Map<string, string[]> = new Map()\n private readonly dependentMap: Map<string, Set<string>> = new Map()\n private readonly outputMap: Map<string, TOutput> = new Map()\n\n constructor(\n private readonly nodes: ReadonlyMap<string, TNode>,\n protected readonly logger: Logger,\n private readonly outputHandler?: ResolverOutputHandler<TOutput>,\n ) {}\n\n addToWorkset(nodeId: string): void {\n this.workset.add(nodeId)\n }\n\n addAllNodesToWorkset(): void {\n for (const nodeId of this.nodes.keys()) {\n this.workset.add(nodeId)\n }\n }\n\n /**\n * The map of calculated outputs.\n */\n get outputs(): ReadonlyMap<string, TOutput> {\n return this.outputMap\n }\n\n requireOutput(nodeId: string): TOutput {\n const output = this.outputMap.get(nodeId)\n if (!output) {\n throw new Error(`Output for node ${nodeId} is not available`)\n }\n\n return output\n }\n\n /**\n * Gets the list of the identifiers of the dependencies for the node.\n *\n * Used to produce the dependency graph.\n */\n protected abstract getNodeDependencies(node: TNode): string[]\n\n /**\n * Processes the node and returns the output.\n */\n protected abstract processNode(node: TNode, logger: Logger): TOutput | Promise<TOutput>\n\n /**\n * Gets all identifiers of the nodes that depend on the given node directly or indirectly.\n */\n getAllDependents(nodeId: string): string[] {\n const result = new Set<string>()\n const stack: string[] = [nodeId]\n\n while (stack.length > 0) {\n const dependents = this.dependentMap.get(stack.pop()!)\n if (!dependents) {\n continue\n }\n\n for (const dependentId of dependents) {\n if (!result.has(dependentId)) {\n result.add(dependentId)\n stack.push(dependentId)\n }\n }\n }\n\n return Array.from(result)\n }\n\n /**\n * Invalidates the node and all nodes that depend on it.\n *\n * Also adds the node to the work set for processing.\n */\n invalidate(nodeId: string): void {\n const stack = [nodeId]\n\n while (stack.length > 0) {\n const nodeId = stack.pop()!\n if (!this.nodes.has(nodeId)) {\n // it is ok to invalidate deleted nodes\n continue\n }\n\n // remove the node from the output map\n this.outputMap.delete(nodeId)\n this.workset.add(nodeId)\n\n const dependents = this.dependentMap.get(nodeId)\n if (!dependents) {\n continue\n }\n\n for (const dependentId of dependents) {\n if (this.outputMap.has(dependentId)) {\n // add the dependent to the stack for further processing\n stack.push(dependentId)\n }\n }\n }\n }\n\n /**\n * Resolves all not-resolved or invalidated nodes in the graph.\n *\n * The abort signal of the previous operation must be called before calling this method again.\n */\n async process(signal?: AbortSignal): Promise<void> {\n type StackItem = {\n nodeId: string\n resolved: boolean\n dependencies: string[]\n }\n\n while (this.workset.size > 0) {\n const rootNodeId = this.workset.values().next().value!\n const stack: StackItem[] = [{ nodeId: rootNodeId, resolved: false, dependencies: [] }]\n\n while (stack.length > 0) {\n const stackItem = stack[stack.length - 1]\n const { nodeId, resolved } = stackItem\n\n const node = this.nodes.get(nodeId)\n if (!node) {\n this.logger.warn({ nodeId }, \"node not found in the graph, skipping\")\n stack.pop()\n continue\n }\n\n if (this.outputMap.has(nodeId)) {\n // already processed\n stack.pop()\n continue\n }\n\n if (!resolved) {\n stackItem.dependencies = unique(this.getNodeDependencies(node))\n\n let hasUnresolvedDependencies = false\n\n for (const depId of stackItem.dependencies) {\n if (!this.nodes.has(depId)) {\n this.logger.warn({ depId, nodeId }, \"dependency not found in the graph, skipping\")\n continue\n }\n\n if (!this.outputMap.has(depId)) {\n stack.push({ nodeId: depId, resolved: false, dependencies: [] })\n hasUnresolvedDependencies = true\n }\n }\n\n if (hasUnresolvedDependencies) {\n // wait for dependencies to be resolved\n stackItem.resolved = true\n continue\n }\n }\n\n // all dependencies are resolved, process the node\n const output = await this.processNode(node, this.logger)\n\n if (signal?.aborted) {\n this.logger.warn({ nodeId }, \"processing aborted, skipping output\")\n return\n }\n\n // remove all dependent nodes\n const oldDependencies = this.dependencyMap.get(nodeId) ?? []\n for (const depId of oldDependencies) {\n const dependantSet = this.dependentMap.get(depId)\n if (dependantSet) {\n dependantSet.delete(nodeId)\n if (dependantSet.size === 0) {\n this.dependentMap.delete(depId)\n }\n }\n }\n\n // add the new dependencies\n for (const depId of stackItem.dependencies) {\n let dependantSet = this.dependentMap.get(depId)\n if (!dependantSet) {\n dependantSet = new Set()\n this.dependentMap.set(depId, dependantSet)\n }\n\n dependantSet.add(nodeId)\n }\n\n this.outputMap.set(nodeId, output)\n this.outputHandler?.(nodeId, output)\n this.dependencyMap.set(nodeId, stackItem.dependencies)\n\n stack.pop()\n }\n\n this.workset.delete(rootNodeId)\n }\n }\n}\n","import type { InstanceState } from \"../state\"\nimport { GraphResolver } from \"./graph-resolver\"\n\nexport class StateResolver extends GraphResolver<InstanceState, void> {\n protected getNodeDependencies(node: InstanceState): string[] {\n return node.dependencyIds\n }\n\n protected processNode(): void {\n return\n }\n}\n","import type { HubModel } from \"../project\"\nimport {\n isUnitModel,\n type ComponentModel,\n type HubInput,\n type InstanceInput,\n type InstanceModel,\n} from \"@highstate/contract\"\nimport { fromEntries, mapValues } from \"remeda\"\nimport { GraphResolver } from \"./graph-resolver\"\n\nexport type InputResolverNode =\n | {\n kind: \"instance\"\n instance: InstanceModel\n component: ComponentModel\n }\n | {\n kind: \"hub\"\n hub: HubModel\n }\n\nexport type ResolvedInstanceInput = {\n input: InstanceInput\n type: string\n}\n\nexport type InputResolverOutput =\n | {\n kind: \"instance\"\n instance: InstanceModel\n component: ComponentModel\n resolvedInputs: Record<string, ResolvedInstanceInput[]>\n resolvedOutputs: Record<string, InstanceInput[]> | undefined\n resolvedInjectionInputs: ResolvedInstanceInput[]\n matchedInjectionInputs: ResolvedInstanceInput[]\n }\n | {\n kind: \"hub\"\n resolvedInputs: ResolvedInstanceInput[]\n }\n\n/**\n * Resolves the all recursive instance and hub inputs based on its direct inputs and injected inputs.\n */\nexport class InputResolver extends GraphResolver<InputResolverNode, InputResolverOutput> {\n // constructor(\n // nodes: ReadonlyMap<string, InputResolverNode>,\n // logger: Logger,\n // outputHandler?: ResolverOutputHandler<InputResolverOutput>,\n // ) {\n // super(nodes, logger, outputHandler)\n // }\n\n getNodeDependencies(node: InputResolverNode): string[] {\n const dependencies: string[] = []\n\n if (node.kind === \"hub\") {\n for (const input of node.hub.inputs ?? []) {\n dependencies.push(`instance:${input.instanceId}`)\n }\n\n for (const input of node.hub.injectionInputs ?? []) {\n dependencies.push(`hub:${input.hubId}`)\n }\n\n return dependencies\n }\n\n for (const inputs of Object.values(node.instance.inputs ?? {})) {\n for (const input of inputs) {\n dependencies.push(`instance:${input.instanceId}`)\n }\n }\n\n for (const inputs of Object.values(node.instance.hubInputs ?? {})) {\n for (const input of inputs) {\n dependencies.push(`hub:${input.hubId}`)\n }\n }\n\n for (const input of node.instance.injectionInputs ?? []) {\n dependencies.push(`hub:${input.hubId}`)\n }\n\n return dependencies\n }\n\n processNode(node: InputResolverNode): InputResolverOutput {\n const getHubOutput = (input: HubInput) => {\n const output = this.outputs.get(`hub:${input.hubId}`)\n if (!output) {\n return { resolvedInputs: [] }\n }\n\n if (output.kind !== \"hub\") {\n throw new Error(\"Expected hub node\")\n }\n\n return output\n }\n\n const getInstanceOutput = (input: InstanceInput) => {\n const output = this.outputs.get(`instance:${input.instanceId}`)\n if (!output) {\n return {\n component: null,\n resolvedInputs: [] as ResolvedInstanceInput[],\n resolvedOutputs: [] as InstanceInput[],\n }\n }\n\n if (output.kind !== \"instance\") {\n throw new Error(\"Expected instance node\")\n }\n\n return {\n component: output.component,\n resolvedInputs: output.resolvedInputs[input.output] ?? [],\n resolvedOutputs: output.resolvedOutputs?.[input.output],\n }\n }\n\n // resolve inputs for hub\n if (node.kind === \"hub\") {\n const hubResult: Map<string, ResolvedInstanceInput> = new Map()\n\n const addHubResult = (input: ResolvedInstanceInput) => {\n hubResult.set(`${input.input.instanceId}:${input.input.output}`, input)\n }\n\n for (const input of node.hub.inputs ?? []) {\n const { component } = getInstanceOutput(input)\n const componentInput = component?.outputs[input.output]\n\n if (!componentInput) {\n this.logger.warn({ msg: \"output not found in the component\", input, component })\n continue\n }\n\n addHubResult({ input, type: componentInput.type })\n }\n\n for (const injectionInput of node.hub.injectionInputs ?? []) {\n const { resolvedInputs } = getHubOutput(injectionInput)\n\n for (const input of resolvedInputs) {\n addHubResult(input)\n }\n }\n\n return {\n kind: \"hub\",\n resolvedInputs: Array.from(hubResult.values()),\n }\n }\n\n // хуяк (which translates as \"lets reuse resolved inputs of level 2+ composite instances provided by the evaluator\")\n if (node.instance.resolvedInputs) {\n return {\n kind: \"instance\",\n instance: node.instance,\n component: node.component,\n resolvedInputs: mapValues(node.instance.resolvedInputs, (inputs, inputName) => {\n const componentInput = node.component.inputs[inputName]\n if (!componentInput) {\n this.logger.warn({\n msg: \"input not found in the component\",\n inputName,\n component: node.component,\n })\n return []\n }\n\n return inputs.map(input => ({ input, type: componentInput.type }))\n }),\n resolvedOutputs: node.instance.resolvedOutputs ?? {},\n resolvedInjectionInputs: [],\n matchedInjectionInputs: [],\n }\n }\n\n // resolve inputs for instance\n const resolvedInputsMap: Map<string, Map<string, ResolvedInstanceInput>> = new Map()\n\n const addInstanceResult = (inputName: string, input: ResolvedInstanceInput) => {\n let inputs = resolvedInputsMap.get(inputName)\n if (!inputs) {\n inputs = new Map()\n resolvedInputsMap.set(inputName, inputs)\n }\n\n inputs.set(`${input.input.instanceId}:${input.input.output}`, input)\n }\n\n const addInstanceInput = (inputName: string, input: InstanceInput) => {\n const componentInput = node.component.inputs[inputName]\n if (!componentInput) {\n this.logger.warn({\n msg: \"input not found in the component\",\n input,\n component: node.component,\n })\n return\n }\n\n const { component, resolvedOutputs } = getInstanceOutput(input)\n\n if (!component) {\n this.logger.warn({ instanceId: node.instance.id, input }, \"no output found for the input\")\n return\n }\n\n if (isUnitModel(component)) {\n addInstanceResult(inputName, { input, type: componentInput.type })\n return\n }\n\n if (resolvedOutputs) {\n for (const output of resolvedOutputs) {\n addInstanceResult(inputName, { input: output, type: componentInput.type })\n }\n } else {\n // if the instance is not evaluated, we a forced to use the input as is\n addInstanceResult(inputName, { input, type: componentInput.type })\n }\n }\n\n for (const [inputName, inputs] of Object.entries(node.instance.inputs ?? {})) {\n for (const input of inputs) {\n addInstanceInput(inputName, input)\n }\n }\n\n const injectionInputs: Map<string, ResolvedInstanceInput> = new Map()\n const matchedInjectionInputs: Map<string, ResolvedInstanceInput> = new Map()\n\n for (const injectionInput of node.instance.injectionInputs ?? []) {\n const { resolvedInputs } = getHubOutput(injectionInput)\n for (const input of resolvedInputs) {\n injectionInputs.set(`${input.input.instanceId}:${input.input.output}`, input)\n }\n }\n\n for (const [inputName, componentInput] of Object.entries(node.component.inputs ?? {})) {\n const allInputs = new Map<string, ResolvedInstanceInput>(injectionInputs)\n const hubInputs = node.instance.hubInputs?.[inputName] ?? []\n\n for (const hubInput of hubInputs) {\n const { resolvedInputs } = getHubOutput(hubInput)\n for (const input of resolvedInputs) {\n allInputs.set(`${input.input.instanceId}:${input.input.output}`, input)\n }\n }\n\n for (const input of allInputs.values()) {\n if (input.type === componentInput.type) {\n addInstanceInput(inputName, input.input)\n\n const key = `${input.input.instanceId}:${input.input.output}`\n if (injectionInputs.has(key)) {\n matchedInjectionInputs.set(key, input)\n }\n }\n }\n }\n\n const resolvedInputs = fromEntries(\n Array.from(resolvedInputsMap.entries()).map(([inputName, inputs]) => [\n inputName,\n Array.from(inputs.values()),\n ]),\n )\n\n return {\n kind: \"instance\",\n instance: node.instance,\n component: node.component,\n resolvedInputs,\n resolvedOutputs: node.instance.resolvedOutputs,\n resolvedInjectionInputs: Array.from(injectionInputs.values()),\n matchedInjectionInputs: Array.from(matchedInjectionInputs.values()),\n }\n }\n}\n\nexport function getResolvedHubInputs(output: InputResolverOutput): ResolvedInstanceInput[] {\n if (output.kind !== \"hub\") {\n throw new Error(\"Expected hub node\")\n }\n\n return output.resolvedInputs\n}\n\nexport function getResolvedInstanceInputs(\n output: InputResolverOutput,\n): Record<string, ResolvedInstanceInput[]> {\n if (output.kind !== \"instance\") {\n throw new Error(\"Expected instance node\")\n }\n\n return output.resolvedInputs\n}\n\nexport function getResolvedInjectionInstanceInputs(\n output: InputResolverOutput,\n): ResolvedInstanceInput[] {\n if (output.kind !== \"instance\") {\n throw new Error(\"Expected instance node\")\n }\n\n return output.resolvedInjectionInputs\n}\n\nexport function getMatchedInjectionInstanceInputs(\n output: InputResolverOutput,\n): ResolvedInstanceInput[] {\n if (output.kind !== \"instance\") {\n throw new Error(\"Expected instance node\")\n }\n\n return output.matchedInjectionInputs\n}\n","import type { InstanceState } from \"../state\"\nimport type { ResolvedInstanceInput } from \"./input\"\nimport { isUnitModel, type ComponentModel, type InstanceModel } from \"@highstate/contract\"\nimport { sha256 } from \"crypto-hash\"\nimport { GraphResolver } from \"./graph-resolver\"\n\nexport type InputHashNode = {\n instance: InstanceModel\n component: ComponentModel\n resolvedInputs: Record<string, ResolvedInstanceInput[]>\n state: InstanceState | undefined\n sourceHash: string | undefined\n}\n\nexport type InputHashOutput = {\n inputHash: string\n outputHash: string\n}\n\n/**\n * Resolves the hash of the instance based on its args, resolved input hashes, source hash, and the output hash.\n */\nexport class InputHashResolver extends GraphResolver<InputHashNode, InputHashOutput> {\n getNodeDependencies({ resolvedInputs }: InputHashNode): string[] {\n const dependencies: string[] = []\n\n for (const inputs of Object.values(resolvedInputs ?? {})) {\n for (const input of inputs) {\n dependencies.push(input.input.instanceId)\n }\n }\n\n return dependencies\n }\n\n async processNode({\n instance,\n component,\n resolvedInputs,\n sourceHash,\n state,\n }: InputHashNode): Promise<InputHashOutput> {\n let sink = component.definitionHash + JSON.stringify(instance.args ?? {})\n\n if (sourceHash) {\n sink += sourceHash\n } else if (isUnitModel(component)) {\n this.logger.warn(\n { instanceId: instance.id },\n \"missing source hash for unit model, this may lead to incorrect input hash\",\n )\n }\n\n const sortedInputs = Object.entries(resolvedInputs)\n //\n .sort(([a], [b]) => a.localeCompare(b))\n\n for (const [inputKey, inputs] of sortedInputs) {\n if (Object.keys(inputs).length === 0) {\n continue\n }\n\n sink += inputKey\n\n const instanceIds = inputs.map(input => input.input.instanceId)\n instanceIds.sort()\n\n for (const instanceId of instanceIds) {\n const dependency = this.outputs.get(instanceId)\n if (!dependency) continue\n\n sink += dependency.inputHash\n sink += dependency.outputHash\n }\n }\n\n return {\n inputHash: await sha256(sink),\n outputHash: state?.outputHash ?? \"\",\n }\n }\n}\n","import type { ComponentModel, InstanceModel } from \"@highstate/contract\"\nimport type { ResolvedInstanceInput } from \"./input\"\nimport { Ajv } from \"ajv\"\nimport { GraphResolver } from \"./graph-resolver\"\n\nexport type ValidationNode = {\n instance: InstanceModel\n component: ComponentModel\n resolvedInputs: Record<string, ResolvedInstanceInput[]>\n}\n\nexport type ValidationOutput =\n | {\n status: \"ok\"\n }\n | {\n status: \"invalid-args\"\n errorText: string\n }\n | {\n status: \"invalid-inputs\" | \"missing-inputs\"\n errorText: string\n }\n\n/**\n * Validates the instance based on its arguments and inputs.\n */\nexport class ValidationResolver extends GraphResolver<ValidationNode, ValidationOutput> {\n getNodeDependencies({ resolvedInputs }: ValidationNode): string[] {\n const dependencies: string[] = []\n\n for (const inputs of Object.values(resolvedInputs)) {\n for (const input of inputs) {\n dependencies.push(input.input.instanceId)\n }\n }\n\n return dependencies\n }\n\n processNode({ instance, component, resolvedInputs }: ValidationNode): ValidationOutput {\n const ajv = new Ajv({ strict: false })\n\n this.logger.debug({ instanceId: instance.id }, \"validating instance\")\n\n for (const [name, argument] of Object.entries(component.args)) {\n if (!argument.required && !instance.args?.[name]) {\n continue\n }\n\n if (!ajv.validate(argument.schema, instance.args?.[name])) {\n this.logger.debug({ instanceId: instance.id, argumentName: name }, \"invalid argument\")\n\n return {\n status: \"invalid-args\",\n errorText: `invalid argument \"${name}\": ${ajv.errorsText()}`,\n }\n }\n }\n\n for (const inputs of Object.values(resolvedInputs)) {\n for (const input of inputs) {\n const inputInstance = this.outputs.get(input.input.instanceId)\n if (inputInstance?.status !== \"ok\") {\n return {\n status: \"invalid-inputs\",\n errorText: `instance \"${input.input.instanceId}\" has errors`,\n }\n }\n }\n }\n\n for (const [name, input] of Object.entries(component.inputs)) {\n if (!input.required) {\n continue\n }\n\n if (!resolvedInputs[name] || !resolvedInputs[name].length) {\n return {\n status: \"missing-inputs\",\n errorText: `input \"${name}\" is missing`,\n }\n }\n }\n\n return { status: \"ok\" }\n }\n}\n","import type { Logger } from \"pino\"\nimport type { GraphResolver, ResolverOutputHandler } from \"./graph-resolver\"\nimport type { InstanceState } from \"../state\"\nimport { StateResolver } from \"./state\"\nimport { InputResolver, type InputResolverNode, type InputResolverOutput } from \"./input\"\nimport { InputHashResolver, type InputHashNode, type InputHashOutput } from \"./input-hash\"\nimport { ValidationResolver, type ValidationNode, type ValidationOutput } from \"./validation\"\n\nexport type GraphResolverType = keyof GraphResolverMap\n\nexport type GraphResolverMap = {\n InputResolver: [InputResolverNode, InputResolverOutput]\n InputHashResolver: [InputHashNode, InputHashOutput]\n ValidationResolver: [ValidationNode, ValidationOutput]\n StateResolver: [InstanceState, void]\n}\n\nexport const resolverFactories = {\n InputResolver,\n InputHashResolver,\n ValidationResolver,\n StateResolver,\n} as Record<\n GraphResolverType,\n new (\n nodes: ReadonlyMap<string, unknown>,\n logger: Logger,\n outputHandler?: ResolverOutputHandler<unknown>,\n ) => GraphResolver<unknown, unknown>\n>\n","import { z } from \"zod\"\n\nexport const terminalSessionSchema = z.object({\n id: z.string().uuid(),\n projectId: z.string(),\n instanceId: z.string(),\n terminalName: z.string(),\n terminalTitle: z.string(),\n terminalIcon: z.string().optional(),\n createdAt: z.coerce.date(),\n finishedAt: z.coerce.date().optional(),\n})\n\nexport type TerminalSession = z.infer<typeof terminalSessionSchema>\n","import type { ComponentModel, Entity } from \"@highstate/contract\"\n\nexport type LibraryModel = {\n components: Record<string, ComponentModel>\n entities: Record<string, Entity>\n}\n\nexport type LibraryUpdate =\n | {\n type: \"reload-started\" | \"reload-completed\"\n }\n | {\n type: \"component-updated\"\n component: ComponentModel\n }\n | {\n type: \"entity-updated\"\n entity: Entity\n }\n | {\n type: \"component-removed\"\n componentType: string\n }\n | {\n type: \"entity-removed\"\n entityType: string\n }\n\nexport function diffLibraries(oldLibrary: LibraryModel, newLibrary: LibraryModel): LibraryUpdate[] {\n const updates: LibraryUpdate[] = []\n\n for (const [componentType, newComponent] of Object.entries(newLibrary.components)) {\n const existingComponent = oldLibrary.components[componentType]\n if (existingComponent?.definitionHash !== newComponent.definitionHash) {\n updates.push({ type: \"component-updated\", component: newComponent })\n }\n }\n\n for (const componentType of Object.keys(oldLibrary.components)) {\n if (!newLibrary.components[componentType]) {\n updates.push({ type: \"component-removed\", componentType })\n }\n }\n\n for (const [entityType, newEntity] of Object.entries(newLibrary.entities)) {\n const existingEntity = oldLibrary.entities[entityType]\n if (existingEntity?.definitionHash !== newEntity.definitionHash) {\n updates.push({ type: \"entity-updated\", entity: newEntity })\n }\n }\n\n for (const entityType of Object.keys(oldLibrary.entities)) {\n if (!newLibrary.entities[entityType]) {\n updates.push({ type: \"entity-removed\", entityType })\n }\n }\n\n return updates\n}\n\nexport function applyLibraryUpdate(\n components: Record<string, ComponentModel>,\n entities: Record<string, Entity>,\n update: LibraryUpdate,\n): void {\n switch (update.type) {\n case \"component-updated\":\n components[update.component.type] = update.component\n break\n case \"entity-updated\":\n entities[update.entity.type] = update.entity\n break\n case \"component-removed\":\n delete components[update.componentType]\n break\n case \"entity-removed\":\n delete entities[update.entityType]\n break\n }\n}\n","export type AsyncBatcherOptions = {\n waitMs?: number\n maxWaitTimeMs?: number\n}\n\nexport function createAsyncBatcher<T>(\n fn: (items: T[]) => Promise<void> | void,\n { waitMs = 100, maxWaitTimeMs = 1000 }: AsyncBatcherOptions = {},\n) {\n let batch: T[] = []\n let activeTimeout: NodeJS.Timeout | null = null\n let maxWaitTimeout: NodeJS.Timeout | null = null\n let firstCallTimestamp: number | null = null\n\n async function processBatch() {\n if (batch.length === 0) return\n\n const currentBatch = batch\n batch = [] // Reset batch before async call\n\n await fn(currentBatch)\n\n // Clear max wait timer since batch has been processed\n if (maxWaitTimeout) {\n clearTimeout(maxWaitTimeout)\n maxWaitTimeout = null\n }\n firstCallTimestamp = null\n }\n\n function schedule() {\n if (activeTimeout) clearTimeout(activeTimeout)\n activeTimeout = setTimeout(() => {\n activeTimeout = null\n void processBatch()\n }, waitMs)\n\n // Ensure batch is executed within maxWaitTimeMs\n if (!firstCallTimestamp) {\n firstCallTimestamp = Date.now()\n maxWaitTimeout = setTimeout(() => {\n if (activeTimeout) clearTimeout(activeTimeout)\n activeTimeout = null\n void processBatch()\n }, maxWaitTimeMs)\n }\n }\n\n return {\n /**\n * Add an item to the batch.\n */\n call(item: T): void {\n batch.push(item)\n schedule()\n },\n\n /**\n * Immediately flush the pending batch (if any).\n */\n async flush(): Promise<void> {\n if (activeTimeout) {\n clearTimeout(activeTimeout)\n activeTimeout = null\n }\n if (maxWaitTimeout) {\n clearTimeout(maxWaitTimeout)\n maxWaitTimeout = null\n }\n await processBatch()\n },\n }\n}\n"],"mappings":"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","names":["z","z","nodeId","resolvedInputs","isUnitModel","isUnitModel","z"]}
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "sourceHashes": {
3
- "./dist/index.js": "6161b1465739d891c86e98f7da84f354aad429e70ef5cd656738605e5180e091",
4
- "./dist/shared/index.js": "69ddcb5bfcb80a24d9aa744e986195bed4ce860f18ff52c8e936073c40787a60",
5
- "./dist/library/worker/main.js": "4e24e61811d3f605da65f70dc14cd2585f551e28773d96686cc188e66fe57650",
3
+ "./dist/index.js": "bbc53fa0e3228767cb78b6a13593c10072802ef013995f68b874e08e36e6ac4c",
4
+ "./dist/shared/index.js": "54b03a2c2dfe863db66d468a5311d533b2ca42dfbfbe5a38e9cbca54bc8775a8",
5
+ "./dist/library/worker/main.js": "d3c573660c12aca76abb2ab882233f4533f40558d4ca8216ea5f1ce94d663373",
6
6
  "./dist/library/package-resolution-worker.js": "4bfa368ad35a64c109df9e5a468c057791164760fe166c4eb5d9a889dee4d7bc"
7
7
  }
8
8
  }
package/dist/index.js CHANGED
@@ -13,12 +13,13 @@ import {
13
13
  instancePageSchema,
14
14
  instanceStateSchema,
15
15
  instanceStatusFieldSchema,
16
+ instanceTerminalMetaSchema,
16
17
  instanceTerminalSchema,
17
18
  instanceTriggerSchema,
18
19
  isFinalOperationStatus,
19
20
  projectOperationSchema,
20
21
  terminalSessionSchema
21
- } from "./chunk-C2TJAQAD.js";
22
+ } from "./chunk-KTGKNSKM.js";
22
23
  import {
23
24
  LocalPulumiHost,
24
25
  errorToString,
@@ -1222,6 +1223,8 @@ for key in "\${filesKeys[@]}"; do
1222
1223
  isBinary=$(jq -r ".files[\\"$key\\"].isBinary // false" <<<"$data")
1223
1224
  content=$(jq -r ".files[\\"$key\\"].content" <<<"$data")
1224
1225
  mode=$(jq -r ".files[\\"$key\\"].mode // 0" <<<"$data")
1226
+
1227
+ mkdir -p "$(dirname "$key")"
1225
1228
 
1226
1229
  if [ "$isBinary" = "true" ]; then
1227
1230
  echo "$content" | base64 -d > "$key"
@@ -1321,38 +1324,7 @@ function createTerminalBackend(config, logger) {
1321
1324
  import { PassThrough } from "node:stream";
1322
1325
  import { EventEmitter as EventEmitter3, on as on3 } from "node:events";
1323
1326
  import { parseInstanceId } from "@highstate/contract";
1324
-
1325
- // ../../node_modules/nanoid/index.js
1326
- import { webcrypto as crypto } from "node:crypto";
1327
-
1328
- // ../../node_modules/nanoid/url-alphabet/index.js
1329
- var urlAlphabet = "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";
1330
-
1331
- // ../../node_modules/nanoid/index.js
1332
- var POOL_SIZE_MULTIPLIER = 128;
1333
- var pool;
1334
- var poolOffset;
1335
- function fillPool(bytes) {
1336
- if (!pool || pool.length < bytes) {
1337
- pool = Buffer.allocUnsafe(bytes * POOL_SIZE_MULTIPLIER);
1338
- crypto.getRandomValues(pool);
1339
- poolOffset = 0;
1340
- } else if (poolOffset + bytes > pool.length) {
1341
- crypto.getRandomValues(pool);
1342
- poolOffset = 0;
1343
- }
1344
- poolOffset += bytes;
1345
- }
1346
- function nanoid(size = 21) {
1347
- fillPool(size |= 0);
1348
- let id = "";
1349
- for (let i = poolOffset - size; i < poolOffset; i++) {
1350
- id += urlAlphabet[pool[i] & 63];
1351
- }
1352
- return id;
1353
- }
1354
-
1355
- // src/terminal/manager.ts
1327
+ import { uuidv7 } from "uuidv7";
1356
1328
  var notAttachedTerminalLifetime = 5 * 60 * 1e3;
1357
1329
  var TerminalManager = class _TerminalManager {
1358
1330
  constructor(terminalBackend, stateBackend, runnerBackend, logger) {
@@ -1400,11 +1372,12 @@ var TerminalManager = class _TerminalManager {
1400
1372
  );
1401
1373
  }
1402
1374
  const terminalSession = {
1403
- id: nanoid(),
1375
+ id: uuidv7(),
1404
1376
  projectId,
1405
1377
  instanceId,
1406
1378
  terminalName,
1407
1379
  terminalTitle: factory.title,
1380
+ terminalIcon: factory.icon,
1408
1381
  createdAt: /* @__PURE__ */ new Date()
1409
1382
  };
1410
1383
  await this.stateBackend.putTerminalSession(projectId, instanceId, terminalSession);
@@ -1412,9 +1385,9 @@ var TerminalManager = class _TerminalManager {
1412
1385
  this.createManagedTerminal(factory, terminalSession);
1413
1386
  return terminalSession;
1414
1387
  }
1415
- async getOrCreateSession(projectId, instanceId, terminalName) {
1388
+ async getOrCreateSession(projectId, instanceId, terminalName, newSession = false) {
1416
1389
  const existingSession = this.existingSessions.get(`${projectId}:${instanceId}.${terminalName}`);
1417
- if (existingSession) {
1390
+ if (existingSession && !newSession) {
1418
1391
  return existingSession;
1419
1392
  }
1420
1393
  return await this.createSession(projectId, instanceId, terminalName);
@@ -1583,7 +1556,7 @@ import { EventEmitter as EventEmitter4, on as on4 } from "node:events";
1583
1556
  import { resolve as resolve4 } from "node:path";
1584
1557
  import { getInstanceId as getInstanceId2 } from "@highstate/contract";
1585
1558
  import { ensureDependencyInstalled } from "nypm";
1586
- import { mapValues as mapValues2, omit, pick, pickBy as pickBy2 } from "remeda";
1559
+ import { mapValues as mapValues2, omit, pickBy as pickBy2 } from "remeda";
1587
1560
  import { z as z9 } from "zod";
1588
1561
  import { sha256 } from "crypto-hash";
1589
1562
  var localRunnerBackendConfig = z9.object({
@@ -2055,8 +2028,7 @@ var LocalRunnerBackend = class _LocalRunnerBackend {
2055
2028
  patch.files = [];
2056
2029
  }
2057
2030
  if (outputs["$terminals"]) {
2058
- const terminals = z9.array(instanceTerminalSchema).parse(outputs["$terminals"].value);
2059
- patch.terminals = terminals.map((terminal) => pick(terminal, ["name", "title", "description"]));
2031
+ patch.terminals = z9.array(instanceTerminalMetaSchema).parse(outputs["$terminals"].value);
2060
2032
  } else {
2061
2033
  patch.terminals = [];
2062
2034
  }
@@ -2164,7 +2136,7 @@ import { z as z12 } from "zod";
2164
2136
  // src/state/local.ts
2165
2137
  import { resolve as resolve5 } from "node:path";
2166
2138
  import { z as z11 } from "zod";
2167
- import { uuidv7 } from "uuidv7";
2139
+ import { uuidv7 as uuidv72 } from "uuidv7";
2168
2140
  var localStateBackendConfig = z11.object({
2169
2141
  HIGHSTATE_BACKEND_STATE_LOCAL_DIR: z11.string().optional()
2170
2142
  });
@@ -2272,7 +2244,7 @@ var LocalStateBackend = class _LocalStateBackend {
2272
2244
  await this.db.batch(
2273
2245
  logs.map(([instanceID, line]) => ({
2274
2246
  type: "put",
2275
- key: uuidv7(),
2247
+ key: uuidv72(),
2276
2248
  value: line,
2277
2249
  sublevel: sublevels.get(instanceID)
2278
2250
  }))
@@ -2368,7 +2340,7 @@ var LocalStateBackend = class _LocalStateBackend {
2368
2340
  }
2369
2341
  async getTerminalSessions(projectId, instanceId) {
2370
2342
  const sublevel = this.getTerminalSessionsSublevel(projectId, instanceId);
2371
- return await this.getAllSublevelItems(sublevel, terminalSessionSchema);
2343
+ return await this.getAllSublevelItems(sublevel, terminalSessionSchema, 20, { reverse: true });
2372
2344
  }
2373
2345
  async getLastTerminalSession(projectId, instanceId, sessionId) {
2374
2346
  const sublevel = this.getTerminalSessionsSublevel(projectId, instanceId);
@@ -2395,7 +2367,7 @@ var LocalStateBackend = class _LocalStateBackend {
2395
2367
  await this.db.batch(
2396
2368
  lines.map(([sessionId, line]) => ({
2397
2369
  type: "put",
2398
- key: uuidv7(),
2370
+ key: uuidv72(),
2399
2371
  value: line,
2400
2372
  sublevel: sublevels.get(sessionId)
2401
2373
  }))
@@ -2680,7 +2652,7 @@ async function loadConfig(env = process.env, useDotenv = true) {
2680
2652
 
2681
2653
  // src/orchestrator/manager.ts
2682
2654
  import { EventEmitter as EventEmitter6, on as on6 } from "node:events";
2683
- import { uuidv7 as uuidv72 } from "uuidv7";
2655
+ import { uuidv7 as uuidv73 } from "uuidv7";
2684
2656
 
2685
2657
  // src/orchestrator/operation.ts
2686
2658
  import { isUnitModel as isUnitModel4, parseInstanceId as parseInstanceId3 } from "@highstate/contract";
@@ -2918,6 +2890,14 @@ var OperationWorkset = class _OperationWorkset {
2918
2890
  instance = this.instanceMap.get(instance.parentId);
2919
2891
  }
2920
2892
  }
2893
+ if (!this.operation.options.allowPartialCompositeInstanceUpdates) {
2894
+ for (const instanceId of this.instanceIdsToUpdate) {
2895
+ const children = this.instanceChildrenMap.get(instanceId) ?? [];
2896
+ for (const child of children) {
2897
+ this.instanceIdsToUpdate.add(child.id);
2898
+ }
2899
+ }
2900
+ }
2921
2901
  this.operation.instanceIdsToUpdate = Array.from(this.instanceIdsToUpdate);
2922
2902
  }
2923
2903
  calculateInstanceIdsToDestroy() {
@@ -2981,6 +2961,14 @@ var OperationWorkset = class _OperationWorkset {
2981
2961
  state = this.stateMap.get(state.parentId);
2982
2962
  }
2983
2963
  }
2964
+ if (!this.operation.options.allowPartialCompositeInstanceUpdates) {
2965
+ for (const instanceId of this.instanceIdsToDestroy) {
2966
+ const children = this.stateChildIdMap.get(instanceId) ?? [];
2967
+ for (const childId of children) {
2968
+ this.instanceIdsToDestroy.add(childId);
2969
+ }
2970
+ }
2971
+ }
2984
2972
  this.operation.instanceIdsToDestroy = Array.from(this.instanceIdsToDestroy);
2985
2973
  }
2986
2974
  getSourceHashIfApplicable(instance, component) {
@@ -3423,6 +3411,9 @@ var RuntimeOperation = class {
3423
3411
  const dependentPromises = [];
3424
3412
  const dependents = this.workset.getDependentStates(state.id);
3425
3413
  for (const dependent of dependents) {
3414
+ if (!this.operation.options.destroyDependentInstances && !this.operation.instanceIdsToDestroy.includes(dependent.id)) {
3415
+ continue;
3416
+ }
3426
3417
  dependentPromises.push(this.getInstancePromiseForOperation(dependent.id));
3427
3418
  }
3428
3419
  await Promise.all(dependentPromises);
@@ -3627,7 +3618,7 @@ var OperationManager = class _OperationManager {
3627
3618
  */
3628
3619
  async launch(request) {
3629
3620
  const operation = {
3630
- id: uuidv72(),
3621
+ id: uuidv73(),
3631
3622
  projectId: request.projectId,
3632
3623
  type: request.type,
3633
3624
  requestedInstanceIds: request.instanceIds,
@@ -3641,7 +3632,8 @@ var OperationManager = class _OperationManager {
3641
3632
  invokeDestroyTriggers: request.options?.invokeDestroyTriggers ?? false,
3642
3633
  deleteUnreachableResources: request.options?.deleteUnreachableResources ?? false,
3643
3634
  forceDeleteState: request.options?.forceDeleteState ?? false,
3644
- refresh: request.options?.refresh ?? false
3635
+ refresh: request.options?.refresh ?? false,
3636
+ allowPartialCompositeInstanceUpdates: request.options?.allowPartialCompositeInstanceUpdates ?? false
3645
3637
  },
3646
3638
  error: null,
3647
3639
  startedAt: Date.now(),