n8n-workflow 0.132.0 → 0.133.0

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 (49) hide show
  1. package/dist/ErrorReporterProxy.d.ts +1 -1
  2. package/dist/Expression.d.ts +1 -0
  3. package/dist/Expression.js +37 -2
  4. package/dist/Expression.js.map +1 -1
  5. package/dist/ExpressionError.d.ts +3 -0
  6. package/dist/ExpressionError.js +8 -1
  7. package/dist/ExpressionError.js.map +1 -1
  8. package/dist/Extensions/ArrayExtensions.d.ts +3 -0
  9. package/dist/Extensions/ArrayExtensions.js +313 -0
  10. package/dist/Extensions/ArrayExtensions.js.map +1 -0
  11. package/dist/Extensions/DateExtensions.d.ts +2 -0
  12. package/dist/Extensions/DateExtensions.js +208 -0
  13. package/dist/Extensions/DateExtensions.js.map +1 -0
  14. package/dist/Extensions/ExpressionExtension.d.ts +6 -0
  15. package/dist/Extensions/ExpressionExtension.js +176 -0
  16. package/dist/Extensions/ExpressionExtension.js.map +1 -0
  17. package/dist/Extensions/ExpressionParser.d.ts +13 -0
  18. package/dist/Extensions/ExpressionParser.js +80 -0
  19. package/dist/Extensions/ExpressionParser.js.map +1 -0
  20. package/dist/Extensions/ExtendedFunctions.d.ts +12 -0
  21. package/dist/Extensions/ExtendedFunctions.js +49 -0
  22. package/dist/Extensions/ExtendedFunctions.js.map +1 -0
  23. package/dist/Extensions/Extensions.d.ts +4 -0
  24. package/dist/Extensions/Extensions.js +3 -0
  25. package/dist/Extensions/Extensions.js.map +1 -0
  26. package/dist/Extensions/NumberExtensions.d.ts +2 -0
  27. package/dist/Extensions/NumberExtensions.js +56 -0
  28. package/dist/Extensions/NumberExtensions.js.map +1 -0
  29. package/dist/Extensions/ObjectExtensions.d.ts +5 -0
  30. package/dist/Extensions/ObjectExtensions.js +93 -0
  31. package/dist/Extensions/ObjectExtensions.js.map +1 -0
  32. package/dist/Extensions/StringExtensions.d.ts +2 -0
  33. package/dist/Extensions/StringExtensions.js +269 -0
  34. package/dist/Extensions/StringExtensions.js.map +1 -0
  35. package/dist/Extensions/index.d.ts +1 -0
  36. package/dist/Extensions/index.js +9 -0
  37. package/dist/Extensions/index.js.map +1 -0
  38. package/dist/Interfaces.d.ts +7 -2
  39. package/dist/Interfaces.js.map +1 -1
  40. package/dist/MessageEventBus.d.ts +9 -1
  41. package/dist/MessageEventBus.js +0 -1
  42. package/dist/MessageEventBus.js.map +1 -1
  43. package/dist/NodeErrors.d.ts +1 -0
  44. package/dist/NodeErrors.js +3 -0
  45. package/dist/NodeErrors.js.map +1 -1
  46. package/dist/WorkflowDataProxy.js +14 -3
  47. package/dist/WorkflowDataProxy.js.map +1 -1
  48. package/dist/build.tsbuildinfo +1 -1
  49. package/package.json +7 -1
