@ldsg/workflow 0.3.31 → 0.3.33

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/dist/__tests__/unit/evaluate-variables.prefixItems.test.js +197 -191
  2. package/dist/__tests__/unit/resource.js +61 -61
  3. package/dist/__tests__/unit/resource.portId.test.js +144 -144
  4. package/dist/constants.d.ts +3 -3
  5. package/dist/constants.d.ts.map +1 -1
  6. package/dist/constants.js +10 -10
  7. package/dist/handler.d.ts +4 -4
  8. package/dist/index.d.ts +5 -5
  9. package/dist/instantiate-resource.d.ts +4 -4
  10. package/dist/instantiate-resource.js +1 -1
  11. package/dist/resource.d.ts +2 -2
  12. package/dist/resource.js +12 -12
  13. package/dist/types/index.d.ts +6 -6
  14. package/dist/types/json_schema_with_expression_extension.d.ts +6 -6
  15. package/dist/types/json_schema_with_expression_extension.d.ts.map +1 -1
  16. package/dist/types/node.d.ts +1 -1
  17. package/dist/types/specific-resource-settings.d.ts +1 -1
  18. package/dist/types/specific-resource-settings.d.ts.map +1 -1
  19. package/dist/types/specific-resource-settings.js +1 -1
  20. package/dist/types/workflow.d.ts +3 -3
  21. package/dist/utils/evaluate-variables/constants.js +17 -17
  22. package/dist/utils/evaluate-variables/index.d.ts +1 -1
  23. package/dist/utils/evaluate-variables/index.debug.js +79 -79
  24. package/dist/utils/evaluate-variables/index.js +2 -2
  25. package/dist/utils/evaluate-variables/utils/get-data-with-json-schema-and-input/index.d.ts +1 -1
  26. package/dist/utils/evaluate-variables/utils/get-data-with-json-schema-and-input/index.js +2 -2
  27. package/dist/utils/evaluate-variables/utils/get-data-with-json-schema-and-input/resolve-json-schema.d.ts +1 -1
  28. package/dist/utils/evaluate-variables/utils/get-data-with-json-schema-and-input/resolve-json-schema.js +11 -11
  29. package/dist/utils/evaluate-variables/utils/get-data-with-json-schema-and-input/resolve-json-schema.js.bak +96 -0
  30. package/dist/utils/evaluate-variables/utils/get-field-path-by-field-type-key.js +3 -3
  31. package/dist/utils/execute-workflow.d.ts +2 -2
  32. package/dist/utils/execute-workflow.d.ts.map +1 -1
  33. package/dist/utils/execute-workflow.js +75 -39
  34. package/package.json +16 -12
@@ -7,10 +7,10 @@ const getDataWithJsonSchemaAndInput = async (params) => {
7
7
  const { data } = await (0, resolve_json_schema_1.resolveJsonSchema)({
8
8
  input,
9
9
  jsonSchema,
10
- source: {}
10
+ source: {},
11
11
  });
12
12
  const res = {
13
- data
13
+ data,
14
14
  };
15
15
  return res;
16
16
  };
