@naylence/advanced-security 0.3.15 → 0.4.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 (126) hide show
  1. package/dist/browser/index.cjs +2673 -3
  2. package/dist/browser/index.mjs +2684 -14
  3. package/dist/cjs/advanced-security-isomorphic.js +4 -0
  4. package/dist/cjs/advanced-security-isomorphic.js.map +1 -1
  5. package/dist/cjs/naylence/fame/expr/ast.js +135 -0
  6. package/dist/cjs/naylence/fame/expr/ast.js.map +1 -0
  7. package/dist/cjs/naylence/fame/expr/builtins.js +477 -0
  8. package/dist/cjs/naylence/fame/expr/builtins.js.map +1 -0
  9. package/dist/cjs/naylence/fame/expr/errors.js +88 -0
  10. package/dist/cjs/naylence/fame/expr/errors.js.map +1 -0
  11. package/dist/cjs/naylence/fame/expr/evaluator.js +385 -0
  12. package/dist/cjs/naylence/fame/expr/evaluator.js.map +1 -0
  13. package/dist/cjs/naylence/fame/expr/index.js +21 -0
  14. package/dist/cjs/naylence/fame/expr/index.js.map +1 -0
  15. package/dist/cjs/naylence/fame/expr/limits.js +80 -0
  16. package/dist/cjs/naylence/fame/expr/limits.js.map +1 -0
  17. package/dist/cjs/naylence/fame/expr/parser.js +429 -0
  18. package/dist/cjs/naylence/fame/expr/parser.js.map +1 -0
  19. package/dist/cjs/naylence/fame/expr/tokenizer.js +336 -0
  20. package/dist/cjs/naylence/fame/expr/tokenizer.js.map +1 -0
  21. package/dist/cjs/naylence/fame/factory-manifest.js +2 -0
  22. package/dist/cjs/naylence/fame/factory-manifest.js.map +1 -1
  23. package/dist/cjs/naylence/fame/security/auth/index.js +7 -0
  24. package/dist/cjs/naylence/fame/security/auth/index.js.map +1 -0
  25. package/dist/cjs/naylence/fame/security/auth/policy/advanced-authorization-policy-factory.js +70 -0
  26. package/dist/cjs/naylence/fame/security/auth/policy/advanced-authorization-policy-factory.js.map +1 -0
  27. package/dist/cjs/naylence/fame/security/auth/policy/advanced-authorization-policy.js +562 -0
  28. package/dist/cjs/naylence/fame/security/auth/policy/advanced-authorization-policy.js.map +1 -0
  29. package/dist/cjs/naylence/fame/security/auth/policy/expr-builtins.js +129 -0
  30. package/dist/cjs/naylence/fame/security/auth/policy/expr-builtins.js.map +1 -0
  31. package/dist/cjs/naylence/fame/security/auth/policy/index.js +15 -0
  32. package/dist/cjs/naylence/fame/security/auth/policy/index.js.map +1 -0
  33. package/dist/cjs/naylence/fame/security/index.js +2 -0
  34. package/dist/cjs/naylence/fame/security/index.js.map +1 -1
  35. package/dist/cjs/naylence/fame/security/register-advanced-security-factories.js +2 -0
  36. package/dist/cjs/naylence/fame/security/register-advanced-security-factories.js.map +1 -1
  37. package/dist/cjs/naylence/fame/security/strict-overlay-security-profile.js +64 -0
  38. package/dist/cjs/naylence/fame/security/strict-overlay-security-profile.js.map +1 -0
  39. package/dist/cjs/plugin.js +2 -0
  40. package/dist/cjs/plugin.js.map +1 -1
  41. package/dist/cjs/version.js +2 -2
  42. package/dist/cjs/version.js.map +1 -1
  43. package/dist/esm/advanced-security-isomorphic.js +4 -0
  44. package/dist/esm/advanced-security-isomorphic.js.map +1 -1
  45. package/dist/esm/naylence/fame/expr/ast.js +135 -0
  46. package/dist/esm/naylence/fame/expr/ast.js.map +1 -0
  47. package/dist/esm/naylence/fame/expr/builtins.js +477 -0
  48. package/dist/esm/naylence/fame/expr/builtins.js.map +1 -0
  49. package/dist/esm/naylence/fame/expr/errors.js +88 -0
  50. package/dist/esm/naylence/fame/expr/errors.js.map +1 -0
  51. package/dist/esm/naylence/fame/expr/evaluator.js +385 -0
  52. package/dist/esm/naylence/fame/expr/evaluator.js.map +1 -0
  53. package/dist/esm/naylence/fame/expr/index.js +21 -0
  54. package/dist/esm/naylence/fame/expr/index.js.map +1 -0
  55. package/dist/esm/naylence/fame/expr/limits.js +80 -0
  56. package/dist/esm/naylence/fame/expr/limits.js.map +1 -0
  57. package/dist/esm/naylence/fame/expr/parser.js +429 -0
  58. package/dist/esm/naylence/fame/expr/parser.js.map +1 -0
  59. package/dist/esm/naylence/fame/expr/tokenizer.js +336 -0
  60. package/dist/esm/naylence/fame/expr/tokenizer.js.map +1 -0
  61. package/dist/esm/naylence/fame/factory-manifest.js +2 -0
  62. package/dist/esm/naylence/fame/factory-manifest.js.map +1 -1
  63. package/dist/esm/naylence/fame/security/auth/index.js +7 -0
  64. package/dist/esm/naylence/fame/security/auth/index.js.map +1 -0
  65. package/dist/esm/naylence/fame/security/auth/policy/advanced-authorization-policy-factory.js +70 -0
  66. package/dist/esm/naylence/fame/security/auth/policy/advanced-authorization-policy-factory.js.map +1 -0
  67. package/dist/esm/naylence/fame/security/auth/policy/advanced-authorization-policy.js +562 -0
  68. package/dist/esm/naylence/fame/security/auth/policy/advanced-authorization-policy.js.map +1 -0
  69. package/dist/esm/naylence/fame/security/auth/policy/expr-builtins.js +129 -0
  70. package/dist/esm/naylence/fame/security/auth/policy/expr-builtins.js.map +1 -0
  71. package/dist/esm/naylence/fame/security/auth/policy/index.js +15 -0
  72. package/dist/esm/naylence/fame/security/auth/policy/index.js.map +1 -0
  73. package/dist/esm/naylence/fame/security/index.js +2 -0
  74. package/dist/esm/naylence/fame/security/index.js.map +1 -1
  75. package/dist/esm/naylence/fame/security/register-advanced-security-factories.js +2 -0
  76. package/dist/esm/naylence/fame/security/register-advanced-security-factories.js.map +1 -1
  77. package/dist/esm/naylence/fame/security/strict-overlay-security-profile.js +64 -0
  78. package/dist/esm/naylence/fame/security/strict-overlay-security-profile.js.map +1 -0
  79. package/dist/esm/plugin.js +2 -0
  80. package/dist/esm/plugin.js.map +1 -1
  81. package/dist/esm/version.js +2 -2
  82. package/dist/esm/version.js.map +1 -1
  83. package/dist/node/index.cjs +2795 -6
  84. package/dist/node/index.mjs +2770 -15
  85. package/dist/node/node.cjs +2819 -3
  86. package/dist/node/node.mjs +2796 -15
  87. package/dist/types/advanced-security-isomorphic.d.ts +2 -0
  88. package/dist/types/advanced-security-isomorphic.d.ts.map +1 -1
  89. package/dist/types/naylence/fame/expr/ast.d.ts +85 -0
  90. package/dist/types/naylence/fame/expr/ast.d.ts.map +1 -0
  91. package/dist/types/naylence/fame/expr/builtins.d.ts +79 -0
  92. package/dist/types/naylence/fame/expr/builtins.d.ts.map +1 -0
  93. package/dist/types/naylence/fame/expr/errors.d.ts +61 -0
  94. package/dist/types/naylence/fame/expr/errors.d.ts.map +1 -0
  95. package/dist/types/naylence/fame/expr/evaluator.d.ts +90 -0
  96. package/dist/types/naylence/fame/expr/evaluator.d.ts.map +1 -0
  97. package/dist/types/naylence/fame/expr/index.d.ts +16 -0
  98. package/dist/types/naylence/fame/expr/index.d.ts.map +1 -0
  99. package/dist/types/naylence/fame/expr/limits.d.ts +65 -0
  100. package/dist/types/naylence/fame/expr/limits.d.ts.map +1 -0
  101. package/dist/types/naylence/fame/expr/parser.d.ts +102 -0
  102. package/dist/types/naylence/fame/expr/parser.d.ts.map +1 -0
  103. package/dist/types/naylence/fame/expr/tokenizer.d.ts +51 -0
  104. package/dist/types/naylence/fame/expr/tokenizer.d.ts.map +1 -0
  105. package/dist/types/naylence/fame/factory-manifest.d.ts +1 -1
  106. package/dist/types/naylence/fame/factory-manifest.d.ts.map +1 -1
  107. package/dist/types/naylence/fame/security/auth/index.d.ts +7 -0
  108. package/dist/types/naylence/fame/security/auth/index.d.ts.map +1 -0
  109. package/dist/types/naylence/fame/security/auth/policy/advanced-authorization-policy-factory.d.ts +47 -0
  110. package/dist/types/naylence/fame/security/auth/policy/advanced-authorization-policy-factory.d.ts.map +1 -0
  111. package/dist/types/naylence/fame/security/auth/policy/advanced-authorization-policy.d.ts +73 -0
  112. package/dist/types/naylence/fame/security/auth/policy/advanced-authorization-policy.d.ts.map +1 -0
  113. package/dist/types/naylence/fame/security/auth/policy/expr-builtins.d.ts +14 -0
  114. package/dist/types/naylence/fame/security/auth/policy/expr-builtins.d.ts.map +1 -0
  115. package/dist/types/naylence/fame/security/auth/policy/index.d.ts +12 -0
  116. package/dist/types/naylence/fame/security/auth/policy/index.d.ts.map +1 -0
  117. package/dist/types/naylence/fame/security/index.d.ts +2 -0
  118. package/dist/types/naylence/fame/security/index.d.ts.map +1 -1
  119. package/dist/types/naylence/fame/security/register-advanced-security-factories.d.ts +1 -0
  120. package/dist/types/naylence/fame/security/register-advanced-security-factories.d.ts.map +1 -1
  121. package/dist/types/naylence/fame/security/strict-overlay-security-profile.d.ts +11 -0
  122. package/dist/types/naylence/fame/security/strict-overlay-security-profile.d.ts.map +1 -0
  123. package/dist/types/plugin.d.ts.map +1 -1
  124. package/dist/types/version.d.ts +1 -1
  125. package/dist/types/version.d.ts.map +1 -1
  126. package/package.json +3 -3