@@ -0,0 +1,208 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.dateExtensions = void 0;
4
+ const luxon_1 = require("luxon");
5
+ const DURATION_MAP = {
6
+ day: 'days',
7
+ month: 'months',
8
+ year: 'years',
9
+ week: 'weeks',
10
+ hour: 'hours',
11
+ minute: 'minutes',
12
+ second: 'seconds',
13
+ millisecond: 'milliseconds',
14
+ ms: 'milliseconds',
15
+ sec: 'seconds',
16
+ secs: 'seconds',
17
+ hr: 'hours',
18
+ hrs: 'hours',
19
+ min: 'minutes',
20
+ mins: 'minutes',
21
+ };
22
+ const DATETIMEUNIT_MAP = {
23
+ days: 'day',
24
+ months: 'month',
25
+ years: 'year',
26
+ hours: 'hour',
27
+ minutes: 'minute',
28
+ seconds: 'second',
29
+ milliseconds: 'millisecond',
30
+ hrs: 'hour',
31
+ hr: 'hour',
32
+ mins: 'minute',
33
+ min: 'minute',
34
+ secs: 'second',
35
+ sec: 'second',
36
+ ms: 'millisecond',
37
+ };
38
+ function isDateTime(date) {
39
+ if (date) {
40
+ return luxon_1.DateTime.isDateTime(date);
41
+ }
42
+ return false;
43
+ }
44
+ function generateDurationObject(durationValue, unit) {
45
+ const convertedUnit = DURATION_MAP[unit] || unit;
46
+ return { [`${convertedUnit}`]: durationValue };
47
+ }
48
+ function beginningOf(date, extraArgs) {
49
+ const [unit = 'week'] = extraArgs;
50
+ if (isDateTime(date)) {
51
+ return date.startOf(DATETIMEUNIT_MAP[unit] || unit).toJSDate();
52
+ }
53
+ let datetime = luxon_1.DateTime.fromJSDate(date);
54
+ if (date.getTimezoneOffset() === 0) {
55
+ datetime = datetime.setZone('UTC');
56
+ }
57
+ return datetime.startOf(DATETIMEUNIT_MAP[unit] || unit).toJSDate();
58
+ }
59
+ function endOfMonth(date) {
60
+ if (isDateTime(date)) {
61
+ return date.endOf('month').toJSDate();
62
+ }
63
+ return luxon_1.DateTime.fromJSDate(date).endOf('month').toJSDate();
64
+ }
65
+ function extract(inputDate, extraArgs) {
66
+ const [part] = extraArgs;
67
+ let date = inputDate;
68
+ if (isDateTime(date)) {
69
+ date = date.toJSDate();
70
+ }
71
+ if (part === 'yearDayNumber') {
72
+ const firstDayOfTheYear = new Date(date.getFullYear(), 0, 0);
73
+ const diff = date.getTime() -
74
+ firstDayOfTheYear.getTime() +
75
+ (firstDayOfTheYear.getTimezoneOffset() - date.getTimezoneOffset()) * 60 * 1000;
76
+ return Math.floor(diff / (1000 * 60 * 60 * 24));
77
+ }
78
+ return luxon_1.DateTime.fromJSDate(date).get(DATETIMEUNIT_MAP[part] || part);
79
+ }
80
+ function format(date, extraArgs) {
81
+ const [dateFormat, localeOpts = {}] = extraArgs;
82
+ if (isDateTime(date)) {
83
+ return date.toFormat(dateFormat, { ...localeOpts });
84
+ }
85
+ return luxon_1.DateTime.fromJSDate(date).toFormat(dateFormat, { ...localeOpts });
86
+ }
87
+ function isBetween(date, extraArgs) {
88
+ const [first, second] = extraArgs;
89
+ const firstDate = new Date(first);
90
+ const secondDate = new Date(second);
91
+ if (firstDate > secondDate) {
92
+ return secondDate < date && date < firstDate;
93
+ }
94
+ return secondDate > date && date > firstDate;
95
+ }
96
+ function isDst(date) {
97
+ return luxon_1.DateTime.fromJSDate(date).isInDST;
98
+ }
99
+ function isInLast(date, extraArgs) {
100
+ const [durationValue = 0, unit = 'minutes'] = extraArgs;
101
+ const dateInThePast = luxon_1.DateTime.now().minus(generateDurationObject(durationValue, unit));
102
+ let thisDate = date;
103
+ if (!isDateTime(thisDate)) {
104
+ thisDate = luxon_1.DateTime.fromJSDate(thisDate);
105
+ }
106
+ return dateInThePast <= thisDate && thisDate <= luxon_1.DateTime.now();
107
+ }
108
+ function isWeekend(date) {
109
+ let DAYS;
110
+ (function (DAYS) {
111
+ DAYS[DAYS["saturday"] = 6] = "saturday";
112
+ DAYS[DAYS["sunday"] = 7] = "sunday";
113
+ })(DAYS || (DAYS = {}));
114
+ return [DAYS.saturday, DAYS.sunday].includes(luxon_1.DateTime.fromJSDate(date).weekday);
115
+ }
116
+ function minus(date, extraArgs) {
117
+ const [durationValue = 0, unit = 'minutes'] = extraArgs;
118
+ if (isDateTime(date)) {
119
+ return date.minus(generateDurationObject(durationValue, unit)).toJSDate();
120
+ }
121
+ return luxon_1.DateTime.fromJSDate(date).minus(generateDurationObject(durationValue, unit)).toJSDate();
122
+ }
123
+ function plus(date, extraArgs) {
124
+ const [durationValue = 0, unit = 'minutes'] = extraArgs;
125
+ if (isDateTime(date)) {
126
+ return date.plus(generateDurationObject(durationValue, unit)).toJSDate();
127
+ }
128
+ return luxon_1.DateTime.fromJSDate(date).plus(generateDurationObject(durationValue, unit)).toJSDate();
129
+ }
130
+ function toLocaleString(date, extraArgs) {
131
+ const [locale, dateFormat = { timeStyle: 'short', dateStyle: 'short' }] = extraArgs;
132
+ if (isDateTime(date)) {
133
+ return date.toLocaleString(dateFormat, { locale });
134
+ }
135
+ return luxon_1.DateTime.fromJSDate(date).toLocaleString(dateFormat, { locale });
136
+ }
137
+ function toTimeFromNow(date) {
138
+ let diffObj;
139
+ if (isDateTime(date)) {
140
+ diffObj = date.diffNow();
141
+ }
142
+ else {
143
+ diffObj = luxon_1.DateTime.fromJSDate(date).diffNow();
144
+ }
145
+ const as = (unit) => {
146
+ return Math.round(Math.abs(diffObj.as(unit)));
147
+ };
148
+ if (as('years')) {
149
+ return `${as('years')} years ago`;
150
+ }
151
+ if (as('months')) {
152
+ return `${as('months')} months ago`;
153
+ }
154
+ if (as('weeks')) {
155
+ return `${as('weeks')} weeks ago`;
156
+ }
157
+ if (as('days')) {
158
+ return `${as('days')} days ago`;
159
+ }
160
+ if (as('hours')) {
161
+ return `${as('hours')} hours ago`;
162
+ }
163
+ if (as('minutes')) {
164
+ return `${as('minutes')} minutes ago`;
165
+ }
166
+ if (as('seconds') && as('seconds') > 10) {
167
+ return `${as('seconds')} seconds ago`;
168
+ }
169
+ return 'just now';
170
+ }
171
+ function timeTo(date, extraArgs) {
172
+ const [diff = new Date().toISOString(), unit = 'seconds'] = extraArgs;
173
+ const diffDate = new Date(diff);
174
+ if (isDateTime(date)) {
175
+ return date.diff(luxon_1.DateTime.fromJSDate(diffDate), DURATION_MAP[unit] || unit);
176
+ }
177
+ return luxon_1.DateTime.fromJSDate(date).diff(luxon_1.DateTime.fromJSDate(diffDate), DURATION_MAP[unit] || unit);
178
+ }
179
+ function toDate(date) {
180
+ if (isDateTime(date)) {
181
+ return date.set({ hour: 0, minute: 0, second: 0, millisecond: 0 }).toJSDate();
182
+ }
183
+ let datetime = luxon_1.DateTime.fromJSDate(date);
184
+ if (date.getTimezoneOffset() === 0) {
185
+ datetime = datetime.setZone('UTC');
186
+ }
187
+ return datetime.set({ hour: 0, minute: 0, second: 0, millisecond: 0 }).toJSDate();
188
+ }
189
+ exports.dateExtensions = {
190
+ typeName: 'Date',
191
+ functions: {
192
+ beginningOf,
193
+ endOfMonth,
194
+ extract,
195
+ isBetween,
196
+ isDst,
197
+ isInLast,
198
+ isWeekend,
199
+ minus,
200
+ plus,
201
+ toTimeFromNow,
202
+ timeTo,
203
+ format,
204
+ toLocaleString,
205
+ toDate,
206
+ },
207
+ };
208
+ //# sourceMappingURL=DateExtensions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DateExtensions.js","sourceRoot":"","sources":["../../src/Extensions/DateExtensions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare const hasExpressionExtension: (str: string) => boolean;
2
+ export declare const hasNativeMethod: (method: string) => boolean;
3
+ export declare const extendTransform: (expression: string) => {
4
+ code: string;
5
+ } | undefined;
6
+ export declare function extend(input: unknown, functionName: string, args: unknown[]): any;
@@ -0,0 +1,176 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.extend = exports.extendTransform = exports.hasNativeMethod = exports.hasExpressionExtension = void 0;
4
+ const luxon_1 = require("luxon");
5
+ const ExpressionError_1 = require("../ExpressionError");
6
+ const recast_1 = require("recast");
7
+ const ArrayExtensions_1 = require("./ArrayExtensions");
8
+ const DateExtensions_1 = require("./DateExtensions");
9
+ const NumberExtensions_1 = require("./NumberExtensions");
10
+ const StringExtensions_1 = require("./StringExtensions");
11
+ const ObjectExtensions_1 = require("./ObjectExtensions");
12
+ const EXPRESSION_EXTENDER = 'extend';
13
+ function isBlank(value) {
14
+ return value === null || value === undefined || !value;
15
+ }
16
+ function isPresent(value) {
17
+ return !isBlank(value);
18
+ }
19
+ const EXTENSION_OBJECTS = [
20
+ ArrayExtensions_1.arrayExtensions,
21
+ DateExtensions_1.dateExtensions,
22
+ NumberExtensions_1.numberExtensions,
23
+ ObjectExtensions_1.objectExtensions,
24
+ StringExtensions_1.stringExtensions,
25
+ ];
26
+ const genericExtensions = {
27
+ isBlank,
28
+ isPresent,
29
+ };
30
+ const EXPRESSION_EXTENSION_METHODS = Array.from(new Set([
31
+ ...Object.keys(StringExtensions_1.stringExtensions.functions),
32
+ ...Object.keys(NumberExtensions_1.numberExtensions.functions),
33
+ ...Object.keys(DateExtensions_1.dateExtensions.functions),
34
+ ...Object.keys(ArrayExtensions_1.arrayExtensions.functions),
35
+ ...Object.keys(ObjectExtensions_1.objectExtensions.functions),
36
+ ...Object.keys(genericExtensions),
37
+ '$if',
38
+ ]));
39
+ const isExpressionExtension = (str) => EXPRESSION_EXTENSION_METHODS.some((m) => m === str);
40
+ const hasExpressionExtension = (str) => EXPRESSION_EXTENSION_METHODS.some((m) => str.includes(m));
41
+ exports.hasExpressionExtension = hasExpressionExtension;
42
+ const hasNativeMethod = (method) => {
43
+ if ((0, exports.hasExpressionExtension)(method)) {
44
+ return false;
45
+ }
46
+ const methods = method
47
+ .replace(/[^\w\s]/gi, ' ')
48
+ .split(' ')
49
+ .filter(Boolean);
50
+ return methods.every((methodName) => {
51
+ return [String.prototype, Array.prototype, Number.prototype, Date.prototype].some((nativeType) => {
52
+ if (methodName in nativeType) {
53
+ return true;
54
+ }
55
+ return false;
56
+ });
57
+ });
58
+ };
59
+ exports.hasNativeMethod = hasNativeMethod;
60
+ const findParent = (path, matcher) => {
61
+ let parent = path.parentPath;
62
+ while (parent) {
63
+ if (matcher(parent)) {
64
+ return parent;
65
+ }
66
+ parent = parent.parentPath;
67
+ }
68
+ return;
69
+ };
70
+ const extendTransform = (expression) => {
71
+ try {
72
+ const ast = (0, recast_1.parse)(expression);
73
+ (0, recast_1.visit)(ast, {
74
+ visitIdentifier(path) {
75
+ var _a;
76
+ this.traverse(path);
77
+ if (path.node.name === '$if') {
78
+ const callPath = findParent(path, (p) => { var _a; return ((_a = p.value) === null || _a === void 0 ? void 0 : _a.type) === 'CallExpression'; });
79
+ if (!callPath || ((_a = callPath.value) === null || _a === void 0 ? void 0 : _a.type) !== 'CallExpression') {
80
+ return;
81
+ }
82
+ if (callPath.node.arguments.length < 2) {
83
+ throw new ExpressionError_1.ExpressionExtensionError('$if requires at least 2 parameters: test, value_if_true[, and value_if_false]');
84
+ }
85
+ const test = callPath.node.arguments[0];
86
+ const consequent = callPath.node.arguments[1];
87
+ const alternative = callPath.node.arguments[2] === undefined
88
+ ? recast_1.types.builders.booleanLiteral(false)
89
+ : callPath.node.arguments[2];
90
+ callPath.replace(recast_1.types.builders.conditionalExpression(test, consequent, alternative));
91
+ }
92
+ },
93
+ });
94
+ (0, recast_1.visit)(ast, {
95
+ visitIdentifier(path) {
96
+ var _a, _b, _c;
97
+ this.traverse(path);
98
+ if (isExpressionExtension(path.node.name) &&
99
+ ((_b = (_a = path.parentPath) === null || _a === void 0 ? void 0 : _a.value) === null || _b === void 0 ? void 0 : _b.type) === 'MemberExpression') {
100
+ const callPath = findParent(path, (p) => { var _a; return ((_a = p.value) === null || _a === void 0 ? void 0 : _a.type) === 'CallExpression'; });
101
+ if (!callPath || ((_c = callPath.value) === null || _c === void 0 ? void 0 : _c.type) !== 'CallExpression') {
102
+ return;
103
+ }
104
+ callPath.replace(recast_1.types.builders.callExpression(recast_1.types.builders.identifier(EXPRESSION_EXTENDER), [
105
+ path.parentPath.value.object,
106
+ recast_1.types.builders.stringLiteral(path.node.name),
107
+ recast_1.types.builders.arrayExpression(callPath.node.arguments),
108
+ ]));
109
+ }
110
+ },
111
+ });
112
+ return (0, recast_1.print)(ast);
113
+ }
114
+ catch (e) {
115
+ return;
116
+ }
117
+ };
118
+ exports.extendTransform = extendTransform;
119
+ function isDate(input) {
120
+ if (typeof input !== 'string' || !input.length) {
121
+ return false;
122
+ }
123
+ if (!/\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}Z/.test(input)) {
124
+ return false;
125
+ }
126
+ const d = new Date(input);
127
+ return d instanceof Date && !isNaN(d.valueOf()) && d.toISOString() === input;
128
+ }
129
+ function extend(input, functionName, args) {
130
+ let foundFunction;
131
+ if (Array.isArray(input)) {
132
+ foundFunction = ArrayExtensions_1.arrayExtensions.functions[functionName];
133
+ }
134
+ else if (isDate(input) && functionName !== 'toDate') {
135
+ input = new Date(input);
136
+ foundFunction = DateExtensions_1.dateExtensions.functions[functionName];
137
+ }
138
+ else if (typeof input === 'string') {
139
+ foundFunction = StringExtensions_1.stringExtensions.functions[functionName];
140
+ }
141
+ else if (typeof input === 'number') {
142
+ foundFunction = NumberExtensions_1.numberExtensions.functions[functionName];
143
+ }
144
+ else if (input && (luxon_1.DateTime.isDateTime(input) || input instanceof Date)) {
145
+ foundFunction = DateExtensions_1.dateExtensions.functions[functionName];
146
+ }
147
+ else if (input !== null && typeof input === 'object') {
148
+ foundFunction = ObjectExtensions_1.objectExtensions.functions[functionName];
149
+ }
150
+ if (!foundFunction) {
151
+ const inputAny = input;
152
+ if (inputAny &&
153
+ functionName &&
154
+ typeof inputAny[functionName] === 'function') {
155
+ return inputAny[functionName](...args);
156
+ }
157
+ foundFunction = genericExtensions[functionName];
158
+ }
159
+ if (!foundFunction) {
160
+ const haveFunction = EXTENSION_OBJECTS.filter((v) => functionName in v.functions);
161
+ if (!haveFunction.length) {
162
+ throw new ExpressionError_1.ExpressionExtensionError(`Unknown expression function: ${functionName}`);
163
+ }
164
+ if (haveFunction.length > 1) {
165
+ const lastType = `"${haveFunction.pop().typeName}"`;
166
+ const typeNames = `${haveFunction.map((v) => `"${v.typeName}"`).join(', ')}, and ${lastType}`;
167
+ throw new ExpressionError_1.ExpressionExtensionError(`${functionName}() is only callable on types ${typeNames}`);
168
+ }
169
+ else {
170
+ throw new ExpressionError_1.ExpressionExtensionError(`${functionName}() is only callable on type "${haveFunction[0].typeName}"`);
171
+ }
172
+ }
173
+ return foundFunction(input, args);
174
+ }
175
+ exports.extend = extend;
176
+ //# sourceMappingURL=ExpressionExtension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExpressionExtension.js","sourceRoot":"","sources":["../../src/Extensions/ExpressionExtension.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export interface ExpressionText {
2
+ type: 'text';
3
+ text: string;
4
+ }
5
+ export interface ExpressionCode {
6
+ type: 'code';
7
+ text: string;
8
+ hasClosingBrackets: boolean;
9
+ }
10
+ export declare type ExpressionChunk = ExpressionCode | ExpressionText;
11
+ export declare const escapeCode: (text: string) => string;
12
+ export declare const splitExpression: (expression: string) => ExpressionChunk[];
13
+ export declare const joinExpression: (parts: ExpressionChunk[]) => string;
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.joinExpression = exports.splitExpression = exports.escapeCode = void 0;
4
+ const OPEN_BRACKET = /(?<escape>\\|)(?<brackets>\{\{)/;
5
+ const CLOSE_BRACKET = /(?<escape>\\|)(?<brackets>\}\})/;
6
+ const escapeCode = (text) => {
7
+ return text.replace('\\}}', '}}');
8
+ };
9
+ exports.escapeCode = escapeCode;
10
+ const splitExpression = (expression) => {
11
+ const chunks = [];
12
+ let searchingFor = 'open';
13
+ let activeRegex = OPEN_BRACKET;
14
+ let buffer = '';
15
+ let index = 0;
16
+ while (index < expression.length) {
17
+ const expr = expression.slice(index);
18
+ const res = activeRegex.exec(expr);
19
+ if (!(res === null || res === void 0 ? void 0 : res.groups)) {
20
+ buffer += expr;
21
+ if (searchingFor === 'open') {
22
+ chunks.push({
23
+ type: 'text',
24
+ text: buffer,
25
+ });
26
+ }
27
+ else {
28
+ chunks.push({
29
+ type: 'code',
30
+ text: (0, exports.escapeCode)(buffer),
31
+ hasClosingBrackets: false,
32
+ });
33
+ }
34
+ break;
35
+ }
36
+ if (res.groups.escape) {
37
+ buffer += expr.slice(0, res.index + 3);
38
+ index += res.index + 3;
39
+ }
40
+ else {
41
+ buffer += expr.slice(0, res.index);
42
+ if (searchingFor === 'open') {
43
+ chunks.push({
44
+ type: 'text',
45
+ text: buffer,
46
+ });
47
+ searchingFor = 'close';
48
+ activeRegex = CLOSE_BRACKET;
49
+ }
50
+ else {
51
+ chunks.push({
52
+ type: 'code',
53
+ text: (0, exports.escapeCode)(buffer),
54
+ hasClosingBrackets: true,
55
+ });
56
+ searchingFor = 'open';
57
+ activeRegex = OPEN_BRACKET;
58
+ }
59
+ index += res.index + 2;
60
+ buffer = '';
61
+ }
62
+ }
63
+ return chunks;
64
+ };
65
+ exports.splitExpression = splitExpression;
66
+ const escapeTmplExpression = (part) => {
67
+ return part.replace('}}', '\\}}');
68
+ };
69
+ const joinExpression = (parts) => {
70
+ return parts
71
+ .map((chunk) => {
72
+ if (chunk.type === 'code') {
73
+ return `{{${escapeTmplExpression(chunk.text)}${chunk.hasClosingBrackets ? '}}' : ''}`;
74
+ }
75
+ return chunk.text;
76
+ })
77
+ .join('');
78
+ };
79
+ exports.joinExpression = joinExpression;
80
+ //# sourceMappingURL=ExpressionParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExpressionParser.js","sourceRoot":"","sources":["../../src/Extensions/ExpressionParser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export declare const extendedFunctions: {
2
+ min: (...values: number[]) => number;
3
+ max: (...values: number[]) => number;
4
+ not: (value: unknown) => boolean;
5
+ average: (...args: number[]) => number;
6
+ numberList: (start: number, end: number) => number[];
7
+ zip: (keys: unknown[], values: unknown[]) => unknown;
8
+ $min: (...values: number[]) => number;
9
+ $max: (...values: number[]) => number;
10
+ $average: (...args: number[]) => number;
11
+ $not: (value: unknown) => boolean;
12
+ };
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.extendedFunctions = void 0;
4
+ const ExpressionError_1 = require("../ExpressionError");
5
+ const ArrayExtensions_1 = require("./ArrayExtensions");
6
+ const min = Math.min;
7
+ const max = Math.max;
8
+ const numberList = (start, end) => {
9
+ const size = Math.abs(start - end) + 1;
10
+ const arr = new Array(size);
11
+ let curr = start;
12
+ for (let i = 0; i < size; i++) {
13
+ if (start < end) {
14
+ arr[i] = curr++;
15
+ }
16
+ else {
17
+ arr[i] = curr--;
18
+ }
19
+ }
20
+ return arr;
21
+ };
22
+ const zip = (keys, values) => {
23
+ if (keys.length !== values.length) {
24
+ throw new ExpressionError_1.ExpressionExtensionError('keys and values not of equal length');
25
+ }
26
+ return keys.reduce((p, c, i) => {
27
+ p[c] = values[i];
28
+ return p;
29
+ }, {});
30
+ };
31
+ const average = (...args) => {
32
+ return (0, ArrayExtensions_1.average)(args);
33
+ };
34
+ const not = (value) => {
35
+ return !value;
36
+ };
37
+ exports.extendedFunctions = {
38
+ min,
39
+ max,
40
+ not,
41
+ average,
42
+ numberList,
43
+ zip,
44
+ $min: min,
45
+ $max: max,
46
+ $average: average,
47
+ $not: not,
48
+ };
49
+ //# sourceMappingURL=ExtendedFunctions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExtendedFunctions.js","sourceRoot":"","sources":["../../src/Extensions/ExtendedFunctions.ts"],"names":[],"mappings":";;;AAAA,wDAA8D;AAC9D,uDAAwD;AAExD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;AACrB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;AAErB,MAAM,UAAU,GAAG,CAAC,KAAa,EAAE,GAAW,EAAY,EAAE;IAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,GAAG,GAAG,IAAI,KAAK,CAAS,IAAI,CAAC,CAAC;IAEpC,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;QAC9B,IAAI,KAAK,GAAG,GAAG,EAAE;YAChB,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC;SAChB;aAAM;YACN,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC;SAChB;KACD;IAED,OAAO,GAAG,CAAC;AACZ,CAAC,CAAC;AAEF,MAAM,GAAG,GAAG,CAAC,IAAe,EAAE,MAAiB,EAAW,EAAE;IAC3D,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE;QAClC,MAAM,IAAI,0CAAwB,CAAC,qCAAqC,CAAC,CAAC;KAC1E;IACD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;QAE7B,CAAS,CAAC,CAAQ,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACjC,OAAO,CAAC,CAAC;IACV,CAAC,EAAE,EAAE,CAAC,CAAC;AACR,CAAC,CAAC;AAEF,MAAM,OAAO,GAAG,CAAC,GAAG,IAAc,EAAE,EAAE;IACrC,OAAO,IAAA,yBAAQ,EAAC,IAAI,CAAC,CAAC;AACvB,CAAC,CAAC;AAEF,MAAM,GAAG,GAAG,CAAC,KAAc,EAAW,EAAE;IACvC,OAAO,CAAC,KAAK,CAAC;AACf,CAAC,CAAC;AAEW,QAAA,iBAAiB,GAAG;IAChC,GAAG;IACH,GAAG;IACH,GAAG;IACH,OAAO;IACP,UAAU;IACV,GAAG;IACH,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;IACT,QAAQ,EAAE,OAAO;IACjB,IAAI,EAAE,GAAG;CACT,CAAC"}
@@ -0,0 +1,4 @@
1
+ export interface ExtensionMap {
2
+ typeName: string;
3
+ functions: Record<string, Function>;
4
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=Extensions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Extensions.js","sourceRoot":"","sources":["../../src/Extensions/Extensions.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ import { ExtensionMap } from './Extensions';
2
+ export declare const numberExtensions: ExtensionMap;
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.numberExtensions = void 0;
4
+ function format(value, extraArgs) {
5
+ const [locales = 'en-US', config = {}] = extraArgs;
6
+ return new Intl.NumberFormat(locales, config).format(value);
7
+ }
8
+ function isBlank(value) {
9
+ return typeof value !== 'number';
10
+ }
11
+ function isPresent(value) {
12
+ return !isBlank(value);
13
+ }
14
+ function random(value) {
15
+ return Math.floor(Math.random() * value);
16
+ }
17
+ function isTrue(value) {
18
+ return value === 1;
19
+ }
20
+ function isFalse(value) {
21
+ return value === 0;
22
+ }
23
+ function isEven(value) {
24
+ return value % 2 === 0;
25
+ }
26
+ function isOdd(value) {
27
+ return Math.abs(value) % 2 === 1;
28
+ }
29
+ function floor(value) {
30
+ return Math.floor(value);
31
+ }
32
+ function ceil(value) {
33
+ return Math.ceil(value);
34
+ }
35
+ function round(value, extraArgs) {
36
+ const [decimalPlaces = 0] = extraArgs;
37
+ return +value.toFixed(decimalPlaces);
38
+ }
39
+ exports.numberExtensions = {
40
+ typeName: 'Number',
41
+ functions: {
42
+ ceil,
43
+ floor,
44
+ format,
45
+ random,
46
+ round,
47
+ isBlank,
48
+ isPresent,
49
+ isTrue,
50
+ isNotTrue: isFalse,
51
+ isFalse,
52
+ isEven,
53
+ isOdd,
54
+ },
55
+ };
56
+ //# sourceMappingURL=NumberExtensions.js.map