Skip to content

Commit da10312

Browse files
brendanbondlane-formio
authored andcommitted
Merge pull request #13 from formio/FIO-9942-protected-eval-extends-default-eval-new
FIO-9942 protected eval extends default eval new
1 parent c70306a commit da10312

4 files changed

Lines changed: 61 additions & 74 deletions

File tree

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
"author": "",
2525
"license": "ISC",
2626
"devDependencies": {
27-
"@formio/js": "^5.0.1",
27+
"@formio/js": "v5.2.1-rc.13",
2828
"@typescript-eslint/eslint-plugin": "^7.10.0",
2929
"@typescript-eslint/parser": "^7.10.0",
3030
"eslint": "^9.3.0",
@@ -33,7 +33,7 @@
3333
"webpack-cli": "^5.1.4"
3434
},
3535
"peerDependencies": {
36-
"@formio/js": "^5.0.1"
36+
"@formio/js": ">=5.2.0"
3737
},
3838
"dependencies": {
3939
"@formio/js-interpreter": "1.1.0-formio.4",

src/ProtectedEvaluator.ts

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import Interpreter from '@formio/js-interpreter';
33

44
const baseEvaluator = (FormioUtils.Evaluator as any).evaluator;
55
const baseEvaluate = (FormioUtils.Evaluator as any).evaluate;
6+
const DefaultEvaluator = (FormioUtils as any).DefaultEvaluator;
67

78
export interface IEvaluator {
89
noeval?: boolean;
@@ -13,19 +14,21 @@ export interface IEvaluator {
1314

1415
const excludedVariables = ['instance', 'self', 'options'];
1516

16-
const Evaluator: IEvaluator = {
17-
noeval: true,
18-
protectedEval: true,
19-
evaluator: (func: string | any, ...params: any[]): () => any => {
20-
if (!Evaluator.protectedEval) {
17+
export class Evaluator extends DefaultEvaluator {
18+
noeval = true;
19+
protectedEval = true;
20+
21+
evaluator(func: string | any, ...params: any[]): () => any {
22+
if (!this.protectedEval) {
2123
return baseEvaluator(func, ...params);
2224
}
2325

2426
console.warn('No evaluations allowed for safe eval.');
2527
return () => undefined;
26-
},
27-
evaluate: (func: string | any, args: any, ...rest: any[]): any => {
28-
if (!Evaluator.protectedEval || typeof func !== 'string') {
28+
};
29+
30+
evaluate(func: string | any, args: any, ...rest: any[]): any {
31+
if (!this.protectedEval || typeof func !== 'string') {
2932
return baseEvaluate(func, args, ...rest);
3033
}
3134

@@ -48,7 +51,7 @@ const Evaluator: IEvaluator = {
4851
interpreter.run();
4952
const result = interpreter.getProperty(interpreter.globalObject, 'result');
5053
return interpreter.pseudoToNative(result);
51-
},
54+
};
5255
};
5356

54-
export default Evaluator;
57+
export default new Evaluator();

tsconfig.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"compilerOptions": {
3-
"target": "es5",
3+
"target": "es6",
44
"module": "commonjs",
55
"preserveConstEnums": true,
66
"outDir": "lib",

yarn.lock

Lines changed: 45 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,6 @@
22
# yarn lockfile v1
33

44

5-
"@babel/runtime@^7.9.2":
6-
version "7.27.0"
7-
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.27.0.tgz#fbee7cf97c709518ecc1f590984481d5460d4762"
8-
integrity sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==
9-
dependencies:
10-
regenerator-runtime "^0.14.0"
11-
125
"@discoveryjs/json-ext@^0.5.0":
136
version "0.5.7"
147
resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70"
@@ -87,24 +80,15 @@
8780
"@eslint/core" "^0.13.0"
8881
levn "^0.4.1"
8982

90-
"@formio/bootstrap@3.1.0":
91-
version "3.1.0"
92-
resolved "https://registry.yarnpkg.com/@formio/bootstrap/-/bootstrap-3.1.0.tgz#8af6217248f89e749421e07a2b8ba0d9d01d7d5c"
93-
integrity sha512-BaH74g+0N9Ddrp7wTn6Ej5Lk/nbKj8h5eqzA6s0I3pvqAgmqTYITlKMXhtWAESWOUA34n18rumpyZIdpB5B35g==
94-
95-
"@formio/choices.js@^10.2.1":
96-
version "10.2.1"
97-
resolved "https://registry.yarnpkg.com/@formio/choices.js/-/choices.js-10.2.1.tgz#d0f5c032d94f33152b6036f6a5bb42fcc4684e31"
98-
integrity sha512-NCE5u7jG3XGokJP16MyAbVSUptKu/mpJYAxd4PPIoLiO/l9Do5uoOQ0MgNb9qG9qABJiOX+qNRE8q8RybY/SwQ==
99-
dependencies:
100-
deepmerge "^4.2.2"
101-
fuse.js "^6.6.2"
102-
redux "^4.2.0"
83+
"@formio/bootstrap@3.1.2-rc.3":
84+
version "3.1.2-rc.3"
85+
resolved "https://registry.yarnpkg.com/@formio/bootstrap/-/bootstrap-3.1.2-rc.3.tgz#7c961ed0d2802b9114539a09dfc8a744c3445813"
86+
integrity sha512-ArSVnnu1e/wxAYbiGyHNp75lrgWQ2Ra1owN3bb0s2rC0zobNORECBF72p4ruITa0f4cKP/Ci8J09mduLFGdbvw==
10387

104-
"@formio/core@2.4.0":
105-
version "2.4.0"
106-
resolved "https://registry.yarnpkg.com/@formio/core/-/core-2.4.0.tgz#a47b01fce5018362b622f4e5c8d0ba9b2e8fe043"
107-
integrity sha512-JUEyDSQv39EfvL5EURKnSYWPz+T1Csc29WiZ+4aQNjsuskhbHOWcmHmPFrdv2JD8xct16g2bLHHne+Bowy5RDw==
88+
"@formio/core@2.5.1-rc.8":
89+
version "2.5.1-rc.8"
90+
resolved "https://registry.yarnpkg.com/@formio/core/-/core-2.5.1-rc.8.tgz#6d9ef1570f09502add875c8b6d569255604893f5"
91+
integrity sha512-jScSRX7/MWJoQ+VxfvEaAIj+SoIJAeWUp+lZ3HREvyTv+Je0241hgO06c+lLuT8yOLpu0E0oyOvqc1mBr5Wpaw==
10892
dependencies:
10993
browser-cookies "^1.2.0"
11094
core-js "^3.39.0"
@@ -125,22 +109,22 @@
125109
dependencies:
126110
acorn "^8.12.1"
127111

128-
"@formio/js@^5.0.1":
129-
version "5.1.1"
130-
resolved "https://registry.yarnpkg.com/@formio/js/-/js-5.1.1.tgz#992c32b3f64aac6d5883c85e44a414e70b8fd9de"
131-
integrity sha512-dslkDKe9ppyt3gVkQWlFcJFfdtHUvaUl7mCVdGKmk/fVGamUsH2rObLZIqHnTy4ruEr269echkILyN2l+2bfUw==
112+
"@formio/js@v5.2.1-rc.13":
113+
version "5.2.1-rc.13"
114+
resolved "https://registry.yarnpkg.com/@formio/js/-/js-5.2.1-rc.13.tgz#107c9a4f68ecb834a86baca8413f7adb2c3204c8"
115+
integrity sha512-RaUQ2Eai0zVNodkIZbCYPPYy9rsZIkqOj+KMFusiQVerG3mdd/Oe2wLlZ3ksC1smDNMVqaFKz7E9P9X9Sk5Y6Q==
132116
dependencies:
133-
"@formio/bootstrap" "3.1.0"
134-
"@formio/choices.js" "^10.2.1"
135-
"@formio/core" "2.4.0"
117+
"@formio/bootstrap" "3.1.2-rc.3"
118+
"@formio/core" "2.5.1-rc.8"
136119
"@formio/text-mask-addons" "^3.8.0-formio.4"
137120
"@formio/vanilla-text-mask" "^5.1.1-formio.1"
138121
abortcontroller-polyfill "^1.7.5"
139122
autocompleter "^8.0.4"
140123
bootstrap "^5.3.3"
141124
browser-cookies "^1.2.0"
142125
browser-md5-file "^1.1.1"
143-
compare-versions "^6.0.0-rc.2"
126+
choices.js "^11.0.6"
127+
compare-versions "^6.1.1"
144128
core-js "^3.37.1"
145129
dialog-polyfill "^0.5.6"
146130
dom-autoscroller "^2.3.4"
@@ -291,7 +275,12 @@
291275
"@types/estree" "*"
292276
"@types/json-schema" "*"
293277

294-
"@types/estree@*", "@types/estree@^1.0.6":
278+
"@types/estree@*":
279+
version "1.0.5"
280+
resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4"
281+
integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==
282+
283+
"@types/estree@^1.0.6":
295284
version "1.0.7"
296285
resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.7.tgz#4158d3105276773d5b7695cd4834b1722e4f37a8"
297286
integrity sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==
@@ -703,6 +692,13 @@ chalk@^4.0.0:
703692
ansi-styles "^4.1.0"
704693
supports-color "^7.1.0"
705694

695+
choices.js@^11.0.6:
696+
version "11.1.0"
697+
resolved "https://registry.npmjs.org/choices.js/-/choices.js-11.1.0.tgz#4fcfb5834fdf0c7d1959f0261d1bbe526a7c9222"
698+
integrity sha512-mIt0uLhedHg2ea/K2PACrVpt391vRGHuOoctPAiHcyemezwzNMxj7jOzNEk8e7EbjLh0S0sspDkSCADOKz9kcw==
699+
dependencies:
700+
fuse.js "^7.0.0"
701+
706702
chrome-trace-event@^1.0.2:
707703
version "1.0.4"
708704
resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz#05bffd7ff928465093314708c93bdfa9bd1f0f5b"
@@ -744,9 +740,9 @@ commander@^2.20.0:
744740
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
745741
integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
746742

747-
compare-versions@^6.0.0-rc.2:
743+
compare-versions@^6.1.1:
748744
version "6.1.1"
749-
resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-6.1.1.tgz#7af3cc1099ba37d244b3145a9af5201b629148a9"
745+
resolved "https://registry.npmjs.org/compare-versions/-/compare-versions-6.1.1.tgz#7af3cc1099ba37d244b3145a9af5201b629148a9"
750746
integrity sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==
751747

752748
concat-map@0.0.1:
@@ -762,11 +758,16 @@ contra@1.9.4:
762758
atoa "1.0.0"
763759
ticky "1.0.1"
764760

765-
core-js@^3.37.1, core-js@^3.39.0:
761+
core-js@^3.37.1:
766762
version "3.41.0"
767763
resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.41.0.tgz#57714dafb8c751a6095d028a7428f1fb5834a776"
768764
integrity sha512-SJ4/EHwS36QMJd6h/Rg+GyR4A5xE0FSI3eZ+iBVpfqf1x0eTSg1smWLHrA+2jQThZSh97fmSgFSU8B61nxosxA==
769765

766+
core-js@^3.39.0:
767+
version "3.45.0"
768+
resolved "https://registry.npmjs.org/core-js/-/core-js-3.45.0.tgz#556c2af44a2d9c73ea7b49504392474a9f7c947e"
769+
integrity sha512-c2KZL9lP4DjkN3hk/an4pWn5b5ZefhRJnAc42n6LJ19kSnbeRbdQZE5dSeE2LBol1OwJD3X1BQvFTAsa8ReeDA==
770+
770771
create-point-cb@^1.0.0:
771772
version "1.2.0"
772773
resolved "https://registry.yarnpkg.com/create-point-cb/-/create-point-cb-1.2.0.tgz#1bce47fc4fc01855ee12138d676b0cb2a7cbce71"
@@ -797,7 +798,7 @@ custom-event@^1.0.0:
797798

798799
dayjs@^1.11.12:
799800
version "1.11.13"
800-
resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.13.tgz#92430b0139055c3ebb60150aa13e860a4b5a366c"
801+
resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz#92430b0139055c3ebb60150aa13e860a4b5a366c"
801802
integrity sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==
802803

803804
debug@^4.3.1, debug@^4.3.2, debug@^4.3.4:
@@ -812,11 +813,6 @@ deep-is@^0.1.3:
812813
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
813814
integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
814815

815-
deepmerge@^4.2.2:
816-
version "4.3.1"
817-
resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a"
818-
integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==
819-
820816
dialog-polyfill@^0.5.6:
821817
version "0.5.6"
822818
resolved "https://registry.yarnpkg.com/dialog-polyfill/-/dialog-polyfill-0.5.6.tgz#7507b4c745a82fcee0fa07ce64d835979719599a"
@@ -863,9 +859,9 @@ dom-set@^1.0.1:
863859
iselement "^1.1.4"
864860

865861
dompurify@^3.2.4:
866-
version "3.2.5"
867-
resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.2.5.tgz#11b108656a5fb72b24d916df17a1421663d7129c"
868-
integrity sha512-mLPd29uoRe9HpvwP2TxClGQBzGXeEC/we/q+bFlmPPmj2p2Ugl3r6ATu/UU1v77DXNcehiBg9zsr1dREyA/dJQ==
862+
version "3.2.6"
863+
resolved "https://registry.npmjs.org/dompurify/-/dompurify-3.2.6.tgz#ca040a6ad2b88e2a92dc45f38c79f84a714a1cad"
864+
integrity sha512-/2GogDQlohXPZe6D6NOgQvXLPSYBqIWMnZ8zzOhn09REE4eyAzb+Hed3jhoM9OkuaJ8P6ZGTTVWQKAi8ieIzfQ==
869865
optionalDependencies:
870866
"@types/trusted-types" "^2.0.7"
871867

@@ -1143,10 +1139,10 @@ function-bind@^1.1.2:
11431139
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c"
11441140
integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
11451141

1146-
fuse.js@^6.6.2:
1147-
version "6.6.2"
1148-
resolved "https://registry.yarnpkg.com/fuse.js/-/fuse.js-6.6.2.tgz#fe463fed4b98c0226ac3da2856a415576dc9a111"
1149-
integrity sha512-cJaJkxCCxC8qIIcPBF9yGxY0W/tVZS3uEISDxhYIdtk8OL93pe+6Zj7LjCqVV4dzbqcriOZ+kQ/NE4RXZHsIGA==
1142+
fuse.js@^7.0.0:
1143+
version "7.1.0"
1144+
resolved "https://registry.npmjs.org/fuse.js/-/fuse.js-7.1.0.tgz#306228b4befeee11e05b027087c2744158527d09"
1145+
integrity sha512-trLf4SzuuUxfusZADLINj+dE8clK1frKdmqiJNb1Es75fmI5oY6X2mxLVUciLLjxqw/xr72Dhy+lER6dGd02FQ==
11501146

11511147
glob-parent@^5.1.2:
11521148
version "5.1.2"
@@ -1648,18 +1644,6 @@ rechoir@^0.8.0:
16481644
dependencies:
16491645
resolve "^1.20.0"
16501646

1651-
redux@^4.2.0:
1652-
version "4.2.1"
1653-
resolved "https://registry.yarnpkg.com/redux/-/redux-4.2.1.tgz#c08f4306826c49b5e9dc901dee0452ea8fce6197"
1654-
integrity sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==
1655-
dependencies:
1656-
"@babel/runtime" "^7.9.2"
1657-
1658-
regenerator-runtime@^0.14.0:
1659-
version "0.14.1"
1660-
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f"
1661-
integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==
1662-
16631647
require-from-string@^2.0.2:
16641648
version "2.0.2"
16651649
resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"

0 commit comments

Comments
 (0)