json-function-engine 0.8.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 (119) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +509 -0
  3. package/dist/constants.d.ts +13 -0
  4. package/dist/constants.d.ts.map +1 -0
  5. package/dist/constants.js +18 -0
  6. package/dist/constants.js.map +1 -0
  7. package/dist/engine/Executor.d.ts +92 -0
  8. package/dist/engine/Executor.d.ts.map +1 -0
  9. package/dist/engine/Executor.js +260 -0
  10. package/dist/engine/Executor.js.map +1 -0
  11. package/dist/engine/FileLoader.d.ts +51 -0
  12. package/dist/engine/FileLoader.d.ts.map +1 -0
  13. package/dist/engine/FileLoader.js +195 -0
  14. package/dist/engine/FileLoader.js.map +1 -0
  15. package/dist/engine/Pipeline.d.ts +54 -0
  16. package/dist/engine/Pipeline.d.ts.map +1 -0
  17. package/dist/engine/Pipeline.js +91 -0
  18. package/dist/engine/Pipeline.js.map +1 -0
  19. package/dist/engine/actions/BlockAction.d.ts +3 -0
  20. package/dist/engine/actions/BlockAction.d.ts.map +1 -0
  21. package/dist/engine/actions/BlockAction.js +13 -0
  22. package/dist/engine/actions/BlockAction.js.map +1 -0
  23. package/dist/engine/actions/FlagAction.d.ts +3 -0
  24. package/dist/engine/actions/FlagAction.d.ts.map +1 -0
  25. package/dist/engine/actions/FlagAction.js +29 -0
  26. package/dist/engine/actions/FlagAction.js.map +1 -0
  27. package/dist/engine/actions/NotifyAction.d.ts +3 -0
  28. package/dist/engine/actions/NotifyAction.d.ts.map +1 -0
  29. package/dist/engine/actions/NotifyAction.js +13 -0
  30. package/dist/engine/actions/NotifyAction.js.map +1 -0
  31. package/dist/engine/actions/TransformAction.d.ts +3 -0
  32. package/dist/engine/actions/TransformAction.d.ts.map +1 -0
  33. package/dist/engine/actions/TransformAction.js +13 -0
  34. package/dist/engine/actions/TransformAction.js.map +1 -0
  35. package/dist/engine/actions/index.d.ts +5 -0
  36. package/dist/engine/actions/index.d.ts.map +1 -0
  37. package/dist/engine/actions/index.js +5 -0
  38. package/dist/engine/actions/index.js.map +1 -0
  39. package/dist/engine/conditions/ArrayCondition.d.ts +3 -0
  40. package/dist/engine/conditions/ArrayCondition.d.ts.map +1 -0
  41. package/dist/engine/conditions/ArrayCondition.js +47 -0
  42. package/dist/engine/conditions/ArrayCondition.js.map +1 -0
  43. package/dist/engine/conditions/ComparisonCondition.d.ts +3 -0
  44. package/dist/engine/conditions/ComparisonCondition.d.ts.map +1 -0
  45. package/dist/engine/conditions/ComparisonCondition.js +42 -0
  46. package/dist/engine/conditions/ComparisonCondition.js.map +1 -0
  47. package/dist/engine/conditions/CompositeCondition.d.ts +3 -0
  48. package/dist/engine/conditions/CompositeCondition.d.ts.map +1 -0
  49. package/dist/engine/conditions/CompositeCondition.js +50 -0
  50. package/dist/engine/conditions/CompositeCondition.js.map +1 -0
  51. package/dist/engine/conditions/ExistsCondition.d.ts +3 -0
  52. package/dist/engine/conditions/ExistsCondition.d.ts.map +1 -0
  53. package/dist/engine/conditions/ExistsCondition.js +14 -0
  54. package/dist/engine/conditions/ExistsCondition.js.map +1 -0
  55. package/dist/engine/conditions/MathCondition.d.ts +3 -0
  56. package/dist/engine/conditions/MathCondition.d.ts.map +1 -0
  57. package/dist/engine/conditions/MathCondition.js +30 -0
  58. package/dist/engine/conditions/MathCondition.js.map +1 -0
  59. package/dist/engine/conditions/RegexCondition.d.ts +3 -0
  60. package/dist/engine/conditions/RegexCondition.d.ts.map +1 -0
  61. package/dist/engine/conditions/RegexCondition.js +10 -0
  62. package/dist/engine/conditions/RegexCondition.js.map +1 -0
  63. package/dist/engine/conditions/helpers.d.ts +3 -0
  64. package/dist/engine/conditions/helpers.d.ts.map +1 -0
  65. package/dist/engine/conditions/helpers.js +14 -0
  66. package/dist/engine/conditions/helpers.js.map +1 -0
  67. package/dist/engine/conditions/index.d.ts +7 -0
  68. package/dist/engine/conditions/index.d.ts.map +1 -0
  69. package/dist/engine/conditions/index.js +7 -0
  70. package/dist/engine/conditions/index.js.map +1 -0
  71. package/dist/engine/engine.d.ts +151 -0
  72. package/dist/engine/engine.d.ts.map +1 -0
  73. package/dist/engine/engine.js +246 -0
  74. package/dist/engine/engine.js.map +1 -0
  75. package/dist/engine/guards.d.ts +22 -0
  76. package/dist/engine/guards.d.ts.map +1 -0
  77. package/dist/engine/guards.js +84 -0
  78. package/dist/engine/guards.js.map +1 -0
  79. package/dist/engine/registry.d.ts +23 -0
  80. package/dist/engine/registry.d.ts.map +1 -0
  81. package/dist/engine/registry.js +93 -0
  82. package/dist/engine/registry.js.map +1 -0
  83. package/dist/engine/reporters/index.d.ts +12 -0
  84. package/dist/engine/reporters/index.d.ts.map +1 -0
  85. package/dist/engine/reporters/index.js +146 -0
  86. package/dist/engine/reporters/index.js.map +1 -0
  87. package/dist/index.d.ts +21 -0
  88. package/dist/index.d.ts.map +1 -0
  89. package/dist/index.js +20 -0
  90. package/dist/index.js.map +1 -0
  91. package/dist/types/index.d.ts +204 -0
  92. package/dist/types/index.d.ts.map +1 -0
  93. package/dist/types/index.js +27 -0
  94. package/dist/types/index.js.map +1 -0
  95. package/dist/utils/cache.d.ts +17 -0
  96. package/dist/utils/cache.d.ts.map +1 -0
  97. package/dist/utils/cache.js +52 -0
  98. package/dist/utils/cache.js.map +1 -0
  99. package/dist/utils/errors.d.ts +45 -0
  100. package/dist/utils/errors.d.ts.map +1 -0
  101. package/dist/utils/errors.js +84 -0
  102. package/dist/utils/errors.js.map +1 -0
  103. package/dist/utils/factories.d.ts +23 -0
  104. package/dist/utils/factories.d.ts.map +1 -0
  105. package/dist/utils/factories.js +63 -0
  106. package/dist/utils/factories.js.map +1 -0
  107. package/dist/utils/metrics.d.ts +75 -0
  108. package/dist/utils/metrics.d.ts.map +1 -0
  109. package/dist/utils/metrics.js +99 -0
  110. package/dist/utils/metrics.js.map +1 -0
  111. package/dist/utils/regex.d.ts +33 -0
  112. package/dist/utils/regex.d.ts.map +1 -0
  113. package/dist/utils/regex.js +226 -0
  114. package/dist/utils/regex.js.map +1 -0
  115. package/dist/utils/schema.d.ts +7 -0
  116. package/dist/utils/schema.d.ts.map +1 -0
  117. package/dist/utils/schema.js +226 -0
  118. package/dist/utils/schema.js.map +1 -0
  119. package/package.json +50 -0
