{
  "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
    }
  ]
}
