{"versions":{"0.3.0":{"name":"@n8n/expression-runtime","version":"0.3.0","description":"Secure, isolated expression evaluation runtime for n8n","main":"dist/index.js","types":"dist/index.d.ts","keywords":["n8n","expression","evaluation","isolated-vm","web-worker","security"],"license":"SEE LICENSE IN LICENSE.md","dependencies":{"isolated-vm":"^6.0.2","js-base64":"3.7.2","jssha":"3.3.1","lodash":"4.17.23","luxon":"3.7.2","md5":"2.3.0","title-case":"3.0.3","transliteration":"2.3.5"},"devDependencies":{"@types/lodash":"4.17.17","@types/luxon":"3.2.0","@types/md5":"^2.3.5","typescript":"5.9.2","vitest":"^3.1.3"},"homepage":"https://n8n.io","author":{"name":"Jan Oberhauser","email":"jan@n8n.io"},"repository":{"type":"git","url":"git+https://github.com/n8n-io/n8n.git"},"scripts":{"build":"tsc -p tsconfig.build.json && pnpm build:runtime","build:runtime":"node esbuild.config.js","test":"vitest run","test:dev":"vitest --watch --silent false","typecheck":"tsc --noEmit"},"_id":"@n8n/expression-runtime@0.3.0","bugs":{"url":"https://github.com/n8n-io/n8n/issues"},"_integrity":"sha512-KKHbCvTyCFP/j2l22V7cJgCufE1eVo4Ww/9CQvLXBXWE/pU7iu+9kO+pxCth3uoQhlXjZNuJMxn1qSiQcIKRRA==","_resolved":"/tmp/f2b8ac913e859775a015510211576255/n8n-expression-runtime-0.3.0.tgz","_from":"file:n8n-expression-runtime-0.3.0.tgz","_nodeVersion":"24.13.1","_npmVersion":"11.8.0","dist":{"integrity":"sha512-KKHbCvTyCFP/j2l22V7cJgCufE1eVo4Ww/9CQvLXBXWE/pU7iu+9kO+pxCth3uoQhlXjZNuJMxn1qSiQcIKRRA==","shasum":"76753eb0e21fafee9478a54ec470621ac4716f0d","tarball":"http://123.232.10.234:8212/nexus/content/repositories/npm-private/@n8n/expression-runtime/-/expression-runtime-0.3.0.tgz","fileCount":90,"unpackedSize":4144034,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@n8n%2fexpression-runtime@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQC7rHMazNZd+vKE0Y8DpgS7ZQrwAOlV83hpfEUj42kgpAIhALETj0WKbcFjxwMGwWEU6B5EjclahMc5LTdCsDVzND5j"}],"size":937346},"_npmUser":{"name":"anonymous","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d58bf7db-6e01-498f-94b7-d5a9aa342328"}},"directories":{},"maintainers":[{"name":"anonymous","email":"matias.huhta@n8n.io"},{"name":"anonymous","email":"tomi+npm@n8n.io"},{"name":"anonymous","email":"jan@n8n.io"},{"name":"anonymous","email":"cornelius.suermann+npm@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/expression-runtime_0.3.0_1772462320489_0.02795737175465196"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2026-03-02T14:38:40.683Z","publish_time":1772462320683,"_source_registry_name":"default","contributors":[]},"0.2.0":{"name":"@n8n/expression-runtime","version":"0.2.0","keywords":["n8n","expression","evaluation","isolated-vm","web-worker","security"],"license":"SEE LICENSE IN LICENSE.md","_id":"@n8n/expression-runtime@0.2.0","maintainers":[{"name":"anonymous","email":"matias.huhta@n8n.io"},{"name":"anonymous","email":"tomi+npm@n8n.io"},{"name":"anonymous","email":"jan@n8n.io"},{"name":"anonymous","email":"cornelius.suermann+npm@gmail.com"}],"dist":{"shasum":"1e007823c0e4c3d8c2d091fed8dc4b6ef5e2abb6","tarball":"http://123.232.10.234:8212/nexus/content/repositories/npm-private/@n8n/expression-runtime/-/expression-runtime-0.2.0.tgz","fileCount":25,"integrity":"sha512-cX0ox7SRCTG4WXUxEd1SMGXw3J37oojuAmkpceIL8NAO+QveOqQ1Qsw5rwskz3y+2HINpdE4s6Rm2yrsBU7wAQ==","signatures":[{"sig":"MEYCIQCJh6ZzJWgzvxL93BxFszNw0c3pD60pg6capt0HYYJTPAIhAMrcMO9i89GZDIuW1z0oTHbNvQ+yygcidtud+gZxawqH","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":128011,"size":35194},"main":"dist/index.js","_from":"file:n8n-expression-runtime-0.2.0.tgz","types":"dist/index.d.ts","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","test:dev":"vitest --watch --silent false","typecheck":"tsc --noEmit"},"_npmUser":{"name":"anonymous","email":"matias.huhta@n8n.io"},"_resolved":"/private/var/folders/n3/zw8yxr8j2qn_qkh82rn0xphr0000gn/T/b74699d274d8c5604aef4f1bf8006a1c/n8n-expression-runtime-0.2.0.tgz","_integrity":"sha512-cX0ox7SRCTG4WXUxEd1SMGXw3J37oojuAmkpceIL8NAO+QveOqQ1Qsw5rwskz3y+2HINpdE4s6Rm2yrsBU7wAQ==","_npmVersion":"11.6.2","description":"Secure, isolated expression evaluation runtime for n8n","directories":{},"_nodeVersion":"24.13.0","dependencies":{"md5":"2.3.0","jssha":"3.3.1","luxon":"3.7.2","lodash":"4.17.23","js-base64":"3.7.2","title-case":"3.0.3","transliteration":"2.3.5"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.1.3","@types/md5":"^2.3.5","typescript":"5.9.2","@types/luxon":"3.2.0","@types/lodash":"4.17.17"},"_npmOperationalInternal":{"tmp":"tmp/expression-runtime_0.2.0_1771867247480_0.733820596176308","host":"s3://npm-registry-packages-npm-production"},"_cnpmcore_publish_time":"2026-02-23T17:20:47.633Z","publish_time":1771867247633,"_source_registry_name":"default","contributors":[]},"0.4.0":{"name":"@n8n/expression-runtime","version":"0.4.0","description":"Secure, isolated expression evaluation runtime for n8n","main":"dist/cjs/index.js","module":"dist/esm/index.js","types":"dist/esm/index.d.ts","exports":{".":{"types":"./dist/esm/index.d.ts","import":"./dist/esm/index.js","require":"./dist/cjs/index.js"},"./*":"./*"},"keywords":["n8n","expression","evaluation","isolated-vm","web-worker","security"],"license":"SEE LICENSE IN LICENSE.md","dependencies":{"@n8n/tournament":"1.0.6","isolated-vm":"^6.0.2","js-base64":"3.7.2","jssha":"3.3.1","lodash":"4.17.23","luxon":"3.7.2","md5":"2.3.0","title-case":"3.0.3","transliteration":"2.3.5"},"devDependencies":{"@types/lodash":"4.17.17","@types/luxon":"3.2.0","@types/md5":"^2.3.5","typescript":"5.9.2","vitest":"^3.1.3","@n8n/typescript-config":"1.3.0"},"homepage":"https://n8n.io","author":{"name":"Jan Oberhauser","email":"jan@n8n.io"},"repository":{"type":"git","url":"git+https://github.com/n8n-io/n8n.git"},"scripts":{"build":"tsc --build tsconfig.build.esm.json tsconfig.build.cjs.json && pnpm build:runtime","build:runtime":"node esbuild.config.js","test":"vitest run","test:dev":"vitest --watch --silent false","typecheck":"tsc --noEmit"},"_id":"@n8n/expression-runtime@0.4.0","bugs":{"url":"https://github.com/n8n-io/n8n/issues"},"_integrity":"sha512-KYXTedMMqrLEzkcVhv8jCHyg/34RgI0wwDNL3Sc0QhXkNRZnBrjRjbs2d9ZrJKj1OTzj46Ozp0iEfmJYnOW1Ow==","_resolved":"/tmp/1b0aa478fa51b3acec486805849c0d92/n8n-expression-runtime-0.4.0.tgz","_from":"file:n8n-expression-runtime-0.4.0.tgz","_nodeVersion":"24.13.1","_npmVersion":"11.8.0","dist":{"integrity":"sha512-KYXTedMMqrLEzkcVhv8jCHyg/34RgI0wwDNL3Sc0QhXkNRZnBrjRjbs2d9ZrJKj1OTzj46Ozp0iEfmJYnOW1Ow==","shasum":"38a125349c4379f65f1a318f242dd74a14f2a25f","tarball":"http://123.232.10.234:8212/nexus/content/repositories/npm-private/@n8n/expression-runtime/-/expression-runtime-0.4.0.tgz","fileCount":179,"unpackedSize":4555070,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@n8n%2fexpression-runtime@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDOLEYxLQffxXhVR6CWc/h7FYoomz4ReRCgzDa0KLgwVgIhAMAgzWwgBokTIxEQg3GCT2gJGYUgSzA5AubJF+EMjQ+7"}],"size":994485},"_npmUser":{"name":"anonymous","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d58bf7db-6e01-498f-94b7-d5a9aa342328"}},"directories":{},"maintainers":[{"name":"anonymous","email":"matias.huhta@n8n.io"},{"name":"anonymous","email":"tomi+npm@n8n.io"},{"name":"anonymous","email":"jan@n8n.io"},{"name":"anonymous","email":"cornelius.suermann+npm@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/expression-runtime_0.4.0_1773071977809_0.6244186908657494"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2026-03-09T15:59:38.083Z","publish_time":1773071978083,"_source_registry_name":"default","contributors":[]},"0.5.0":{"name":"@n8n/expression-runtime","version":"0.5.0","description":"Secure, isolated expression evaluation runtime for n8n","main":"dist/cjs/index.js","module":"dist/esm/index.js","types":"dist/esm/index.d.ts","exports":{".":{"types":"./dist/esm/index.d.ts","import":"./dist/esm/index.js","require":"./dist/cjs/index.js"},"./*":"./*"},"keywords":["n8n","expression","evaluation","isolated-vm","web-worker","security"],"license":"SEE LICENSE IN LICENSE.md","dependencies":{"@n8n/tournament":"1.0.6","isolated-vm":"^6.0.2","js-base64":"3.7.2","jssha":"3.3.1","lodash":"4.17.23","luxon":"3.7.2","md5":"2.3.0","title-case":"3.0.3","transliteration":"2.3.5"},"devDependencies":{"@types/lodash":"4.17.17","@types/luxon":"3.2.0","@types/md5":"^2.3.5","typescript":"5.9.2","vitest":"^3.1.3","@n8n/typescript-config":"1.3.0"},"homepage":"https://n8n.io","author":{"name":"Jan Oberhauser","email":"jan@n8n.io"},"repository":{"type":"git","url":"git+https://github.com/n8n-io/n8n.git"},"scripts":{"build":"tsc --build tsconfig.build.esm.json tsconfig.build.cjs.json && pnpm build:runtime","build:runtime":"node esbuild.config.js","test":"vitest run","test:dev":"vitest --watch --silent false","typecheck":"tsc --noEmit"},"_id":"@n8n/expression-runtime@0.5.0","bugs":{"url":"https://github.com/n8n-io/n8n/issues"},"_integrity":"sha512-DqkF79FyuljdjlSz1i6PfbrQ47w5U/fIqjoyAbRVxr+YatiM3RAe0zhfQ1ur1lV5QTq0BHnY8zsfFQ+DIItPhA==","_resolved":"/tmp/b3550b61ca48ea9a01aef7909e0b97f6/n8n-expression-runtime-0.5.0.tgz","_from":"file:n8n-expression-runtime-0.5.0.tgz","_nodeVersion":"24.13.1","_npmVersion":"11.8.0","dist":{"integrity":"sha512-DqkF79FyuljdjlSz1i6PfbrQ47w5U/fIqjoyAbRVxr+YatiM3RAe0zhfQ1ur1lV5QTq0BHnY8zsfFQ+DIItPhA==","shasum":"20d3de353508f6e68c6fdf1a469810586197db48","tarball":"http://123.232.10.234:8212/nexus/content/repositories/npm-private/@n8n/expression-runtime/-/expression-runtime-0.5.0.tgz","fileCount":195,"unpackedSize":4660219,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@n8n%2fexpression-runtime@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIFPIUKnHDkxi3GhjExjHBcw0d6Z83qP0UI7ETKbW1X/LAiA/6O9lu9RxSdC03TbWKZW/H+3P1NSBHKtLwO2Wf0ebTw=="}],"size":1021465},"_npmUser":{"name":"anonymous","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d58bf7db-6e01-498f-94b7-d5a9aa342328"}},"directories":{},"maintainers":[{"name":"anonymous","email":"matias.huhta@n8n.io"},{"name":"anonymous","email":"tomi+npm@n8n.io"},{"name":"anonymous","email":"jan@n8n.io"},{"name":"anonymous","email":"cornelius.suermann+npm@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/expression-runtime_0.5.0_1773669729000_0.4393575550747544"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2026-03-16T14:02:09.276Z","publish_time":1773669729276,"_source_registry_name":"default","contributors":[]},"0.6.0":{"name":"@n8n/expression-runtime","version":"0.6.0","description":"Secure, isolated expression evaluation runtime for n8n","main":"dist/cjs/index.js","module":"dist/esm/index.js","types":"dist/esm/index.d.ts","exports":{".":{"types":"./dist/esm/index.d.ts","import":"./dist/esm/index.js","require":"./dist/cjs/index.js"},"./*":"./*"},"keywords":["n8n","expression","evaluation","isolated-vm","web-worker","security"],"license":"SEE LICENSE IN LICENSE.md","dependencies":{"@n8n/tournament":"1.0.6","isolated-vm":"^6.0.2","js-base64":"3.7.2","jssha":"3.3.1","lodash":"4.17.23","luxon":"3.7.2","md5":"2.3.0","title-case":"3.0.3","transliteration":"2.3.5"},"devDependencies":{"@types/lodash":"4.17.17","@types/luxon":"3.2.0","@types/md5":"^2.3.5","typescript":"5.9.2","vitest":"^3.1.3","@n8n/typescript-config":"1.3.0"},"homepage":"https://n8n.io","author":{"name":"Jan Oberhauser","email":"jan@n8n.io"},"repository":{"type":"git","url":"git+https://github.com/n8n-io/n8n.git"},"scripts":{"build":"tsc --build tsconfig.build.esm.json tsconfig.build.cjs.json && pnpm build:runtime","build:runtime":"node esbuild.config.js","test":"vitest run","test:dev":"vitest --watch --silent false","typecheck":"tsc --noEmit"},"_id":"@n8n/expression-runtime@0.6.0","bugs":{"url":"https://github.com/n8n-io/n8n/issues"},"_integrity":"sha512-oHoqBqkKFP2YL6F1Jk4afl/q9+nW2tQ2dWCzSRjn+cIReq6ByGRQ+eBWst+/GXzrNDbJdsk53+PFk2lZADHN6g==","_resolved":"/tmp/57514eef0e6a92d492e53c21b5d8ae46/n8n-expression-runtime-0.6.0.tgz","_from":"file:n8n-expression-runtime-0.6.0.tgz","_nodeVersion":"24.13.1","_npmVersion":"11.8.0","dist":{"integrity":"sha512-oHoqBqkKFP2YL6F1Jk4afl/q9+nW2tQ2dWCzSRjn+cIReq6ByGRQ+eBWst+/GXzrNDbJdsk53+PFk2lZADHN6g==","shasum":"96e80f1ac1cff2e7d0e07b91f5cdd76b7f6b247c","tarball":"http://123.232.10.234:8212/nexus/content/repositories/npm-private/@n8n/expression-runtime/-/expression-runtime-0.6.0.tgz","fileCount":195,"unpackedSize":4715211,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@n8n%2fexpression-runtime@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIGqcnu+4y4ZPNxMawGKjqUjqkHv+t5SeMU9nmBQQb2l4AiBxDuTUtm+zp7XojaF+Jxqpfg6gjjRGEAoZ2sy2rApf0Q=="}],"size":1030906},"_npmUser":{"name":"anonymous","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d58bf7db-6e01-498f-94b7-d5a9aa342328"}},"directories":{},"maintainers":[{"name":"anonymous","email":"matias.huhta@n8n.io"},{"name":"anonymous","email":"tomi+npm@n8n.io"},{"name":"anonymous","email":"jan@n8n.io"},{"name":"anonymous","email":"cornelius.suermann+npm@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/expression-runtime_0.6.0_1774343210880_0.7570303547199635"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2026-03-24T09:06:51.108Z","publish_time":1774343211108,"_source_registry_name":"default","contributors":[]},"0.7.0":{"name":"@n8n/expression-runtime","version":"0.7.0","description":"Secure, isolated expression evaluation runtime for n8n","main":"dist/cjs/index.js","module":"dist/esm/index.js","types":"dist/esm/index.d.ts","exports":{".":{"types":"./dist/esm/index.d.ts","import":"./dist/esm/index.js","require":"./dist/cjs/index.js"},"./*":"./*"},"keywords":["n8n","expression","evaluation","isolated-vm","web-worker","security"],"license":"SEE LICENSE IN LICENSE.md","dependencies":{"@n8n/tournament":"1.0.6","isolated-vm":"^6.0.2","js-base64":"3.7.2","jssha":"3.3.1","lodash":"4.17.23","luxon":"3.7.2","md5":"2.3.0","title-case":"3.0.3","transliteration":"2.3.5"},"devDependencies":{"@types/lodash":"4.17.17","@types/luxon":"3.2.0","@types/md5":"^2.3.5","typescript":"5.9.2","vitest":"^3.1.3","@n8n/typescript-config":"1.3.0"},"homepage":"https://n8n.io","author":{"name":"Jan Oberhauser","email":"jan@n8n.io"},"repository":{"type":"git","url":"git+https://github.com/n8n-io/n8n.git"},"scripts":{"build":"tsc --build tsconfig.build.esm.json tsconfig.build.cjs.json && pnpm build:runtime","build:runtime":"node esbuild.config.js","test":"vitest run","test:dev":"vitest --watch --silent false","typecheck":"tsc --noEmit"},"readmeFilename":"README.md","_id":"@n8n/expression-runtime@0.7.0","bugs":{"url":"https://github.com/n8n-io/n8n/issues"},"_integrity":"sha512-AglMfCgAq/YK4Cgc4ocmmoFJY/B0oVxHlbmO0ZDQAX+jD2tK2bWspbD1ch31IVrfuorVwyJAhO87by085qZcHg==","_resolved":"/tmp/d6a8766ea1c616b5ee2f3e50b95e1b4e/n8n-expression-runtime-0.7.0.tgz","_from":"file:n8n-expression-runtime-0.7.0.tgz","_nodeVersion":"24.13.1","_npmVersion":"11.8.0","dist":{"integrity":"sha512-AglMfCgAq/YK4Cgc4ocmmoFJY/B0oVxHlbmO0ZDQAX+jD2tK2bWspbD1ch31IVrfuorVwyJAhO87by085qZcHg==","shasum":"d3252e25ddbbd4f39ef4d9b86001520dd5fb26cf","tarball":"http://123.232.10.234:8212/nexus/content/repositories/npm-private/@n8n/expression-runtime/-/expression-runtime-0.7.0.tgz","fileCount":203,"unpackedSize":4724962,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@n8n%2fexpression-runtime@0.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIHK5tUE9cuarkN4CJkbivwXSnKN0S7eTbD7Ty5PSV57vAiB3G6JCGkhrzGHxLa4pfgyt7NGNyZMPN97jpJ2U6aJxIw=="}],"size":1032442},"_npmUser":{"name":"anonymous","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d58bf7db-6e01-498f-94b7-d5a9aa342328"}},"directories":{},"maintainers":[{"name":"anonymous","email":"matias.huhta@n8n.io"},{"name":"anonymous","email":"tomi+npm@n8n.io"},{"name":"anonymous","email":"jan@n8n.io"},{"name":"anonymous","email":"cornelius.suermann+npm@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/expression-runtime_0.7.0_1774885793829_0.985126830458773"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2026-03-30T15:49:54.074Z","publish_time":1774885794074,"_source_registry_name":"default","contributors":[]},"0.8.0":{"name":"@n8n/expression-runtime","version":"0.8.0","description":"Secure, isolated expression evaluation runtime for n8n","main":"dist/cjs/index.js","module":"dist/esm/index.js","types":"dist/esm/index.d.ts","exports":{".":{"types":"./dist/esm/index.d.ts","import":"./dist/esm/index.js","require":"./dist/cjs/index.js"},"./*":"./*"},"keywords":["n8n","expression","evaluation","isolated-vm","web-worker","security"],"license":"SEE LICENSE IN LICENSE.md","dependencies":{"@n8n/tournament":"1.0.6","isolated-vm":"^6.0.2","js-base64":"3.7.2","jssha":"3.3.1","lodash":"4.17.23","luxon":"3.7.2","md5":"2.3.0","title-case":"3.0.3","transliteration":"2.3.5"},"devDependencies":{"@types/lodash":"4.17.17","@types/luxon":"3.2.0","@types/md5":"^2.3.5","typescript":"6.0.2","vitest":"^4.1.1","@n8n/typescript-config":"1.4.0","@n8n/vitest-config":"1.9.0"},"homepage":"https://n8n.io","author":{"name":"Jan Oberhauser","email":"jan@n8n.io"},"repository":{"type":"git","url":"git+https://github.com/n8n-io/n8n.git"},"scripts":{"build":"tsc --build tsconfig.build.esm.json tsconfig.build.cjs.json && pnpm build:runtime","build:runtime":"node esbuild.config.js","test":"vitest run","test:unit":"vitest run","test:dev":"vitest --watch --silent false","typecheck":"tsc --noEmit"},"readmeFilename":"README.md","_id":"@n8n/expression-runtime@0.8.0","bugs":{"url":"https://github.com/n8n-io/n8n/issues"},"_integrity":"sha512-SnBLoLsrGUCS9cVrF20UuSyKcMv+y6Clc4+EA9zLjX85S0GPwOAdApUVSsi81ejPAqMlm42TW1L6r7NpcK/ztQ==","_resolved":"/tmp/073469a2c14ede0cf7d22f38a00fba73/n8n-expression-runtime-0.8.0.tgz","_from":"file:n8n-expression-runtime-0.8.0.tgz","_nodeVersion":"24.14.1","_npmVersion":"11.11.0","dist":{"integrity":"sha512-SnBLoLsrGUCS9cVrF20UuSyKcMv+y6Clc4+EA9zLjX85S0GPwOAdApUVSsi81ejPAqMlm42TW1L6r7NpcK/ztQ==","shasum":"61e1eee1b3089ef794bf92e5616ab311e6dca729","tarball":"http://123.232.10.234:8212/nexus/content/repositories/npm-private/@n8n/expression-runtime/-/expression-runtime-0.8.0.tgz","fileCount":211,"unpackedSize":4766254,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@n8n%2fexpression-runtime@0.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCujoaeZ33nfEbMDBh+YCsIJdIym2Akps03XNdzo7lBCwIgclCsLhz7Vi3uTs/Rtoj1WNLz/pOXV8IH1xiFdpHU/3o="}],"size":1039822},"_npmUser":{"name":"anonymous","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d58bf7db-6e01-498f-94b7-d5a9aa342328"}},"directories":{},"maintainers":[{"name":"anonymous","email":"matias.huhta@n8n.io"},{"name":"anonymous","email":"tomi+npm@n8n.io"},{"name":"anonymous","email":"jan@n8n.io"},{"name":"anonymous","email":"cornelius.suermann+npm@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/expression-runtime_0.8.0_1775538075655_0.27594551988979865"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2026-04-07T05:01:15.855Z","publish_time":1775538075855,"_source_registry_name":"default","contributors":[]},"0.9.0":{"name":"@n8n/expression-runtime","version":"0.9.0","description":"Secure, isolated expression evaluation runtime for n8n","main":"dist/cjs/index.js","module":"dist/esm/index.js","types":"dist/esm/index.d.ts","exports":{".":{"types":"./dist/esm/index.d.ts","import":"./dist/esm/index.js","require":"./dist/cjs/index.js"},"./*":"./*"},"keywords":["n8n","expression","evaluation","isolated-vm","web-worker","security"],"license":"SEE LICENSE IN LICENSE.md","dependencies":{"@n8n/tournament":"1.0.6","isolated-vm":"^6.0.2","js-base64":"3.7.8","jssha":"3.3.1","lodash":"4.18.1","luxon":"3.7.2","md5":"2.3.0","title-case":"3.0.3","transliteration":"2.3.5","@n8n/errors":"0.7.0"},"devDependencies":{"@types/lodash":"4.17.17","@types/luxon":"3.2.0","@types/md5":"^2.3.5","typescript":"6.0.2","vitest":"^4.1.1","@n8n/typescript-config":"1.4.0","@n8n/vitest-config":"1.9.0"},"homepage":"https://n8n.io","author":{"name":"Jan Oberhauser","email":"jan@n8n.io"},"repository":{"type":"git","url":"git+https://github.com/n8n-io/n8n.git"},"scripts":{"build":"tsc --build tsconfig.build.esm.json tsconfig.build.cjs.json && pnpm build:runtime","build:runtime":"node esbuild.config.js","test":"vitest run","test:unit":"vitest run","test:dev":"vitest --watch --silent false","typecheck":"tsc --noEmit"},"readmeFilename":"README.md","_id":"@n8n/expression-runtime@0.9.0","bugs":{"url":"https://github.com/n8n-io/n8n/issues"},"_integrity":"sha512-GfNiNnr96MxWnSs8fzMgDH5OlVjFMOIodUOtjORqaEvQEKUy5E8AE0VVLmLGmFHQgcJw/H8uP3OT7Iv1POb/tQ==","_resolved":"/tmp/ead1c7bc080cdb77692f32a495027591/n8n-expression-runtime-0.9.0.tgz","_from":"file:n8n-expression-runtime-0.9.0.tgz","_nodeVersion":"24.14.1","_npmVersion":"11.11.0","dist":{"integrity":"sha512-GfNiNnr96MxWnSs8fzMgDH5OlVjFMOIodUOtjORqaEvQEKUy5E8AE0VVLmLGmFHQgcJw/H8uP3OT7Iv1POb/tQ==","shasum":"52bb8ec5a051a6031ffd924344293686b6c5e34c","tarball":"http://123.232.10.234:8212/nexus/content/repositories/npm-private/@n8n/expression-runtime/-/expression-runtime-0.9.0.tgz","fileCount":211,"unpackedSize":5052031,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@n8n%2fexpression-runtime@0.9.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCHzSh1aou+dN4Wyh1Ztw2YylCOrfaQoH+C/bmKK7omPsCIQCTJuF0wixkI4+gY+6OHpiERlmB1JfF4ZCli9V0SaBBkw=="}],"size":1097819},"_npmUser":{"name":"anonymous","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d58bf7db-6e01-498f-94b7-d5a9aa342328"}},"directories":{},"maintainers":[{"name":"anonymous","email":"matias.huhta@n8n.io"},{"name":"anonymous","email":"tomi+npm@n8n.io"},{"name":"anonymous","email":"jan@n8n.io"},{"name":"anonymous","email":"cornelius.suermann+npm@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/expression-runtime_0.9.0_1776089245959_0.28035543740977276"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2026-04-13T14:07:26.230Z","publish_time":1776089246230,"_source_registry_name":"default","contributors":[]},"0.10.0":{"name":"@n8n/expression-runtime","version":"0.10.0","description":"Secure, isolated expression evaluation runtime for n8n","main":"dist/cjs/index.js","module":"dist/esm/index.js","types":"dist/esm/index.d.ts","exports":{".":{"types":"./dist/esm/index.d.ts","import":"./dist/esm/index.js","require":"./dist/cjs/index.js"},"./*":"./*"},"keywords":["n8n","expression","evaluation","isolated-vm","web-worker","security"],"license":"SEE LICENSE IN LICENSE.md","dependencies":{"@n8n/tournament":"1.0.6","isolated-vm":"^6.0.2","js-base64":"3.7.8","jssha":"3.3.1","lodash":"4.18.1","luxon":"3.7.2","md5":"2.3.0","title-case":"3.0.3","transliteration":"2.3.5","@n8n/errors":"0.7.0"},"devDependencies":{"@types/lodash":"4.17.17","@types/luxon":"3.2.0","@types/md5":"^2.3.5","typescript":"6.0.2","vitest":"^4.1.1","@n8n/typescript-config":"1.4.0","@n8n/vitest-config":"1.9.0"},"homepage":"https://n8n.io","author":{"name":"Jan Oberhauser","email":"jan@n8n.io"},"repository":{"type":"git","url":"git+https://github.com/n8n-io/n8n.git"},"scripts":{"build":"tsc --build tsconfig.build.esm.json tsconfig.build.cjs.json && pnpm build:runtime","build:runtime":"node esbuild.config.js","test":"vitest run","test:unit":"vitest run","test:dev":"vitest --watch --silent false","typecheck":"tsc --noEmit"},"readmeFilename":"README.md","_id":"@n8n/expression-runtime@0.10.0","bugs":{"url":"https://github.com/n8n-io/n8n/issues"},"_integrity":"sha512-zLQet4ZS/ELWcOksp5Cr0NmfQ5Ki12UhJasEiFhAEILMB/t5s3TsdyRTJLGCx3o0VLMcExm6HJn5vBi/B07Puw==","_resolved":"/tmp/400f8eedcf37f8e675be8d8bd64cd35a/n8n-expression-runtime-0.10.0.tgz","_from":"file:n8n-expression-runtime-0.10.0.tgz","_nodeVersion":"24.14.1","_npmVersion":"11.11.0","dist":{"integrity":"sha512-zLQet4ZS/ELWcOksp5Cr0NmfQ5Ki12UhJasEiFhAEILMB/t5s3TsdyRTJLGCx3o0VLMcExm6HJn5vBi/B07Puw==","shasum":"d00c5635008626f4755c15fa7be75795624df429","tarball":"http://123.232.10.234:8212/nexus/content/repositories/npm-private/@n8n/expression-runtime/-/expression-runtime-0.10.0.tgz","fileCount":211,"unpackedSize":5046875,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@n8n%2fexpression-runtime@0.10.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCKzGSwcKKVzunkAQ3ZCmeqCofqkF40j+06JX3/Uao0dgIgdvZtn1ux7yBSlPJLDJfxInCedtqsHmF/Hgx8NjvANM4="}],"size":1097990},"_npmUser":{"name":"anonymous","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d58bf7db-6e01-498f-94b7-d5a9aa342328"}},"directories":{},"maintainers":[{"name":"anonymous","email":"matias.huhta@n8n.io"},{"name":"anonymous","email":"tomi+npm@n8n.io"},{"name":"anonymous","email":"jan@n8n.io"},{"name":"anonymous","email":"cornelius.suermann+npm@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/expression-runtime_0.10.0_1776762771605_0.6621453863359421"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2026-04-21T09:12:51.811Z","publish_time":1776762771811,"_source_registry_name":"default","contributors":[]},"0.10.1":{"name":"@n8n/expression-runtime","version":"0.10.1","description":"Secure, isolated expression evaluation runtime for n8n","main":"dist/cjs/index.js","module":"dist/esm/index.js","types":"dist/esm/index.d.ts","exports":{".":{"types":"./dist/esm/index.d.ts","import":"./dist/esm/index.js","require":"./dist/cjs/index.js"},"./*":"./*"},"keywords":["n8n","expression","evaluation","isolated-vm","web-worker","security"],"license":"SEE LICENSE IN LICENSE.md","dependencies":{"@n8n/tournament":"1.0.6","isolated-vm":"^6.0.2","js-base64":"3.7.8","jssha":"3.3.1","lodash":"4.18.1","luxon":"3.7.2","md5":"2.3.0","title-case":"3.0.3","transliteration":"2.3.5","@n8n/errors":"0.7.0"},"devDependencies":{"@types/lodash":"4.17.17","@types/luxon":"3.2.0","@types/md5":"^2.3.5","typescript":"6.0.2","vitest":"^4.1.1","@n8n/vitest-config":"1.9.0","@n8n/typescript-config":"1.4.0"},"homepage":"https://n8n.io","author":{"name":"Jan Oberhauser","email":"jan@n8n.io"},"repository":{"type":"git","url":"git+https://github.com/n8n-io/n8n.git"},"scripts":{"build":"tsc --build tsconfig.build.esm.json tsconfig.build.cjs.json && pnpm build:runtime","build:runtime":"node esbuild.config.js","test":"vitest run","test:unit":"vitest run","test:dev":"vitest --watch --silent false","typecheck":"tsc --noEmit"},"readmeFilename":"README.md","_id":"@n8n/expression-runtime@0.10.1","bugs":{"url":"https://github.com/n8n-io/n8n/issues"},"_integrity":"sha512-o9ppz7OUjeEaihkk2S8DG7NEb2NohpBAnp68UWDas9y5ockpE1050FuDNhhpOn0/e1S5fBo8Cf/uIzBmQj6rSg==","_resolved":"/tmp/c312df04fa7b42a415223f9d5f1f3336/n8n-expression-runtime-0.10.1.tgz","_from":"file:n8n-expression-runtime-0.10.1.tgz","_nodeVersion":"24.14.1","_npmVersion":"11.11.0","dist":{"integrity":"sha512-o9ppz7OUjeEaihkk2S8DG7NEb2NohpBAnp68UWDas9y5ockpE1050FuDNhhpOn0/e1S5fBo8Cf/uIzBmQj6rSg==","shasum":"0bb58231cc347d0036bbccb30947e9cdce2aaadb","tarball":"http://123.232.10.234:8212/nexus/content/repositories/npm-private/@n8n/expression-runtime/-/expression-runtime-0.10.1.tgz","fileCount":211,"unpackedSize":5047984,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@n8n%2fexpression-runtime@0.10.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDKlfrNZGOWQyOyyyo6iJ9Oi+B22vPoRY9ZUBa6v9KGIgIgd52NvoSxS/FWTYl84MgJg75iYwYRxYra6vO8oxBjLBU="}],"size":1098166},"_npmUser":{"name":"anonymous","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d58bf7db-6e01-498f-94b7-d5a9aa342328"}},"directories":{},"maintainers":[{"name":"anonymous","email":"matias.huhta@n8n.io"},{"name":"anonymous","email":"tomi+npm@n8n.io"},{"name":"anonymous","email":"jan@n8n.io"},{"name":"anonymous","email":"cornelius.suermann+npm@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/expression-runtime_0.10.1_1776841126717_0.24763521378987075"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2026-04-22T06:58:46.898Z","publish_time":1776841126898,"_source_registry_name":"default","contributors":[]},"0.9.1":{"name":"@n8n/expression-runtime","version":"0.9.1","description":"Secure, isolated expression evaluation runtime for n8n","main":"dist/cjs/index.js","module":"dist/esm/index.js","types":"dist/esm/index.d.ts","exports":{".":{"types":"./dist/esm/index.d.ts","import":"./dist/esm/index.js","require":"./dist/cjs/index.js"},"./*":"./*"},"keywords":["n8n","expression","evaluation","isolated-vm","web-worker","security"],"license":"SEE LICENSE IN LICENSE.md","dependencies":{"@n8n/tournament":"1.0.6","isolated-vm":"^6.0.2","js-base64":"3.7.8","jssha":"3.3.1","lodash":"4.18.1","luxon":"3.7.2","md5":"2.3.0","title-case":"3.0.3","transliteration":"2.3.5","@n8n/errors":"0.7.0"},"devDependencies":{"@types/lodash":"4.17.17","@types/luxon":"3.2.0","@types/md5":"^2.3.5","typescript":"6.0.2","vitest":"^4.1.1","@n8n/typescript-config":"1.4.0","@n8n/vitest-config":"1.9.0"},"homepage":"https://n8n.io","author":{"name":"Jan Oberhauser","email":"jan@n8n.io"},"repository":{"type":"git","url":"git+https://github.com/n8n-io/n8n.git"},"scripts":{"build":"tsc --build tsconfig.build.esm.json tsconfig.build.cjs.json && pnpm build:runtime","build:runtime":"node esbuild.config.js","test":"vitest run","test:unit":"vitest run","test:dev":"vitest --watch --silent false","typecheck":"tsc --noEmit"},"readmeFilename":"README.md","_id":"@n8n/expression-runtime@0.9.1","bugs":{"url":"https://github.com/n8n-io/n8n/issues"},"_integrity":"sha512-XMKu0q/whZyB4U/yH3KBoo09Gtw90ScIl8aNPa1nqH9NT/y66cbeAGjzchQSDwjwr6wXQWEztyzyUP4RZhF9ng==","_resolved":"/tmp/59d8239733684f707d15725070f92d17/n8n-expression-runtime-0.9.1.tgz","_from":"file:n8n-expression-runtime-0.9.1.tgz","_nodeVersion":"24.14.1","_npmVersion":"11.11.0","dist":{"integrity":"sha512-XMKu0q/whZyB4U/yH3KBoo09Gtw90ScIl8aNPa1nqH9NT/y66cbeAGjzchQSDwjwr6wXQWEztyzyUP4RZhF9ng==","shasum":"cf163aff3bd07cc23683f527a4bec5b00f9cbf06","tarball":"http://123.232.10.234:8212/nexus/content/repositories/npm-private/@n8n/expression-runtime/-/expression-runtime-0.9.1.tgz","fileCount":211,"unpackedSize":5053140,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@n8n%2fexpression-runtime@0.9.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIAgf+w+wFUAL1Km2kCBl1DMFH0+sy343aeSDnCZV+i+EAiB8DzFSgOvbNU0+uZW/aQOO62UeN6+DY3WKi+MloieO+A=="}],"size":1097978},"_npmUser":{"name":"anonymous","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d58bf7db-6e01-498f-94b7-d5a9aa342328"}},"directories":{},"maintainers":[{"name":"anonymous","email":"matias.huhta@n8n.io"},{"name":"anonymous","email":"tomi+npm@n8n.io"},{"name":"anonymous","email":"jan@n8n.io"},{"name":"anonymous","email":"cornelius.suermann+npm@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/expression-runtime_0.9.1_1776842208924_0.15730185769118243"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2026-04-22T07:16:49.133Z","publish_time":1776842209133,"_source_registry_name":"default","contributors":[]},"0.11.0":{"name":"@n8n/expression-runtime","version":"0.11.0","description":"Secure, isolated expression evaluation runtime for n8n","main":"dist/cjs/index.js","module":"dist/esm/index.js","types":"dist/esm/index.d.ts","exports":{".":{"types":"./dist/esm/index.d.ts","import":"./dist/esm/index.js","require":"./dist/cjs/index.js"},"./*":"./*"},"keywords":["n8n","expression","evaluation","isolated-vm","web-worker","security"],"license":"SEE LICENSE IN LICENSE.md","dependencies":{"@n8n/tournament":"1.0.7","isolated-vm":"^6.0.2","js-base64":"3.7.8","jssha":"3.3.1","lodash":"4.18.1","luxon":"3.7.2","md5":"2.3.0","title-case":"3.0.3","transliteration":"2.3.5","@n8n/errors":"0.8.0"},"devDependencies":{"@types/lodash":"4.17.17","@types/luxon":"3.2.0","@types/md5":"^2.3.5","typescript":"6.0.2","vitest":"^4.1.1","@n8n/vitest-config":"1.10.0","@n8n/typescript-config":"1.4.0"},"homepage":"https://n8n.io","author":{"name":"Jan Oberhauser","email":"jan@n8n.io"},"repository":{"type":"git","url":"git+https://github.com/n8n-io/n8n.git"},"scripts":{"build":"tsc --build tsconfig.build.esm.json tsconfig.build.cjs.json && pnpm build:runtime","build:runtime":"node esbuild.config.js","test":"vitest run","test:unit":"vitest run","test:dev":"vitest --watch --silent false","typecheck":"tsc --noEmit"},"readmeFilename":"README.md","_id":"@n8n/expression-runtime@0.11.0","bugs":{"url":"https://github.com/n8n-io/n8n/issues"},"_integrity":"sha512-yCoVpjeGWUaKhaIufJS2JooBnz0btv5h0ZOeh98QuELZtMPt9CrJNdHgsSrng6qJkBjjYFe+Iun2FjZ/3FHEyA==","_resolved":"/tmp/7c20ba18cd826cb8ae2f6680fb8e02e2/n8n-expression-runtime-0.11.0.tgz","_from":"file:n8n-expression-runtime-0.11.0.tgz","_nodeVersion":"24.14.1","_npmVersion":"11.11.0","dist":{"integrity":"sha512-yCoVpjeGWUaKhaIufJS2JooBnz0btv5h0ZOeh98QuELZtMPt9CrJNdHgsSrng6qJkBjjYFe+Iun2FjZ/3FHEyA==","shasum":"98957b740c940d6e84fcfc3e72d0b50cc0703700","tarball":"http://123.232.10.234:8212/nexus/content/repositories/npm-private/@n8n/expression-runtime/-/expression-runtime-0.11.0.tgz","fileCount":243,"unpackedSize":5099587,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@n8n%2fexpression-runtime@0.11.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDr4xfwCMFeiP10kZjiAjtoGwawrKO80av6+Ntb7ZNfpgIhAOGjbd62RgFAsGjNLcybY4dgNhE0BxtArLYhvc7RLHuA"}],"size":1106395},"_npmUser":{"name":"anonymous","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d58bf7db-6e01-498f-94b7-d5a9aa342328"}},"directories":{},"maintainers":[{"name":"anonymous","email":"matias.huhta@n8n.io"},{"name":"anonymous","email":"tomi+npm@n8n.io"},{"name":"anonymous","email":"jan@n8n.io"},{"name":"anonymous","email":"cornelius.suermann+npm@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/expression-runtime_0.11.0_1777369091470_0.8160167640926483"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2026-04-28T09:38:11.633Z","publish_time":1777369091633,"_source_registry_name":"default","contributors":[]},"0.12.0":{"name":"@n8n/expression-runtime","version":"0.12.0","description":"Secure, isolated expression evaluation runtime for n8n","main":"dist/cjs/index.js","module":"dist/esm/index.js","types":"dist/esm/index.d.ts","exports":{".":{"types":"./dist/esm/index.d.ts","import":"./dist/esm/index.js","require":"./dist/cjs/index.js"},"./*":"./*"},"keywords":["n8n","expression","evaluation","isolated-vm","web-worker","security"],"license":"SEE LICENSE IN LICENSE.md","dependencies":{"isolated-vm":"^6.0.2","js-base64":"3.7.8","jssha":"3.3.1","lodash":"4.18.1","luxon":"3.7.2","md5":"2.3.0","title-case":"3.0.3","transliteration":"2.3.5","@n8n/errors":"0.8.0","@n8n/tournament":"1.1.0"},"devDependencies":{"@types/lodash":"4.17.17","@types/luxon":"3.2.0","@types/md5":"^2.3.5","typescript":"6.0.2","vitest":"^4.1.1","@n8n/typescript-config":"1.4.0","@n8n/vitest-config":"1.10.0"},"homepage":"https://n8n.io","author":{"name":"Jan Oberhauser","email":"jan@n8n.io"},"repository":{"type":"git","url":"git+https://github.com/n8n-io/n8n.git"},"scripts":{"build":"tsc --build tsconfig.build.esm.json tsconfig.build.cjs.json && pnpm build:runtime","build:runtime":"node esbuild.config.js","test":"vitest run","test:unit":"vitest run","test:dev":"vitest --watch --silent false","typecheck":"tsc --noEmit"},"readmeFilename":"README.md","_id":"@n8n/expression-runtime@0.12.0","bugs":{"url":"https://github.com/n8n-io/n8n/issues"},"_integrity":"sha512-z7foz3lWYEg+9c+pWv9Wqw3Q+uNmq+kvJtlXKO0LaPDKBIQee+7fSlqlwlDDlDw00XRoSm3brmOS0msL03h0fw==","_resolved":"/tmp/51ea8fc5c2d69433a1cb21e2391d6ff4/n8n-expression-runtime-0.12.0.tgz","_from":"file:n8n-expression-runtime-0.12.0.tgz","_nodeVersion":"24.14.1","_npmVersion":"11.11.0","dist":{"integrity":"sha512-z7foz3lWYEg+9c+pWv9Wqw3Q+uNmq+kvJtlXKO0LaPDKBIQee+7fSlqlwlDDlDw00XRoSm3brmOS0msL03h0fw==","shasum":"88636d959fe77755e4b0d57cd7f2e3999049ef27","tarball":"http://123.232.10.234:8212/nexus/content/repositories/npm-private/@n8n/expression-runtime/-/expression-runtime-0.12.0.tgz","fileCount":243,"unpackedSize":5098581,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@n8n%2fexpression-runtime@0.12.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIAjqn80+i6ra8FG8jPxnOPkKJpyNYjnV3eZQKA8EqK33AiAKhilLUq8NmCr/TpYIe17R2IEtgtQ9StmQ8yDx6fySkQ=="}],"size":1106340},"_npmUser":{"name":"anonymous","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d58bf7db-6e01-498f-94b7-d5a9aa342328"}},"directories":{},"maintainers":[{"name":"anonymous","email":"matias.huhta@n8n.io"},{"name":"anonymous","email":"tomi+npm@n8n.io"},{"name":"anonymous","email":"jan@n8n.io"},{"name":"anonymous","email":"cornelius.suermann+npm@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/expression-runtime_0.12.0_1777973267416_0.11810942271635194"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2026-05-05T09:27:47.629Z","publish_time":1777973267629,"_source_registry_name":"default","contributors":[]},"0.13.0":{"name":"@n8n/expression-runtime","version":"0.13.0","description":"Secure, isolated expression evaluation runtime for n8n","main":"dist/cjs/index.js","module":"dist/esm/index.js","types":"dist/esm/index.d.ts","exports":{".":{"types":"./dist/esm/index.d.ts","import":"./dist/esm/index.js","require":"./dist/cjs/index.js"},"./*":"./*"},"keywords":["n8n","expression","evaluation","isolated-vm","web-worker","security"],"license":"SEE LICENSE IN LICENSE.md","dependencies":{"isolated-vm":"^6.0.2","js-base64":"3.7.8","jssha":"3.3.1","lodash":"4.18.1","luxon":"3.7.2","md5":"2.3.0","title-case":"3.0.3","transliteration":"2.3.5","@n8n/errors":"0.8.0","@n8n/tournament":"1.1.0"},"devDependencies":{"@types/lodash":"4.17.17","@types/luxon":"3.2.0","@types/md5":"^2.3.5","typescript":"6.0.2","vitest":"^4.1.1","@n8n/typescript-config":"1.4.0","@n8n/vitest-config":"1.10.0"},"homepage":"https://n8n.io","author":{"name":"Jan Oberhauser","email":"jan@n8n.io"},"repository":{"type":"git","url":"git+https://github.com/n8n-io/n8n.git"},"scripts":{"build":"tsc --build tsconfig.build.esm.json tsconfig.build.cjs.json && pnpm build:runtime","build:runtime":"node esbuild.config.js","test":"vitest run","test:unit":"vitest run","test:dev":"vitest --watch --silent false","typecheck":"tsc --noEmit"},"readmeFilename":"README.md","_id":"@n8n/expression-runtime@0.13.0","bugs":{"url":"https://github.com/n8n-io/n8n/issues"},"_integrity":"sha512-4Feqwazwojk8GV+jMRArA9oxFX/29idi8R5Uc3dhTB5/w2O9+lw6H94xiRUw9FbmPErkhloNRiNWYSrD1j2tLA==","_resolved":"/tmp/e8f76c662c9d1bc2bea7997085f30b47/n8n-expression-runtime-0.13.0.tgz","_from":"file:n8n-expression-runtime-0.13.0.tgz","_nodeVersion":"24.14.1","_npmVersion":"11.11.0","dist":{"integrity":"sha512-4Feqwazwojk8GV+jMRArA9oxFX/29idi8R5Uc3dhTB5/w2O9+lw6H94xiRUw9FbmPErkhloNRiNWYSrD1j2tLA==","shasum":"81fcc095af7d6f2d482e2c479e99ef9cfbcc8112","tarball":"http://123.232.10.234:8212/nexus/content/repositories/npm-private/@n8n/expression-runtime/-/expression-runtime-0.13.0.tgz","fileCount":243,"unpackedSize":5084205,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@n8n%2fexpression-runtime@0.13.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCw1YHFeMqATO89WEhWpkgDtGWqRlLtQ3COniKnDJfQVgIgFBxcWAdAqqeUc1tLAstLzNjaG/k9XHj+S7fKDgFIgdU="}],"size":1105822},"_npmUser":{"name":"anonymous","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d58bf7db-6e01-498f-94b7-d5a9aa342328"}},"directories":{},"maintainers":[{"name":"anonymous","email":"matias.huhta@n8n.io"},{"name":"anonymous","email":"tomi+npm@n8n.io"},{"name":"anonymous","email":"jan@n8n.io"},{"name":"anonymous","email":"cornelius.suermann+npm@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/expression-runtime_0.13.0_1778571774116_0.749417469080544"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2026-05-12T07:42:54.339Z","publish_time":1778571774339,"_source_registry_name":"default","contributors":[]},"0.12.1":{"name":"@n8n/expression-runtime","version":"0.12.1","description":"Secure, isolated expression evaluation runtime for n8n","main":"dist/cjs/index.js","module":"dist/esm/index.js","types":"dist/esm/index.d.ts","exports":{".":{"types":"./dist/esm/index.d.ts","import":"./dist/esm/index.js","require":"./dist/cjs/index.js"},"./*":"./*"},"keywords":["n8n","expression","evaluation","isolated-vm","web-worker","security"],"license":"SEE LICENSE IN LICENSE.md","dependencies":{"isolated-vm":"^6.0.2","js-base64":"3.7.8","jssha":"3.3.1","lodash":"4.18.1","luxon":"3.7.2","md5":"2.3.0","title-case":"3.0.3","transliteration":"2.3.5","@n8n/errors":"0.8.0","@n8n/tournament":"1.1.0"},"devDependencies":{"@types/lodash":"4.17.17","@types/luxon":"3.2.0","@types/md5":"^2.3.5","typescript":"6.0.2","vitest":"^4.1.1","@n8n/typescript-config":"1.4.0","@n8n/vitest-config":"1.10.0"},"homepage":"https://n8n.io","author":{"name":"Jan Oberhauser","email":"jan@n8n.io"},"repository":{"type":"git","url":"git+https://github.com/n8n-io/n8n.git"},"scripts":{"build":"tsc --build tsconfig.build.esm.json tsconfig.build.cjs.json && pnpm build:runtime","build:runtime":"node esbuild.config.js","test":"vitest run","test:unit":"vitest run","test:dev":"vitest --watch --silent false","typecheck":"tsc --noEmit"},"readmeFilename":"README.md","_id":"@n8n/expression-runtime@0.12.1","bugs":{"url":"https://github.com/n8n-io/n8n/issues"},"_integrity":"sha512-rvRLWqC2s61rLNh5cVIYAr+EI3PjwRhOnByGj84Jc3AvlX7XSPGKoRCi6Oeq0BSeNu/KI7+So1e2v71Kzcc7LQ==","_resolved":"/tmp/14b4f06e49854eb40da6d45170e2f196/n8n-expression-runtime-0.12.1.tgz","_from":"file:n8n-expression-runtime-0.12.1.tgz","_nodeVersion":"24.14.1","_npmVersion":"11.11.0","dist":{"integrity":"sha512-rvRLWqC2s61rLNh5cVIYAr+EI3PjwRhOnByGj84Jc3AvlX7XSPGKoRCi6Oeq0BSeNu/KI7+So1e2v71Kzcc7LQ==","shasum":"e186c482e732c3999bfaada10f8e77744d389e7b","tarball":"http://123.232.10.234:8212/nexus/content/repositories/npm-private/@n8n/expression-runtime/-/expression-runtime-0.12.1.tgz","fileCount":243,"unpackedSize":5097260,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@n8n%2fexpression-runtime@0.12.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCYHvE4VQZLHPDky18lnL3sdB/t5PEsHE1EUL9TfrvuoAIgYh+oRrEs6E8wHDXIGt6BxE2WrNLaVOWM4xxT/cmlWqw="}],"size":1109365},"_npmUser":{"name":"anonymous","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d58bf7db-6e01-498f-94b7-d5a9aa342328"}},"directories":{},"maintainers":[{"name":"anonymous","email":"matias.huhta@n8n.io"},{"name":"anonymous","email":"tomi+npm@n8n.io"},{"name":"anonymous","email":"jan@n8n.io"},{"name":"anonymous","email":"cornelius.suermann+npm@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/expression-runtime_0.12.1_1778753987900_0.2224827253327275"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2026-05-14T10:19:48.199Z","publish_time":1778753988199,"_source_registry_name":"default","contributors":[]},"0.13.1":{"name":"@n8n/expression-runtime","version":"0.13.1","description":"Secure, isolated expression evaluation runtime for n8n","main":"dist/cjs/index.js","module":"dist/esm/index.js","types":"dist/esm/index.d.ts","exports":{".":{"types":"./dist/esm/index.d.ts","import":"./dist/esm/index.js","require":"./dist/cjs/index.js"},"./*":"./*"},"keywords":["n8n","expression","evaluation","isolated-vm","web-worker","security"],"license":"SEE LICENSE IN LICENSE.md","dependencies":{"isolated-vm":"^6.0.2","js-base64":"3.7.8","jssha":"3.3.1","lodash":"4.18.1","luxon":"3.7.2","md5":"2.3.0","title-case":"3.0.3","transliteration":"2.3.5","@n8n/tournament":"1.1.1","@n8n/errors":"0.8.0"},"devDependencies":{"@types/lodash":"4.17.17","@types/luxon":"3.2.0","@types/md5":"^2.3.5","typescript":"6.0.2","vitest":"^4.1.1","@n8n/typescript-config":"1.4.0","@n8n/vitest-config":"1.10.0"},"homepage":"https://n8n.io","author":{"name":"Jan Oberhauser","email":"jan@n8n.io"},"repository":{"type":"git","url":"git+https://github.com/n8n-io/n8n.git"},"scripts":{"build":"tsc --build tsconfig.build.esm.json tsconfig.build.cjs.json && pnpm build:runtime","build:runtime":"node esbuild.config.js","test":"vitest run","test:unit":"vitest run","test:dev":"vitest --watch --silent false","typecheck":"tsc --noEmit"},"readmeFilename":"README.md","_id":"@n8n/expression-runtime@0.13.1","bugs":{"url":"https://github.com/n8n-io/n8n/issues"},"_integrity":"sha512-napbcdLQ88U599v+OgYF/MwJkzAnMIYAVyuwwvIq+wzQU3dfxTXqP2ponpaMn5tOW4nvbeMyKm2yoqz7k3VwyA==","_resolved":"/tmp/3b39469855688307ba162fb1f80ae27e/n8n-expression-runtime-0.13.1.tgz","_from":"file:n8n-expression-runtime-0.13.1.tgz","_nodeVersion":"24.14.1","_npmVersion":"11.11.0","dist":{"integrity":"sha512-napbcdLQ88U599v+OgYF/MwJkzAnMIYAVyuwwvIq+wzQU3dfxTXqP2ponpaMn5tOW4nvbeMyKm2yoqz7k3VwyA==","shasum":"808576529d91ca0c340d1ec32a96da2c6725ec6c","tarball":"http://123.232.10.234:8212/nexus/content/repositories/npm-private/@n8n/expression-runtime/-/expression-runtime-0.13.1.tgz","fileCount":243,"unpackedSize":5097260,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@n8n%2fexpression-runtime@0.13.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCe6fundUB7W6SSWjJjkQzVfpzeR5bgvw2CbBNfOb7l1gIhAOEbvlDBwYa4V9xU/u57RJOV4iUyjay76ZQvoFUIaScH"}],"size":1109366},"_npmUser":{"name":"anonymous","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d58bf7db-6e01-498f-94b7-d5a9aa342328"}},"directories":{},"maintainers":[{"name":"anonymous","email":"matias.huhta@n8n.io"},{"name":"anonymous","email":"tomi+npm@n8n.io"},{"name":"anonymous","email":"jan@n8n.io"},{"name":"anonymous","email":"cornelius.suermann+npm@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/expression-runtime_0.13.1_1778754763699_0.44573187268106507"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2026-05-14T10:32:44.000Z","publish_time":1778754764000,"_source_registry_name":"default","contributors":[]}},"dist-tags":{"beta":"0.13.1","latest":"0.12.1","stable":"0.12.1"},"name":"@n8n/expression-runtime","time":{"created":"2026-03-02T14:39:01.759Z","modified":"2026-05-15T06:47:03.690Z","0.3.0":"2026-03-02T14:38:40.683Z","0.2.0":"2026-02-23T17:20:47.633Z","0.4.0":"2026-03-09T15:59:38.083Z","0.5.0":"2026-03-16T14:02:09.276Z","0.6.0":"2026-03-24T09:06:51.108Z","0.7.0":"2026-03-30T15:49:54.074Z","0.8.0":"2026-04-07T05:01:15.855Z","0.9.0":"2026-04-13T14:07:26.230Z","0.10.0":"2026-04-21T09:12:51.811Z","0.10.1":"2026-04-22T06:58:46.898Z","0.9.1":"2026-04-22T07:16:49.133Z","0.11.0":"2026-04-28T09:38:11.633Z","0.12.0":"2026-05-05T09:27:47.629Z","0.13.0":"2026-05-12T07:42:54.339Z","0.12.1":"2026-05-14T10:19:48.199Z","0.13.1":"2026-05-14T10:32:44.000Z"},"readme":"# @n8n/expression-runtime\n\nSecure, isolated expression evaluation runtime for n8n workflows.\n\n## Status\n\n**In progress — landing as a series of incremental PRs.**\n\nImplemented so far:\n- ✅ TypeScript interfaces and architecture design (PR 1)\n- ✅ Core architecture documentation (PR 1)\n- ✅ Runtime bundle: extension functions, deep lazy proxy system (PR 2)\n- ✅ `IsolatedVmBridge`: V8 isolate management via `isolated-vm` (PR 3)\n- ✅ `ExpressionEvaluator`: tournament integration, expression code caching (PR 4)\n- ✅ Integration tests (PR 4)\n\nComing in later PRs:\n- 🚧 Workflow integration behind `N8N_EXPRESSION_ENGINE=vm` flag (PR 5)\n- 🚧 Web Worker support (Phase 2+)\n- 🚧 Performance optimizations (Phase 3)\n\n## Overview\n\nThis package provides a secure runtime for evaluating expressions in isolated contexts.\n\nCurrently supports:\n- **Node.js Backend**: Uses `isolated-vm` for V8 isolate-based isolation with lazy data loading\n\nFuture support (Phase 2+):\n- **Browser Frontend**: Will use Web Workers for browser-based isolation\n- **Task Runners**: Will use IPC for separate process isolation\n\n## Features\n\n- 🔒 **Secure**: Expressions run in isolated V8 contexts with memory limits (128MB) and timeouts (5s)\n- 🚀 **Performant**: Lazy data loading via proxies, script compilation caching, and expression code caching\n- 📊 **Observable**: Built-in metrics, traces, and logs support (interfaces defined; providers coming later)\n- 🌐 **Universal**: Works in Node.js backend (browsers and task runners in Phase 2+)\n- 🛡️ **AST Security**: Tournament AST hooks (`ThisSanitizer`, `PrototypeSanitizer`, `DollarSignValidator`) validate expressions before execution\n\n## Architecture\n\nThe runtime uses a three-layer architecture:\n\n1. **Runtime** (Layer 1): Runs inside isolated context, provides expression execution environment\n2. **Bridge** (Layer 2): Manages communication between host and isolated context\n3. **Evaluator** (Layer 3): Public API with Tournament integration and observability\n\nSee [ARCHITECTURE.md](./ARCHITECTURE.md) for detailed design documentation.\n\n## Installation\n\n```bash\npnpm add @n8n/expression-runtime\n```\n\n## Usage\n\n### Basic Example\n\n```typescript\nimport { ExpressionEvaluator, IsolatedVmBridge } from '@n8n/expression-runtime';\n\n// Create bridge\nconst bridge = new IsolatedVmBridge({\n  memoryLimit: 128,\n  timeout: 5000,\n});\n\n// Create evaluator\nconst evaluator = new ExpressionEvaluator({\n  bridge,\n});\n\n// Initialize\nawait evaluator.initialize();\n\n// Evaluate expression using {{ }} template syntax\nconst result = evaluator.evaluate(\n  '{{ $json.user.email }}',\n  {\n    $json: {\n      user: { email: 'test@example.com' }\n    }\n  }\n);\n\nconsole.log(result); // \"test@example.com\"\n\n// Clean up\nawait evaluator.dispose();\n```\n\n### With Security Hooks (Production)\n\nPass AST security hooks from `expression-sandboxing.ts` to enable full security validation. This is the pattern used by the workflow package:\n\n```typescript\nimport { ExpressionEvaluator, IsolatedVmBridge } from '@n8n/expression-runtime';\nimport {\n  ThisSanitizer,\n  PrototypeSanitizer,\n  DollarSignValidator,\n} from 'n8n-workflow/expression-sandboxing';\n\nconst bridge = new IsolatedVmBridge({ timeout: 5000 });\nconst evaluator = new ExpressionEvaluator({\n  bridge,\n  hooks: {\n    before: [ThisSanitizer],\n    after: [PrototypeSanitizer, DollarSignValidator],\n  },\n});\n\nawait evaluator.initialize();\n```\n\nWhen `hooks` is omitted the evaluator still runs tournament transformation (template parsing, `this` binding) but without AST security validation — suitable for development and testing.\n\n### With Observability (Not Yet Implemented)\n\n```typescript\nimport { OpenTelemetryProvider } from '@n8n/expression-runtime/observability';\n\nconst observability = new OpenTelemetryProvider({\n  serviceName: 'n8n-expressions',\n});\n\nconst evaluator = new ExpressionEvaluator({\n  bridge,\n  observability,\n});\n```\n\n**Note**: Observability providers are not yet implemented. The `ObservabilityProvider` interface exists but no implementations are available yet.\n\n## API\n\n### ExpressionEvaluator\n\nMain class for expression evaluation.\n\n```typescript\nclass ExpressionEvaluator {\n  constructor(config: EvaluatorConfig);\n  initialize(): Promise<void>;\n  evaluate(expression: string, data: WorkflowData, options?: EvaluateOptions): unknown;\n  dispose(): Promise<void>;\n  isDisposed(): boolean;\n}\n```\n\n### RuntimeBridge\n\nAbstract interface for bridge implementations.\n\n```typescript\ninterface RuntimeBridge {\n  initialize(): Promise<void>;\n  execute(code: string, data: Record<string, unknown>): unknown;\n  dispose(): Promise<void>;\n  isDisposed(): boolean;\n}\n```\n\n### Bridge Implementations\n\n- **IsolatedVmBridge**: ✅ For Node.js backend (isolated-vm with V8 isolates)\n  - Memory isolation with hard 128MB limit\n  - Timeout enforcement (5s default)\n  - Deep lazy proxy system for workflow data\n  - Synchronous callbacks via ivm.Reference\n  - Security wrappers (SafeObject, SafeError)\n  - `E()` error handler for tournament-generated try-catch code\n- **WebWorkerBridge**: 🚧 For browser frontend (Web Workers) - Phase 2+\n- **Task Runner Integration**: 🚧 TBD - May use IsolatedVmBridge locally or direct evaluation - Phase 2+\n\n## Configuration\n\n```typescript\ninterface EvaluatorConfig {\n  bridge: RuntimeBridge;                   // required\n  observability?: ObservabilityProvider;   // optional - interfaces defined, providers not yet implemented\n  hooks?: TournamentHooks;                 // optional - AST security hooks for tournament\n}\n\ninterface BridgeConfig {\n  memoryLimit?: number;        // Default: 128 MB\n  timeout?: number;            // Default: 5000 ms\n  debug?: boolean;             // Default: false\n}\n```\n\n## Environment Variables (Not Yet Implemented)\n\n```bash\n# Bridge configuration (not yet implemented)\nN8N_EXPRESSION_MEMORY_LIMIT_MB=128\nN8N_EXPRESSION_TIMEOUT_MS=5000\nN8N_EXPRESSION_DEBUG=false\n\n# Code cache (not yet implemented - caches transformed code, not results)\nN8N_EXPRESSION_CODE_CACHE_ENABLED=true\nN8N_EXPRESSION_CODE_CACHE_MAX_SIZE=1000\n\n# Observability (not yet implemented)\nN8N_EXPRESSION_OBSERVABILITY_ENABLED=true\nN8N_EXPRESSION_METRICS_ENABLED=true\nN8N_EXPRESSION_TRACES_ENABLED=true\nN8N_EXPRESSION_TRACE_SAMPLE_RATE=0.01\n```\n\n**Note**: Currently, configuration is passed via constructor options. Environment variable support will be added in future phases.\n\n## Development\n\n```bash\n# Install dependencies\npnpm install\n\n# Build package\npnpm build\n\n# Run tests\npnpm test\n\n# Run tests in watch mode\npnpm test:watch\n\n# Type check\npnpm typecheck\n\n# Lint\npnpm lint\n```\n\n## Testing\n\nThe package uses vitest for fast, isolated testing:\n\n```typescript\nimport { ExpressionEvaluator, IsolatedVmBridge } from '@n8n/expression-runtime';\n\ndescribe('ExpressionEvaluator', () => {\n  it('evaluates simple expression', async () => {\n    const bridge = new IsolatedVmBridge({ timeout: 5000 });\n    const evaluator = new ExpressionEvaluator({ bridge });\n\n    await evaluator.initialize();\n\n    const result = evaluator.evaluate('{{ $json.value }}', { $json: { value: 42 } });\n    expect(result).toBe(42);\n\n    await evaluator.dispose();\n  });\n});\n```\n\nRun tests:\n```bash\npnpm test                # Run all tests\npnpm test integration    # Run integration tests only\n```\n\n## Performance\n\nThe runtime uses several optimizations (implemented in PRs 2–4):\n\n- **Lazy Loading**: Only fetch data fields that expressions actually access via proxy traps\n- **Script Compilation Caching**: Compiled scripts are cached to avoid recompilation\n- **Metadata-Driven**: Only structure (keys, lengths) transferred across isolate boundary, not full data\n- **Expression Code Caching**: Tournament-transformed code is cached per evaluator instance (same expressions repeat within a workflow, so cache hit rate is high in practice)\n\nPerformance characteristics:\n- Arrays: Always lazy-loaded — only length transferred, elements fetched on demand\n- Objects: Always lazy-loaded — only keys transferred, values fetched on demand\n\n## Security\n\nThe runtime enforces strict security at multiple layers (implemented in PRs 2–4):\n\n- **Memory limits**: Hard 128MB limit via isolated-vm (configurable)\n- **Execution timeouts**: 5s default timeout (configurable)\n- **Complete isolation**: No access to Node.js APIs (require, fs, process, etc.)\n- **Security wrappers**: SafeObject and SafeError prevent dangerous method access\n- **Native function blocking**: Prevents access to native code\n- **AST transforms**: `ThisSanitizer` rewrites `$json` → `this.$json`; `PrototypeSanitizer` wraps computed property access in `this.__sanitize(key)` to block prototype chain attacks; `DollarSignValidator` enforces correct `$`-variable usage\n- **Runtime sanitizer**: `__sanitize()` inside the isolate blocks access to `__proto__`, `constructor`, `prototype`, and other dangerous properties at runtime\n\nFuture security features (Phase 2+):\n- 🚧 Additional sandboxing for browser environments\n\n## Contributing\n\nSee the main n8n repository for contribution guidelines.\n\n## License\n\nSee [LICENSE.md](../../LICENSE.md) in the n8n repository root.\n\n## Related\n\n- [n8n workflow package](../workflow/)\n- [isolated-vm](https://github.com/laverdet/isolated-vm)\n- [@n8n/tournament](https://github.com/n8n-io/tournament)","users":{}}