{ "schemaVersion": 1, "engine": "perl", "engineName": "Perl regular expressions via WebPerl", "engineVersion": "5.28.1", "semanticIdentity": "Perl v5.28.1 regular expressions via the legacy WebPerl v0.09-beta prebuilt runtime", "status": "legacy-beta-compatibility-runtime", "bridge": { "abiVersion": 1, "nativeOffsetUnit": "Unicode code points (Perl character offsets)", "requestEncoding": "exact-key and byte-bounded JSON in a fixed MEMFS request file; no request value is interpolated into source", "responseEncoding": "byte-bounded metadata JSON in a fixed MEMFS response file", "workerTopology": "supervised ES module worker with a nested self-hosted classic WebPerl worker", "evaluatorInvocation": "RegexTools::run_request()", "userSourceEvaluation": false, "regexCodeAssertionsEnabled": false, "supportedApplicationFlags": [ "g", "i", "m", "s", "x", "n", "a", "d", "l", "u" ], "replacement": "Pre-tokenized fixed grammar supporting literal text, $$, greedy $n, and ${name}; bounded UTF-8 chunks stream from native spans without a complete capture-value array, expansion, or output materialization", "replacementParityOracle": "identity self-test compares fixed named and numbered fixtures with native Perl s/// output", "replacementOutputTransport": "successful UTF-8 output uses a separate fixed MEMFS binary file; the classic worker validates exact length, bound, canonical UTF-8 and injects the decoded string for PortableEngineAdapter", "captureNames": "Perl-native numbered participation and spans; syntax metadata annotates capture-row names; named replacement lookup uses native %+ and resolves the selected value back to a native span before output", "limits": { "maximumPatternCharacters": 65536, "maximumSubjectBytes": 16777216, "maximumReplacementCharacters": 65536, "maximumMatches": 10000, "maximumCaptureRows": 100000, "maximumCaptureGroups": 1000, "maximumOutputBytes": 67108864, "maximumErrorCharacters": 1024, "maximumRequestJsonBytes": 101466112, "maximumResponseJsonBytes": 8388608, "outputChunkCharacters": 4096 }, "sourceFiles": [ { "path": "engines/perl/README.md", "sha256": "bac7fcce7a1e4451ab7f1c7489211114aa52b896aecf45f3ac991b294c736952", "bytes": 3311 }, { "path": "engines/perl/perl-runtime.worker.js", "sha256": "0c42a7b2a72b886d967aadff0b1bb35017c247e5cad79ad85544fc3a91f17e5b", "bytes": 10926 }, { "path": "engines/perl/regex_tools_bridge.pl", "sha256": "880835d63b2319f72ae4be1db50e2cecda8ebd98b80dca810448c3a665dcc4d3", "bytes": 23415 } ] }, "securityAudit": { "generatedLoaderJavaScriptEvalSites": 1, "generatedLoaderNewFunctionSites": 0, "evalSitePurpose": "optional WebPerl Perl-to-JavaScript interoperability import; not loaded or invoked by regex-tools", "normalPathCsp": "script-src 'self' 'wasm-unsafe-eval'; no 'unsafe-eval'", "runtimeRegexEval": "disabled with no re 'eval'", "codeAssertionDefense": "fixed scanner rejects (?{...}) and (??{...}) before compilation", "killability": "the supervised worker tree can be terminated by EngineSupervisor", "boundedTransport": "request and response JSON have exact field/byte contracts; replacement output is not JSON-escaped" }, "source": { "project": "WebPerl", "repository": "https://github.com/haukex/webperl", "tag": "v0.09-beta", "tagObjectSha1": "c5933d11666906328b238d03459707207b6ca2b4", "commitSha1": "6f2173d29a2c2e3536e1de75ff5d291ae96ab348", "treeSha1": "20e59a142ad2e355fc3ed03da974bdf183b79c66", "license": "GPL-1.0-or-later OR Artistic-1.0-Perl", "perl": { "version": "5.28.1", "repository": "https://github.com/Perl/perl5", "tag": "v5.28.1", "license": "GPL-1.0-or-later OR Artistic-1.0-Perl" } }, "prebuilt": { "archive": "https://github.com/haukex/webperl/releases/download/v0.09-beta/webperl_prebuilt_v0.09-beta.zip", "archiveSha256": "5f441249217e90ab378c666f473d4206ab4f44907f6bb0aa8d70834bc38c40dc", "archiveBytes": 3936557, "runtimeAssetsCopiedByteForByte": true }, "toolchain": { "emscriptenVersion": "1.38.28", "target": "wasm32-unknown-emscripten", "license": "MIT OR NCSA" }, "bundledModules": [ { "name": "Cpanel::JSON::XS", "version": "4.09", "license": "GPL-1.0-or-later OR Artistic-1.0-Perl", "normalEnginePath": true }, { "name": "Devel::StackTrace", "version": "2.03", "license": "Artistic-2.0", "normalEnginePath": false, "sourceArchive": "https://www.cpan.org/authors/id/D/DR/DROLSKY/Devel-StackTrace-2.03.tar.gz", "sourceArchiveSha256": "7618cd4ebe24e254c17085f4b418784ab503cb4cb3baf8f48a7be894e59ba848" }, { "name": "Future", "version": "0.39", "license": "GPL-1.0-or-later OR Artistic-1.0-Perl", "normalEnginePath": false } ], "sourceDateEpoch": 1551644196, "files": [ { "path": "LICENSE-Devel-StackTrace-Artistic-2.0.txt", "sha256": "e16dd93533bb65e25fad00d06e88840d9b5fd6bb80d551d8866126c52d89e1de", "bytes": 9048 }, { "path": "LICENSE-Emscripten.txt", "sha256": "51aea7641f81d560eb039bc97ce35e2517e2656fe8731eb49ce6a18498eb22fe", "bytes": 5092 }, { "path": "LICENSE-WebPerl-Artistic.txt", "sha256": "435a788b2de9aaae9c640e7c0ab7b317b41323522e8641bcda000607892abf1f", "bytes": 7587 }, { "path": "LICENSE-WebPerl-GPL.txt", "sha256": "0166b8b8e96a6b153da26ece157ebbd9ffad5423670f611fae80fefacb6da7f5", "bytes": 14468 }, { "path": "NOTICE.txt", "sha256": "499559af54694d319697271433262a3324a976061f4537ed1c5210235f9eb348", "bytes": 2827 }, { "path": "emperl.data", "sha256": "9529019418cf766a42cf2d25bd3fc97b47c9e689f5666cfc32dc11338d1b1e66", "bytes": 12021691 }, { "path": "emperl.js", "sha256": "b60e3c04874c6ef5278001257b4c8a9f4c7e69ca3d6b268d9639723234844784", "bytes": 303013 }, { "path": "emperl.wasm", "sha256": "f1d49c4514c7332a57992c4a2444fd6a56ae3b5e6651b4fd484852a641e5e4ec", "bytes": 3734063 }, { "path": "perl-runtime.worker.js", "sha256": "0c42a7b2a72b886d967aadff0b1bb35017c247e5cad79ad85544fc3a91f17e5b", "bytes": 10926 }, { "path": "regex_tools_bridge.pl", "sha256": "880835d63b2319f72ae4be1db50e2cecda8ebd98b80dca810448c3a665dcc4d3", "bytes": 23415 } ] }