@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,385 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.tryToParseJwt = exports.tryToParseUrl = exports.getValueDescription = exports.tryToParseJsonToFormFields = exports.tryToParseObject = exports.tryToParseArray = exports.tryToParseTime = exports.tryToParseDateTime = exports.tryToParseBoolean = exports.tryToParseAlphanumericString = exports.tryToParseString = exports.tryToParseNumber = void 0;
4
+ exports.validateFieldType = validateFieldType;
5
+ const tslib_1 = require("tslib");
6
+ const isObject_1 = tslib_1.__importDefault(require("lodash/isObject"));
7
+ const luxon_1 = require("luxon");
8
+ const utils_1 = require("./utils");
9
+ const tryToParseNumber = (value) => {
10
+ const isValidNumber = !isNaN(Number(value));
11
+ if (!isValidNumber) {
12
+ throw new Error('Failed to parse value to number');
13
+ }
14
+ return Number(value);
15
+ };
16
+ exports.tryToParseNumber = tryToParseNumber;
17
+ const tryToParseString = (value) => {
18
+ if (typeof value === 'object')
19
+ return JSON.stringify(value);
20
+ if (typeof value === 'undefined')
21
+ return '';
22
+ if (typeof value === 'string' ||
23
+ typeof value === 'bigint' ||
24
+ typeof value === 'boolean' ||
25
+ typeof value === 'number') {
26
+ return value.toString();
27
+ }
28
+ return String(value);
29
+ };
30
+ exports.tryToParseString = tryToParseString;
31
+ const tryToParseAlphanumericString = (value) => {
32
+ const parsed = (0, exports.tryToParseString)(value);
33
+ const regex = /^[a-zA-Z_][a-zA-Z0-9_]*$/;
34
+ if (!regex.test(parsed)) {
35
+ throw new Error('Value is not a valid alphanumeric string');
36
+ }
37
+ return parsed;
38
+ };
39
+ exports.tryToParseAlphanumericString = tryToParseAlphanumericString;
40
+ const tryToParseBoolean = (value) => {
41
+ if (typeof value === 'boolean') {
42
+ return value;
43
+ }
44
+ if (typeof value === 'string' && ['true', 'false'].includes(value.toLowerCase())) {
45
+ return value.toLowerCase() === 'true';
46
+ }
47
+ // If value is not a empty string, try to parse it to a number
48
+ if (!(typeof value === 'string' && value.trim() === '')) {
49
+ const num = Number(value);
50
+ if (num === 0) {
51
+ return false;
52
+ }
53
+ else if (num === 1) {
54
+ return true;
55
+ }
56
+ }
57
+ throw new Error('Failed to parse value as boolean');
58
+ };
59
+ exports.tryToParseBoolean = tryToParseBoolean;
60
+ const tryToParseDateTime = (value) => {
61
+ if (value instanceof luxon_1.DateTime && value.isValid) {
62
+ return value;
63
+ }
64
+ if (value instanceof Date) {
65
+ const fromJSDate = luxon_1.DateTime.fromJSDate(value);
66
+ if (fromJSDate.isValid) {
67
+ return fromJSDate;
68
+ }
69
+ }
70
+ const dateString = String(value).trim();
71
+ // Rely on luxon to parse different date formats
72
+ const isoDate = luxon_1.DateTime.fromISO(dateString, { setZone: true });
73
+ if (isoDate.isValid) {
74
+ return isoDate;
75
+ }
76
+ const httpDate = luxon_1.DateTime.fromHTTP(dateString, { setZone: true });
77
+ if (httpDate.isValid) {
78
+ return httpDate;
79
+ }
80
+ const rfc2822Date = luxon_1.DateTime.fromRFC2822(dateString, { setZone: true });
81
+ if (rfc2822Date.isValid) {
82
+ return rfc2822Date;
83
+ }
84
+ const sqlDate = luxon_1.DateTime.fromSQL(dateString, { setZone: true });
85
+ if (sqlDate.isValid) {
86
+ return sqlDate;
87
+ }
88
+ const parsedDateTime = luxon_1.DateTime.fromMillis(Date.parse(dateString));
89
+ if (parsedDateTime.isValid) {
90
+ return parsedDateTime;
91
+ }
92
+ throw new Error('Value is not a valid date');
93
+ };
94
+ exports.tryToParseDateTime = tryToParseDateTime;
95
+ const tryToParseTime = (value) => {
96
+ const isTimeInput = /^\d{2}:\d{2}(:\d{2})?((\-|\+)\d{4})?((\-|\+)\d{1,2}(:\d{2})?)?$/s.test(String(value));
97
+ if (!isTimeInput) {
98
+ throw new Error('Value is not a valid time');
99
+ }
100
+ return String(value);
101
+ };
102
+ exports.tryToParseTime = tryToParseTime;
103
+ const tryToParseArray = (value) => {
104
+ try {
105
+ if (typeof value === 'object' && Array.isArray(value)) {
106
+ return value;
107
+ }
108
+ let parsed;
109
+ try {
110
+ parsed = JSON.parse(String(value));
111
+ }
112
+ catch (e) {
113
+ parsed = JSON.parse(String(value).replace(/'/g, '"'));
114
+ }
115
+ if (!Array.isArray(parsed)) {
116
+ throw new Error('Value is not a valid array');
117
+ }
118
+ return parsed;
119
+ }
120
+ catch (e) {
121
+ throw new Error('Value is not a valid array');
122
+ }
123
+ };
124
+ exports.tryToParseArray = tryToParseArray;
125
+ const tryToParseObject = (value) => {
126
+ if (value && typeof value === 'object' && !Array.isArray(value)) {
127
+ return value;
128
+ }
129
+ try {
130
+ const o = (0, utils_1.jsonParse)(String(value), { acceptJSObject: true });
131
+ if (typeof o !== 'object' || Array.isArray(o)) {
132
+ throw new Error('Value is not a valid object');
133
+ }
134
+ return o;
135
+ }
136
+ catch (e) {
137
+ throw new Error('Value is not a valid object');
138
+ }
139
+ };
140
+ exports.tryToParseObject = tryToParseObject;
141
+ const ALLOWED_FORM_FIELDS_KEYS = [
142
+ 'fieldLabel',
143
+ 'fieldType',
144
+ 'placeholder',
145
+ 'fieldOptions',
146
+ 'multiselect',
147
+ 'multipleFiles',
148
+ 'acceptFileTypes',
149
+ 'formatDate',
150
+ 'requiredField',
151
+ ];
152
+ const ALLOWED_FIELD_TYPES = [
153
+ 'date',
154
+ 'dropdown',
155
+ 'email',
156
+ 'file',
157
+ 'number',
158
+ 'password',
159
+ 'text',
160
+ 'textarea',
161
+ ];
162
+ const tryToParseJsonToFormFields = (value) => {
163
+ const fields = [];
164
+ try {
165
+ const rawFields = (0, utils_1.jsonParse)(value, {
166
+ acceptJSObject: true,
167
+ });
168
+ for (const [index, field] of rawFields.entries()) {
169
+ for (const key of Object.keys(field)) {
170
+ if (!ALLOWED_FORM_FIELDS_KEYS.includes(key)) {
171
+ throw new Error(`Key '${key}' in field ${index} is not valid for form fields`);
172
+ }
173
+ if (key !== 'fieldOptions' &&
174
+ !['string', 'number', 'boolean'].includes(typeof field[key])) {
175
+ field[key] = String(field[key]);
176
+ }
177
+ else if (typeof field[key] === 'string') {
178
+ field[key] = field[key].replace(/</g, '&lt;').replace(/>/g, '&gt;');
179
+ }
180
+ if (key === 'fieldType' && !ALLOWED_FIELD_TYPES.includes(field[key])) {
181
+ throw new Error(`Field type '${field[key]}' in field ${index} is not valid for form fields`);
182
+ }
183
+ if (key === 'fieldOptions') {
184
+ if (Array.isArray(field[key])) {
185
+ field[key] = { values: field[key] };
186
+ }
187
+ if (typeof field[key] !== 'object' ||
188
+ !field[key]['values']) {
189
+ throw new Error(`Field dropdown in field ${index} does has no 'values' property that contain an array of options`);
190
+ }
191
+ for (const [optionIndex, option] of field[key]['values'].entries()) {
192
+ if (Object.keys(option).length !== 1 || typeof option['option'] !== 'string') {
193
+ throw new Error(`Field dropdown in field ${index} has an invalid option ${optionIndex}`);
194
+ }
195
+ }
196
+ }
197
+ }
198
+ fields.push(field);
199
+ }
200
+ }
201
+ catch (error) {
202
+ if (error instanceof Error)
203
+ throw error;
204
+ throw new Error('Value is not valid JSON');
205
+ }
206
+ return fields;
207
+ };
208
+ exports.tryToParseJsonToFormFields = tryToParseJsonToFormFields;
209
+ const getValueDescription = (value) => {
210
+ if (typeof value === 'object') {
211
+ if (value === null)
212
+ return "'null'";
213
+ if (Array.isArray(value))
214
+ return 'array';
215
+ return 'object';
216
+ }
217
+ return `'${String(value)}'`;
218
+ };
219
+ exports.getValueDescription = getValueDescription;
220
+ const tryToParseUrl = (value) => {
221
+ if (typeof value === 'string' && !value.includes('://')) {
222
+ value = `http://${value}`;
223
+ }
224
+ const urlPattern = /^(https?|ftp|file):\/\/\S+|www\.\S+/;
225
+ if (!urlPattern.test(String(value))) {
226
+ throw new Error(`The value "${String(value)}" is not a valid url.`);
227
+ }
228
+ return String(value);
229
+ };
230
+ exports.tryToParseUrl = tryToParseUrl;
231
+ const tryToParseJwt = (value) => {
232
+ const error = new Error(`The value "${String(value)}" is not a valid JWT token.`);
233
+ if (!value)
234
+ throw error;
235
+ const jwtPattern = /^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_.+/=]*$/;
236
+ if (!jwtPattern.test(String(value)))
237
+ throw error;
238
+ return String(value);
239
+ };
240
+ exports.tryToParseJwt = tryToParseJwt;
241
+ // eslint-disable-next-line complexity
242
+ function validateFieldType(fieldName, value, type, options = {}) {
243
+ if (value === null || value === undefined)
244
+ return { valid: true };
245
+ const strict = options.strict ?? false;
246
+ const valueOptions = options.valueOptions ?? [];
247
+ const parseStrings = options.parseStrings ?? false;
248
+ const defaultErrorMessage = `'${fieldName}' expects a ${type} but we got ${(0, exports.getValueDescription)(value)}`;
249
+ switch (type.toLowerCase()) {
250
+ case 'string': {
251
+ if (!parseStrings)
252
+ return { valid: true, newValue: value };
253
+ try {
254
+ if (strict && typeof value !== 'string') {
255
+ return { valid: false, errorMessage: defaultErrorMessage };
256
+ }
257
+ return { valid: true, newValue: (0, exports.tryToParseString)(value) };
258
+ }
259
+ catch (e) {
260
+ return { valid: false, errorMessage: defaultErrorMessage };
261
+ }
262
+ }
263
+ case 'string-alphanumeric': {
264
+ try {
265
+ return { valid: true, newValue: (0, exports.tryToParseAlphanumericString)(value) };
266
+ }
267
+ catch (e) {
268
+ return {
269
+ valid: false,
270
+ errorMessage: 'Value is not a valid alphanumeric string, only letters, numbers and underscore allowed',
271
+ };
272
+ }
273
+ }
274
+ case 'number': {
275
+ try {
276
+ if (strict && typeof value !== 'number') {
277
+ return { valid: false, errorMessage: defaultErrorMessage };
278
+ }
279
+ return { valid: true, newValue: (0, exports.tryToParseNumber)(value) };
280
+ }
281
+ catch (e) {
282
+ return { valid: false, errorMessage: defaultErrorMessage };
283
+ }
284
+ }
285
+ case 'boolean': {
286
+ try {
287
+ if (strict && typeof value !== 'boolean') {
288
+ return { valid: false, errorMessage: defaultErrorMessage };
289
+ }
290
+ return { valid: true, newValue: (0, exports.tryToParseBoolean)(value) };
291
+ }
292
+ catch (e) {
293
+ return { valid: false, errorMessage: defaultErrorMessage };
294
+ }
295
+ }
296
+ case 'datetime': {
297
+ try {
298
+ return { valid: true, newValue: (0, exports.tryToParseDateTime)(value) };
299
+ }
300
+ catch (e) {
301
+ const luxonDocsURL = 'https://moment.github.io/luxon/api-docs/index.html#datetimefromformat';
302
+ const errorMessage = `${defaultErrorMessage} <br/><br/> Consider using <a href="${luxonDocsURL}" target="_blank"><code>DateTime.fromFormat</code></a> to work with custom date formats.`;
303
+ return { valid: false, errorMessage };
304
+ }
305
+ }
306
+ case 'time': {
307
+ try {
308
+ return { valid: true, newValue: (0, exports.tryToParseTime)(value) };
309
+ }
310
+ catch (e) {
311
+ return {
312
+ valid: false,
313
+ errorMessage: `'${fieldName}' expects time (hh:mm:(:ss)) but we got ${(0, exports.getValueDescription)(value)}.`,
314
+ };
315
+ }
316
+ }
317
+ case 'object': {
318
+ try {
319
+ if (strict && !(0, isObject_1.default)(value)) {
320
+ return { valid: false, errorMessage: defaultErrorMessage };
321
+ }
322
+ return { valid: true, newValue: (0, exports.tryToParseObject)(value) };
323
+ }
324
+ catch (e) {
325
+ return { valid: false, errorMessage: defaultErrorMessage };
326
+ }
327
+ }
328
+ case 'array': {
329
+ if (strict && !Array.isArray(value)) {
330
+ return { valid: false, errorMessage: defaultErrorMessage };
331
+ }
332
+ try {
333
+ return { valid: true, newValue: (0, exports.tryToParseArray)(value) };
334
+ }
335
+ catch (e) {
336
+ return { valid: false, errorMessage: defaultErrorMessage };
337
+ }
338
+ }
339
+ case 'options': {
340
+ const validOptions = valueOptions.map((option) => option.value).join(', ');
341
+ const isValidOption = valueOptions.some((option) => option.value === value);
342
+ if (!isValidOption) {
343
+ return {
344
+ valid: false,
345
+ errorMessage: `'${fieldName}' expects one of the following values: [${validOptions}] but we got ${(0, exports.getValueDescription)(value)}`,
346
+ };
347
+ }
348
+ return { valid: true, newValue: value };
349
+ }
350
+ case 'url': {
351
+ try {
352
+ return { valid: true, newValue: (0, exports.tryToParseUrl)(value) };
353
+ }
354
+ catch (e) {
355
+ return { valid: false, errorMessage: defaultErrorMessage };
356
+ }
357
+ }
358
+ case 'jwt': {
359
+ try {
360
+ return { valid: true, newValue: (0, exports.tryToParseJwt)(value) };
361
+ }
362
+ catch (e) {
363
+ return {
364
+ valid: false,
365
+ errorMessage: 'Value is not a valid JWT token',
366
+ };
367
+ }
368
+ }
369
+ case 'form-fields': {
370
+ try {
371
+ return { valid: true, newValue: (0, exports.tryToParseJsonToFormFields)(value) };
372
+ }
373
+ catch (e) {
374
+ return {
375
+ valid: false,
376
+ errorMessage: e.message,
377
+ };
378
+ }
379
+ }
380
+ default: {
381
+ return { valid: true, newValue: value };
382
+ }
383
+ }
384
+ }
385
+ //# sourceMappingURL=TypeValidation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TypeValidation.js","sourceRoot":"","sources":["../../../src/lib/TypeValidation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { INodeTypeBaseDescription, IVersionedNodeType, INodeType } from './Interfaces';
2
+ export declare class VersionedNodeType implements IVersionedNodeType {
3
+ currentVersion: number;
4
+ nodeVersions: IVersionedNodeType['nodeVersions'];
5
+ description: INodeTypeBaseDescription;
6
+ constructor(nodeVersions: IVersionedNodeType['nodeVersions'], description: INodeTypeBaseDescription);
7
+ getLatestVersion(): number;
8
+ getNodeType(version?: number): INodeType;
9
+ }
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VersionedNodeType = void 0;
4
+ class VersionedNodeType {
5
+ currentVersion;
6
+ nodeVersions;
7
+ description;
8
+ constructor(nodeVersions, description) {
9
+ this.nodeVersions = nodeVersions;
10
+ this.currentVersion = description.defaultVersion ?? this.getLatestVersion();
11
+ this.description = description;
12
+ }
13
+ getLatestVersion() {
14
+ return Math.max(...Object.keys(this.nodeVersions).map(Number));
15
+ }
16
+ getNodeType(version) {
17
+ if (version) {
18
+ return this.nodeVersions[version];
19
+ }
20
+ else {
21
+ return this.nodeVersions[this.currentVersion];
22
+ }
23
+ }
24
+ }
25
+ exports.VersionedNodeType = VersionedNodeType;
26
+ //# sourceMappingURL=VersionedNodeType.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VersionedNodeType.js","sourceRoot":"","sources":["../../../src/lib/VersionedNodeType.ts"],"names":[],"mappings":";;;AAEA,MAAa,iBAAiB;IAC7B,cAAc,CAAS;IAEvB,YAAY,CAAqC;IAEjD,WAAW,CAA2B;IAEtC,YACC,YAAgD,EAChD,WAAqC;QAErC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,cAAc,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC5E,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IAChC,CAAC;IAED,gBAAgB;QACf,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,WAAW,CAAC,OAAgB;QAC3B,IAAI,OAAO,EAAE,CAAC;YACb,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC;aAAM,CAAC;YACP,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC/C,CAAC;IACF,CAAC;CACD;AA3BD,8CA2BC"}