@highstate/backend 0.7.3 → 0.7.6

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.
@@ -1,14 +1,14 @@
1
- import { workerData, parentPort } from 'node:worker_threads';
2
- import { fileURLToPath } from 'node:url';
3
- import { dirname, resolve as resolve$1, relative } from 'node:path';
4
- import { readFile } from 'node:fs/promises';
5
- import pino from 'pino';
6
- import { resolve } from 'import-meta-resolve';
7
- import { resolvePackageJSON, readPackageJSON } from 'pkg-types';
8
-
9
- const { requests, logLevel } = workerData;
10
- const logger = pino({ name: "source-resolution-worker", level: logLevel ?? "silent" });
11
- const results = await Promise.all(
1
+ // src/library/source-resolution-worker.ts
2
+ import { parentPort, workerData } from "node:worker_threads";
3
+ import { fileURLToPath } from "node:url";
4
+ import { dirname, relative, resolve } from "node:path";
5
+ import { readFile } from "node:fs/promises";
6
+ import pino from "pino";
7
+ import { resolve as importMetaResolve } from "import-meta-resolve";
8
+ import { readPackageJSON, resolvePackageJSON } from "pkg-types";
9
+ var { requests, logLevel } = workerData;
10
+ var logger = pino({ name: "source-resolution-worker", level: logLevel ?? "silent" });
11
+ var results = await Promise.all(
12
12
  requests.map((request) => resolveUnitSourceSafe(request.source, request.unitType))
13
13
  );
14
14
  parentPort.postMessage({
@@ -25,12 +25,12 @@ async function resolveUnitSourceSafe(source, unitType) {
25
25
  }
26
26
  async function resolveUnitSource(source, unitType) {
27
27
  const fullPath = source.path ? `${source.package}/${source.path}` : source.package;
28
- const url = resolve(fullPath, import.meta.url);
28
+ const url = importMetaResolve(fullPath, import.meta.url);
29
29
  const path = fileURLToPath(url);
30
30
  const projectPath = dirname(path);
31
31
  const packageJsonPath = await resolvePackageJSON(projectPath);
32
32
  const packageJson = await readPackageJSON(projectPath);
33
- const manifestPath = resolve$1(dirname(packageJsonPath), "dist", "highstate.manifest.json");
33
+ const manifestPath = resolve(dirname(packageJsonPath), "dist", "highstate.manifest.json");
34
34
  let manifest;
35
35
  try {
36
36
  manifest = JSON.parse(await readFile(manifestPath, "utf8"));
@@ -53,3 +53,4 @@ async function resolveUnitSource(source, unitType) {
53
53
  allowedDependencies
54
54
  };
55
55
  }
56
+ //# sourceMappingURL=source-resolution-worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/library/source-resolution-worker.ts"],"sourcesContent":["import type { UnitSource } from \"@highstate/contract\"\nimport { parentPort, workerData } from \"node:worker_threads\"\nimport { fileURLToPath } from \"node:url\"\nimport { dirname, relative, resolve } from \"node:path\"\nimport { readFile } from \"node:fs/promises\"\nimport pino, { type Level } from \"pino\"\nimport { resolve as importMetaResolve } from \"import-meta-resolve\"\nimport { readPackageJSON, resolvePackageJSON } from \"pkg-types\"\n\nexport type SourceResolutionRequest = {\n unitType: string\n source: UnitSource\n}\n\nexport type SourceResolutionResult = {\n unitType: string\n projectPath: string\n packageJsonPath: string\n sourceHash: string\n allowedDependencies: string[]\n}\n\nexport type HighstateManifestJson = {\n sourceHashes?: Record<string, string>\n}\n\nconst { requests, logLevel } = workerData as {\n requests: SourceResolutionRequest[]\n logLevel?: Level\n}\n\nconst logger = pino({ name: \"source-resolution-worker\", level: logLevel ?? \"silent\" })\n\nconst results = await Promise.all(\n requests.map(request => resolveUnitSourceSafe(request.source, request.unitType)),\n)\n\nparentPort!.postMessage({\n type: \"result\",\n results: results.filter((result): result is SourceResolutionResult => result !== null),\n})\n\nasync function resolveUnitSourceSafe(\n source: UnitSource,\n unitType: string,\n): Promise<SourceResolutionResult | null> {\n try {\n return await resolveUnitSource(source, unitType)\n } catch (error) {\n logger.error({ source, unitType, err: error }, \"failed to resolve unit source\")\n return null\n }\n}\n\nasync function resolveUnitSource(\n source: UnitSource,\n unitType: string,\n): Promise<SourceResolutionResult> {\n const fullPath = source.path ? `${source.package}/${source.path}` : source.package\n\n const url = importMetaResolve(fullPath, import.meta.url)\n const path = fileURLToPath(url)\n const projectPath = dirname(path)\n\n const packageJsonPath = await resolvePackageJSON(projectPath)\n const packageJson = await readPackageJSON(projectPath)\n\n const manifestPath = resolve(dirname(packageJsonPath), \"dist\", \"highstate.manifest.json\")\n let manifest: HighstateManifestJson | undefined\n try {\n manifest = JSON.parse(await readFile(manifestPath, \"utf8\")) as HighstateManifestJson\n } catch (error) {\n logger.debug({ error }, \"failed to read highstate manifest\")\n }\n\n let relativePath = relative(dirname(packageJsonPath), path)\n relativePath = relativePath.startsWith(\".\") ? relativePath : `./${relativePath}`\n\n const sourceHash = manifest?.sourceHashes?.[relativePath]\n if (!sourceHash) {\n logger.warn({ unitType, relativePath, packageName: packageJson.name }, \"source hash not found\")\n }\n\n // only the peer dependencies of the package are allowed to auto-install when they are missing\n const allowedDependencies = Object.keys(packageJson.peerDependencies ?? {})\n\n logger.debug({ packageJson }, \"package.json read\")\n\n return {\n unitType,\n projectPath,\n packageJsonPath,\n sourceHash: sourceHash ?? \"\",\n allowedDependencies,\n }\n}\n"],"mappings":";AACA,SAAS,YAAY,kBAAkB;AACvC,SAAS,qBAAqB;AAC9B,SAAS,SAAS,UAAU,eAAe;AAC3C,SAAS,gBAAgB;AACzB,OAAO,UAA0B;AACjC,SAAS,WAAW,yBAAyB;AAC7C,SAAS,iBAAiB,0BAA0B;AAmBpD,IAAM,EAAE,UAAU,SAAS,IAAI;AAK/B,IAAM,SAAS,KAAK,EAAE,MAAM,4BAA4B,OAAO,YAAY,SAAS,CAAC;AAErF,IAAM,UAAU,MAAM,QAAQ;AAAA,EAC5B,SAAS,IAAI,aAAW,sBAAsB,QAAQ,QAAQ,QAAQ,QAAQ,CAAC;AACjF;AAEA,WAAY,YAAY;AAAA,EACtB,MAAM;AAAA,EACN,SAAS,QAAQ,OAAO,CAAC,WAA6C,WAAW,IAAI;AACvF,CAAC;AAED,eAAe,sBACb,QACA,UACwC;AACxC,MAAI;AACF,WAAO,MAAM,kBAAkB,QAAQ,QAAQ;AAAA,EACjD,SAAS,OAAO;AACd,WAAO,MAAM,EAAE,QAAQ,UAAU,KAAK,MAAM,GAAG,+BAA+B;AAC9E,WAAO;AAAA,EACT;AACF;AAEA,eAAe,kBACb,QACA,UACiC;AACjC,QAAM,WAAW,OAAO,OAAO,GAAG,OAAO,OAAO,IAAI,OAAO,IAAI,KAAK,OAAO;AAE3E,QAAM,MAAM,kBAAkB,UAAU,YAAY,GAAG;AACvD,QAAM,OAAO,cAAc,GAAG;AAC9B,QAAM,cAAc,QAAQ,IAAI;AAEhC,QAAM,kBAAkB,MAAM,mBAAmB,WAAW;AAC5D,QAAM,cAAc,MAAM,gBAAgB,WAAW;AAErD,QAAM,eAAe,QAAQ,QAAQ,eAAe,GAAG,QAAQ,yBAAyB;AACxF,MAAI;AACJ,MAAI;AACF,eAAW,KAAK,MAAM,MAAM,SAAS,cAAc,MAAM,CAAC;AAAA,EAC5D,SAAS,OAAO;AACd,WAAO,MAAM,EAAE,MAAM,GAAG,mCAAmC;AAAA,EAC7D;AAEA,MAAI,eAAe,SAAS,QAAQ,eAAe,GAAG,IAAI;AAC1D,iBAAe,aAAa,WAAW,GAAG,IAAI,eAAe,KAAK,YAAY;AAE9E,QAAM,aAAa,UAAU,eAAe,YAAY;AACxD,MAAI,CAAC,YAAY;AACf,WAAO,KAAK,EAAE,UAAU,cAAc,aAAa,YAAY,KAAK,GAAG,uBAAuB;AAAA,EAChG;AAGA,QAAM,sBAAsB,OAAO,KAAK,YAAY,oBAAoB,CAAC,CAAC;AAE1E,SAAO,MAAM,EAAE,YAAY,GAAG,mBAAmB;AAEjD,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAY,cAAc;AAAA,IAC1B;AAAA,EACF;AACF;","names":[]}
@@ -1,35 +1,52 @@
1
- import { workerData, parentPort } from 'node:worker_threads';
2
- import { createJiti } from 'jiti';
3
- import { pino } from 'pino';
4
- import { mapValues } from 'remeda';
5
- import { e as errorToString } from '../../utils-ByadNcv4.js';
6
- import { BetterLock } from 'better-lock';
7
- import 'node:path';
8
- import 'pkg-types';
9
- import { isComponent, isEntity, isUnitModel, originalCreate, resetEvaluation, getCompositeInstances } from '@highstate/contract';
10
- import { serializeFunction } from '@pulumi/pulumi/runtime/index.js';
11
- import { sha256 } from 'crypto-hash';
12
- import 'zod';
1
+ import {
2
+ errorToString
3
+ } from "../../chunk-EQ4LMS7B.js";
4
+ import {
5
+ __require
6
+ } from "../../chunk-DGUM43GV.js";
13
7
 
14
- async function loadLibrary(jiti, logger, modulePaths) {
8
+ // src/library/worker/main.ts
9
+ import { parentPort, workerData } from "node:worker_threads";
10
+ import { createJiti } from "jiti";
11
+ import { pino } from "pino";
12
+ import { mapValues } from "remeda";
13
+
14
+ // src/library/worker/loader.ts
15
+ import {
16
+ isComponent,
17
+ isEntity,
18
+ isUnitModel,
19
+ originalCreate
20
+ } from "@highstate/contract";
21
+ import { serializeFunction } from "@pulumi/pulumi/runtime/index.js";
22
+ import { sha256 } from "crypto-hash";
23
+ var Module = __require("module");
24
+ var originalLoad = Module._load;
25
+ Module._load = function(request, parent, isMain) {
26
+ if (request === "trace_events") {
27
+ return {};
28
+ }
29
+ return originalLoad(request, parent, isMain);
30
+ };
31
+ async function loadLibrary(jiti2, logger2, modulePaths) {
15
32
  const modules = {};
16
33
  for (const modulePath of modulePaths) {
17
34
  try {
18
- logger.debug("loading module", { modulePath });
19
- modules[modulePath] = await jiti.import(modulePath);
20
- logger.debug("module loaded", { modulePath });
35
+ logger2.debug("loading module", { modulePath });
36
+ modules[modulePath] = await jiti2.import(modulePath);
37
+ logger2.debug("module loaded", { modulePath });
21
38
  } catch (error) {
22
- logger.error("module load failed", { modulePath, error });
39
+ logger2.error("module load failed", { modulePath, error });
23
40
  }
24
41
  }
25
42
  const components = {};
26
43
  const entities = {};
27
44
  await _loadLibrary(modules, components, entities);
28
- logger.info("library loaded", {
45
+ logger2.info("library loaded", {
29
46
  componentCount: Object.keys(components).length,
30
47
  entityCount: Object.keys(entities).length
31
48
  });
32
- logger.trace("library content", { components, entities });
49
+ logger2.trace("library content", { components, entities });
33
50
  return { components, entities };
34
51
  }
35
52
  async function _loadLibrary(value, components, entities) {
@@ -64,17 +81,20 @@ async function calculateEntityDefinitionHash(entity) {
64
81
  return await sha256(JSON.stringify(entity));
65
82
  }
66
83
 
67
- const lock = new BetterLock();
68
- function evaluateModules(jiti, logger, modulePaths) {
84
+ // src/library/worker/evaluator.ts
85
+ import { getCompositeInstances, resetEvaluation } from "@highstate/contract";
86
+ import { BetterLock } from "better-lock";
87
+ var lock = new BetterLock();
88
+ function evaluateModules(jiti2, logger2, modulePaths) {
69
89
  return lock.acquire(async () => {
70
90
  resetEvaluation();
71
91
  let lastModulePath = "";
72
92
  try {
73
93
  for (const modulePath of modulePaths) {
74
- logger.info("loading module: %s", modulePath);
94
+ logger2.info("loading module: %s", modulePath);
75
95
  lastModulePath = modulePath;
76
- await jiti.import(modulePath);
77
- logger.debug("module loaded: %s", modulePath);
96
+ await jiti2.import(modulePath);
97
+ logger2.debug("module loaded: %s", modulePath);
78
98
  }
79
99
  return {
80
100
  success: true,
@@ -89,13 +109,13 @@ function evaluateModules(jiti, logger, modulePaths) {
89
109
  }
90
110
  });
91
111
  }
92
- function evaluateInstances(logger, library, allInstances, resolvedInputs, instanceIds) {
112
+ function evaluateInstances(logger2, library2, allInstances, resolvedInputs, instanceIds) {
93
113
  const results = [];
94
114
  const allInstancesMap = new Map(allInstances.map((instance) => [instance.id, instance]));
95
115
  const instanceOutputs = /* @__PURE__ */ new Map();
96
116
  for (const instanceId of instanceIds ?? []) {
97
117
  try {
98
- logger.debug({ instanceId }, "evaluating top-level instance");
118
+ logger2.debug({ instanceId }, "evaluating top-level instance");
99
119
  resetEvaluation();
100
120
  evaluateInstance(instanceId);
101
121
  results.push({
@@ -123,7 +143,7 @@ function evaluateInstances(logger, library, allInstances, resolvedInputs, instan
123
143
  function _evaluateInstance(instanceId) {
124
144
  const inputs = {};
125
145
  const instance = allInstancesMap.get(instanceId);
126
- logger.info("evaluating instance", { instanceId });
146
+ logger2.info("evaluating instance", { instanceId });
127
147
  if (!instance) {
128
148
  throw new Error(`Instance not found: ${instanceId}`);
129
149
  }
@@ -133,7 +153,7 @@ function evaluateInstances(logger, library, allInstances, resolvedInputs, instan
133
153
  return evaluated[input2.input.output];
134
154
  });
135
155
  }
136
- const component = library.components[instance.type];
156
+ const component = library2.components[instance.type];
137
157
  if (!component) {
138
158
  throw new Error(`Component not found: ${instance.type}, required by instance: ${instanceId}`);
139
159
  }
@@ -145,10 +165,11 @@ function evaluateInstances(logger, library, allInstances, resolvedInputs, instan
145
165
  }
146
166
  }
147
167
 
148
- const data = workerData;
149
- const logger = pino({ name: "library-worker", level: data.logLevel });
150
- let jiti;
151
- let library;
168
+ // src/library/worker/main.ts
169
+ var data = workerData;
170
+ var logger = pino({ name: "library-worker", level: data.logLevel });
171
+ var jiti;
172
+ var library;
152
173
  try {
153
174
  logger.info("worker started");
154
175
  logger.trace({ data }, "worker data");
@@ -205,3 +226,4 @@ parentPort.on("message", async (message) => {
205
226
  });
206
227
  }
207
228
  });
229
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/library/worker/main.ts","../../../src/library/worker/loader.ts","../../../src/library/worker/evaluator.ts"],"sourcesContent":["import type { WorkerData, WorkerRequest, WorkerResponse } from \"./protocol\"\nimport { parentPort, workerData } from \"node:worker_threads\"\nimport { createJiti, type Jiti } from \"jiti\"\nimport { pino } from \"pino\"\nimport { mapValues } from \"remeda\"\nimport { errorToString } from \"../../common\"\nimport { loadLibrary, type Library } from \"./loader\"\nimport { evaluateInstances, evaluateModules } from \"./evaluator\"\n\nconst data = workerData as WorkerData\n\nconst logger = pino({ name: \"library-worker\", level: data.logLevel })\nlet jiti: Jiti\nlet library: Library\n\ntry {\n logger.info(\"worker started\")\n logger.trace({ data }, \"worker data\")\n\n jiti = createJiti(import.meta.filename)\n logger.debug({ filename: import.meta.filename }, \"jiti created\")\n\n library = await loadLibrary(jiti, logger, data.modulePaths)\n\n parentPort!.postMessage({\n type: \"library\",\n library: {\n components: mapValues(library.components, component => component.model),\n entities: library.entities,\n },\n } satisfies WorkerResponse)\n\n logger.info(\"library loaded and sent\")\n} catch (error) {\n logger.error({ error }, \"failed to load library\")\n\n parentPort!.postMessage({\n type: \"error\",\n error: errorToString(error),\n })\n}\n\n// eslint-disable-next-line @typescript-eslint/no-misused-promises\nparentPort!.on(\"message\", async message => {\n try {\n const request = message as WorkerRequest\n\n switch (request.type) {\n case \"evaluate-composite-instances\": {\n const results = evaluateInstances(\n logger,\n library,\n request.allInstances,\n request.resolvedInputs,\n request.instanceIds,\n )\n\n parentPort!.postMessage({\n type: \"instance-evaluation-results\",\n results,\n } satisfies WorkerResponse)\n break\n }\n case \"evaluate-modules\": {\n const result = await evaluateModules(jiti, logger, request.modulePaths)\n\n parentPort!.postMessage({\n type: \"module-evaluation-result\",\n result,\n } satisfies WorkerResponse)\n break\n }\n }\n } catch (error) {\n logger.error({ error }, \"failed to evaluate\")\n\n parentPort!.postMessage({\n type: \"error\",\n error: errorToString(error),\n } satisfies WorkerResponse)\n }\n})\n","/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-return */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n\nimport type { Logger } from \"pino\"\nimport type { Jiti } from \"jiti\"\nimport {\n type Component,\n type Entity,\n isComponent,\n isEntity,\n isUnitModel,\n originalCreate,\n} from \"@highstate/contract\"\nimport { serializeFunction } from \"@pulumi/pulumi/runtime/index.js\"\nimport { sha256 } from \"crypto-hash\"\n\n// eslint-disable-next-line @typescript-eslint/no-require-imports\nconst Module = require(\"module\")\nconst originalLoad = Module._load\n\nModule._load = function (request: unknown, parent: unknown, isMain: boolean) {\n if (request === \"trace_events\") {\n return {}\n }\n\n return originalLoad(request, parent, isMain)\n}\n\nexport type Library = Readonly<{\n components: Readonly<Record<string, Component>>\n entities: Readonly<Record<string, Entity>>\n}>\n\nexport async function loadLibrary(\n jiti: Jiti,\n logger: Logger,\n modulePaths: string[],\n): Promise<Library> {\n const modules: Record<string, unknown> = {}\n for (const modulePath of modulePaths) {\n try {\n logger.debug(\"loading module\", { modulePath })\n modules[modulePath] = await jiti.import(modulePath)\n\n logger.debug(\"module loaded\", { modulePath })\n } catch (error) {\n logger.error(\"module load failed\", { modulePath, error })\n }\n }\n\n const components: Record<string, Component> = {}\n const entities: Record<string, Entity> = {}\n\n await _loadLibrary(modules, components, entities)\n\n logger.info(\"library loaded\", {\n componentCount: Object.keys(components).length,\n entityCount: Object.keys(entities).length,\n })\n\n logger.trace(\"library content\", { components, entities })\n\n return { components, entities }\n}\n\nasync function _loadLibrary(\n value: unknown,\n components: Record<string, Component>,\n entities: Record<string, Entity>,\n): Promise<void> {\n if (isComponent(value)) {\n components[value.model.type] = value\n value.model.definitionHash = await calculateComponentDefinitionHash(value)\n\n for (const entity of value.entities.values()) {\n entity.definitionHash ??= await calculateEntityDefinitionHash(entity)\n }\n return\n }\n\n if (isEntity(value)) {\n entities[value.type] = value\n entities[value.type].definitionHash ??= await calculateEntityDefinitionHash(value)\n return\n }\n\n if (typeof value !== \"object\" || value === null) {\n return\n }\n\n for (const key in value) {\n await _loadLibrary((value as Record<string, unknown>)[key], components, entities)\n }\n}\n\nasync function calculateComponentDefinitionHash(component: Component): Promise<string> {\n if (isUnitModel(component.model)) {\n return await sha256(JSON.stringify(component.model))\n }\n\n const serializedCreate = await serializeFunction(component[originalCreate])\n\n return await sha256(JSON.stringify(component.model) + serializedCreate.text)\n}\n\nasync function calculateEntityDefinitionHash(entity: Entity): Promise<string> {\n return await sha256(JSON.stringify(entity))\n}\n","import type { Logger } from \"pino\"\nimport type { Library } from \"./loader\"\nimport type { Jiti } from \"jiti\"\nimport type { InstanceEvaluationResult, ModuleEvaluationResult } from \"../abstractions\"\nimport type { ResolvedInstanceInput } from \"../../shared\"\nimport { getCompositeInstances, resetEvaluation, type InstanceModel } from \"@highstate/contract\"\nimport { BetterLock } from \"better-lock\"\nimport { errorToString } from \"../../common\"\n\nconst lock = new BetterLock()\n\nexport function evaluateModules(\n jiti: Jiti,\n logger: Logger,\n modulePaths: string[],\n): Promise<ModuleEvaluationResult> {\n return lock.acquire(async () => {\n resetEvaluation()\n let lastModulePath = \"\"\n\n try {\n for (const modulePath of modulePaths) {\n logger.info(\"loading module: %s\", modulePath)\n\n lastModulePath = modulePath\n await jiti.import(modulePath)\n\n logger.debug(\"module loaded: %s\", modulePath)\n }\n\n return {\n success: true,\n compositeInstances: getCompositeInstances(),\n }\n } catch (error) {\n return {\n success: false,\n modulePath: lastModulePath,\n error: errorToString(error),\n }\n }\n })\n}\n\nexport function evaluateInstances(\n logger: Logger,\n library: Library,\n allInstances: InstanceModel[],\n resolvedInputs: Record<string, Record<string, ResolvedInstanceInput[]>>,\n instanceIds: string[],\n): InstanceEvaluationResult[] {\n const results: InstanceEvaluationResult[] = []\n const allInstancesMap = new Map(allInstances.map(instance => [instance.id, instance]))\n const instanceOutputs = new Map<string, Record<string, unknown>>()\n\n for (const instanceId of instanceIds ?? []) {\n try {\n logger.debug({ instanceId }, \"evaluating top-level instance\")\n resetEvaluation()\n\n evaluateInstance(instanceId)\n\n results.push({\n success: true,\n instanceId,\n compositeInstances: getCompositeInstances(),\n })\n } catch (error) {\n results.push({\n success: false,\n instanceId,\n error: errorToString(error),\n })\n }\n }\n\n return results\n\n function evaluateInstance(instanceId: string): Record<string, unknown> {\n let outputs = instanceOutputs.get(instanceId)\n\n if (!outputs) {\n outputs = _evaluateInstance(instanceId)\n instanceOutputs.set(instanceId, outputs)\n }\n\n return outputs\n }\n\n function _evaluateInstance(instanceId: string): Record<string, unknown> {\n const inputs: Record<string, unknown> = {}\n const instance = allInstancesMap.get(instanceId)\n\n logger.info(\"evaluating instance\", { instanceId })\n\n if (!instance) {\n throw new Error(`Instance not found: ${instanceId}`)\n }\n\n for (const [inputName, input] of Object.entries(resolvedInputs[instanceId] ?? {})) {\n inputs[inputName] = input.map(input => {\n const evaluated = evaluateInstance(input.input.instanceId)\n\n return evaluated[input.input.output]\n })\n }\n\n const component = library.components[instance.type]\n if (!component) {\n throw new Error(`Component not found: ${instance.type}, required by instance: ${instanceId}`)\n }\n\n return component({\n name: instance.name,\n args: instance.args as Record<string, never>,\n inputs: inputs as Record<string, never>,\n })\n }\n}\n"],"mappings":"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","names":["jiti","logger","jiti","logger","library","input"]}
@@ -1,6 +1,102 @@
1
- export { I as CircularDependencyError, V as applyLibraryUpdate, y as applyPartialInstanceState, A as buildDependentInstanceStateMap, c as compositeInstanceSchema, J as createDefaultGraphResolverBackend, R as createInputHashResolver, M as createInputResolver, x as createInstanceState, z as createInstanceStatePatch, S as createValidationResolver, K as defineGraphResolver, U as diffLibraries, B as getAllDependentInstanceIds, Q as getMatchedInjectionInstanceInputs, N as getResolvedHubInputs, P as getResolvedInjectionInstanceInputs, O as getResolvedInstanceInputs, h as hubInstanceInputSchema, d as hubModelPatchSchema, e as hubModelSchema, j as instanceFileMetaSchema, k as instanceFileSchema, i as instanceInputSchema, a as instanceModelPatchSchema, b as instanceModelSchema, l as instancePageBlockSchema, m as instancePageMetaSchema, n as instancePageSchema, v as instanceStateSchema, w as instanceStateUpdateSchema, g as instanceStatusFieldSchema, f as instanceStatusSchema, q as instanceTerminalFileSchema, o as instanceTerminalMetaSchema, r as instanceTerminalSchema, u as instanceTriggerInvocationSchema, t as instanceTriggerSchema, s as instanceTriggerSpecSchema, H as isFinalOperationStatus, E as operationOptionsSchema, D as operationStatusSchema, C as operationTypeSchema, p as positionSchema, F as projectOperationRequestSchema, G as projectOperationSchema, L as resolverFactories, T as terminalSessionSchema } from '../library-BW5oPM7V.js';
2
- import 'zod';
3
- import 'remeda';
4
- import '@highstate/contract';
5
- import 'crypto-hash';
6
- import 'ajv';
1
+ import {
2
+ CircularDependencyError,
3
+ applyLibraryUpdate,
4
+ applyPartialInstanceState,
5
+ buildDependentInstanceStateMap,
6
+ compositeInstanceSchema,
7
+ createDefaultGraphResolverBackend,
8
+ createInputHashResolver,
9
+ createInputResolver,
10
+ createInstanceState,
11
+ createInstanceStatePatch,
12
+ createValidationResolver,
13
+ defineGraphResolver,
14
+ diffLibraries,
15
+ getAllDependentInstanceIds,
16
+ getMatchedInjectionInstanceInputs,
17
+ getResolvedHubInputs,
18
+ getResolvedInjectionInstanceInputs,
19
+ getResolvedInstanceInputs,
20
+ hubInstanceInputSchema,
21
+ hubModelPatchSchema,
22
+ hubModelSchema,
23
+ instanceFileMetaSchema,
24
+ instanceFileSchema,
25
+ instanceInputSchema,
26
+ instanceModelPatchSchema,
27
+ instanceModelSchema,
28
+ instancePageBlockSchema,
29
+ instancePageMetaSchema,
30
+ instancePageSchema,
31
+ instanceStateSchema,
32
+ instanceStateUpdateSchema,
33
+ instanceStatusFieldSchema,
34
+ instanceStatusSchema,
35
+ instanceTerminalFileSchema,
36
+ instanceTerminalMetaSchema,
37
+ instanceTerminalSchema,
38
+ instanceTriggerInvocationSchema,
39
+ instanceTriggerSchema,
40
+ instanceTriggerSpecSchema,
41
+ isFinalOperationStatus,
42
+ operationOptionsSchema,
43
+ operationStatusSchema,
44
+ operationTypeSchema,
45
+ positionSchema,
46
+ projectOperationRequestSchema,
47
+ projectOperationSchema,
48
+ resolverFactories,
49
+ terminalSessionSchema
50
+ } from "../chunk-TDCHA47F.js";
51
+ import "../chunk-DGUM43GV.js";
52
+ export {
53
+ CircularDependencyError,
54
+ applyLibraryUpdate,
55
+ applyPartialInstanceState,
56
+ buildDependentInstanceStateMap,
57
+ compositeInstanceSchema,
58
+ createDefaultGraphResolverBackend,
59
+ createInputHashResolver,
60
+ createInputResolver,
61
+ createInstanceState,
62
+ createInstanceStatePatch,
63
+ createValidationResolver,
64
+ defineGraphResolver,
65
+ diffLibraries,
66
+ getAllDependentInstanceIds,
67
+ getMatchedInjectionInstanceInputs,
68
+ getResolvedHubInputs,
69
+ getResolvedInjectionInstanceInputs,
70
+ getResolvedInstanceInputs,
71
+ hubInstanceInputSchema,
72
+ hubModelPatchSchema,
73
+ hubModelSchema,
74
+ instanceFileMetaSchema,
75
+ instanceFileSchema,
76
+ instanceInputSchema,
77
+ instanceModelPatchSchema,
78
+ instanceModelSchema,
79
+ instancePageBlockSchema,
80
+ instancePageMetaSchema,
81
+ instancePageSchema,
82
+ instanceStateSchema,
83
+ instanceStateUpdateSchema,
84
+ instanceStatusFieldSchema,
85
+ instanceStatusSchema,
86
+ instanceTerminalFileSchema,
87
+ instanceTerminalMetaSchema,
88
+ instanceTerminalSchema,
89
+ instanceTriggerInvocationSchema,
90
+ instanceTriggerSchema,
91
+ instanceTriggerSpecSchema,
92
+ isFinalOperationStatus,
93
+ operationOptionsSchema,
94
+ operationStatusSchema,
95
+ operationTypeSchema,
96
+ positionSchema,
97
+ projectOperationRequestSchema,
98
+ projectOperationSchema,
99
+ resolverFactories,
100
+ terminalSessionSchema
101
+ };
102
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
package/package.json CHANGED
@@ -1,10 +1,11 @@
1
1
  {
2
2
  "name": "@highstate/backend",
3
- "version": "0.7.3",
3
+ "version": "0.7.6",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "dist",
7
- "src"
7
+ "src",
8
+ "patches"
8
9
  ],
9
10
  "exports": {
10
11
  ".": {
@@ -22,10 +23,10 @@
22
23
  "access": "public"
23
24
  },
24
25
  "scripts": {
25
- "build": "pkgroll --clean --tsconfig=tsconfig.build.json"
26
+ "build": "highstate build"
26
27
  },
27
28
  "dependencies": {
28
- "@highstate/contract": "^0.7.3",
29
+ "@highstate/contract": "^0.7.6",
29
30
  "@types/node": "^22.10.1",
30
31
  "ajv": "^8.17.1",
31
32
  "better-lock": "^3.2.0",
@@ -45,7 +46,7 @@
45
46
  "zod": "^3.23.8"
46
47
  },
47
48
  "peerDependencies": {
48
- "@pulumi/pulumi": "^3.142.0",
49
+ "@pulumi/pulumi": "^3.163.0",
49
50
  "classic-level": "^2.0.0"
50
51
  },
51
52
  "peerDependenciesMeta": {
@@ -57,12 +58,11 @@
57
58
  }
58
59
  },
59
60
  "devDependencies": {
60
- "@pulumi/pulumi": "patch:@pulumi/pulumi@npm%3A3.159.0#~/.yarn/patches/@pulumi-pulumi-npm-3.159.0-d07eefce5c.patch",
61
61
  "classic-level": "^2.0.0",
62
+ "highstate-cli-bootstrap": "npm:@highstate/cli@0.7.4",
62
63
  "pino-pretty": "^13.0.0",
63
- "pkgroll": "^2.5.1",
64
64
  "rollup": "^4.28.1",
65
65
  "typescript": "^5.7.2"
66
66
  },
67
- "gitHead": "5cf7cec27262c8fa1d96f6478833b94841459d64"
67
+ "gitHead": "5acce7f9d8a57bdd1220e381d5b76d7b484b98c2"
68
68
  }
@@ -1,3 +1,8 @@
1
+ /* eslint-disable @typescript-eslint/no-unsafe-call */
2
+ /* eslint-disable @typescript-eslint/no-unsafe-return */
3
+ /* eslint-disable @typescript-eslint/no-unsafe-member-access */
4
+ /* eslint-disable @typescript-eslint/no-unsafe-assignment */
5
+
1
6
  import type { Logger } from "pino"
2
7
  import type { Jiti } from "jiti"
3
8
  import {
@@ -11,6 +16,18 @@ import {
11
16
  import { serializeFunction } from "@pulumi/pulumi/runtime/index.js"
12
17
  import { sha256 } from "crypto-hash"
13
18
 
19
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
20
+ const Module = require("module")
21
+ const originalLoad = Module._load
22
+
23
+ Module._load = function (request: unknown, parent: unknown, isMain: boolean) {
24
+ if (request === "trace_events") {
25
+ return {}
26
+ }
27
+
28
+ return originalLoad(request, parent, isMain)
29
+ }
30
+
14
31
  export type Library = Readonly<{
15
32
  components: Readonly<Record<string, Component>>
16
33
  entities: Readonly<Record<string, Entity>>
@@ -1,102 +0,0 @@
1
- import { z } from 'zod';
2
-
3
- async function runWithRetryOnError(runner, tryHandleError, maxRetries = 1) {
4
- let lastError;
5
- for (let i = 0; i < maxRetries + 1; i++) {
6
- try {
7
- return await runner();
8
- } catch (e) {
9
- lastError = e;
10
- if (await tryHandleError(e)) {
11
- continue;
12
- }
13
- throw e;
14
- }
15
- }
16
- throw lastError;
17
- }
18
- class AbortError extends Error {
19
- constructor(options) {
20
- super("Operation aborted", options);
21
- }
22
- }
23
- function isAbortError(error) {
24
- return error instanceof Error && error.name === "AbortError";
25
- }
26
- const abortMessagePatterns = ["Operation aborted", "Command was killed with SIGINT"];
27
- function isAbortErrorLike(error) {
28
- if (error instanceof Error) {
29
- return abortMessagePatterns.some((pattern) => error.message.includes(pattern));
30
- }
31
- return false;
32
- }
33
- function tryWrapAbortErrorLike(error) {
34
- if (isAbortErrorLike(error)) {
35
- return new AbortError({ cause: error });
36
- }
37
- return error;
38
- }
39
- const stringArrayType = z.string().transform((args) => args.split(",").map((arg) => arg.trim()));
40
- function errorToString(error) {
41
- if (error instanceof Error) {
42
- return error.stack || error.message;
43
- }
44
- return JSON.stringify(error);
45
- }
46
- function createAsyncBatcher(fn, { waitMs = 100, maxWaitTimeMs = 1e3 } = {}) {
47
- let batch = [];
48
- let activeTimeout = null;
49
- let maxWaitTimeout = null;
50
- let firstCallTimestamp = null;
51
- async function processBatch() {
52
- if (batch.length === 0) return;
53
- const currentBatch = batch;
54
- batch = [];
55
- await fn(currentBatch);
56
- if (maxWaitTimeout) {
57
- clearTimeout(maxWaitTimeout);
58
- maxWaitTimeout = null;
59
- }
60
- firstCallTimestamp = null;
61
- }
62
- function schedule() {
63
- if (activeTimeout) clearTimeout(activeTimeout);
64
- activeTimeout = setTimeout(() => {
65
- activeTimeout = null;
66
- void processBatch();
67
- }, waitMs);
68
- if (!firstCallTimestamp) {
69
- firstCallTimestamp = Date.now();
70
- maxWaitTimeout = setTimeout(() => {
71
- if (activeTimeout) clearTimeout(activeTimeout);
72
- activeTimeout = null;
73
- void processBatch();
74
- }, maxWaitTimeMs);
75
- }
76
- }
77
- return {
78
- /**
79
- * Add an item to the batch.
80
- */
81
- call(item) {
82
- batch.push(item);
83
- schedule();
84
- },
85
- /**
86
- * Immediately flush the pending batch (if any).
87
- */
88
- async flush() {
89
- if (activeTimeout) {
90
- clearTimeout(activeTimeout);
91
- activeTimeout = null;
92
- }
93
- if (maxWaitTimeout) {
94
- clearTimeout(maxWaitTimeout);
95
- maxWaitTimeout = null;
96
- }
97
- await processBatch();
98
- }
99
- };
100
- }
101
-
102
- export { AbortError as A, isAbortError as a, createAsyncBatcher as c, errorToString as e, isAbortErrorLike as i, runWithRetryOnError as r, stringArrayType as s, tryWrapAbortErrorLike as t };