pricing-renderer 0.1.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 (85) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/LICENSE +21 -0
  3. package/README.md +419 -0
  4. package/THIRD_PARTY_NOTICES.md +10 -0
  5. package/custom-elements.json +122 -0
  6. package/dist/core/config.d.ts +6 -0
  7. package/dist/core/config.d.ts.map +1 -0
  8. package/dist/core/config.js +62 -0
  9. package/dist/core/config.js.map +1 -0
  10. package/dist/core/expression.d.ts +4 -0
  11. package/dist/core/expression.d.ts.map +1 -0
  12. package/dist/core/expression.js +583 -0
  13. package/dist/core/expression.js.map +1 -0
  14. package/dist/core/i18n.d.ts +10 -0
  15. package/dist/core/i18n.d.ts.map +1 -0
  16. package/dist/core/i18n.js +207 -0
  17. package/dist/core/i18n.js.map +1 -0
  18. package/dist/core/index.d.ts +9 -0
  19. package/dist/core/index.d.ts.map +1 -0
  20. package/dist/core/index.js +8 -0
  21. package/dist/core/index.js.map +1 -0
  22. package/dist/core/normalize.d.ts +4 -0
  23. package/dist/core/normalize.d.ts.map +1 -0
  24. package/dist/core/normalize.js +301 -0
  25. package/dist/core/normalize.js.map +1 -0
  26. package/dist/core/resolve.d.ts +6 -0
  27. package/dist/core/resolve.d.ts.map +1 -0
  28. package/dist/core/resolve.js +123 -0
  29. package/dist/core/resolve.js.map +1 -0
  30. package/dist/core/types.d.ts +308 -0
  31. package/dist/core/types.d.ts.map +1 -0
  32. package/dist/core/types.js +2 -0
  33. package/dist/core/types.js.map +1 -0
  34. package/dist/core/utils.d.ts +16 -0
  35. package/dist/core/utils.d.ts.map +1 -0
  36. package/dist/core/utils.js +125 -0
  37. package/dist/core/utils.js.map +1 -0
  38. package/dist/core/view-model.d.ts +9 -0
  39. package/dist/core/view-model.d.ts.map +1 -0
  40. package/dist/core/view-model.js +427 -0
  41. package/dist/core/view-model.js.map +1 -0
  42. package/dist/element/define.d.ts +6 -0
  43. package/dist/element/define.d.ts.map +1 -0
  44. package/dist/element/define.js +20 -0
  45. package/dist/element/define.js.map +1 -0
  46. package/dist/element/events.d.ts +31 -0
  47. package/dist/element/events.d.ts.map +1 -0
  48. package/dist/element/events.js +2 -0
  49. package/dist/element/events.js.map +1 -0
  50. package/dist/element/index.d.ts +8 -0
  51. package/dist/element/index.d.ts.map +1 -0
  52. package/dist/element/index.js +2 -0
  53. package/dist/element/index.js.map +1 -0
  54. package/dist/element/pricing-renderer-element.d.ts +152 -0
  55. package/dist/element/pricing-renderer-element.d.ts.map +1 -0
  56. package/dist/element/pricing-renderer-element.js +598 -0
  57. package/dist/element/pricing-renderer-element.js.map +1 -0
  58. package/dist/element/renderers.d.ts +43 -0
  59. package/dist/element/renderers.d.ts.map +1 -0
  60. package/dist/element/renderers.js +866 -0
  61. package/dist/element/renderers.js.map +1 -0
  62. package/dist/react/index.d.ts +55 -0
  63. package/dist/react/index.d.ts.map +1 -0
  64. package/dist/react/index.js +23 -0
  65. package/dist/react/index.js.map +1 -0
  66. package/dist/styles/base.css +1110 -0
  67. package/dist/styles/styles.css +2 -0
  68. package/dist/styles/theme.css +84 -0
  69. package/dist/yaml/index.d.ts +4 -0
  70. package/dist/yaml/index.d.ts.map +1 -0
  71. package/dist/yaml/index.js +3 -0
  72. package/dist/yaml/index.js.map +1 -0
  73. package/dist/yaml/load.d.ts +3 -0
  74. package/dist/yaml/load.d.ts.map +1 -0
  75. package/dist/yaml/load.js +97 -0
  76. package/dist/yaml/load.js.map +1 -0
  77. package/dist/yaml/parser.d.ts +4 -0
  78. package/dist/yaml/parser.d.ts.map +1 -0
  79. package/dist/yaml/parser.js +80 -0
  80. package/dist/yaml/parser.js.map +1 -0
  81. package/dist/yaml/types.d.ts +27 -0
  82. package/dist/yaml/types.d.ts.map +1 -0
  83. package/dist/yaml/types.js +2 -0
  84. package/dist/yaml/types.js.map +1 -0
  85. package/package.json +132 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expression.d.ts","sourceRoot":"","sources":["../../src/core/expression.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AA6kB1E,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAwCtE;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,OAAO,GAAE,iBAAsB,GAC9B,oBAAoB,CAUtB"}