@@ -1,4 +1,4 @@
1
- import { JSONSchemaWithExpressionExtension } from '../../../../types';
1
+ import { JSONSchemaWithExpressionExtension } from "../../../../types";
2
2
  interface ResolveJsonSchemaParams {
3
3
  /**
4
4
  * 输入
@@ -9,7 +9,7 @@ const lodash_1 = __importDefault(require("lodash"));
9
9
  const resolveJsonSchema = async (params) => {
10
10
  var _a;
11
11
  const { input, jsonSchema, source } = params;
12
- const { type: jsonSchemaType, 'x-expression': jsonSchemaExpression, const: jsonSchemaConst, prefixItems: jsonSchemaPrefixItems } = jsonSchema;
12
+ const { type: jsonSchemaType, "x-expression": jsonSchemaExpression, const: jsonSchemaConst, prefixItems: jsonSchemaPrefixItems, } = jsonSchema;
13
13
  let data;
14
14
  /**
15
15
  * 若常量值存在,则直接返回
@@ -27,7 +27,7 @@ const resolveJsonSchema = async (params) => {
27
27
  data = await expression.evaluate(input);
28
28
  }
29
29
  switch (jsonSchemaType) {
30
- case 'object': {
30
+ case "object": {
31
31
  data = data !== null && data !== void 0 ? data : {};
32
32
  const jsonSchemaProperties = (_a = jsonSchema.properties) !== null && _a !== void 0 ? _a : {};
33
33
  const keys = lodash_1.default.keys(jsonSchemaProperties);
@@ -36,11 +36,11 @@ const resolveJsonSchema = async (params) => {
36
36
  const resolveJsonSchemaRes = await (0, exports.resolveJsonSchema)({
37
37
  jsonSchema: jsonSchemaProperties[key],
38
38
  input,
39
- source
39
+ source,
40
40
  });
41
41
  const res = {
42
42
  key,
43
- resolveJsonSchemaRes
43
+ resolveJsonSchemaRes,
44
44
  };
45
45
  return res;
46
46
  });
@@ -50,7 +50,7 @@ const resolveJsonSchema = async (params) => {
50
50
  });
51
51
  break;
52
52
  }
53
- case 'array': {
53
+ case "array": {
54
54
  /**
55
55
  * 如果 prefixItems 存在,则转为数组结果
56
56
  */
@@ -60,7 +60,7 @@ const resolveJsonSchema = async (params) => {
60
60
  const resolveJsonSchemaRes = await (0, exports.resolveJsonSchema)({
61
61
  jsonSchema: prefixItem,
62
62
  input,
63
- source
63
+ source,
64
64
  });
65
65
  return resolveJsonSchemaRes.data;
66
66
  });
@@ -76,13 +76,13 @@ const resolveJsonSchema = async (params) => {
76
76
  }
77
77
  break;
78
78
  }
