@fsai-flow/workflow 0.0.1

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 (113) hide show
  1. package/.eslintrc.json +33 -0
  2. package/README.md +11 -0
  3. package/dist/README.md +11 -0
  4. package/dist/package.json +42 -0
  5. package/dist/src/index.d.ts +21 -0
  6. package/dist/src/index.js +33 -0
  7. package/dist/src/index.js.map +1 -0
  8. package/dist/src/lib/Constants.d.ts +68 -0
  9. package/dist/src/lib/Constants.js +106 -0
  10. package/dist/src/lib/Constants.js.map +1 -0
  11. package/dist/src/lib/DeferredPromise.d.ts +6 -0
  12. package/dist/src/lib/DeferredPromise.js +11 -0
  13. package/dist/src/lib/DeferredPromise.js.map +1 -0
  14. package/dist/src/lib/Expression.d.ts +65 -0
  15. package/dist/src/lib/Expression.js +215 -0
  16. package/dist/src/lib/Expression.js.map +1 -0
  17. package/dist/src/lib/Interfaces.d.ts +1569 -0
  18. package/dist/src/lib/Interfaces.js +44 -0
  19. package/dist/src/lib/Interfaces.js.map +1 -0
  20. package/dist/src/lib/LoggerProxy.d.ts +9 -0
  21. package/dist/src/lib/LoggerProxy.js +40 -0
  22. package/dist/src/lib/LoggerProxy.js.map +1 -0
  23. package/dist/src/lib/MetadataUtils.d.ts +4 -0
  24. package/dist/src/lib/MetadataUtils.js +27 -0
  25. package/dist/src/lib/MetadataUtils.js.map +1 -0
  26. package/dist/src/lib/NodeErrors.d.ts +82 -0
  27. package/dist/src/lib/NodeErrors.js +289 -0
  28. package/dist/src/lib/NodeErrors.js.map +1 -0
  29. package/dist/src/lib/NodeHelpers.d.ts +198 -0
  30. package/dist/src/lib/NodeHelpers.js +1348 -0
  31. package/dist/src/lib/NodeHelpers.js.map +1 -0
  32. package/dist/src/lib/ObservableObject.d.ts +5 -0
  33. package/dist/src/lib/ObservableObject.js +61 -0
  34. package/dist/src/lib/ObservableObject.js.map +1 -0
  35. package/dist/src/lib/RoutingNode.d.ts +18 -0
  36. package/dist/src/lib/RoutingNode.js +508 -0
  37. package/dist/src/lib/RoutingNode.js.map +1 -0
  38. package/dist/src/lib/TelemetryHelpers.d.ts +3 -0
  39. package/dist/src/lib/TelemetryHelpers.js +69 -0
  40. package/dist/src/lib/TelemetryHelpers.js.map +1 -0
  41. package/dist/src/lib/TypeValidation.d.ts +21 -0
  42. package/dist/src/lib/TypeValidation.js +385 -0
  43. package/dist/src/lib/TypeValidation.js.map +1 -0
  44. package/dist/src/lib/VersionedNodeType.d.ts +9 -0
  45. package/dist/src/lib/VersionedNodeType.js +26 -0
  46. package/dist/src/lib/VersionedNodeType.js.map +1 -0
  47. package/dist/src/lib/Workflow.d.ts +248 -0
  48. package/dist/src/lib/Workflow.js +901 -0
  49. package/dist/src/lib/Workflow.js.map +1 -0
  50. package/dist/src/lib/WorkflowDataProxy.d.ts +87 -0
  51. package/dist/src/lib/WorkflowDataProxy.js +556 -0
  52. package/dist/src/lib/WorkflowDataProxy.js.map +1 -0
  53. package/dist/src/lib/WorkflowErrors.d.ts +9 -0
  54. package/dist/src/lib/WorkflowErrors.js +18 -0
  55. package/dist/src/lib/WorkflowErrors.js.map +1 -0
  56. package/dist/src/lib/WorkflowHooks.d.ts +11 -0
  57. package/dist/src/lib/WorkflowHooks.js +34 -0
  58. package/dist/src/lib/WorkflowHooks.js.map +1 -0
  59. package/dist/src/lib/errors/base/base.error.d.ts +30 -0
  60. package/dist/src/lib/errors/base/base.error.js +45 -0
  61. package/dist/src/lib/errors/base/base.error.js.map +1 -0
  62. package/dist/src/lib/errors/base/operational.error.d.ts +15 -0
  63. package/dist/src/lib/errors/base/operational.error.js +19 -0
  64. package/dist/src/lib/errors/base/operational.error.js.map +1 -0
  65. package/dist/src/lib/errors/error.types.d.ts +11 -0
  66. package/dist/src/lib/errors/error.types.js +3 -0
  67. package/dist/src/lib/errors/error.types.js.map +1 -0
  68. package/dist/src/lib/errors/index.d.ts +1 -0
  69. package/dist/src/lib/errors/index.js +6 -0
  70. package/dist/src/lib/errors/index.js.map +1 -0
  71. package/dist/src/lib/result.d.ts +19 -0
  72. package/dist/src/lib/result.js +36 -0
  73. package/dist/src/lib/result.js.map +1 -0
  74. package/dist/src/lib/utils.d.ts +50 -0
  75. package/dist/src/lib/utils.js +110 -0
  76. package/dist/src/lib/utils.js.map +1 -0
  77. package/eslint.config.js +19 -0
  78. package/jest.config.ts +10 -0
  79. package/package.json +40 -0
  80. package/project.json +19 -0
  81. package/src/index.ts +33 -0
  82. package/src/lib/Constants.ts +124 -0
  83. package/src/lib/DeferredPromise.ts +14 -0
  84. package/src/lib/Expression.ts +375 -0
  85. package/src/lib/Interfaces.ts +2229 -0
  86. package/src/lib/LoggerProxy.ts +43 -0
  87. package/src/lib/MetadataUtils.ts +34 -0
  88. package/src/lib/NodeErrors.ts +332 -0
  89. package/src/lib/NodeHelpers.ts +1666 -0
  90. package/src/lib/ObservableObject.ts +77 -0
  91. package/src/lib/RoutingNode.ts +862 -0
  92. package/src/lib/TelemetryHelpers.ts +86 -0
  93. package/src/lib/TypeValidation.ts +431 -0
  94. package/src/lib/VersionedNodeType.ts +30 -0
  95. package/src/lib/Workflow.ts +1266 -0
  96. package/src/lib/WorkflowDataProxy.ts +708 -0
  97. package/src/lib/WorkflowErrors.ts +18 -0
  98. package/src/lib/WorkflowHooks.ts +51 -0
  99. package/src/lib/errors/base/base.error.ts +68 -0
  100. package/src/lib/errors/base/operational.error.ts +21 -0
  101. package/src/lib/errors/error.types.ts +14 -0
  102. package/src/lib/errors/index.ts +1 -0
  103. package/src/lib/result.ts +34 -0
  104. package/src/lib/utils.ts +132 -0
  105. package/tests/Helpers.ts +667 -0
  106. package/tests/NodeHelpers.test.ts +3053 -0
  107. package/tests/ObservableObject.test.ts +171 -0
  108. package/tests/RoutingNode.test.ts +1680 -0
  109. package/tests/Workflow.test.ts +1284 -0
  110. package/tests/WorkflowDataProxy.test.ts +199 -0
  111. package/tsconfig.json +27 -0
  112. package/tsconfig.lib.json +11 -0
  113. package/tsconfig.spec.json +14 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkflowHooks.js","sourceRoot":"","sources":["../../../src/lib/WorkflowHooks.ts"],"names":[],"mappings":";;;AAQA,MAAa,aAAa;IACzB,IAAI,CAAsB;IAE1B,YAAY,CAAgB;IAE5B,WAAW,CAAS;IAEpB,SAAS,CAAU;IAEnB,OAAO,CAAU;IAEjB,aAAa,CAAwB;IAErC,YACC,aAAoC,EACpC,IAAyB,EACzB,WAAmB,EACnB,YAA2B,EAC3B,kBAAqD;QAErD,2FAA2F;QAC3F,kBAAkB,GAAG,kBAAkB,IAAI,EAAE,CAAC;QAE9C,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,SAAS,GAAG,kBAAkB,CAAC,SAAS,CAAC;QAC9C,IAAI,CAAC,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC;IAC3C,CAAC;IAED,iHAAiH;IACjH,KAAK,CAAC,oBAAoB,CAAC,QAAgB,EAAE,UAAiB;QAC7D,6BAA6B;QAC7B,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;YAC/F,0FAA0F;YAC1F,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAE,EAAE,CAAC;gBAC1D,4CAA4C;gBAC5C,MAAM,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YAC5C,CAAC;QACF,CAAC;IACF,CAAC;CACD;AA1CD,sCA0CC"}
