feat: add multi-engine regex flavour support

This commit is contained in:
2026-07-27 11:43:51 +02:00
parent 7079cde15f
commit 7f3a91ad37
340 changed files with 643286 additions and 483 deletions

View File

@@ -0,0 +1,175 @@
{
"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
}
]
}