@@ -0,0 +1,226 @@
1
+ // JSON Schema validator (draft-07 subset)
2
+ // Zero dependencies - custom implementation for validation
3
+ import { validateRegexPattern } from './regex.js';
4
+ export function validateFunctionSet(data) {
5
+ const errors = [];
6
+ if (!data || typeof data !== 'object') {
7
+ errors.push({ path: '/', message: 'Function set must be an object' });
8
+ return errors;
9
+ }
10
+ const obj = data;
11
+ // Required: version
12
+ if (!obj.version) {
13
+ errors.push({ path: '/version', message: 'version is required' });
14
+ }
15
+ else if (obj.version !== '1.0') {
16
+ errors.push({ path: '/version', message: 'version must be "1.0"' });
17
+ }
18
+ // Required: functions array
19
+ if (!('functions' in obj)) {
20
+ errors.push({ path: '/functions', message: 'functions array is required' });
21
+ }
22
+ else {
23
+ const fns = obj.functions;
24
+ if (!Array.isArray(fns)) {
25
+ errors.push({ path: '/functions', message: 'functions must be an array' });
26
+ }
27
+ else {
28
+ fns.forEach((fn, index) => {
29
+ const fnErrors = validateFunction(fn, `/functions/${index}`);
30
+ errors.push(...fnErrors);
31
+ });
32
+ }
33
+ }
34
+ // Optional: metadata
35
+ if (obj.metadata !== undefined && (typeof obj.metadata !== 'object' || obj.metadata === null || Array.isArray(obj.metadata))) {
36
+ errors.push({ path: '/metadata', message: 'metadata must be an object' });
37
+ }
38
+ return errors;
39
+ }
40
+ function validateFunction(fn, basePath) {
41
+ const errors = [];
42
+ if (!fn || typeof fn !== 'object') {
43
+ errors.push({ path: basePath, message: 'Function must be an object' });
44
+ return errors;
45
+ }
46
+ const f = fn;
47
+ // Required: id
48
+ if (!f.id) {
49
+ errors.push({ path: `${basePath}/id`, message: 'id is required' });
50
+ }
51
+ else if (typeof f.id !== 'string') {
52
+ errors.push({ path: `${basePath}/id`, message: 'id must be a string' });
53
+ }
54
+ else if (!/^[A-Z0-9_]+$/.test(f.id)) {
55
+ errors.push({ path: `${basePath}/id`, message: 'id must be uppercase letters, numbers, and underscores only' });
56
+ }
57
+ // Required: condition
58
+ if (!f.condition) {
59
+ errors.push({ path: `${basePath}/condition`, message: 'condition is required' });
60
+ }
61
+ else {
62
+ const conditionErrors = validateCondition(f.condition, `${basePath}/condition`);
63
+ errors.push(...conditionErrors);
64
+ }
65
+ // Required: action
66
+ if (!f.action) {
67
+ errors.push({ path: `${basePath}/action`, message: 'action is required' });
68
+ }
69
+ else {
70
+ const actionErrors = validateAction(f.action, `${basePath}/action`);
71
+ errors.push(...actionErrors);
72
+ }
73
+ // Optional fields validation
74
+ if (f.enabled !== undefined && typeof f.enabled !== 'boolean') {
75
+ errors.push({ path: `${basePath}/enabled`, message: 'enabled must be a boolean' });
76
+ }
77
+ if (f.priority !== undefined && typeof f.priority !== 'number') {
78
+ errors.push({ path: `${basePath}/priority`, message: 'priority must be a number' });
79
+ }
80
+ if (f.frameworks !== undefined && (!Array.isArray(f.frameworks) || !f.frameworks.every(item => typeof item === 'string'))) {
81
+ errors.push({ path: `${basePath}/frameworks`, message: 'frameworks must be an array of strings' });
82
+ }
83
+ return errors;
84
+ }
85
+ function validateCondition(condition, basePath) {
86
+ const errors = [];
87
+ if (!condition || typeof condition !== 'object') {
88
+ errors.push({ path: basePath, message: 'Condition must be an object' });
89
+ return errors;
90
+ }
91
+ const c = condition;
92
+ if (!c.type) {
93
+ errors.push({ path: `${basePath}/type`, message: 'condition type is required' });
94
+ return errors;
95
+ }
96
+ const validTypes = ['regex', 'comparison', 'exists', 'composite', 'math', 'array'];
97
+ if (!validTypes.includes(c.type)) {
98
+ errors.push({ path: `${basePath}/type`, message: `condition type must be one of: ${validTypes.join(', ')}` });
99
+ }
100
+ switch (c.type) {
101
+ case 'regex':
102
+ if (!c.pattern) {
103
+ errors.push({ path: `${basePath}/pattern`, message: 'regex condition requires pattern' });
104
+ }
105
+ else if (typeof c.pattern !== 'string') {
106
+ errors.push({ path: `${basePath}/pattern`, message: 'pattern must be a string' });
107
+ }
108
+ // Validate regex is valid and safe (ReDoS protection)
109
+ if (c.pattern && typeof c.pattern === 'string') {
110
+ try {
111
+ // First check if it's a valid regex
112
+ new RegExp(c.pattern);
113
+ // Then validate for ReDoS patterns
114
+ validateRegexPattern(c.pattern);
115
+ }
116
+ catch (err) {
117
+ const message = err instanceof Error ? err.message : 'invalid regex pattern';
118
+ errors.push({ path: `${basePath}/pattern`, message });
119
+ }
120
+ }
121
+ if (c.fileExtensions !== undefined && (!Array.isArray(c.fileExtensions) || !c.fileExtensions.every(f => typeof f === 'string'))) {
122
+ errors.push({ path: `${basePath}/fileExtensions`, message: 'fileExtensions must be an array of strings' });
123
+ }
124
+ break;
125
+ case 'comparison': {
126
+ const validOperators = ['==', '!=', '>', '<', '>=', '<=', 'contains', 'startsWith', 'endsWith'];
127
+ if (!c.operator) {
128
+ errors.push({ path: `${basePath}/operator`, message: 'comparison condition requires operator' });
129
+ }
130
+ else if (!validOperators.includes(c.operator)) {
131
+ errors.push({ path: `${basePath}/operator`, message: `operator must be one of: ${validOperators.join(', ')}` });
132
+ }
133
+ if (!c.field) {
134
+ errors.push({ path: `${basePath}/field`, message: 'comparison condition requires field' });
135
+ }
136
+ break;
137
+ }
138
+ case 'exists':
139
+ if (!c.field) {
140
+ errors.push({ path: `${basePath}/field`, message: 'exists condition requires field' });
141
+ }
142
+ break;
143
+ case 'composite': {
144
+ const validCompositeOps = ['AND', 'OR', 'NOT'];
145
+ if (!c.operator) {
146
+ errors.push({ path: `${basePath}/operator`, message: 'composite condition requires operator' });
147
+ }
148
+ else if (!validCompositeOps.includes(c.operator)) {
149
+ errors.push({ path: `${basePath}/operator`, message: `operator must be one of: ${validCompositeOps.join(', ')}` });
150
+ }
151
+ if (!c.conditions || !Array.isArray(c.conditions)) {
152
+ errors.push({ path: `${basePath}/conditions`, message: 'composite condition requires conditions array' });
153
+ }
154
+ else {
155
+ c.conditions.forEach((cond, index) => {
156
+ const condErrors = validateCondition(cond, `${basePath}/conditions/${index}`);
157
+ errors.push(...condErrors);
158
+ });
159
+ }
160
+ break;
161
+ }
162
+ case 'math':
163
+ case 'array':
164
+ // Will be validated when implemented
165
+ break;
166
+ }
167
+ return errors;
168
+ }
169
+ function validateAction(action, basePath) {
170
+ const errors = [];
171
+ if (!action || typeof action !== 'object') {
172
+ errors.push({ path: basePath, message: 'Action must be an object' });
173
+ return errors;
174
+ }
175
+ const a = action;
176
+ if (!a.type) {
177
+ errors.push({ path: `${basePath}/type`, message: 'action type is required' });
178
+ return errors;
179
+ }
180
+ const validTypes = ['flag', 'block', 'transform', 'notify'];
181
+ if (!validTypes.includes(a.type)) {
182
+ errors.push({ path: `${basePath}/type`, message: `action type must be one of: ${validTypes.join(', ')}` });
183
+ }
184
+ switch (a.type) {
185
+ case 'flag':
186
+ if (!a.severity) {
187
+ errors.push({ path: `${basePath}/severity`, message: 'flag action requires severity' });
188
+ }
189
+ else {
190
+ const validSeverities = ['critical', 'high', 'medium', 'low', 'info'];
191
+ if (!validSeverities.includes(a.severity)) {
192
+ errors.push({ path: `${basePath}/severity`, message: `severity must be one of: ${validSeverities.join(', ')}` });
193
+ }
194
+ }
195
+ if (!a.message) {
196
+ errors.push({ path: `${basePath}/message`, message: 'flag action requires message' });
197
+ }
198
+ break;
199
+ case 'block':
200
+ if (!a.message) {
201
+ errors.push({ path: `${basePath}/message`, message: 'block action requires message' });
202
+ }
203
+ if (a.severity !== undefined) {
204
+ const validSeverities = ['critical', 'high', 'medium', 'low', 'info'];
205
+ if (!validSeverities.includes(a.severity)) {
206
+ errors.push({ path: `${basePath}/severity`, message: `severity must be one of: ${validSeverities.join(', ')}` });
207
+ }
208
+ }
209
+ break;
210
+ case 'transform':
211
+ if (!a.field) {
212
+ errors.push({ path: `${basePath}/field`, message: 'transform action requires field' });
213
+ }
214
+ if (!a.transformation) {
215
+ errors.push({ path: `${basePath}/transformation`, message: 'transform action requires transformation' });
216
+ }
217
+ break;
218
+ case 'notify':
219
+ if (!a.channel) {
220
+ errors.push({ path: `${basePath}/channel`, message: 'notify action requires channel' });
221
+ }
222
+ break;
223
+ }
224
+ return errors;
225
+ }
226
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/utils/schema.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,50 @@
1
+ {
2
+ "name": "json-function-engine",
3
+ "version": "0.8.0",
4
+ "description": "Standalone JSON function engine for executing functions defined in JSON configuration",
5
+ "type": "module",
6
+ "main": "./dist/index.cjs",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "import": "./dist/index.js",
12
+ "require": "./dist/index.cjs",
13
+ "types": "./dist/index.d.ts"
14
+ }
15
+ },
16
+ "files": [
17
+ "dist"
18
+ ],
19
+ "keywords": [
20
+ "json",
21
+ "functions",
22
+ "engine",
23
+ "linter",
24
+ "validator",
25
+ "scanner"
26
+ ],
27
+ "author": "",
28
+ "license": "MIT",
29
+ "devDependencies": {
30
+ "@types/node": "^20.10.0",
31
+ "@typescript-eslint/eslint-plugin": "^6.19.0",
32
+ "@typescript-eslint/parser": "^6.19.0",
33
+ "@vitest/coverage-v8": "^4.1.0",
34
+ "attune": "^0.8.0",
35
+ "eslint": "^8.56.0",
36
+ "typescript": "^5.3.0",
37
+ "vite": "^8.0.0",
38
+ "vitest": "^4.1.0"
39
+ },
40
+ "scripts": {
41
+ "dev": "tsc --watch",
42
+ "build": "tsc",
43
+ "build:types": "tsc --declaration --declarationMap",
44
+ "test": "vitest run",
45
+ "test:coverage": "vitest run --coverage",
46
+ "lint": "eslint src --ext .ts --fix",
47
+ "lint:view": "eslint src --ext .ts",
48
+ "all": "eslint src --ext .ts && tsc --declaration --declarationMap && vitest run --coverage"
49
+ }
50
+ }