This package intent is to make "safe" JavaScript runtime by checking types at runtime and disallowing most of implicit coercion
In Node project add in package.json
:
"main": "dist/index.js",
"scripts": {
"prepare": "safec ./src -d ./dist --src-map true --allow-ts",
"start": "npm run prepare && node ./dist/index.js"
},
"devDependencies": {
"typescript-plugin-safescript": "^0.5.3"
},
"dependencies": {
"@redradist/module-runtime-safescript": "^0.4.1"
}
Then in your main script before any code import @redradist/module-runtime-safescript
runtime:
import "@redradist/module-runtime-safescript";
let y = 8;
...
y += "233"; // Possible error behaviour
...
The dist/index.js
will look like:
import "@redradist/module-runtime-safescript";
let y = 8;
...
y = SafeScript.add(y, "233"); // SafeScript will throw TypeError exception
...
Now you can go in your code and fix the issue:
import "@redradist/module-runtime-safescript";
let y = 8;
...
y += Number("233"); // Now it is "safe" behaviour
...
Using this SafeScript
runtime fills like Python
on V8 ;)
The Philosophy of SafeScript
:
- Allow subset of "safe" operations in
JavaScript
andTypeScript
- Do not introduce a new valid behaviour in runtime, in such way it is easier just to remove
SafeScript
runtime at anytime