@@ -0,0 +1,429 @@
1
+ /**
2
+ * Parser for the expression language.
3
+ *
4
+ * Parses a stream of tokens into an Abstract Syntax Tree (AST).
5
+ * Uses recursive descent parsing with operator precedence.
6
+ *
7
+ * Precedence (lowest to highest):
8
+ * 1. Ternary: ? :
9
+ * 2. Logical OR: ||
10
+ * 3. Logical AND: &&
11
+ * 4. Membership: in, not in
12
+ * 5. Equality: ==, !=
13
+ * 6. Comparison: <, <=, >, >=
14
+ * 7. Additive: +, -
15
+ * 8. Multiplicative: *, /, %
16
+ * 9. Unary: !, -
17
+ * 10. Postfix: . [] ()
18
+ * 11. Primary: literals, identifiers, parentheses
19
+ */
20
+ import { countAstNodes, calculateAstDepth } from "./ast.js";
21
+ import { ParseError } from "./errors.js";
22
+ import { DEFAULT_EXPRESSION_LIMITS, checkAstDepth, checkAstNodeCount, checkArrayLength, checkFunctionArgCount, } from "./limits.js";
23
+ import { tokenize } from "./tokenizer.js";
24
+ /**
25
+ * Parser for expression strings.
26
+ */
27
+ export class Parser {
28
+ constructor(tokens, source, limits = DEFAULT_EXPRESSION_LIMITS) {
29
+ this.current = 0;
30
+ this.tokens = tokens;
31
+ this.source = source;
32
+ this.limits = limits;
33
+ }
34
+ /**
35
+ * Parses the token stream into an AST.
36
+ */
37
+ parse() {
38
+ const ast = this.parseTernary();
39
+ if (!this.isAtEnd()) {
40
+ const token = this.peek();
41
+ throw new ParseError(`Unexpected token: ${token.value || token.type}`, token.position, this.source);
42
+ }
43
+ // Validate AST limits
44
+ const nodeCount = countAstNodes(ast);
45
+ checkAstNodeCount(nodeCount, this.limits);
46
+ const depth = calculateAstDepth(ast);
47
+ checkAstDepth(depth, this.limits);
48
+ return ast;
49
+ }
50
+ // ============================================================
51
+ // Token Helpers
52
+ // ============================================================
53
+ isAtEnd() {
54
+ return this.peek().type === "EOF";
55
+ }
56
+ peek() {
57
+ return this.tokens[this.current];
58
+ }
59
+ previous() {
60
+ return this.tokens[this.current - 1];
61
+ }
62
+ advance() {
63
+ if (!this.isAtEnd()) {
64
+ this.current++;
65
+ }
66
+ return this.previous();
67
+ }
68
+ check(type) {
69
+ if (this.isAtEnd())
70
+ return false;
71
+ return this.peek().type === type;
72
+ }
73
+ match(...types) {
74
+ for (const type of types) {
75
+ if (this.check(type)) {
76
+ this.advance();
77
+ return true;
78
+ }
79
+ }
80
+ return false;
81
+ }
82
+ consume(type, message) {
83
+ if (this.check(type)) {
84
+ return this.advance();
85
+ }
86
+ const token = this.peek();
87
+ throw new ParseError(message, token.position, this.source);
88
+ }
89
+ // ============================================================
90
+ // Expression Parsing (by precedence, lowest to highest)
91
+ // ============================================================
92
+ /**
93
+ * Parses ternary expressions: condition ? consequent : alternate
94
+ */
95
+ parseTernary() {
96
+ const position = this.peek().position;
97
+ let node = this.parseOr();
98
+ if (this.match("QUESTION")) {
99
+ const consequent = this.parseTernary();
100
+ this.consume("COLON", "Expected ':' in ternary expression");
101
+ const alternate = this.parseTernary();
102
+ node = {
103
+ type: "TernaryOp",
104
+ position,
105
+ condition: node,
106
+ consequent,
107
+ alternate,
108
+ };
109
+ }
110
+ return node;
111
+ }
112
+ /**
113
+ * Parses logical OR: ||
114
+ */
115
+ parseOr() {
116
+ let node = this.parseAnd();
117
+ while (this.match("OR")) {
118
+ const position = this.previous().position;
119
+ const right = this.parseAnd();
120
+ node = {
121
+ type: "BinaryOp",
122
+ position,
123
+ operator: "||",
124
+ left: node,
125
+ right,
126
+ };
127
+ }
128
+ return node;
129
+ }
130
+ /**
131
+ * Parses logical AND: &&
132
+ */
133
+ parseAnd() {
134
+ let node = this.parseEquality();
135
+ while (this.match("AND")) {
136
+ const position = this.previous().position;
137
+ const right = this.parseEquality();
138
+ node = {
139
+ type: "BinaryOp",
140
+ position,
141
+ operator: "&&",
142
+ left: node,
143
+ right,
144
+ };
145
+ }
146
+ return node;
147
+ }
148
+ /**
149
+ * Parses equality: ==, !=
150
+ */
151
+ parseEquality() {
152
+ let node = this.parseMembership();
153
+ while (this.match("EQ", "NE")) {
154
+ const operator = this.previous().type === "EQ" ? "==" : "!=";
155
+ const position = this.previous().position;
156
+ const right = this.parseMembership();
157
+ node = {
158
+ type: "BinaryOp",
159
+ position,
160
+ operator: operator,
161
+ left: node,
162
+ right,
163
+ };
164
+ }
165
+ return node;
166
+ }
167
+ /**
168
+ * Parses membership: in, not in
169
+ */
170
+ parseMembership() {
171
+ let node = this.parseComparison();
172
+ while (this.match("IN", "NOT_IN")) {
173
+ const operator = this.previous().type === "IN" ? "in" : "not in";
174
+ const position = this.previous().position;
175
+ const right = this.parseComparison();
176
+ node = {
177
+ type: "BinaryOp",
178
+ position,
179
+ operator: operator,
180
+ left: node,
181
+ right,
182
+ };
183
+ }
184
+ return node;
185
+ }
186
+ /**
187
+ * Parses comparison: <, <=, >, >=
188
+ */
189
+ parseComparison() {
190
+ let node = this.parseAdditive();
191
+ while (this.match("LT", "LE", "GT", "GE")) {
192
+ const token = this.previous();
193
+ let operator;
194
+ switch (token.type) {
195
+ case "LT":
196
+ operator = "<";
197
+ break;
198
+ case "LE":
199
+ operator = "<=";
200
+ break;
201
+ case "GT":
202
+ operator = ">";
203
+ break;
204
+ case "GE":
205
+ operator = ">=";
206
+ break;
207
+ default:
208
+ throw new ParseError(`Unexpected token: ${token.type}`, token.position, this.source);
209
+ }
210
+ const position = token.position;
211
+ const right = this.parseAdditive();
212
+ node = {
213
+ type: "BinaryOp",
214
+ position,
215
+ operator,
216
+ left: node,
217
+ right,
218
+ };
219
+ }
220
+ return node;
221
+ }
222
+ /**
223
+ * Parses additive: +, -
224
+ */
225
+ parseAdditive() {
226
+ let node = this.parseMultiplicative();
227
+ while (this.match("PLUS", "MINUS")) {
228
+ const operator = this.previous().type === "PLUS" ? "+" : "-";
229
+ const position = this.previous().position;
230
+ const right = this.parseMultiplicative();
231
+ node = {
232
+ type: "BinaryOp",
233
+ position,
234
+ operator: operator,
235
+ left: node,
236
+ right,
237
+ };
238
+ }
239
+ return node;
240
+ }
241
+ /**
242
+ * Parses multiplicative: *, /, %
243
+ */
244
+ parseMultiplicative() {
245
+ let node = this.parseUnary();
246
+ while (this.match("STAR", "SLASH", "PERCENT")) {
247
+ const token = this.previous();
248
+ let operator;
249
+ switch (token.type) {
250
+ case "STAR":
251
+ operator = "*";
252
+ break;
253
+ case "SLASH":
254
+ operator = "/";
255
+ break;
256
+ case "PERCENT":
257
+ operator = "%";
258
+ break;
259
+ default:
260
+ throw new ParseError(`Unexpected token: ${token.type}`, token.position, this.source);
261
+ }
262
+ const position = token.position;
263
+ const right = this.parseUnary();
264
+ node = {
265
+ type: "BinaryOp",
266
+ position,
267
+ operator,
268
+ left: node,
269
+ right,
270
+ };
271
+ }
272
+ return node;
273
+ }
274
+ /**
275
+ * Parses unary: !, -
276
+ */
277
+ parseUnary() {
278
+ if (this.match("NOT", "MINUS")) {
279
+ const token = this.previous();
280
+ const operator = token.type === "NOT" ? "!" : "-";
281
+ const position = token.position;
282
+ const operand = this.parseUnary();
283
+ return {
284
+ type: "UnaryOp",
285
+ position,
286
+ operator,
287
+ operand,
288
+ };
289
+ }
290
+ return this.parsePostfix();
291
+ }
292
+ /**
293
+ * Parses postfix: . [] ()
294
+ */
295
+ parsePostfix() {
296
+ let node = this.parsePrimary();
297
+ while (true) {
298
+ if (this.match("DOT")) {
299
+ const position = this.previous().position;
300
+ const propToken = this.consume("IDENTIFIER", "Expected property name after '.'");
301
+ node = {
302
+ type: "MemberAccess",
303
+ position,
304
+ object: node,
305
+ property: propToken.value,
306
+ };
307
+ }
308
+ else if (this.match("LBRACKET")) {
309
+ const position = this.previous().position;
310
+ const index = this.parseTernary();
311
+ this.consume("RBRACKET", "Expected ']' after index");
312
+ node = {
313
+ type: "IndexAccess",
314
+ position,
315
+ object: node,
316
+ index,
317
+ };
318
+ }
319
+ else if (this.match("LPAREN")) {
320
+ // Function call - node must be an identifier
321
+ if (node.type !== "Identifier") {
322
+ throw new ParseError("Only named functions can be called", node.position, this.source);
323
+ }
324
+ const position = this.previous().position;
325
+ const args = this.parseArgumentList();
326
+ checkFunctionArgCount(args.length, this.limits);
327
+ node = {
328
+ type: "FunctionCall",
329
+ position,
330
+ name: node.name,
331
+ args,
332
+ };
333
+ }
334
+ else {
335
+ break;
336
+ }
337
+ }
338
+ return node;
339
+ }
340
+ /**
341
+ * Parses function argument list (already consumed opening paren).
342
+ */
343
+ parseArgumentList() {
344
+ const args = [];
345
+ if (!this.check("RPAREN")) {
346
+ do {
347
+ args.push(this.parseTernary());
348
+ } while (this.match("COMMA"));
349
+ }
350
+ this.consume("RPAREN", "Expected ')' after function arguments");
351
+ return args;
352
+ }
353
+ /**
354
+ * Parses primary expressions: literals, identifiers, parentheses, arrays.
355
+ */
356
+ parsePrimary() {
357
+ const token = this.peek();
358
+ const position = token.position;
359
+ // Boolean literals
360
+ if (this.match("TRUE")) {
361
+ return { type: "BooleanLiteral", position, value: true };
362
+ }
363
+ if (this.match("FALSE")) {
364
+ return { type: "BooleanLiteral", position, value: false };
365
+ }
366
+ // Null literal
367
+ if (this.match("NULL")) {
368
+ return { type: "NullLiteral", position };
369
+ }
370
+ // String literal
371
+ if (this.match("STRING")) {
372
+ return {
373
+ type: "StringLiteral",
374
+ position,
375
+ value: this.previous().value,
376
+ };
377
+ }
378
+ // Number literal
379
+ if (this.match("NUMBER")) {
380
+ const value = parseFloat(this.previous().value);
381
+ if (!Number.isFinite(value)) {
382
+ throw new ParseError("Invalid number", position, this.source);
383
+ }
384
+ return { type: "NumberLiteral", position, value };
385
+ }
386
+ // Identifier
387
+ if (this.match("IDENTIFIER")) {
388
+ return {
389
+ type: "Identifier",
390
+ position,
391
+ name: this.previous().value,
392
+ };
393
+ }
394
+ // Parenthesized expression
395
+ if (this.match("LPAREN")) {
396
+ const expr = this.parseTernary();
397
+ this.consume("RPAREN", "Expected ')' after expression");
398
+ return expr;
399
+ }
400
+ // Array literal
401
+ if (this.match("LBRACKET")) {
402
+ const elements = [];
403
+ if (!this.check("RBRACKET")) {
404
+ do {
405
+ elements.push(this.parseTernary());
406
+ } while (this.match("COMMA"));
407
+ }
408
+ this.consume("RBRACKET", "Expected ']' after array elements");
409
+ checkArrayLength(elements.length, this.limits);
410
+ return { type: "ArrayLiteral", position, elements };
411
+ }
412
+ throw new ParseError(`Unexpected token: ${token.value || token.type}`, position, this.source);
413
+ }
414
+ }
415
+ /**
416
+ * Parses an expression string into an AST.
417
+ *
418
+ * @param source - The expression string to parse
419
+ * @param limits - Optional expression limits
420
+ * @returns The parsed AST
421
+ * @throws TokenizerError if tokenization fails
422
+ * @throws ParseError if parsing fails
423
+ */
424
+ export function parse(source, limits = DEFAULT_EXPRESSION_LIMITS) {
425
+ const tokens = tokenize(source, limits);
426
+ const parser = new Parser(tokens, source, limits);
427
+ return parser.parse();
428
+ }
429
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../../../src/naylence/fame/expr/parser.ts"],"names":[],"mappings":"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"}