@@ -0,0 +1,30 @@
1
+ import type { Event } from '@sentry/node';
2
+ import type { ErrorTags, ErrorLevel, ReportingOptions } from '../error.types';
3
+ export type BaseErrorOptions = {
4
+ description?: undefined | null;
5
+ } & ErrorOptions & ReportingOptions;
6
+ interface ErrorOptions {
7
+ cause?: unknown;
8
+ }
9
+ /**
10
+ * Base class for all errors
11
+ */
12
+ export declare abstract class BaseError extends Error {
13
+ /**
14
+ * Error level. Defines which level the error should be logged/reported
15
+ * @default 'error'
16
+ */
17
+ level: ErrorLevel;
18
+ /**
19
+ * Whether the error should be reported to Sentry.
20
+ * @default true
21
+ */
22
+ readonly shouldReport: boolean;
23
+ readonly description: string | null | undefined;
24
+ readonly tags: ErrorTags;
25
+ readonly extra?: Event['extra'];
26
+ readonly packageName?: string;
27
+ readonly cause?: unknown;
28
+ constructor(message: string, { level, description, shouldReport, tags, extra, ...rest }?: BaseErrorOptions);
29
+ }
30
+ export {};
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaseError = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const callsites_1 = tslib_1.__importDefault(require("callsites"));
6
+ /**
7
+ * Base class for all errors
8
+ */
9
+ class BaseError extends Error {
10
+ /**
11
+ * Error level. Defines which level the error should be logged/reported
12
+ * @default 'error'
13
+ */
14
+ level;
15
+ /**
16
+ * Whether the error should be reported to Sentry.
17
+ * @default true
18
+ */
19
+ shouldReport;
20
+ description;
21
+ tags;
22
+ extra;
23
+ packageName;
24
+ cause;
25
+ constructor(message, { level = 'error', description, shouldReport, tags = {}, extra, ...rest } = {}) {
26
+ super(message);
27
+ if (rest.cause !== undefined) {
28
+ this.cause = rest.cause;
29
+ }
30
+ this.level = level;
31
+ this.shouldReport = shouldReport ?? (level === 'error' || level === 'fatal');
32
+ this.description = description;
33
+ this.tags = tags;
34
+ this.extra = extra;
35
+ try {
36
+ const filePath = (0, callsites_1.default)()[2].getFileName() ?? '';
37
+ const match = /packages\/([^\/]+)\//.exec(filePath)?.[1];
38
+ if (match)
39
+ this.tags['packageName'] = match;
40
+ }
41
+ catch { }
42
+ }
43
+ }
44
+ exports.BaseError = BaseError;
45
+ //# sourceMappingURL=base.error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.error.js","sourceRoot":"","sources":["../../../../../src/lib/errors/base/base.error.ts"],"names":[],"mappings":";;;;AACA,kEAAkC;AAUlC;;GAEG;AACH,MAAsB,SAAU,SAAQ,KAAK;IAC5C;;;OAGG;IACH,KAAK,CAAa;IAElB;;;OAGG;IACM,YAAY,CAAU;IAEtB,WAAW,CAA4B;IAEvC,IAAI,CAAY;IAEhB,KAAK,CAAkB;IAEvB,WAAW,CAAU;IAErB,KAAK,CAAW;IAEzB,YACC,OAAe,EACf,EACC,KAAK,GAAG,OAAO,EACf,WAAW,EACX,YAAY,EACZ,IAAI,GAAG,EAAE,EACT,KAAK,EACL,GAAG,IAAI,KACc,EAAE;QAExB,KAAK,CAAC,OAAO,CAAC,CAAC;QAEf,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC9B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,YAAY,GAAG,YAAY,IAAI,CAAC,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,OAAO,CAAC,CAAC;QAC7E,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QAEnB,IAAI,CAAC;YACJ,MAAM,QAAQ,GAAG,IAAA,mBAAS,GAAE,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;YACpD,MAAM,KAAK,GAAG,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAEzD,IAAI,KAAK;gBAAE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC;QAC7C,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACX,CAAC;CACD;AArDD,8BAqDC"}
@@ -0,0 +1,15 @@
1
+ import type { BaseErrorOptions } from './base.error';
2
+ import { BaseError } from './base.error';
3
+ export type OperationalErrorOptions = Omit<BaseErrorOptions, 'level'> & {
4
+ level?: 'info' | 'warning' | 'error';
5
+ };
6
+ /**
7
+ * Error that indicates a transient issue, like a network request failing,
8
+ * a database query timing out, etc. These are expected to happen, are
9
+ * transient by nature and should be handled gracefully.
10
+ *
11
+ * Default level: warning
12
+ */
13
+ export declare class OperationalError extends BaseError {
14
+ constructor(message: string, opts?: OperationalErrorOptions);
15
+ }
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OperationalError = void 0;
4
+ const base_error_1 = require("./base.error");
5
+ /**
6
+ * Error that indicates a transient issue, like a network request failing,
7
+ * a database query timing out, etc. These are expected to happen, are
8
+ * transient by nature and should be handled gracefully.
9
+ *
10
+ * Default level: warning
11
+ */
12
+ class OperationalError extends base_error_1.BaseError {
13
+ constructor(message, opts = {}) {
14
+ opts.level = opts.level ?? 'warning';
15
+ super(message, opts);
16
+ }
17
+ }
18
+ exports.OperationalError = OperationalError;
19
+ //# sourceMappingURL=operational.error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operational.error.js","sourceRoot":"","sources":["../../../../../src/lib/errors/base/operational.error.ts"],"names":[],"mappings":";;;AACA,6CAAyC;AAMzC;;;;;;GAMG;AACH,MAAa,gBAAiB,SAAQ,sBAAS;IAC9C,YAAY,OAAe,EAAE,OAAgC,EAAE;QAC9D,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,SAAS,CAAC;QAErC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACtB,CAAC;CACD;AAND,4CAMC"}
@@ -0,0 +1,11 @@
1
+ import type { Event } from '@sentry/node';
2
+ export type ErrorLevel = 'fatal' | 'error' | 'warning' | 'info';
3
+ export type ErrorTags = NonNullable<Event['tags']>;
4
+ export type ReportingOptions = {
5
+ /** Whether the error should be reported to Sentry */
6
+ shouldReport?: boolean;
7
+ level?: ErrorLevel;
8
+ tags?: ErrorTags;
9
+ extra?: Event['extra'];
10
+ executionId?: string;
11
+ };
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=error.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.types.js","sourceRoot":"","sources":["../../../../src/lib/errors/error.types.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ export { OperationalError, type OperationalErrorOptions } from './base/operational.error';
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OperationalError = void 0;
4
+ var operational_error_1 = require("./base/operational.error");
5
+ Object.defineProperty(exports, "OperationalError", { enumerable: true, get: function () { return operational_error_1.OperationalError; } });
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/errors/index.ts"],"names":[],"mappings":";;;AAAA,8DAA0F;AAAjF,qHAAA,gBAAgB,OAAA"}
@@ -0,0 +1,19 @@
1
+ export type ResultOk<T> = {
2
+ ok: true;
3
+ result: T;
4
+ };
5
+ export type ResultError<E> = {
6
+ ok: false;
7
+ error: E;
8
+ };
9
+ export type Result<T, E> = ResultOk<T> | ResultError<E>;
10
+ export declare const createResultOk: <T>(data: T) => ResultOk<T>;
11
+ export declare const createResultError: <E = unknown>(error: E) => ResultError<E>;
12
+ export declare function ensureError(error: unknown): Error;
13
+ /**
14
+ * Executes the given function and converts it to a Result object.
15
+ *
16
+ * @example
17
+ * const result = toResult(() => fs.writeFileSync('file.txt', 'Hello, World!'));
18
+ */
19
+ export declare const toResult: <T, E extends Error = Error>(fn: () => T) => Result<T, E>;
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toResult = exports.createResultError = exports.createResultOk = void 0;
4
+ exports.ensureError = ensureError;
5
+ const createResultOk = (data) => ({
6
+ ok: true,
7
+ result: data,
8
+ });
9
+ exports.createResultOk = createResultOk;
10
+ const createResultError = (error) => ({
11
+ ok: false,
12
+ error,
13
+ });
14
+ exports.createResultError = createResultError;
15
+ function ensureError(error) {
16
+ return error instanceof Error
17
+ ? error
18
+ : new Error('Error that was not an instance of Error was thrown, cause: ' + error);
19
+ }
20
+ /**
21
+ * Executes the given function and converts it to a Result object.
22
+ *
23
+ * @example
24
+ * const result = toResult(() => fs.writeFileSync('file.txt', 'Hello, World!'));
25
+ */
26
+ const toResult = (fn) => {
27
+ try {
28
+ return (0, exports.createResultOk)(fn());
29
+ }
30
+ catch (e) {
31
+ const error = ensureError(e);
32
+ return (0, exports.createResultError)(error);
33
+ }
34
+ };
35
+ exports.toResult = toResult;
36
+ //# sourceMappingURL=result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result.js","sourceRoot":"","sources":["../../../src/lib/result.ts"],"names":[],"mappings":";;;AAcA,kCAIC;AAdM,MAAM,cAAc,GAAG,CAAI,IAAO,EAAe,EAAE,CAAC,CAAC;IAC3D,EAAE,EAAE,IAAI;IACR,MAAM,EAAE,IAAI;CACZ,CAAC,CAAC;AAHU,QAAA,cAAc,kBAGxB;AAEI,MAAM,iBAAiB,GAAG,CAAc,KAAQ,EAAkB,EAAE,CAAC,CAAC;IAC5E,EAAE,EAAE,KAAK;IACT,KAAK;CACL,CAAC,CAAC;AAHU,QAAA,iBAAiB,qBAG3B;AAEH,SAAgB,WAAW,CAAC,KAAc;IACzC,OAAO,KAAK,YAAY,KAAK;QAC5B,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,IAAI,KAAK,CAAC,6DAA6D,GAAG,KAAK,CAAC,CAAC;AACrF,CAAC;AAED;;;;;GAKG;AACI,MAAM,QAAQ,GAAG,CAA6B,EAAW,EAAgB,EAAE;IACjF,IAAI,CAAC;QACJ,OAAO,IAAA,sBAAc,EAAI,EAAE,EAAE,CAAC,CAAC;IAChC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACZ,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAC7B,OAAO,IAAA,yBAAiB,EAAI,KAAU,CAAC,CAAC;IACzC,CAAC;AACF,CAAC,CAAC;AAPW,QAAA,QAAQ,YAOnB"}
@@ -0,0 +1,50 @@
1
+ import type { IDisplayOptions, INodeProperties } from './Interfaces';
2
+ export declare function updateDisplayOptions(displayOptions: IDisplayOptions, properties: INodeProperties[]): {
3
+ displayOptions: IDisplayOptions;
4
+ displayName: string;
5
+ name: string;
6
+ type: import("./Interfaces").NodePropertyTypes;
7
+ typeOptions?: import("./Interfaces").INodePropertyTypeOptions;
8
+ default: import("./Interfaces").NodeParameterValue | import("./Interfaces").INodeParameters | import("./Interfaces").INodeParameters[] | import("./Interfaces").NodeParameterValue[];
9
+ description?: string;
10
+ hint?: string;
11
+ options?: Array<import("./Interfaces").INodePropertyOptions | INodeProperties | import("./Interfaces").INodePropertyCollection>;
12
+ placeholder?: string;
13
+ isNodeSetting?: boolean;
14
+ noDataExpression?: boolean;
15
+ required?: boolean;
16
+ routing?: import("./Interfaces").INodePropertyRouting;
17
+ modes?: import("./Interfaces").INodePropertyMode[];
18
+ validateType?: import("./Interfaces").FieldType;
19
+ ignoreValidationDuringExecution?: boolean;
20
+ disabledOptions?: {
21
+ show?: {
22
+ [key: string]: Array<import("./Interfaces").NodeParameterValue | import("./Interfaces").DisplayCondition> | import("./Interfaces").NodeParameterValue[] | undefined;
23
+ };
24
+ };
25
+ }[];
26
+ export declare function randomInt(max: number): number;
27
+ export declare function randomInt(min: number, max: number): number;
28
+ type MutuallyExclusive<T, U> = (T & {
29
+ [k in Exclude<keyof U, keyof T>]?: never;
30
+ }) | (U & {
31
+ [k in Exclude<keyof T, keyof U>]?: never;
32
+ });
33
+ type JSONParseOptions<T> = {
34
+ acceptJSObject?: boolean;
35
+ } & MutuallyExclusive<{
36
+ errorMessage?: string;
37
+ }, {
38
+ fallbackValue?: T;
39
+ }>;
40
+ export declare const jsonParse: <T>(jsonString: string, options?: JSONParseOptions<T>) => T;
41
+ type JSONStringifyOptions = {
42
+ replaceCircularRefs?: boolean;
43
+ };
44
+ export declare const replaceCircularReferences: <T>(value: T, knownObjects?: WeakSet<object>) => T;
45
+ export declare const jsonStringify: (obj: unknown, options?: JSONStringifyOptions) => string;
46
+ /**
47
+ * Checks if a value is an object with a specific key and provides a type guard for the key.
48
+ */
49
+ export declare function hasKey<T extends PropertyKey>(value: unknown, key: T): value is Record<T, unknown>;
50
+ export {};
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.jsonStringify = exports.replaceCircularReferences = exports.jsonParse = void 0;
4
+ exports.updateDisplayOptions = updateDisplayOptions;
5
+ exports.randomInt = randomInt;
6
+ exports.hasKey = hasKey;
7
+ const esprima_next_1 = require("esprima-next");
8
+ const lodash_1 = require("lodash");
9
+ function updateDisplayOptions(displayOptions, properties) {
10
+ return properties.map((nodeProperty) => {
11
+ return {
12
+ ...nodeProperty,
13
+ displayOptions: (0, lodash_1.merge)({}, nodeProperty.displayOptions, displayOptions),
14
+ };
15
+ });
16
+ }
17
+ /**
18
+ * Generates a random integer within a specified range.
19
+ *
20
+ * @param {number} min - The lower bound of the range. If `max` is not provided, this value is used as the upper bound and the lower bound is set to 0.
21
+ * @param {number} [max] - The upper bound of the range, not inclusive.
22
+ * @returns {number} A random integer within the specified range.
23
+ */
24
+ function randomInt(min, max) {
25
+ if (max === undefined) {
26
+ max = min;
27
+ min = 0;
28
+ }
29
+ return min + (crypto.getRandomValues(new Uint32Array(1))[0] % (max - min));
30
+ }
31
+ const jsonParse = (jsonString, options) => {
32
+ try {
33
+ return JSON.parse(jsonString);
34
+ }
35
+ catch (error) {
36
+ if (options?.acceptJSObject) {
37
+ try {
38
+ const jsonStringCleaned = parseJSObject(jsonString);
39
+ return jsonStringCleaned;
40
+ }
41
+ catch (e) {
42
+ // Ignore this error and return the original error or the fallback value
43
+ }
44
+ }
45
+ if (options?.fallbackValue !== undefined) {
46
+ if (options.fallbackValue instanceof Function) {
47
+ return options.fallbackValue();
48
+ }
49
+ return options.fallbackValue;
50
+ }
51
+ else if (options?.errorMessage) {
52
+ // TODO REFACTOR: Use ApplicationError from offical @fsai-flow/workflow repo
53
+ throw new Error(options.errorMessage);
54
+ }
55
+ throw error;
56
+ }
57
+ };
58
+ exports.jsonParse = jsonParse;
59
+ const replaceCircularReferences = (value, knownObjects = new WeakSet()) => {
60
+ if (typeof value !== 'object' || value === null || value instanceof RegExp)
61
+ return value;
62
+ if ('toJSON' in value && typeof value.toJSON === 'function')
63
+ return value.toJSON();
64
+ if (knownObjects.has(value))
65
+ return '[Circular Reference]';
66
+ knownObjects.add(value);
67
+ const copy = (Array.isArray(value) ? [] : {});
68
+ for (const key in value) {
69
+ copy[key] = (0, exports.replaceCircularReferences)(value[key], knownObjects);
70
+ }
71
+ knownObjects.delete(value);
72
+ return copy;
73
+ };
74
+ exports.replaceCircularReferences = replaceCircularReferences;
75
+ const jsonStringify = (obj, options = {}) => {
76
+ return JSON.stringify(options?.replaceCircularRefs ? (0, exports.replaceCircularReferences)(obj) : obj);
77
+ };
78
+ exports.jsonStringify = jsonStringify;
79
+ function syntaxNodeToValue(expression) {
80
+ switch (expression?.type) {
81
+ case esprima_next_1.Syntax.ObjectExpression:
82
+ return Object.fromEntries(expression.properties
83
+ .filter((prop) => prop.type === esprima_next_1.Syntax.Property)
84
+ .map(({ key, value }) => [syntaxNodeToValue(key), syntaxNodeToValue(value)]));
85
+ case esprima_next_1.Syntax.Identifier:
86
+ return expression.name;
87
+ case esprima_next_1.Syntax.Literal:
88
+ return expression.value;
89
+ case esprima_next_1.Syntax.ArrayExpression:
90
+ return expression.elements.map((exp) => syntaxNodeToValue(exp));
91
+ default:
92
+ return undefined;
93
+ }
94
+ }
95
+ /**
96
+ * Parse any JavaScript ObjectExpression, including:
97
+ * - single quoted keys
98
+ * - unquoted keys
99
+ */
100
+ function parseJSObject(objectAsString) {
101
+ const jsExpression = (0, esprima_next_1.parse)(`(${objectAsString})`).body.find((node) => node.type === esprima_next_1.Syntax.ExpressionStatement && node.expression.type === esprima_next_1.Syntax.ObjectExpression);
102
+ return syntaxNodeToValue(jsExpression?.expression);
103
+ }
104
+ /**
105
+ * Checks if a value is an object with a specific key and provides a type guard for the key.
106
+ */
107
+ function hasKey(value, key) {
108
+ return value !== null && typeof value === 'object' && value.hasOwnProperty(key);
109
+ }
110
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ const baseConfig = require('../../eslint.config.js');
2
+
3
+ module.exports = [
4
+ ...baseConfig,
5
+ {
6
+ files: ['**/*.json'],
7
+ rules: {
8
+ '@nx/dependency-checks': [
9
+ 'error',
10
+ {
11
+ ignoredFiles: ['{projectRoot}/eslint.config.{js,cjs,mjs}'],
12
+ },
13
+ ],
14
+ },
15
+ languageOptions: {
16
+ parser: require('jsonc-eslint-parser'),
17
+ },
18
+ },
19
+ ];
package/jest.config.ts ADDED
@@ -0,0 +1,10 @@
1
+ export default {
2
+ displayName: 'workflow',
3
+ preset: '../../jest.preset.js',
4
+ testEnvironment: 'node',
5
+ transform: {
6
+ '^.+\\.[tj]s$': ['ts-jest', { tsconfig: '<rootDir>/tsconfig.spec.json' }],
7
+ },
8
+ moduleFileExtensions: ['ts', 'js', 'html'],
9
+ coverageDirectory: '../../coverage/libs/workflow',
10
+ };
package/package.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "name": "@fsai-flow/workflow",
3
+ "version": "0.0.1",
4
+ "license": "PolyForm Noncommercial License 1.0.0",
5
+ "dependencies": {
6
+ "form-data": "^4.0.1",
7
+ "jmespath": "^0.16.0",
8
+ "esprima-next": "5.8.4",
9
+ "lodash.get": "^4.4.2",
10
+ "lodash.isequal": "^4.5.0",
11
+ "lodash.merge": "^4.6.2",
12
+ "luxon": "^3.5.0",
13
+ "riot-tmpl": "^3.0.8",
14
+ "tslib": "^2.3.0",
15
+ "@sentry/node": "^9.15.0",
16
+ "callsites": "^3.1.0",
17
+ "xml2js": "^0.6.2"
18
+ },
19
+ "scripts": {
20
+ "release": "npm build && npm publish --access public"
21
+ },
22
+ "devDependencies": {
23
+ "@types/express": "^5.0.0",
24
+ "@types/jmespath": "^0.15.2",
25
+ "@types/lodash": "^4.17.13",
26
+ "@types/lodash.get": "^4.4.9",
27
+ "@types/lodash.isequal": "^4.5.8",
28
+ "@types/lodash.merge": "^4.6.9",
29
+ "@types/luxon": "^3.4.2",
30
+ "@types/xml2js": "^0.4.14",
31
+ "@typescript-eslint/eslint-plugin": "^8.18.0",
32
+ "@typescript-eslint/parser": "^8.18.0",
33
+ "eslint": "^9.15.0",
34
+ "eslint-friendly-formatter": "^4.0.1",
35
+ "jsonc-eslint-parser": "^2.4.0"
36
+ },
37
+ "type": "commonjs",
38
+ "main": "./dist/src/index.js",
39
+ "typings": "./dist/src/index.d.ts"
40
+ }
package/project.json ADDED
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "workflow",
3
+ "$schema": "../../node_modules/nx/schemas/project-schema.json",
4
+ "sourceRoot": "libs/workflow/src",
5
+ "projectType": "library",
6
+ "tags": [],
7
+ "targets": {
8
+ "build": {
9
+ "executor": "@nx/js:tsc",
10
+ "outputs": ["{options.outputPath}"],
11
+ "options": {
12
+ "outputPath": "libs/workflow/dist",
13
+ "main": "libs/workflow/src/index.ts",
14
+ "tsConfig": "libs/workflow/tsconfig.lib.json",
15
+ "assets": ["libs/workflow/*.md"]
16
+ }
17
+ }
18
+ }
19
+ }
package/src/index.ts ADDED
@@ -0,0 +1,33 @@
1
+ import * as LoggerProxy from './lib/LoggerProxy';
2
+ import * as NodeHelpers from './lib/NodeHelpers';
3
+ import * as ObservableObject from './lib/ObservableObject';
4
+
5
+ export * from './lib/MetadataUtils';
6
+
7
+ export * from './lib/errors'
8
+ export * from './lib/DeferredPromise';
9
+ export * from './lib/Interfaces';
10
+ export * from './lib/Expression';
11
+ export * from './lib/NodeErrors';
12
+ export * from './lib/Constants';
13
+ export * from './lib/NodeHelpers';
14
+ export * as TelemetryHelpers from './lib/TelemetryHelpers';
15
+ export * from './lib/RoutingNode';
16
+ export * from './lib/Workflow';
17
+ export * from './lib/TypeValidation';
18
+ export * from './lib/WorkflowDataProxy';
19
+ export * from './lib/WorkflowErrors';
20
+ export * from './lib/WorkflowHooks';
21
+ export * from './lib/result';
22
+ export {
23
+ LoggerProxy,
24
+ NodeHelpers,
25
+ ObservableObject
26
+ };
27
+ export {
28
+ updateDisplayOptions,
29
+ randomInt,
30
+ jsonParse,
31
+ jsonStringify,
32
+ replaceCircularReferences,
33
+ } from './lib/utils';
@@ -0,0 +1,124 @@
1
+ import { NodeConnectionType, NodeConnectionTypes } from "./Interfaces";
2
+
3
+ export const DIGITS = '0123456789';
4
+ export const UPPERCASE_LETTERS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
5
+ export const LOWERCASE_LETTERS = UPPERCASE_LETTERS.toLowerCase();
6
+ export const ALPHABET = [DIGITS, UPPERCASE_LETTERS, LOWERCASE_LETTERS].join('');
7
+
8
+ export const BINARY_ENCODING = 'base64';
9
+ export const WAIT_INDEFINITELY = new Date('3000-01-01T00:00:00.000Z');
10
+
11
+ export const LOG_LEVELS = ['silent', 'error', 'warn', 'info', 'debug'] as const;
12
+
13
+ export const CODE_LANGUAGES = ['javaScript', 'python'] as const;
14
+ export const CODE_EXECUTION_MODES = ['runOnceForAllItems', 'runOnceForEachItem'] as const;
15
+
16
+ // Arbitrary value to represent an empty credential value
17
+ export const CREDENTIAL_EMPTY_VALUE = '__n8n_EMPTY_VALUE_7b1af746-3729-4c60-9b9b-e08eb29e58da';
18
+
19
+ export const FORM_TRIGGER_PATH_IDENTIFIER = 'n8n-form';
20
+
21
+ export const UNKNOWN_ERROR_MESSAGE = 'There was an unknown issue while executing the node';
22
+ export const UNKNOWN_ERROR_DESCRIPTION =
23
+ 'Double-check the node configuration and the service it connects to. Check the error details below and refer to the <a href="https://docs.n8n.io" target="_blank">n8n documentation</a> to troubleshoot the issue.';
24
+ export const UNKNOWN_ERROR_MESSAGE_CRED = 'UNKNOWN ERROR';
25
+
26
+ //n8n-nodes-base
27
+ export const STICKY_NODE_TYPE = 'n8n-nodes-base.stickyNote';
28
+ export const NO_OP_NODE_TYPE = 'n8n-nodes-base.noOp';
29
+ export const HTTP_REQUEST_NODE_TYPE = 'n8n-nodes-base.httpRequest';
30
+ export const WEBHOOK_NODE_TYPE = 'n8n-nodes-base.webhook';
31
+ export const MANUAL_TRIGGER_NODE_TYPE = 'n8n-nodes-base.manualTrigger';
32
+ export const ERROR_TRIGGER_NODE_TYPE = 'n8n-nodes-base.errorTrigger';
33
+ export const START_NODE_TYPE = 'n8n-nodes-base.start';
34
+ export const EXECUTE_WORKFLOW_NODE_TYPE = 'n8n-nodes-base.executeWorkflow';
35
+ export const EXECUTE_WORKFLOW_TRIGGER_NODE_TYPE = 'n8n-nodes-base.executeWorkflowTrigger';
36
+ export const CODE_NODE_TYPE = 'n8n-nodes-base.code';
37
+ export const FUNCTION_NODE_TYPE = 'n8n-nodes-base.function';
38
+ export const FUNCTION_ITEM_NODE_TYPE = 'n8n-nodes-base.functionItem';
39
+ export const MERGE_NODE_TYPE = 'n8n-nodes-base.merge';
40
+ export const AI_TRANSFORM_NODE_TYPE = 'n8n-nodes-base.aiTransform';
41
+ export const FORM_NODE_TYPE = 'n8n-nodes-base.form';
42
+ export const FORM_TRIGGER_NODE_TYPE = 'n8n-nodes-base.formTrigger';
43
+ export const CHAT_TRIGGER_NODE_TYPE = '@n8n/n8n-nodes-langchain.chatTrigger';
44
+ export const WAIT_NODE_TYPE = 'n8n-nodes-base.wait';
45
+
46
+ export const ConnectionTypeDisplayNames: { [key in NodeConnectionType]: string } = {
47
+ [NodeConnectionTypes.Main]: 'Main',
48
+ [NodeConnectionTypes.AiAgent]: 'IA Agent',
49
+ [NodeConnectionTypes.AiChain]: 'Chain',
50
+ [NodeConnectionTypes.AiDocument]: 'Document',
51
+ [NodeConnectionTypes.AiEmbedding]: 'Embedding',
52
+ [NodeConnectionTypes.AiLanguageModel]: 'Model',
53
+ [NodeConnectionTypes.AiMemory]: 'Memory',
54
+ [NodeConnectionTypes.AiOutputParser]: 'Output Parser',
55
+ [NodeConnectionTypes.AiRetriever]: 'Retriever',
56
+ [NodeConnectionTypes.AiTextSplitter]: 'Text Splitter',
57
+ [NodeConnectionTypes.AiTool]: 'Tool',
58
+ [NodeConnectionTypes.AiVectorStore]: 'Vector Store',
59
+ };
60
+
61
+ export const STARTING_NODE_TYPES = [
62
+ MANUAL_TRIGGER_NODE_TYPE,
63
+ EXECUTE_WORKFLOW_TRIGGER_NODE_TYPE,
64
+ ERROR_TRIGGER_NODE_TYPE,
65
+ START_NODE_TYPE,
66
+ ];
67
+
68
+ export const SCRIPTING_NODE_TYPES = [
69
+ FUNCTION_NODE_TYPE,
70
+ FUNCTION_ITEM_NODE_TYPE,
71
+ CODE_NODE_TYPE,
72
+ AI_TRANSFORM_NODE_TYPE,
73
+ ];
74
+
75
+ export const ADD_FORM_NOTICE = 'addFormPage';
76
+
77
+ /**
78
+ * Nodes whose parameter values may refer to other nodes without expressions.
79
+ * Their content may need to be updated when the referenced node is renamed.
80
+ */
81
+ export const NODES_WITH_RENAMABLE_CONTENT = new Set([
82
+ CODE_NODE_TYPE,
83
+ FUNCTION_NODE_TYPE,
84
+ FUNCTION_ITEM_NODE_TYPE,
85
+ AI_TRANSFORM_NODE_TYPE,
86
+ ]);
87
+
88
+ //@n8n/n8n-nodes-langchain
89
+ export const MANUAL_CHAT_TRIGGER_LANGCHAIN_NODE_TYPE = '@n8n/n8n-nodes-langchain.manualChatTrigger';
90
+ export const AGENT_LANGCHAIN_NODE_TYPE = '@n8n/n8n-nodes-langchain.agent';
91
+ export const CHAIN_LLM_LANGCHAIN_NODE_TYPE = '@n8n/n8n-nodes-langchain.chainLlm';
92
+ export const OPENAI_LANGCHAIN_NODE_TYPE = '@n8n/n8n-nodes-langchain.openAi';
93
+ export const CHAIN_SUMMARIZATION_LANGCHAIN_NODE_TYPE =
94
+ '@n8n/n8n-nodes-langchain.chainSummarization';
95
+ export const CODE_TOOL_LANGCHAIN_NODE_TYPE = '@n8n/n8n-nodes-langchain.toolCode';
96
+ export const WORKFLOW_TOOL_LANGCHAIN_NODE_TYPE = '@n8n/n8n-nodes-langchain.toolWorkflow';
97
+ export const HTTP_REQUEST_TOOL_LANGCHAIN_NODE_TYPE = '@n8n/n8n-nodes-langchain.toolHttpRequest';
98
+
99
+ export const LANGCHAIN_CUSTOM_TOOLS = [
100
+ CODE_TOOL_LANGCHAIN_NODE_TYPE,
101
+ WORKFLOW_TOOL_LANGCHAIN_NODE_TYPE,
102
+ HTTP_REQUEST_TOOL_LANGCHAIN_NODE_TYPE,
103
+ ];
104
+
105
+ export const SEND_AND_WAIT_OPERATION = 'sendAndWait';
106
+ export const AI_TRANSFORM_CODE_GENERATED_FOR_PROMPT = 'codeGeneratedForPrompt';
107
+ export const AI_TRANSFORM_JS_CODE = 'jsCode';
108
+
109
+ /**
110
+ * Key for an item standing in for a manual execution data item too large to be
111
+ * sent live via pubsub. See {@link TRIMMED_TASK_DATA_CONNECTIONS} in constants
112
+ * in `cli` package.
113
+ */
114
+ export const TRIMMED_TASK_DATA_CONNECTIONS_KEY = '__isTrimmedManualExecutionDataItem';
115
+
116
+ export const OPEN_AI_API_CREDENTIAL_TYPE = 'openAiApi';
117
+ export const FREE_AI_CREDITS_ERROR_TYPE = 'free_ai_credits_request_error';
118
+ export const FREE_AI_CREDITS_USED_ALL_CREDITS_ERROR_CODE = 400;
119
+
120
+ export const FROM_AI_AUTO_GENERATED_MARKER = '/*n8n-auto-generated-fromAI-override*/';
121
+
122
+ export const PROJECT_ROOT = '0';
123
+
124
+ export const WAITING_FORMS_EXECUTION_STATUS = 'n8n-execution-status';