@@ -0,0 +1,583 @@
1
+ import { isRecord } from './utils.js';
2
+ const MAX_SOURCE_LENGTH = 1_000;
3
+ const MAX_TOKENS = 500;
4
+ const MAX_AST_NODES = 500;
5
+ const MAX_DEPTH = 40;
6
+ const FORBIDDEN_PROPERTIES = new Set(['constructor', 'prototype', '__proto__']);
7
+ const ALLOWED_MATH_METHODS = new Set(['floor', 'ceil', 'round', 'trunc', 'abs', 'min', 'max']);
8
+ const binaryPrecedence = {
9
+ '||': 1,
10
+ '&&': 2,
11
+ '===': 3,
12
+ '!==': 3,
13
+ '==': 3,
14
+ '!=': 3,
15
+ '<': 4,
16
+ '<=': 4,
17
+ '>': 4,
18
+ '>=': 4,
19
+ '+': 5,
20
+ '-': 5,
21
+ '*': 6,
22
+ '/': 6,
23
+ '%': 6,
24
+ };
25
+ class ExpressionSyntaxError extends Error {
26
+ constructor(message, position) {
27
+ super(`${message} at character ${position}.`);
28
+ this.position = position;
29
+ this.name = 'ExpressionSyntaxError';
30
+ }
31
+ }
32
+ class Tokenizer {
33
+ constructor(source) {
34
+ this.source = source;
35
+ this.position = 0;
36
+ this.tokens = [];
37
+ }
38
+ tokenize() {
39
+ if (this.source.length > MAX_SOURCE_LENGTH) {
40
+ throw new ExpressionSyntaxError('Expression is too long', MAX_SOURCE_LENGTH);
41
+ }
42
+ while (this.position < this.source.length) {
43
+ this.skipWhitespace();
44
+ if (this.position >= this.source.length) {
45
+ break;
46
+ }
47
+ const character = this.source[this.position];
48
+ if (/[0-9]/.test(character) || (character === '.' && /[0-9]/.test(this.peek(1)))) {
49
+ this.readNumber();
50
+ }
51
+ else if (character === "'" || character === '"') {
52
+ this.readString(character);
53
+ }
54
+ else if (character === '#') {
55
+ this.readVariable();
56
+ }
57
+ else if (/[A-Za-z_$]/.test(character)) {
58
+ this.readIdentifier();
59
+ }
60
+ else {
61
+ this.readOperatorOrPunctuation();
62
+ }
63
+ if (this.tokens.length > MAX_TOKENS) {
64
+ throw new ExpressionSyntaxError('Expression contains too many tokens', this.position);
65
+ }
66
+ }
67
+ this.tokens.push({ kind: 'eof', value: '', position: this.position });
68
+ return this.tokens;
69
+ }
70
+ peek(offset = 0) {
71
+ return this.source[this.position + offset] ?? '';
72
+ }
73
+ skipWhitespace() {
74
+ while (/\s/.test(this.peek())) {
75
+ this.position += 1;
76
+ }
77
+ }
78
+ readNumber() {
79
+ const start = this.position;
80
+ const match = this.source
81
+ .slice(this.position)
82
+ .match(/^(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?/);
83
+ if (!match) {
84
+ throw new ExpressionSyntaxError('Invalid number', start);
85
+ }
86
+ this.position += match[0].length;
87
+ this.tokens.push({ kind: 'number', value: match[0], position: start });
88
+ }
89
+ readString(quote) {
90
+ const start = this.position;
91
+ this.position += 1;
92
+ let value = '';
93
+ while (this.position < this.source.length) {
94
+ const character = this.peek();
95
+ if (character === quote) {
96
+ this.position += 1;
97
+ this.tokens.push({ kind: 'string', value, position: start });
98
+ return;
99
+ }
100
+ if (character === '\\') {
101
+ const next = this.peek(1);
102
+ const escapes = {
103
+ n: '\n',
104
+ r: '\r',
105
+ t: '\t',
106
+ '\\': '\\',
107
+ "'": "'",
108
+ '"': '"',
109
+ };
110
+ if (!(next in escapes)) {
111
+ throw new ExpressionSyntaxError('Unsupported string escape', this.position);
112
+ }
113
+ value += escapes[next];
114
+ this.position += 2;
115
+ }
116
+ else {
117
+ value += character;
118
+ this.position += 1;
119
+ }
120
+ }
121
+ throw new ExpressionSyntaxError('Unterminated string', start);
122
+ }
123
+ readVariable() {
124
+ const start = this.position;
125
+ this.position += 1;
126
+ const match = this.source.slice(this.position).match(/^[A-Za-z_$][\w$]*/);
127
+ if (!match) {
128
+ throw new ExpressionSyntaxError('Expected a variable name after #', start);
129
+ }
130
+ this.position += match[0].length;
131
+ this.tokens.push({ kind: 'variable', value: match[0], position: start });
132
+ }
133
+ readIdentifier() {
134
+ const start = this.position;
135
+ const match = this.source.slice(this.position).match(/^[A-Za-z_$][\w$]*/);
136
+ this.position += match[0].length;
137
+ this.tokens.push({ kind: 'identifier', value: match[0], position: start });
138
+ }
139
+ readOperatorOrPunctuation() {
140
+ const start = this.position;
141
+ const operators = [
142
+ '===',
143
+ '!==',
144
+ '<=',
145
+ '>=',
146
+ '&&',
147
+ '||',
148
+ '==',
149
+ '!=',
150
+ '+',
151
+ '-',
152
+ '*',
153
+ '/',
154
+ '%',
155
+ '<',
156
+ '>',
157
+ '!',
158
+ ];
159
+ const operator = operators.find((candidate) => this.source.startsWith(candidate, this.position));
160
+ if (operator) {
161
+ this.position += operator.length;
162
+ this.tokens.push({ kind: 'operator', value: operator, position: start });
163
+ return;
164
+ }
165
+ const character = this.peek();
166
+ if ('()[]{},.?:'.includes(character)) {
167
+ this.position += 1;
168
+ this.tokens.push({ kind: 'punctuation', value: character, position: start });
169
+ return;
170
+ }
171
+ throw new ExpressionSyntaxError(`Unsupported token "${character}"`, start);
172
+ }
173
+ }
174
+ class Parser {
175
+ constructor(tokens) {
176
+ this.tokens = tokens;
177
+ this.position = 0;
178
+ }
179
+ parse() {
180
+ const node = this.parseConditional();
181
+ this.expect('eof');
182
+ validateComplexity(node);
183
+ return node;
184
+ }
185
+ current() {
186
+ return this.tokens[this.position];
187
+ }
188
+ consume() {
189
+ const token = this.current();
190
+ this.position += 1;
191
+ return token;
192
+ }
193
+ match(kind, value) {
194
+ const token = this.current();
195
+ return token.kind === kind && (value === undefined || token.value === value);
196
+ }
197
+ expect(kind, value) {
198
+ if (!this.match(kind, value)) {
199
+ const expected = value ? `${kind} "${value}"` : kind;
200
+ throw new ExpressionSyntaxError(`Expected ${expected}`, this.current().position);
201
+ }
202
+ return this.consume();
203
+ }
204
+ parseConditional() {
205
+ const test = this.parseBinary(1);
206
+ if (!this.match('punctuation', '?')) {
207
+ return test;
208
+ }
209
+ this.consume();
210
+ const consequent = this.parseConditional();
211
+ this.expect('punctuation', ':');
212
+ const alternate = this.parseConditional();
213
+ return { type: 'conditional', test, consequent, alternate };
214
+ }
215
+ parseBinary(minimumPrecedence) {
216
+ let left = this.parseUnary();
217
+ while (this.match('operator')) {
218
+ const operator = this.current().value;
219
+ const precedence = binaryPrecedence[operator];
220
+ if (precedence === undefined || precedence < minimumPrecedence) {
221
+ break;
222
+ }
223
+ this.consume();
224
+ const right = this.parseBinary(precedence + 1);
225
+ left = { type: 'binary', operator, left, right };
226
+ }
227
+ return left;
228
+ }
229
+ parseUnary() {
230
+ if (this.match('operator') && ['!', '+', '-'].includes(this.current().value)) {
231
+ const operator = this.consume().value;
232
+ return { type: 'unary', operator, argument: this.parseUnary() };
233
+ }
234
+ return this.parsePostfix(this.parsePrimary());
235
+ }
236
+ parsePrimary() {
237
+ const token = this.current();
238
+ if (token.kind === 'number') {
239
+ this.consume();
240
+ return { type: 'literal', value: Number(token.value) };
241
+ }
242
+ if (token.kind === 'string') {
243
+ this.consume();
244
+ return { type: 'literal', value: token.value };
245
+ }
246
+ if (token.kind === 'variable') {
247
+ this.consume();
248
+ return { type: 'variable', name: token.value };
249
+ }
250
+ if (token.kind === 'identifier') {
251
+ this.consume();
252
+ if (token.value === 'true')
253
+ return { type: 'literal', value: true };
254
+ if (token.value === 'false')
255
+ return { type: 'literal', value: false };
256
+ if (token.value === 'null')
257
+ return { type: 'literal', value: null };
258
+ return { type: 'identifier', name: token.value };
259
+ }
260
+ if (this.match('punctuation', '[')) {
261
+ this.consume();
262
+ const elements = [];
263
+ if (!this.match('punctuation', ']')) {
264
+ do {
265
+ elements.push(this.parseConditional());
266
+ if (!this.match('punctuation', ','))
267
+ break;
268
+ this.consume();
269
+ } while (!this.match('punctuation', ']'));
270
+ }
271
+ this.expect('punctuation', ']');
272
+ return { type: 'array', elements };
273
+ }
274
+ if (this.match('punctuation', '{')) {
275
+ this.consume();
276
+ const properties = [];
277
+ if (!this.match('punctuation', '}')) {
278
+ do {
279
+ const key = this.current();
280
+ if (key.kind !== 'identifier' && key.kind !== 'string') {
281
+ throw new ExpressionSyntaxError('Expected an object property name', key.position);
282
+ }
283
+ this.consume();
284
+ if (FORBIDDEN_PROPERTIES.has(key.value)) {
285
+ throw new ExpressionSyntaxError(`Property "${key.value}" is not allowed`, key.position);
286
+ }
287
+ this.expect('punctuation', ':');
288
+ properties.push({ key: key.value, value: this.parseConditional() });
289
+ if (!this.match('punctuation', ','))
290
+ break;
291
+ this.consume();
292
+ } while (!this.match('punctuation', '}'));
293
+ }
294
+ this.expect('punctuation', '}');
295
+ return { type: 'object', properties };
296
+ }
297
+ if (this.match('punctuation', '(')) {
298
+ this.consume();
299
+ const expression = this.parseConditional();
300
+ this.expect('punctuation', ')');
301
+ return expression;
302
+ }
303
+ throw new ExpressionSyntaxError('Expected an expression', token.position);
304
+ }
305
+ parsePostfix(initial) {
306
+ let expression = initial;
307
+ while (true) {
308
+ if (this.match('punctuation', '.')) {
309
+ this.consume();
310
+ const property = this.expect('identifier');
311
+ expression = {
312
+ type: 'member',
313
+ object: expression,
314
+ property: { type: 'literal', value: property.value },
315
+ computed: false,
316
+ };
317
+ }
318
+ else if (this.match('punctuation', '[')) {
319
+ this.consume();
320
+ const property = this.parseConditional();
321
+ this.expect('punctuation', ']');
322
+ expression = { type: 'member', object: expression, property, computed: true };
323
+ }
324
+ else if (this.match('punctuation', '(')) {
325
+ this.consume();
326
+ const argumentsList = [];
327
+ if (!this.match('punctuation', ')')) {
328
+ do {
329
+ argumentsList.push(this.parseConditional());
330
+ if (!this.match('punctuation', ','))
331
+ break;
332
+ this.consume();
333
+ } while (argumentsList.length <= 20);
334
+ }
335
+ this.expect('punctuation', ')');
336
+ expression = { type: 'call', callee: expression, arguments: argumentsList };
337
+ }
338
+ else {
339
+ break;
340
+ }
341
+ }
342
+ return expression;
343
+ }
344
+ }
345
+ function validateComplexity(root) {
346
+ let nodes = 0;
347
+ const visit = (node, depth) => {
348
+ nodes += 1;
349
+ if (nodes > MAX_AST_NODES || depth > MAX_DEPTH) {
350
+ throw new Error('Expression is too complex.');
351
+ }
352
+ switch (node.type) {
353
+ case 'unary':
354
+ visit(node.argument, depth + 1);
355
+ break;
356
+ case 'array':
357
+ node.elements.forEach((element) => visit(element, depth + 1));
358
+ break;
359
+ case 'object':
360
+ node.properties.forEach((property) => visit(property.value, depth + 1));
361
+ break;
362
+ case 'binary':
363
+ visit(node.left, depth + 1);
364
+ visit(node.right, depth + 1);
365
+ break;
366
+ case 'conditional':
367
+ visit(node.test, depth + 1);
368
+ visit(node.consequent, depth + 1);
369
+ visit(node.alternate, depth + 1);
370
+ break;
371
+ case 'member':
372
+ visit(node.object, depth + 1);
373
+ visit(node.property, depth + 1);
374
+ break;
375
+ case 'call':
376
+ visit(node.callee, depth + 1);
377
+ node.arguments.forEach((argument) => visit(argument, depth + 1));
378
+ break;
379
+ default:
380
+ break;
381
+ }
382
+ };
383
+ visit(root, 1);
384
+ }
385
+ function getMemberValue(object, property) {
386
+ const key = String(property);
387
+ if (FORBIDDEN_PROPERTIES.has(key)) {
388
+ throw new Error(`Property "${key}" is not allowed.`);
389
+ }
390
+ if (key === 'length' && (typeof object === 'string' || Array.isArray(object))) {
391
+ return object.length;
392
+ }
393
+ if (Array.isArray(object)) {
394
+ if (!/^\d+$/.test(key)) {
395
+ throw new Error(`Array property "${key}" is not allowed.`);
396
+ }
397
+ return object[Number(key)];
398
+ }
399
+ if (typeof object === 'string') {
400
+ if (!/^\d+$/.test(key)) {
401
+ throw new Error(`String property "${key}" is not allowed.`);
402
+ }
403
+ return object[Number(key)];
404
+ }
405
+ if (isRecord(object) && Object.prototype.hasOwnProperty.call(object, key)) {
406
+ return object[key];
407
+ }
408
+ return undefined;
409
+ }
410
+ function evaluateNode(node, variables, options, depth = 0) {
411
+ if (depth > MAX_DEPTH) {
412
+ throw new Error('Expression evaluation exceeded its depth limit.');
413
+ }
414
+ switch (node.type) {
415
+ case 'literal':
416
+ return node.value;
417
+ case 'variable':
418
+ if (!Object.prototype.hasOwnProperty.call(variables, node.name)) {
419
+ throw new Error(`Variable "#${node.name}" is not defined.`);
420
+ }
421
+ return variables[node.name];
422
+ case 'identifier':
423
+ throw new Error(`Identifier "${node.name}" can only be used as an allowed function.`);
424
+ case 'array':
425
+ return node.elements.map((element) => evaluateNode(element, variables, options, depth + 1));
426
+ case 'object': {
427
+ const value = Object.create(null);
428
+ for (const property of node.properties) {
429
+ value[property.key] = evaluateNode(property.value, variables, options, depth + 1);
430
+ }
431
+ return value;
432
+ }
433
+ case 'unary': {
434
+ const value = evaluateNode(node.argument, variables, options, depth + 1);
435
+ if (node.operator === '!')
436
+ return !value;
437
+ if (node.operator === '+')
438
+ return Number(value);
439
+ return -Number(value);
440
+ }
441
+ case 'binary': {
442
+ if (node.operator === '&&') {
443
+ const left = evaluateNode(node.left, variables, options, depth + 1);
444
+ return left ? evaluateNode(node.right, variables, options, depth + 1) : left;
445
+ }
446
+ if (node.operator === '||') {
447
+ const left = evaluateNode(node.left, variables, options, depth + 1);
448
+ return left ? left : evaluateNode(node.right, variables, options, depth + 1);
449
+ }
450
+ const left = evaluateNode(node.left, variables, options, depth + 1);
451
+ const right = evaluateNode(node.right, variables, options, depth + 1);
452
+ switch (node.operator) {
453
+ case '+':
454
+ return left + right;
455
+ case '-':
456
+ return Number(left) - Number(right);
457
+ case '*':
458
+ return Number(left) * Number(right);
459
+ case '/':
460
+ return Number(left) / Number(right);
461
+ case '%':
462
+ return Number(left) % Number(right);
463
+ case '<':
464
+ return left < right;
465
+ case '<=':
466
+ return left <= right;
467
+ case '>':
468
+ return left > right;
469
+ case '>=':
470
+ return left >= right;
471
+ case '===':
472
+ case '==':
473
+ return Object.is(left, right);
474
+ case '!==':
475
+ case '!=':
476
+ return !Object.is(left, right);
477
+ default:
478
+ throw new Error(`Operator "${node.operator}" is not allowed.`);
479
+ }
480
+ }
481
+ case 'conditional':
482
+ return evaluateNode(evaluateNode(node.test, variables, options, depth + 1) ? node.consequent : node.alternate, variables, options, depth + 1);
483
+ case 'member': {
484
+ const object = evaluateNode(node.object, variables, options, depth + 1);
485
+ const property = evaluateNode(node.property, variables, options, depth + 1);
486
+ return getMemberValue(object, property);
487
+ }
488
+ case 'call': {
489
+ if (node.arguments.length > 20) {
490
+ throw new Error('Function call has too many arguments.');
491
+ }
492
+ const argumentsList = node.arguments.map((argument) => evaluateNode(argument, variables, options, depth + 1));
493
+ if (node.callee.type === 'identifier' && node.callee.name !== 'Math') {
494
+ const extension = options.functions?.[node.callee.name];
495
+ if (!Object.prototype.hasOwnProperty.call(options.functions ?? {}, node.callee.name)) {
496
+ throw new Error(`Function "${node.callee.name}" is not allowed.`);
497
+ }
498
+ if (typeof extension !== 'function') {
499
+ throw new Error(`Function "${node.callee.name}" is not callable.`);
500
+ }
501
+ return extension(...argumentsList);
502
+ }
503
+ if (node.callee.type === 'member' &&
504
+ node.callee.object.type === 'identifier' &&
505
+ node.callee.object.name === 'Math' &&
506
+ node.callee.property.type === 'literal') {
507
+ const method = String(node.callee.property.value);
508
+ if (!ALLOWED_MATH_METHODS.has(method)) {
509
+ throw new Error(`Math.${method} is not allowed.`);
510
+ }
511
+ const numericArguments = argumentsList.map(Number);
512
+ return Math[method](...numericArguments);
513
+ }
514
+ if (node.callee.type === 'member' &&
515
+ node.callee.property.type === 'literal' &&
516
+ node.callee.property.value === 'concat') {
517
+ const receiver = evaluateNode(node.callee.object, variables, options, depth + 1);
518
+ if (typeof receiver !== 'string') {
519
+ throw new Error('concat is only allowed on strings.');
520
+ }
521
+ return receiver.concat(...argumentsList.map(String));
522
+ }
523
+ throw new Error('Function call is not allowed.');
524
+ }
525
+ }
526
+ }
527
+ function parseExpression(source) {
528
+ return new Parser(new Tokenizer(source).tokenize()).parse();
529
+ }
530
+ export function collectExpressionDependencies(source) {
531
+ const root = parseExpression(source);
532
+ const dependencies = new Set();
533
+ const visit = (node) => {
534
+ switch (node.type) {
535
+ case 'variable':
536
+ dependencies.add(node.name);
537
+ break;
538
+ case 'unary':
539
+ visit(node.argument);
540
+ break;
541
+ case 'array':
542
+ node.elements.forEach(visit);
543
+ break;
544
+ case 'object':
545
+ node.properties.forEach((property) => visit(property.value));
546
+ break;
547
+ case 'binary':
548
+ visit(node.left);
549
+ visit(node.right);
550
+ break;
551
+ case 'conditional':
552
+ visit(node.test);
553
+ visit(node.consequent);
554
+ visit(node.alternate);
555
+ break;
556
+ case 'member':
557
+ visit(node.object);
558
+ visit(node.property);
559
+ break;
560
+ case 'call':
561
+ visit(node.callee);
562
+ node.arguments.forEach(visit);
563
+ break;
564
+ default:
565
+ break;
566
+ }
567
+ };
568
+ visit(root);
569
+ return [...dependencies];
570
+ }
571
+ export function evaluatePriceExpression(source, variables, options = {}) {
572
+ try {
573
+ const result = evaluateNode(parseExpression(source), variables, options);
574
+ if (typeof result !== 'number' || !Number.isFinite(result) || result < 0) {
575
+ return { error: 'Expression must resolve to a finite, non-negative number.' };
576
+ }
577
+ return { value: result };
578
+ }
579
+ catch (error) {
580
+ return { error: error instanceof Error ? error.message : 'Expression evaluation failed.' };
581
+ }
582
+ }
583
+ //# sourceMappingURL=expression.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expression.js","sourceRoot":"","sources":["../../src/core/expression.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { MessageCatalog } from './types.js';
2
+ export declare const enUS: MessageCatalog;
3
+ export declare const esES: MessageCatalog;
4
+ export declare function registerMessageCatalog(locale: string, catalog: MessageCatalog): () => void;
5
+ export declare function getRegisteredLocales(): string[];
6
+ export declare function getMessages(locale?: string, overrides?: MessageCatalog): MessageCatalog;
7
+ export declare function translate(messages: MessageCatalog, key: string, parameters?: Record<string, string | number>): string;
8
+ export declare function formatCurrency(amount: number, currency: string, locale?: string): string;
9
+ export declare function formatDate(value: string, locale?: string): string;
10
+ //# sourceMappingURL=i18n.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/core/i18n.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,eAAO,MAAM,IAAI,EAAE,cAwElB,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,cAwElB,CAAC;AAeF,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,MAAM,IAAI,CAU1F;AAED,wBAAgB,oBAAoB,IAAI,MAAM,EAAE,CAE/C;AAED,wBAAgB,WAAW,CAAC,MAAM,SAAU,EAAE,SAAS,CAAC,EAAE,cAAc,GAAG,cAAc,CAUxF;AAED,wBAAgB,SAAS,CACvB,QAAQ,EAAE,cAAc,EACxB,GAAG,EAAE,MAAM,EACX,UAAU,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAM,GAC/C,MAAM,CAKR;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,SAAU,GAAG,MAAM,CAYzF;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,SAAU,GAAG,MAAM,CAMlE"}