79
- case 'boolean':
80
- case 'integer':
81
- case 'number':
82
- case 'string': {
79
+ case "boolean":
80
+ case "integer":
81
+ case "number":
82
+ case "string": {
83
83
  break;
84
84
  }
85
- case 'null': {
85
+ case "null": {
86
86
  break;
87
87
  }
88
88
  default: {
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.resolveJsonSchema = void 0;
7
+ const jsonata_1 = __importDefault(require("jsonata"));
8
+ const lodash_1 = __importDefault(require("lodash"));
9
+ const resolveJsonSchema = async (params) => {
10
+ var _a;
11
+ const { input, jsonSchema, source } = params;
12
+ const { type: jsonSchemaType, 'x-expression': jsonSchemaExpression, const: jsonSchemaConst, prefixItems: jsonSchemaPrefixItems } = jsonSchema;
13
+ let data;
14
+ /**
15
+ * 若常量值存在,则直接返回
16
+ */
17
+ if (jsonSchemaConst) {
18
+ data = jsonSchemaConst;
19
+ }
20
+ else {
21
+ data = source;
22
+ /**
23
+ * 若表达式存在,则尝试获取表达式值
24
+ */
25
+ if (jsonSchemaExpression) {
26
+ const expression = (0, jsonata_1.default)(jsonSchemaExpression);
27
+ data = await expression.evaluate(input);
28
+ }
29
+ switch (jsonSchemaType) {
30
+ case 'object': {
31
+ data = data !== null && data !== void 0 ? data : {};
32
+ const jsonSchemaProperties = (_a = jsonSchema.properties) !== null && _a !== void 0 ? _a : {};
33
+ const keys = lodash_1.default.keys(jsonSchemaProperties);
34
+ const keysMapResPromises = keys.map(async (key) => {
35
+ const source = lodash_1.default.get(data, key);
36
+ const resolveJsonSchemaRes = await (0, exports.resolveJsonSchema)({
37
+ jsonSchema: jsonSchemaProperties[key],
38
+ input,
39
+ source
40
+ });
41
+ const res = {
42
+ key,
43
+ resolveJsonSchemaRes
44
+ };
45
+ return res;
46
+ });
47
+ const keysMapRes = await Promise.all(keysMapResPromises);
48
+ lodash_1.default.each(keysMapRes, ({ key, resolveJsonSchemaRes }) => {
49
+ lodash_1.default.set(data, key, resolveJsonSchemaRes.data);
50
+ });
51
+ break;
52
+ }
53
+ case 'array': {
54
+ /**
55
+ * 如果 prefixItems 存在,则转为数组结果
56
+ */
57
+ if (jsonSchemaPrefixItems) {
58
+ if (jsonSchemaPrefixItems.length > 0) {
59
+ const itemsDataPromises = jsonSchemaPrefixItems.map(async (prefixItem) => {
60
+ const resolveJsonSchemaRes = await (0, exports.resolveJsonSchema)({
61
+ jsonSchema: prefixItem,
62
+ input,
63
+ source
64
+ });
65
+ return resolveJsonSchemaRes.data;
66
+ });
67
+ const itemsData = await Promise.all(itemsDataPromises);
68
+ data = itemsData;
69
+ }
70
+ else {
71
+ /**
72
+ * 空数组时,初始化为空数组
73
+ */
74
+ data = [];
75
+ }
76
+ }
77
+ break;
78
+ }
79
+ case 'boolean':
80
+ case 'integer':
81
+ case 'number':
82
+ case 'string': {
83
+ break;
84
+ }
85
+ case 'null': {
86
+ break;
87
+ }
88
+ default: {
89
+ break;
90
+ }
91
+ }
92
+ }
93
+ const res = { data };
94
+ return res;
95
+ };
96
+ exports.resolveJsonSchema = resolveJsonSchema;
@@ -3,14 +3,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getFieldPathByFieldTypeKey = void 0;
4
4
  const getFieldPathByFieldTypeKey = (fieldTypeKey) => {
5
5
  // 将字符串按点分割成数组
6
- const splitRes = fieldTypeKey.split('.');
6
+ const splitRes = fieldTypeKey.split(".");
7
7
  // 过滤数组:除了索引为复数且值为 properties ,其他所有元素均保留
8
8
  const filterRes = splitRes.filter((value, index) => {
9
- const res = !(value === 'properties' && index % 2 === 0);
9
+ const res = !(value === "properties" && index % 2 === 0);
10
10
  return res;
11
11
  });
12
12
  // 将过滤后的数组重新用点连接成字符串
13
- const res = filterRes.join('.');
13
+ const res = filterRes.join(".");
14
14
  return res;
15
15
  };
16
16
  exports.getFieldPathByFieldTypeKey = getFieldPathByFieldTypeKey;
@@ -1,9 +1,9 @@
1
- import { WorkflowData, WorkflowExecuteRes, WorkflowNodeInfo, WorkflowVariables } from '../types';
1
+ import { WorkflowData, WorkflowExecuteRes, WorkflowNodeInfo, WorkflowVariables } from "../types";
2
2
  export interface ExecuteWorkflowParams {
3
3
  context: any;
4
4
  endWorkflowNodeResourceId: string;
5
5
  nodes: WorkflowNodeInfo[];
6
- edges: WorkflowData['edges'];
6
+ edges: WorkflowData["edges"];
7
7
  presetWorkflowVariables?: Record<string, WorkflowVariables>;
8
8
  startWorkflowNodeResourceId: string;
9
9
  variables: any;
@@ -1 +1 @@
1
- {"version":3,"file":"execute-workflow.d.ts","sourceRoot":"","sources":["../../src/utils/execute-workflow.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EAElB,MAAM,UAAU,CAAC;AAqBlB,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,GAAG,CAAC;IACb,yBAAyB,EAAE,MAAM,CAAC;IAClC,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;IAC7B,uBAAuB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC5D,2BAA2B,EAAE,MAAM,CAAC;IACpC,SAAS,EAAE,GAAG,CAAC;IACf,YAAY,EAAE,YAAY,CAAC;IAC3B,YAAY,CAAC,EAAE,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,GAAG,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AA2KD;;GAEG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAsHhG"}
1
+ {"version":3,"file":"execute-workflow.d.ts","sourceRoot":"","sources":["../../src/utils/execute-workflow.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EAElB,MAAM,UAAU,CAAC;AAqBlB,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,GAAG,CAAC;IACb,yBAAyB,EAAE,MAAM,CAAC;IAClC,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;IAC7B,uBAAuB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC5D,2BAA2B,EAAE,MAAM,CAAC;IACpC,SAAS,EAAE,GAAG,CAAC;IACf,YAAY,EAAE,YAAY,CAAC;IAC3B,YAAY,CAAC,EAAE,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,GAAG,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAyND;;GAEG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA6HhG"}
@@ -7,16 +7,16 @@ exports.executeWorkflow = executeWorkflow;
7
7
  const api_1 = __importDefault(require("@opentelemetry/api"));
8
8
  const lodash_1 = __importDefault(require("lodash"));
9
9
  const evaluate_variables_1 = require("./evaluate-variables");
10
- const tracer = api_1.default.trace.getTracer('workspace');
10
+ const tracer = api_1.default.trace.getTracer("workspace");
11
11
  /**
12
12
  * 安全的 JSON 序列化,处理循环引用
13
13
  */
14
14
  function safeStringify(obj) {
15
15
  const seen = new WeakSet();
16
16
  return JSON.stringify(obj, (key, value) => {
17
- if (typeof value === 'object' && value !== null) {
17
+ if (typeof value === "object" && value !== null) {
18
18
  if (seen.has(value)) {
19
- return '[Circular Reference]';
19
+ return "[Circular Reference]";
20
20
  }
21
21
  seen.add(value);
22
22
  }
@@ -29,51 +29,81 @@ function safeStringify(obj) {
29
29
  async function executeNode(node, context, workflowVariablesMap, isFirstLevel, workflowInputVariables) {
30
30
  const { id, propertiesSchema, execute: nodeExecute } = node;
31
31
  const workflowVariables = Object.fromEntries(workflowVariablesMap);
32
+ if (process.env.DEBUG) {
33
+ console.debug("executeNode", node.id, {
34
+ isFirstLevel,
35
+ workflowVariablesKeys: Object.keys(workflowVariables),
36
+ });
37
+ }
32
38
  // 输入变量从工作流变量中使用表达式获取
33
- const workflowNodePropertiesInputSchema = lodash_1.default.get(propertiesSchema, 'properties.input');
34
- const workflowNodePropertiesOutputSchema = lodash_1.default.get(propertiesSchema, 'properties.output');
39
+ const workflowNodePropertiesInputSchema = lodash_1.default.get(propertiesSchema, "properties.input");
40
+ const workflowNodePropertiesOutputSchema = lodash_1.default.get(propertiesSchema, "properties.output");
35
41
  /**
36
42
  * 对于开始节点,不忽略 input 表达式,但替换工作流内部变量为工作流输入变量。
37
43
  */
38
- const workflowNodeInputExpressionEvaluateInput = isFirstLevel ? workflowInputVariables : workflowVariables;
44
+ const workflowNodeInputExpressionEvaluateInput = isFirstLevel
45
+ ? workflowInputVariables
46
+ : workflowVariables;
39
47
  let workflowNodeInputVariables = {};
40
48
  if (workflowNodePropertiesInputSchema) {
41
49
  const { variables } = await (0, evaluate_variables_1.evaluateVariables)({
42
50
  jsonSchema: workflowNodePropertiesInputSchema,
43
- variables: workflowNodeInputExpressionEvaluateInput
51
+ variables: workflowNodeInputExpressionEvaluateInput,
44
52
  });
45
53
  workflowNodeInputVariables = variables;
46
54
  }
47
- const { variables: workflowNodeOutputExpressionEvaluateInput, portId } = await nodeExecute({
48
- context,
49
- variables: workflowNodeInputVariables
50
- });
51
- /**
52
- * 输出变量从结果中使用表达式获取
53
- * 对于结束节点,不忽略 output 表达式,但表达式固定为取返回变量。
54
- */
55
- let workflowNodeOutputVariables = {};
56
- if (workflowNodePropertiesOutputSchema) {
57
- const { variables } = await (0, evaluate_variables_1.evaluateVariables)({
58
- jsonSchema: workflowNodePropertiesOutputSchema,
59
- variables: workflowNodeOutputExpressionEvaluateInput
60
- });
61
- workflowNodeOutputVariables = variables;
62
- }
63
55
  if (process.env.DEBUG) {
64
- console.dir({
65
- nodeId: id,
66
- portId,
67
- inputVariables: workflowNodeInputVariables,
68
- outputVariables: workflowNodeOutputVariables
69
- });
56
+ console.log(`[EXEC] node ${id} inputExpressionEvaluateInput keys:`, Object.keys(workflowNodeInputExpressionEvaluateInput || {}));
57
+ console.log(`[EXEC] node ${id} inputVariables:`, safeStringify(workflowNodeInputVariables));
70
58
  }
71
- const res = {
59
+ let consoleDirInfo = {
72
60
  nodeId: id,
73
- variables: workflowNodeOutputVariables,
74
- portId
61
+ inputVariables: workflowNodeInputVariables,
62
+ status: "processing",
75
63
  };
76
- return res;
64
+ try {
65
+ const { variables: workflowNodeOutputExpressionEvaluateInput, portId } = await nodeExecute({
66
+ context,
67
+ variables: workflowNodeInputVariables,
68
+ });
69
+ /**
70
+ * 输出变量从结果中使用表达式获取
71
+ * 对于结束节点,不忽略 output 表达式,但表达式固定为取返回变量。
72
+ */
73
+ let workflowNodeOutputVariables = {};
74
+ if (workflowNodePropertiesOutputSchema) {
75
+ const { variables } = await (0, evaluate_variables_1.evaluateVariables)({
76
+ jsonSchema: workflowNodePropertiesOutputSchema,
77
+ variables: workflowNodeOutputExpressionEvaluateInput,
78
+ });
79
+ workflowNodeOutputVariables = variables;
80
+ }
81
+ consoleDirInfo = {
82
+ ...consoleDirInfo,
83
+ status: "success",
84
+ portId,
85
+ outputVariables: workflowNodeOutputVariables,
86
+ };
87
+ const res = {
88
+ nodeId: id,
89
+ variables: workflowNodeOutputVariables,
90
+ portId,
91
+ };
92
+ return res;
93
+ }
94
+ catch (error) {
95
+ consoleDirInfo = {
96
+ ...consoleDirInfo,
97
+ status: "error",
98
+ error,
99
+ };
100
+ throw error;
101
+ }
102
+ finally {
103
+ if (process.env.DEBUG) {
104
+ console.dir(consoleDirInfo);
105
+ }
106
+ }
77
107
  }
78
108
  /**
79
109
  * 查找下一个需要执行的节点集合
@@ -152,15 +182,15 @@ function findNextNodeIds(levelResults, edges, visitedNodes, completedNodePredece
152
182
  * 执行工作流
153
183
  */
154
184
  async function executeWorkflow(params) {
155
- const { context, endWorkflowNodeResourceId, nodes, edges, presetWorkflowVariables = {}, startWorkflowNodeResourceId, variables: workflowInputVariables, traceContext } = params;
185
+ const { context, endWorkflowNodeResourceId, nodes, edges, presetWorkflowVariables = {}, startWorkflowNodeResourceId, variables: workflowInputVariables, traceContext, } = params;
156
186
  // 使用传入的 traceContext 或当前活跃的 context 来创建 span
157
187
  const parentContext = traceContext || api_1.default.context.active();
158
- const executeWorkflowSpan = tracer.startSpan('execute-workflow', undefined, parentContext);
188
+ const executeWorkflowSpan = tracer.startSpan("execute-workflow", undefined, parentContext);
159
189
  const workflowVariablesMap = new Map(Object.entries(presetWorkflowVariables));
160
190
  const startNode = nodes.find((value) => value.id === startWorkflowNodeResourceId);
161
191
  const endNode = nodes.find((value) => value.id === endWorkflowNodeResourceId);
162
192
  if (!startNode || !endNode) {
163
- throw new Error('invalid workflow nodes');
193
+ throw new Error("invalid workflow nodes");
164
194
  }
165
195
  let workflowOutputVariables;
166
196
  // 使用动态执行,根据 portId 决定下一步执行哪些节点
@@ -185,12 +215,12 @@ async function executeWorkflow(params) {
185
215
  if (!node) {
186
216
  throw new Error(`node not found: ${nodeId}`);
187
217
  }
188
- span.addEvent('execution workflow node');
218
+ span.addEvent("execution workflow node");
189
219
  const res = await executeNode(node, context, workflowVariablesMap, isFirstLevel, workflowInputVariables);
190
220
  const { portId: outputPortId } = res;
191
221
  span.setAttributes({
192
222
  currentNodeId: nodeId,
193
- outputPortId
223
+ outputPortId,
194
224
  });
195
225
  span.end();
196
226
  return res;
@@ -203,6 +233,12 @@ async function executeWorkflow(params) {
203
233
  workflowVariablesMap.set(result.nodeId, result.variables);
204
234
  }
205
235
  });
236
+ if (process.env.DEBUG) {
237
+ console.debug("executeWorkflow level done", {
238
+ executedNodes: levelResults.filter(Boolean).map((r) => r.nodeId),
239
+ workflowVariablesKeys: [...workflowVariablesMap.keys()],
240
+ });
241
+ }
206
242
  // 根据执行结果和 portId 查找下一个节点集合
207
243
  const { nextNodeIds, workflowOutputVariables: tempOutputVariables } = findNextNodeIds(levelResults, edges, visitedNodes, completedNodePredecessors, activatedEdges, endNode.id);
208
244
  if (tempOutputVariables !== undefined) {
@@ -214,7 +250,7 @@ async function executeWorkflow(params) {
214
250
  isFirstLevel = false;
215
251
  }
216
252
  const res = {
217
- variables: workflowOutputVariables
253
+ variables: workflowOutputVariables,
218
254
  };
219
255
  executeWorkflowSpan.end();
220
256
  return res;
package/package.json CHANGED
@@ -1,26 +1,29 @@
1
1
  {
2
2
  "name": "@ldsg/workflow",
3
- "version": "0.3.31",
3
+ "version": "0.3.33",
4
4
  "description": "",
5
5
  "keywords": [],
6
6
  "license": "MIT",
7
7
  "author": "wanxger",
8
- "main": "dist/index.js",
9
- "types": "dist",
10
8
  "files": [
11
9
  "dist/"
12
10
  ],
11
+ "main": "dist/index.js",
12
+ "types": "dist",
13
+ "publishConfig": {
14
+ "access": "public"
15
+ },
13
16
  "dependencies": {
14
17
  "@opentelemetry/api": "~1.9.0",
15
18
  "json-schema": "0.4.0",
16
19
  "json-schema-default": "^1.0.2",
17
- "jsonata": "^2.0.6",
20
+ "jsonata": "2.2.2",
18
21
  "lodash": "^4.17.21",
19
22
  "zod": "^4.1.11",
20
- "@ldsg/constants": "0.3.31",
21
- "@ldsg/handler": "0.3.31",
22
- "@ldsg/resource": "0.3.31",
23
- "@ldsg/resource-definition": "0.3.31"
23
+ "@ldsg/constants": "0.3.33",
24
+ "@ldsg/resource-definition": "0.3.33",
25
+ "@ldsg/handler": "0.3.33",
26
+ "@ldsg/resource": "0.3.33"
24
27
  },
25
28
  "devDependencies": {
26
29
  "@types/fs-extra": "^11.0.4",
@@ -29,18 +32,19 @@
29
32
  "@types/lodash": "^4.14.202",
30
33
  "fs-extra": "^11.3.0",
31
34
  "jest": "^29.5.0",
35
+ "oxfmt": "latest",
36
+ "oxlint": "latest",
32
37
  "supertest": "^6.3.4",
33
38
  "ts-jest": "^29.1.5",
34
39
  "ts-node": "^10.9.2",
35
40
  "typescript": "^5.8.3",
36
- "@ldsg/types": "0.3.31"
37
- },
38
- "publishConfig": {
39
- "access": "public"
41
+ "@ldsg/types": "0.3.33"
40
42
  },
41
43
  "scripts": {
42
44
  "build": "tsc --project tsconfig.build.json",
43
45
  "clean": "rm -rf dist",
46
+ "format": "oxfmt --write src/",
47
+ "lint": "oxlint src/",
44
48
  "test": "jest"
45
49
  }
46
50
  }