jioogen 0.0.0-stage → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +9813 -0
- package/dist/index.js.map +7 -0
- package/package.json +30 -4
- package/README.md +0 -3
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../node_modules/.pnpm/adm-zip@0.6.1/node_modules/adm-zip/util/constants.js", "../../../node_modules/.pnpm/adm-zip@0.6.1/node_modules/adm-zip/util/errors.js", "../../../node_modules/.pnpm/adm-zip@0.6.1/node_modules/adm-zip/util/utils.js", "../../../node_modules/.pnpm/adm-zip@0.6.1/node_modules/adm-zip/util/fattr.js", "../../../node_modules/.pnpm/adm-zip@0.6.1/node_modules/adm-zip/util/decoder.js", "../../../node_modules/.pnpm/adm-zip@0.6.1/node_modules/adm-zip/util/index.js", "../../../node_modules/.pnpm/adm-zip@0.6.1/node_modules/adm-zip/headers/entryHeader.js", "../../../node_modules/.pnpm/adm-zip@0.6.1/node_modules/adm-zip/headers/mainHeader.js", "../../../node_modules/.pnpm/adm-zip@0.6.1/node_modules/adm-zip/headers/index.js", "../../../node_modules/.pnpm/adm-zip@0.6.1/node_modules/adm-zip/methods/deflater.js", "../../../node_modules/.pnpm/adm-zip@0.6.1/node_modules/adm-zip/methods/inflater.js", "../../../node_modules/.pnpm/adm-zip@0.6.1/node_modules/adm-zip/methods/zipcrypto.js", "../../../node_modules/.pnpm/adm-zip@0.6.1/node_modules/adm-zip/methods/index.js", "../../../node_modules/.pnpm/adm-zip@0.6.1/node_modules/adm-zip/zipEntry.js", "../../../node_modules/.pnpm/adm-zip@0.6.1/node_modules/adm-zip/zipFile.js", "../../../node_modules/.pnpm/adm-zip@0.6.1/node_modules/adm-zip/adm-zip.js", "../src/index.ts", "../src/api.ts", "../src/commands.ts", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/external.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/util.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/ZodError.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/locales/en.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/errors.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/parseUtil.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/errorUtil.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.js", "../../contracts/src/bundle.ts", "../../contracts/src/execution.ts", "../../contracts/src/prd-linter.ts", "../src/check.ts", "../src/config.ts", "../src/output.ts", "../src/sidecar.ts", "../src/skills.ts", "../src/tasks.ts", "../src/zip.ts"],
|
|
4
|
+
"sourcesContent": ["module.exports = {\n /* The local file header */\n LOCHDR : 30, // LOC header size\n LOCSIG : 0x04034b50, // \"PK\\003\\004\"\n LOCVER : 4,\t// version needed to extract\n LOCFLG : 6, // general purpose bit flag\n LOCHOW : 8, // compression method\n LOCTIM : 10, // modification time (2 bytes time, 2 bytes date)\n LOCCRC : 14, // uncompressed file crc-32 value\n LOCSIZ : 18, // compressed size\n LOCLEN : 22, // uncompressed size\n LOCNAM : 26, // filename length\n LOCEXT : 28, // extra field length\n\n /* The Data descriptor */\n EXTSIG : 0x08074b50, // \"PK\\007\\008\"\n EXTHDR : 16, // EXT header size\n EXTCRC : 4, // uncompressed file crc-32 value\n EXTSIZ : 8, // compressed size\n EXTLEN : 12, // uncompressed size\n\n /* The central directory file header */\n CENHDR : 46, // CEN header size\n CENSIG : 0x02014b50, // \"PK\\001\\002\"\n CENVEM : 4, // version made by\n CENVER : 6, // version needed to extract\n CENFLG : 8, // encrypt, decrypt flags\n CENHOW : 10, // compression method\n CENTIM : 12, // modification time (2 bytes time, 2 bytes date)\n CENCRC : 16, // uncompressed file crc-32 value\n CENSIZ : 20, // compressed size\n CENLEN : 24, // uncompressed size\n CENNAM : 28, // filename length\n CENEXT : 30, // extra field length\n CENCOM : 32, // file comment length\n CENDSK : 34, // volume number start\n CENATT : 36, // internal file attributes\n CENATX : 38, // external file attributes (host system dependent)\n CENOFF : 42, // LOC header offset\n\n /* The entries in the end of central directory */\n ENDHDR : 22, // END header size\n ENDSIG : 0x06054b50, // \"PK\\005\\006\"\n ENDSUB : 8, // number of entries on this disk\n ENDTOT : 10, // total number of entries\n ENDSIZ : 12, // central directory size in bytes\n ENDOFF : 16, // offset of first CEN header\n ENDCOM : 20, // zip file comment length\n\n END64HDR : 20, // zip64 END header size\n END64SIG : 0x07064b50, // zip64 Locator signature, \"PK\\006\\007\"\n END64START : 4, // number of the disk with the start of the zip64\n END64OFF : 8, // relative offset of the zip64 end of central directory\n END64NUMDISKS : 16, // total number of disks\n\n ZIP64SIG : 0x06064b50, // zip64 signature, \"PK\\006\\006\"\n ZIP64HDR : 56, // zip64 record minimum size\n ZIP64LEAD : 12, // leading bytes at the start of the record, not counted by the value stored in ZIP64SIZE\n ZIP64SIZE : 4, // zip64 size of the central directory record\n ZIP64VEM : 12, // zip64 version made by\n ZIP64VER : 14, // zip64 version needed to extract\n ZIP64DSK : 16, // zip64 number of this disk\n ZIP64DSKDIR : 20, // number of the disk with the start of the record directory\n ZIP64SUB : 24, // number of entries on this disk\n ZIP64TOT : 32, // total number of entries\n ZIP64SIZB : 40, // zip64 central directory size in bytes\n ZIP64OFF : 48, // offset of start of central directory with respect to the starting disk number\n ZIP64EXTRA : 56, // extensible data sector\n\n /* Compression methods */\n STORED : 0, // no compression\n SHRUNK : 1, // shrunk\n REDUCED1 : 2, // reduced with compression factor 1\n REDUCED2 : 3, // reduced with compression factor 2\n REDUCED3 : 4, // reduced with compression factor 3\n REDUCED4 : 5, // reduced with compression factor 4\n IMPLODED : 6, // imploded\n // 7 reserved for Tokenizing compression algorithm\n DEFLATED : 8, // deflated\n ENHANCED_DEFLATED: 9, // enhanced deflated\n PKWARE : 10,// PKWare DCL imploded\n // 11 reserved by PKWARE\n BZIP2 : 12, // compressed using BZIP2\n // 13 reserved by PKWARE\n LZMA : 14, // LZMA\n // 15-17 reserved by PKWARE\n IBM_TERSE : 18, // compressed using IBM TERSE\n IBM_LZ77 : 19, // IBM LZ77 z\n AES_ENCRYPT : 99, // WinZIP AES encryption method\n\n /* General purpose bit flag */\n // values can obtained with expression 2**bitnr\n FLG_ENC : 1, // Bit 0: encrypted file\n FLG_COMP1 : 2, // Bit 1, compression option\n FLG_COMP2 : 4, // Bit 2, compression option\n FLG_DESC : 8, // Bit 3, data descriptor\n FLG_ENH : 16, // Bit 4, enhanced deflating\n FLG_PATCH : 32, // Bit 5, indicates that the file is compressed patched data.\n FLG_STR : 64, // Bit 6, strong encryption (patented)\n // Bits 7-10: Currently unused.\n FLG_EFS : 2048, // Bit 11: Language encoding flag (EFS)\n // Bit 12: Reserved by PKWARE for enhanced compression.\n // Bit 13: encrypted the Central Directory (patented).\n // Bits 14-15: Reserved by PKWARE.\n FLG_MSK : 4096, // mask header values\n\n /* Load type */\n FILE : 2,\n BUFFER : 1,\n NONE : 0,\n\n /* 4.5 Extensible data fields */\n EF_ID : 0,\n EF_SIZE : 2,\n\n /* Header IDs */\n ID_ZIP64 : 0x0001,\n ID_AVINFO : 0x0007,\n ID_PFS : 0x0008,\n ID_OS2 : 0x0009,\n ID_NTFS : 0x000a,\n ID_OPENVMS : 0x000c,\n ID_UNIX : 0x000d,\n ID_FORK : 0x000e,\n ID_PATCH : 0x000f,\n ID_X509_PKCS7 : 0x0014,\n ID_X509_CERTID_F : 0x0015,\n ID_X509_CERTID_C : 0x0016,\n ID_STRONGENC : 0x0017,\n ID_RECORD_MGT : 0x0018,\n ID_X509_PKCS7_RL : 0x0019,\n ID_IBM1 : 0x0065,\n ID_IBM2 : 0x0066,\n ID_POSZIP : 0x4690,\n\n EF_ZIP64_OR_32 : 0xffffffff,\n EF_ZIP64_OR_16 : 0xffff,\n EF_ZIP64_SUNCOMP : 0,\n EF_ZIP64_SCOMP : 8,\n EF_ZIP64_RHO : 16,\n EF_ZIP64_DSN : 24\n};\n", "const errors = {\n /* Header error messages */\n INVALID_LOC: \"Invalid LOC header (bad signature)\",\n INVALID_CEN: \"Invalid CEN header (bad signature)\",\n INVALID_END: \"Invalid END header (bad signature)\",\n\n /* Descriptor */\n DESCRIPTOR_NOT_EXIST: \"No descriptor present\",\n DESCRIPTOR_UNKNOWN: \"Unknown descriptor format\",\n DESCRIPTOR_FAULTY: \"Descriptor data is malformed\",\n\n /* ZipEntry error messages*/\n NO_DATA: \"Nothing to decompress\",\n BAD_CRC: \"CRC32 checksum failed {0}\",\n MAX_OUTPUT_EXCEEDED: \"Decompressed data exceeds the declared uncompressed size\",\n FILE_IN_THE_WAY: \"There is a file in the way: {0}\",\n UNKNOWN_METHOD: \"Invalid/unsupported compression method\",\n\n /* Inflater error messages */\n AVAIL_DATA: \"inflate::Available inflate data did not terminate\",\n INVALID_DISTANCE: \"inflate::Invalid literal/length or distance code in fixed or dynamic block\",\n TO_MANY_CODES: \"inflate::Dynamic block code description: too many length or distance codes\",\n INVALID_REPEAT_LEN: \"inflate::Dynamic block code description: repeat more than specified lengths\",\n INVALID_REPEAT_FIRST: \"inflate::Dynamic block code description: repeat lengths with no first length\",\n INCOMPLETE_CODES: \"inflate::Dynamic block code description: code lengths codes incomplete\",\n INVALID_DYN_DISTANCE: \"inflate::Dynamic block code description: invalid distance code lengths\",\n INVALID_CODES_LEN: \"inflate::Dynamic block code description: invalid literal/length code lengths\",\n INVALID_STORE_BLOCK: \"inflate::Stored block length did not match one's complement\",\n INVALID_BLOCK_TYPE: \"inflate::Invalid block type (type == 3)\",\n\n /* ADM-ZIP error messages */\n CANT_EXTRACT_FILE: \"Could not extract the file\",\n CANT_OVERRIDE: \"Target file already exists\",\n DISK_ENTRY_TOO_LARGE: \"Number of disk entries is too large\",\n NO_ZIP: \"No zip file was loaded\",\n NO_ENTRY: \"Entry doesn't exist\",\n DUPLICATE_ENTRY: \"Duplicate entry name {0}\",\n DIRECTORY_CONTENT_ERROR: \"A directory cannot have content\",\n FILE_NOT_FOUND: 'File not found: \"{0}\"',\n NOT_IMPLEMENTED: \"Not implemented\",\n INVALID_FILENAME: \"Invalid filename\",\n INVALID_FORMAT: \"Invalid or unsupported zip format. No END header found\",\n ZIP64_VALUE_TOO_LARGE: \"Zip64 value exceeds the maximum safe integer\",\n INVALID_PASS_PARAM: \"Incompatible password parameter\",\n WRONG_PASSWORD: \"Wrong Password\",\n\n /* ADM-ZIP */\n COMMENT_TOO_LONG: \"Comment is too long\", // Comment can be max 65535 bytes long (NOTE: some non-US characters may take more space)\n EXTRA_FIELD_PARSE_ERROR: \"Extra field parsing error\"\n};\n\n// template\nfunction E(message) {\n return function (...args) {\n if (args.length) { // Allow {0} .. {9} arguments in error message, based on argument number\n message = message.replace(/\\{(\\d)\\}/g, (_, n) => args[n] || '');\n }\n\n return new Error('ADM-ZIP: ' + message);\n };\n}\n\n// Init errors with template\nfor (const msg of Object.keys(errors)) {\n exports[msg] = E(errors[msg]);\n}\n", "const fsystem = require(\"fs\");\nconst pth = require(\"path\");\nconst Constants = require(\"./constants\");\nconst Errors = require(\"./errors\");\nconst isWin = typeof process === \"object\" && \"win32\" === process.platform;\n\nconst is_Obj = (obj) => typeof obj === \"object\" && obj !== null;\n\n// generate CRC32 lookup table\nconst crcTable = new Uint32Array(256).map((t, c) => {\n for (let k = 0; k < 8; k++) {\n if ((c & 1) !== 0) {\n c = 0xedb88320 ^ (c >>> 1);\n } else {\n c >>>= 1;\n }\n }\n return c >>> 0;\n});\n\n// UTILS functions\n\nfunction Utils(opts) {\n this.sep = pth.sep;\n this.fs = fsystem;\n\n if (is_Obj(opts)) {\n // custom filesystem\n if (is_Obj(opts.fs) && typeof opts.fs.statSync === \"function\") {\n this.fs = opts.fs;\n }\n }\n}\n\nmodule.exports = Utils;\n\n// INSTANTIABLE functions\n\nUtils.prototype.makeDir = function (/*String*/ folder) {\n const self = this;\n\n // Sync - make directories tree\n function mkdirSync(/*String*/ fpath) {\n let resolvedPath = fpath.split(self.sep)[0];\n fpath.split(self.sep).forEach(function (name) {\n if (!name || name.substr(-1, 1) === \":\") return;\n resolvedPath += self.sep + name;\n var stat;\n try {\n stat = self.fs.statSync(resolvedPath);\n } catch (e) {\n if (e.message && e.message.startsWith('ENOENT')) {\n self.fs.mkdirSync(resolvedPath);\n } else {\n throw e;\n }\n }\n if (stat && stat.isFile()) throw Errors.FILE_IN_THE_WAY(`\"${resolvedPath}\"`);\n });\n }\n\n mkdirSync(folder);\n};\n\nUtils.prototype.writeFileTo = function (/*String*/ path, /*Buffer*/ content, /*Boolean*/ overwrite, /*Number*/ attr) {\n const self = this;\n if (self.fs.existsSync(path)) {\n if (!overwrite) return false; // cannot overwrite\n\n var stat = self.fs.statSync(path);\n if (stat.isDirectory()) {\n return false;\n }\n }\n var folder = pth.dirname(path);\n if (!self.fs.existsSync(folder)) {\n self.makeDir(folder);\n }\n\n var fd;\n try {\n fd = self.fs.openSync(path, \"w\", 0o666); // 0666\n } catch (e) {\n self.fs.chmodSync(path, 0o666);\n fd = self.fs.openSync(path, \"w\", 0o666);\n }\n if (fd) {\n try {\n self.fs.writeSync(fd, content, 0, content.length, 0);\n } finally {\n self.fs.closeSync(fd);\n }\n }\n self.fs.chmodSync(path, attr || 0o666);\n return true;\n};\n\nUtils.prototype.writeFileToAsync = function (/*String*/ path, /*Buffer*/ content, /*Boolean*/ overwrite, /*Number*/ attr, /*Function*/ callback) {\n if (typeof attr === \"function\") {\n callback = attr;\n attr = undefined;\n }\n\n const self = this;\n\n self.fs.exists(path, function (exist) {\n if (exist && !overwrite) return callback(false);\n\n self.fs.stat(path, function (err, stat) {\n if (exist && stat && stat.isDirectory()) {\n return callback(false);\n }\n\n var folder = pth.dirname(path);\n self.fs.exists(folder, function (exists) {\n if (!exists) {\n // makeDir is synchronous and can throw (e.g. EACCES); report failure\n // rather than letting it escape this callback as an uncaught exception\n try {\n self.makeDir(folder);\n } catch (e) {\n return callback(false);\n }\n }\n\n // write the content to an open descriptor, then apply the attributes\n const writeToFd = function (fd) {\n self.fs.write(fd, content, 0, content.length, 0, function (writeErr) {\n self.fs.close(fd, function () {\n // surface write failures instead of silently reporting success (issue #402)\n if (writeErr) return callback(false);\n self.fs.chmod(path, attr || 0o666, function () {\n callback(true);\n });\n });\n });\n };\n\n self.fs.open(path, \"w\", 0o666, function (err, fd) {\n if (err) {\n // the target may exist but be read-only: make it writable and retry once\n self.fs.chmod(path, 0o666, function () {\n self.fs.open(path, \"w\", 0o666, function (retryErr, fd) {\n // Previously the retry error was ignored and an undefined fd was\n // passed to fs.write, throwing an uncaught ERR_INVALID_ARG_TYPE that\n // crashed the process (issues #470, #459, #402). Report failure instead.\n if (retryErr || !fd) return callback(false);\n writeToFd(fd);\n });\n });\n } else if (fd) {\n writeToFd(fd);\n } else {\n callback(false);\n }\n });\n });\n });\n });\n};\n\n// Guard extraction against writing through a symlink that already exists inside\n// the target directory. sanitize() only proves the textual path stays under the\n// root; it cannot see that a component on disk is a symlink pointing elsewhere,\n// so open()/mkdir() would follow it and write outside the root. Walk every path\n// component strictly below root and reject any that is a symlink. Components at\n// or above root are the caller's own choice and are left untouched, so a root\n// that itself lives under a symlink (e.g. /tmp on macOS) still extracts.\nUtils.prototype.assertPathSafe = function (/*String*/ root, /*String*/ target) {\n const self = this;\n if (typeof self.fs.lstatSync !== \"function\") return;\n\n const resolvedRoot = pth.resolve(root);\n const resolvedTarget = pth.resolve(target);\n if (resolvedTarget === resolvedRoot) return;\n\n const rel = pth.relative(resolvedRoot, resolvedTarget);\n // Not under root: sanitize() is responsible for that case; nothing to walk.\n if (!rel || rel === \"..\" || rel.startsWith(\"..\" + pth.sep) || pth.isAbsolute(rel)) return;\n\n let cur = resolvedRoot;\n for (const part of rel.split(pth.sep)) {\n if (!part || part === \".\") continue;\n cur = pth.join(cur, part);\n let stat;\n try {\n stat = self.fs.lstatSync(cur);\n } catch (e) {\n break; // component does not exist yet: nothing below it can be a symlink\n }\n if (stat.isSymbolicLink()) throw Errors.FILE_IN_THE_WAY(`\"${cur}\"`);\n }\n};\n\nUtils.prototype.findFiles = function (/*String*/ path) {\n const self = this;\n const canLstat = typeof self.fs.lstatSync === \"function\";\n const rootReal = self.fs.realpathSync(path);\n\n // A symlink whose target lies outside the folder being archived must not be\n // followed: statSync would dereference it and copy the target's contents into\n // the archive, disclosing files outside the root (GHSA-wx42-xcp7-pgr4). Allow\n // symlinks that resolve to a location inside the root, reject any that escape.\n function escapesRoot(/*String*/ p) {\n if (!canLstat) return false;\n if (!self.fs.lstatSync(p).isSymbolicLink()) return false;\n let real;\n try {\n real = self.fs.realpathSync(p);\n } catch (e) {\n return true; // dangling or unresolvable symlink: do not follow\n }\n return !(real === rootReal || real.startsWith(rootReal + pth.sep));\n }\n\n function findSync(/*String*/ dir, /*RegExp*/ pattern, /*Boolean*/ recursive, /*Set*/ visited) {\n if (typeof pattern === \"boolean\") {\n recursive = pattern;\n pattern = undefined;\n }\n let files = [];\n self.fs.readdirSync(dir).forEach(function (file) {\n const path = pth.join(dir, file);\n\n if (escapesRoot(path)) return;\n\n const stat = self.fs.statSync(path);\n\n if (!pattern || pattern.test(path)) {\n files.push(pth.normalize(path) + (stat.isDirectory() ? self.sep : \"\"));\n }\n\n if (stat.isDirectory() && recursive) {\n // Descend by resolved real path and skip directories we have already\n // visited. This stops a symlink that points back to an ancestor from\n // recursing forever until the path fails with ELOOP / ENAMETOOLONG\n // (issue #541).\n const realDir = self.fs.realpathSync(path);\n if (!visited.has(realDir)) {\n visited.add(realDir);\n files = files.concat(findSync(path, pattern, recursive, visited));\n }\n }\n });\n return files;\n }\n\n return findSync(path, undefined, true, new Set([rootReal]));\n};\n\n/**\n * Callback for showing if everything was done.\n *\n * @callback filelistCallback\n * @param {Error} err - Error object\n * @param {string[]} list - was request fully completed\n */\n\n/**\n *\n * @param {string} dir\n * @param {filelistCallback} cb\n */\nUtils.prototype.findFilesAsync = function (dir, cb) {\n const self = this;\n const results = [];\n let finished = false;\n const finish = function (err) {\n if (finished) return;\n finished = true;\n cb(err, err ? undefined : results);\n };\n\n const canLstat = typeof self.fs.lstat === \"function\";\n let rootReal = null;\n\n // Reject a symlink whose target escapes the root being archived, so its\n // contents are not dereferenced and copied into the archive\n // (GHSA-wx42-xcp7-pgr4). A symlink resolving to a location inside the root is\n // allowed; a dangling or escaping one is skipped. Calls back (err, escapes).\n const escapesRoot = function (file, cb) {\n if (!canLstat) return cb(null, false);\n self.fs.lstat(file, function (err, lst) {\n if (err) return cb(err);\n if (!lst || !lst.isSymbolicLink()) return cb(null, false);\n self.fs.realpath(file, function (err, real) {\n if (err) return cb(null, true); // dangling: do not follow\n cb(null, !(real === rootReal || real.startsWith(rootReal + pth.sep)));\n });\n });\n };\n\n // Descend by resolved real path and skip directories already visited, so a\n // symlink pointing back to an ancestor cannot recurse forever (issue #541).\n const walk = function (dir, visited, done) {\n self.fs.readdir(dir, function (err, list) {\n if (err) return done(err);\n let pending = list.length;\n if (!pending) return done();\n list.forEach(function (name) {\n const file = pth.join(dir, name);\n escapesRoot(file, function (err, escapes) {\n if (err) return done(err);\n if (escapes) {\n if (!--pending) done();\n return;\n }\n self.fs.stat(file, function (err, stat) {\n if (err) return done(err);\n if (!stat) {\n if (!--pending) done();\n return;\n }\n results.push(pth.normalize(file) + (stat.isDirectory() ? self.sep : \"\"));\n if (!stat.isDirectory()) {\n if (!--pending) done();\n return;\n }\n self.fs.realpath(file, function (err, realDir) {\n if (err) return done(err);\n if (visited.has(realDir)) {\n if (!--pending) done();\n return;\n }\n visited.add(realDir);\n walk(file, visited, function (err) {\n if (err) return done(err);\n if (!--pending) done();\n });\n });\n });\n });\n });\n });\n };\n\n self.fs.realpath(dir, function (err, realDir) {\n if (err) return finish(err);\n rootReal = realDir;\n walk(dir, new Set([realDir]), finish);\n });\n};\n\nUtils.prototype.getAttributes = function () {};\n\nUtils.prototype.setAttributes = function () {};\n\n// STATIC functions\n\n// crc32 single update (it is part of crc32)\nUtils.crc32update = function (crc, byte) {\n return crcTable[(crc ^ byte) & 0xff] ^ (crc >>> 8);\n};\n\nUtils.crc32 = function (buf) {\n if (typeof buf === \"string\") {\n buf = Buffer.from(buf, \"utf8\");\n }\n\n let len = buf.length;\n let crc = ~0;\n for (let off = 0; off < len; ) crc = Utils.crc32update(crc, buf[off++]);\n // xor and cast as uint32 number\n return ~crc >>> 0;\n};\n\nUtils.methodToString = function (/*Number*/ method) {\n switch (method) {\n case Constants.STORED:\n return \"STORED (\" + method + \")\";\n case Constants.DEFLATED:\n return \"DEFLATED (\" + method + \")\";\n default:\n return \"UNSUPPORTED (\" + method + \")\";\n }\n};\n\n/**\n * removes \"..\" style path elements\n * @param {string} path - fixable path\n * @returns string - fixed filepath\n */\nUtils.canonical = function (/*string*/ path) {\n if (!path) return \"\";\n // trick normalize think path is absolute\n const safeSuffix = pth.posix.normalize(\"/\" + path.split(\"\\\\\").join(\"/\"));\n return pth.join(\".\", safeSuffix);\n};\n\n/**\n * fix file names in achive\n * @param {string} path - fixable path\n * @returns string - fixed filepath\n */\n\nUtils.zipnamefix = function (path) {\n if (!path) return \"\";\n // trick normalize think path is absolute\n const safeSuffix = pth.posix.normalize(\"/\" + path.split(\"\\\\\").join(\"/\"));\n return pth.posix.join(\".\", safeSuffix);\n};\n\n/**\n *\n * @param {Array} arr\n * @param {function} callback\n * @returns\n */\nUtils.findLast = function (arr, callback) {\n if (!Array.isArray(arr)) throw new TypeError(\"arr is not array\");\n\n const len = arr.length >>> 0;\n for (let i = len - 1; i >= 0; i--) {\n if (callback(arr[i], i, arr)) {\n return arr[i];\n }\n }\n return void 0;\n};\n\n// make absolute paths taking prefix as root folder\nUtils.sanitize = function (/*string*/ prefix, /*string*/ name) {\n prefix = pth.resolve(pth.normalize(prefix));\n var parts = name.split(\"/\");\n for (var i = 0, l = parts.length; i < l; i++) {\n var path = pth.normalize(pth.join(prefix, parts.slice(i, l).join(pth.sep)));\n if (path === prefix || path.startsWith(prefix + pth.sep)) {\n return path;\n }\n }\n return pth.normalize(pth.join(prefix, pth.basename(name)));\n};\n\n// converts buffer, Uint8Array, string types to buffer\nUtils.toBuffer = function toBuffer(/*buffer, Uint8Array, string*/ input, /* function */ encoder) {\n if (Buffer.isBuffer(input)) {\n return input;\n } else if (input instanceof Uint8Array) {\n return Buffer.from(input);\n } else {\n // expect string all other values are invalid and return empty buffer\n return typeof input === \"string\" ? encoder(input) : Buffer.alloc(0);\n }\n};\n\nUtils.readBigUInt64LE = function (/*Buffer*/ buffer, /*int*/ index) {\n const lo = buffer.readUInt32LE(index);\n const hi = buffer.readUInt32LE(index + 4);\n const value = hi * 0x100000000 + lo;\n // The result is a JS number, so values above 2^53 - 1 cannot be represented\n // exactly. These are zip64 sizes/offsets/counts used as buffer indices; a\n // silently rounded value would misparse the archive. Reject instead.\n if (value > Number.MAX_SAFE_INTEGER) {\n throw Errors.ZIP64_VALUE_TOO_LARGE();\n }\n return value;\n};\n\nUtils.writeBigUInt64LE = function (/*Buffer*/ buffer, /*Number*/ value, /*int*/ index) {\n const lo = value >>> 0;\n const hi = Math.floor(value / 0x100000000) >>> 0;\n buffer.writeUInt32LE(lo, index);\n buffer.writeUInt32LE(hi, index + 4);\n};\n\nUtils.fromDOS2Date = function (val) {\n return new Date(((val >> 25) & 0x7f) + 1980, Math.max(((val >> 21) & 0x0f) - 1, 0), Math.max((val >> 16) & 0x1f, 1), (val >> 11) & 0x1f, (val >> 5) & 0x3f, (val & 0x1f) << 1);\n};\n\nUtils.fromDate2DOS = function (val) {\n let date = 0;\n let time = 0;\n if (val.getFullYear() > 1979) {\n date = (((val.getFullYear() - 1980) & 0x7f) << 9) | ((val.getMonth() + 1) << 5) | val.getDate();\n time = (val.getHours() << 11) | (val.getMinutes() << 5) | (val.getSeconds() >> 1);\n }\n return (date << 16) | time;\n};\n\nUtils.isWin = isWin; // Do we have windows system\nUtils.crcTable = crcTable;\n", "const pth = require(\"path\");\n\nmodule.exports = function (/*String*/ path, /*Utils object*/ { fs }) {\n var _path = path || \"\",\n _obj = newAttr(),\n _stat = null;\n\n function newAttr() {\n return {\n directory: false,\n readonly: false,\n hidden: false,\n executable: false,\n mtime: 0,\n atime: 0\n };\n }\n\n if (_path && fs.existsSync(_path)) {\n _stat = fs.statSync(_path);\n _obj.directory = _stat.isDirectory();\n _obj.mtime = _stat.mtime;\n _obj.atime = _stat.atime;\n _obj.executable = (0o111 & _stat.mode) !== 0; // file is executable who ever har right not just owner\n _obj.readonly = (0o200 & _stat.mode) === 0; // readonly if owner has no write right\n _obj.hidden = pth.basename(_path)[0] === \".\";\n } else {\n console.warn(\"Invalid path: \" + _path);\n }\n\n return {\n get directory() {\n return _obj.directory;\n },\n\n get readOnly() {\n return _obj.readonly;\n },\n\n get hidden() {\n return _obj.hidden;\n },\n\n get mtime() {\n return _obj.mtime;\n },\n\n get atime() {\n return _obj.atime;\n },\n\n get executable() {\n return _obj.executable;\n },\n\n decodeAttributes: function () {},\n\n encodeAttributes: function () {},\n\n toJSON: function () {\n return {\n path: _path,\n isDirectory: _obj.directory,\n isReadOnly: _obj.readonly,\n isHidden: _obj.hidden,\n isExecutable: _obj.executable,\n mTime: _obj.mtime,\n aTime: _obj.atime\n };\n },\n\n toString: function () {\n return JSON.stringify(this.toJSON(), null, \"\\t\");\n }\n };\n};\n", "module.exports = {\n efs: true,\n encode: (data) => Buffer.from(data, \"utf8\"),\n decode: (data) => data.toString(\"utf8\")\n};\n", "module.exports = require(\"./utils\");\nmodule.exports.Constants = require(\"./constants\");\nmodule.exports.Errors = require(\"./errors\");\nmodule.exports.FileAttr = require(\"./fattr\");\nmodule.exports.decoder = require(\"./decoder\");\n", "var Utils = require(\"../util\"),\n Constants = Utils.Constants;\n\n/* The central directory file header */\nmodule.exports = function () {\n var _verMade = 20, // v2.0\n _version = 10, // v1.0\n _flags = 0,\n _method = 0,\n _time = 0,\n _crc = 0,\n _compressedSize = 0,\n _size = 0,\n _fnameLen = 0,\n _extraLen = 0,\n _comLen = 0,\n _diskStart = 0,\n _inattr = 0,\n _attr = 0,\n _offset = 0;\n\n _verMade |= Utils.isWin ? 0x0a00 : 0x0300;\n\n // Set EFS flag since filename and comment fields are all by default encoded using UTF-8.\n // Without it file names may be corrupted for other apps when file names use unicode chars\n _flags |= Constants.FLG_EFS;\n\n const _localHeader = {\n extraLen: 0\n };\n\n // casting\n const uint32 = (val) => Math.max(0, val) >>> 0;\n const uint16 = (val) => Math.max(0, val) & 0xffff;\n const uint8 = (val) => Math.max(0, val) & 0xff;\n\n _time = Utils.fromDate2DOS(new Date());\n\n return {\n get made() {\n return _verMade;\n },\n set made(val) {\n _verMade = val;\n },\n\n get version() {\n return _version;\n },\n set version(val) {\n _version = val;\n },\n\n get flags() {\n return _flags;\n },\n set flags(val) {\n _flags = val;\n },\n\n get flags_efs() {\n return (_flags & Constants.FLG_EFS) > 0;\n },\n set flags_efs(val) {\n if (val) {\n _flags |= Constants.FLG_EFS;\n } else {\n _flags &= ~Constants.FLG_EFS;\n }\n },\n\n get flags_desc() {\n return (_flags & Constants.FLG_DESC) > 0;\n },\n set flags_desc(val) {\n if (val) {\n _flags |= Constants.FLG_DESC;\n } else {\n _flags &= ~Constants.FLG_DESC;\n }\n },\n\n get method() {\n return _method;\n },\n set method(val) {\n switch (val) {\n case Constants.STORED:\n this.version = 10;\n break;\n case Constants.DEFLATED:\n default:\n this.version = 20;\n }\n _method = val;\n },\n\n get time() {\n return Utils.fromDOS2Date(this.timeval);\n },\n set time(val) {\n val = new Date(val);\n this.timeval = Utils.fromDate2DOS(val);\n },\n\n get timeval() {\n return _time;\n },\n set timeval(val) {\n _time = uint32(val);\n },\n\n get timeHighByte() {\n return uint8(_time >>> 8);\n },\n get crc() {\n return _crc;\n },\n set crc(val) {\n _crc = uint32(val);\n },\n\n get compressedSize() {\n return _compressedSize;\n },\n set compressedSize(val) {\n _compressedSize = uint32(val);\n },\n\n get size() {\n return _size;\n },\n set size(val) {\n _size = uint32(val);\n },\n\n get fileNameLength() {\n return _fnameLen;\n },\n set fileNameLength(val) {\n _fnameLen = val;\n },\n\n get extraLength() {\n return _extraLen;\n },\n set extraLength(val) {\n _extraLen = val;\n },\n\n get extraLocalLength() {\n return _localHeader.extraLen;\n },\n set extraLocalLength(val) {\n _localHeader.extraLen = val;\n },\n\n get commentLength() {\n return _comLen;\n },\n set commentLength(val) {\n _comLen = val;\n },\n\n get diskNumStart() {\n return _diskStart;\n },\n set diskNumStart(val) {\n _diskStart = uint32(val);\n },\n\n get inAttr() {\n return _inattr;\n },\n set inAttr(val) {\n _inattr = uint32(val);\n },\n\n get attr() {\n return _attr;\n },\n set attr(val) {\n _attr = uint32(val);\n },\n\n // get Unix file permissions\n get fileAttr() {\n // Mask to the 9 rwxrwxrwx bits only. The setuid (0o4000), setgid\n // (0o2000) and sticky (0o1000) bits are attacker-controlled archive\n // metadata; preserving them on extraction (keepOriginalPermission)\n // lets a crafted zip plant a setuid-root binary when extracting as\n // root, a local privilege escalation (GHSA-679w-jf3m-wh39).\n return ((_attr || 0) >> 16) & 0o777;\n },\n\n get offset() {\n return _offset;\n },\n set offset(val) {\n _offset = uint32(val);\n },\n\n get encrypted() {\n return (_flags & Constants.FLG_ENC) === Constants.FLG_ENC;\n },\n\n get centralHeaderSize() {\n return Constants.CENHDR + _fnameLen + _extraLen + _comLen;\n },\n\n get realDataOffset() {\n return _offset + Constants.LOCHDR + _localHeader.fnameLen + _localHeader.extraLen;\n },\n\n get localHeader() {\n return _localHeader;\n },\n\n loadLocalHeaderFromBinary: function (/*Buffer*/ input) {\n // The LOC offset comes from the central directory and is attacker\n // controlled. Reject one that would read past the end of the buffer,\n // otherwise readUInt32LE below throws a raw RangeError instead of a\n // clean INVALID_LOC (and escapes the async error path).\n if (_offset < 0 || _offset + Constants.LOCHDR > input.length) {\n throw Utils.Errors.INVALID_LOC();\n }\n var data = input.slice(_offset, _offset + Constants.LOCHDR);\n // 30 bytes and should start with \"PK\\003\\004\"\n if (data.readUInt32LE(0) !== Constants.LOCSIG) {\n throw Utils.Errors.INVALID_LOC();\n }\n\n // version needed to extract\n _localHeader.version = data.readUInt16LE(Constants.LOCVER);\n // general purpose bit flag\n _localHeader.flags = data.readUInt16LE(Constants.LOCFLG);\n // desc flag\n _localHeader.flags_desc = (_localHeader.flags & Constants.FLG_DESC) > 0;\n // compression method\n _localHeader.method = data.readUInt16LE(Constants.LOCHOW);\n // modification time (2 bytes time, 2 bytes date)\n _localHeader.time = data.readUInt32LE(Constants.LOCTIM);\n // uncompressed file crc-32 valu\n _localHeader.crc = data.readUInt32LE(Constants.LOCCRC);\n // compressed size\n _localHeader.compressedSize = data.readUInt32LE(Constants.LOCSIZ);\n // uncompressed size\n _localHeader.size = data.readUInt32LE(Constants.LOCLEN);\n // filename length\n _localHeader.fnameLen = data.readUInt16LE(Constants.LOCNAM);\n // extra field length\n _localHeader.extraLen = data.readUInt16LE(Constants.LOCEXT);\n\n // read extra data\n const extraStart = _offset + Constants.LOCHDR + _localHeader.fnameLen;\n const extraEnd = extraStart + _localHeader.extraLen;\n return input.slice(extraStart, extraEnd);\n },\n\n loadFromBinary: function (/*Buffer*/ data) {\n // data should be 46 bytes and start with \"PK 01 02\"\n if (data.length !== Constants.CENHDR || data.readUInt32LE(0) !== Constants.CENSIG) {\n throw Utils.Errors.INVALID_CEN();\n }\n // version made by\n _verMade = data.readUInt16LE(Constants.CENVEM);\n // version needed to extract\n _version = data.readUInt16LE(Constants.CENVER);\n // encrypt, decrypt flags\n _flags = data.readUInt16LE(Constants.CENFLG);\n // compression method\n _method = data.readUInt16LE(Constants.CENHOW);\n // modification time (2 bytes time, 2 bytes date)\n _time = data.readUInt32LE(Constants.CENTIM);\n // uncompressed file crc-32 value\n _crc = data.readUInt32LE(Constants.CENCRC);\n // compressed size\n _compressedSize = data.readUInt32LE(Constants.CENSIZ);\n // uncompressed size\n _size = data.readUInt32LE(Constants.CENLEN);\n // filename length\n _fnameLen = data.readUInt16LE(Constants.CENNAM);\n // extra field length\n _extraLen = data.readUInt16LE(Constants.CENEXT);\n // file comment length\n _comLen = data.readUInt16LE(Constants.CENCOM);\n // volume number start\n _diskStart = data.readUInt16LE(Constants.CENDSK);\n // internal file attributes\n _inattr = data.readUInt16LE(Constants.CENATT);\n // external file attributes\n _attr = data.readUInt32LE(Constants.CENATX);\n // LOC header offset\n _offset = data.readUInt32LE(Constants.CENOFF);\n },\n\n localHeaderToBinary: function () {\n // LOC header size (30 bytes)\n var data = Buffer.alloc(Constants.LOCHDR);\n // \"PK\\003\\004\"\n data.writeUInt32LE(Constants.LOCSIG, 0);\n // version needed to extract\n data.writeUInt16LE(_version, Constants.LOCVER);\n // general purpose bit flag\n // clear bit 3 (data descriptor): we always write the real crc-32\n // and sizes into this local header, so no trailing descriptor is\n // emitted. Leaving the flag set would make the output unreadable\n // (see issue #555).\n data.writeUInt16LE(_flags & ~Constants.FLG_DESC, Constants.LOCFLG);\n // compression method\n data.writeUInt16LE(_method, Constants.LOCHOW);\n // modification time (2 bytes time, 2 bytes date)\n data.writeUInt32LE(_time, Constants.LOCTIM);\n // uncompressed file crc-32 value\n data.writeUInt32LE(_crc, Constants.LOCCRC);\n // compressed size\n data.writeUInt32LE(_compressedSize, Constants.LOCSIZ);\n // uncompressed size\n data.writeUInt32LE(_size, Constants.LOCLEN);\n // filename length\n data.writeUInt16LE(_fnameLen, Constants.LOCNAM);\n // extra field length\n data.writeUInt16LE(_localHeader.extraLen, Constants.LOCEXT);\n return data;\n },\n\n centralHeaderToBinary: function () {\n // CEN header size (46 bytes)\n var data = Buffer.alloc(Constants.CENHDR + _fnameLen + _extraLen + _comLen);\n // \"PK\\001\\002\"\n data.writeUInt32LE(Constants.CENSIG, 0);\n // version made by\n data.writeUInt16LE(_verMade, Constants.CENVEM);\n // version needed to extract\n data.writeUInt16LE(_version, Constants.CENVER);\n // encrypt, decrypt flags\n // clear bit 3 (data descriptor) to match the local header we emit\n // (real crc/sizes are written, no descriptor follows the data) \u2014 issue #555\n data.writeUInt16LE(_flags & ~Constants.FLG_DESC, Constants.CENFLG);\n // compression method\n data.writeUInt16LE(_method, Constants.CENHOW);\n // modification time (2 bytes time, 2 bytes date)\n data.writeUInt32LE(_time, Constants.CENTIM);\n // uncompressed file crc-32 value\n data.writeUInt32LE(_crc, Constants.CENCRC);\n // compressed size\n data.writeUInt32LE(_compressedSize, Constants.CENSIZ);\n // uncompressed size\n data.writeUInt32LE(_size, Constants.CENLEN);\n // filename length\n data.writeUInt16LE(_fnameLen, Constants.CENNAM);\n // extra field length\n data.writeUInt16LE(_extraLen, Constants.CENEXT);\n // file comment length\n data.writeUInt16LE(_comLen, Constants.CENCOM);\n // volume number start\n data.writeUInt16LE(_diskStart, Constants.CENDSK);\n // internal file attributes\n data.writeUInt16LE(_inattr, Constants.CENATT);\n // external file attributes\n data.writeUInt32LE(_attr, Constants.CENATX);\n // LOC header offset\n data.writeUInt32LE(_offset, Constants.CENOFF);\n return data;\n },\n\n toJSON: function () {\n const bytes = function (nr) {\n return nr + \" bytes\";\n };\n\n return {\n made: _verMade,\n version: _version,\n flags: _flags,\n method: Utils.methodToString(_method),\n time: this.time,\n crc: \"0x\" + _crc.toString(16).toUpperCase(),\n compressedSize: bytes(_compressedSize),\n size: bytes(_size),\n fileNameLength: bytes(_fnameLen),\n extraLength: bytes(_extraLen),\n commentLength: bytes(_comLen),\n diskNumStart: _diskStart,\n inAttr: _inattr,\n attr: _attr,\n offset: _offset,\n centralHeaderSize: bytes(Constants.CENHDR + _fnameLen + _extraLen + _comLen)\n };\n },\n\n toString: function () {\n return JSON.stringify(this.toJSON(), null, \"\\t\");\n }\n };\n};\n", "var Utils = require(\"../util\"),\n Constants = Utils.Constants;\n\n/* The entries in the end of central directory */\nmodule.exports = function () {\n var _volumeEntries = 0,\n _totalEntries = 0,\n _size = 0,\n _offset = 0,\n _commentLength = 0;\n\n const needsZip64 = () => _volumeEntries > Constants.EF_ZIP64_OR_16 || _totalEntries > Constants.EF_ZIP64_OR_16 || _size > Constants.EF_ZIP64_OR_32 || _offset > Constants.EF_ZIP64_OR_32;\n\n return {\n get diskEntries() {\n return _volumeEntries;\n },\n set diskEntries(/*Number*/ val) {\n _volumeEntries = _totalEntries = val;\n },\n\n get totalEntries() {\n return _totalEntries;\n },\n set totalEntries(/*Number*/ val) {\n _totalEntries = _volumeEntries = val;\n },\n\n get size() {\n return _size;\n },\n set size(/*Number*/ val) {\n _size = val;\n },\n\n get offset() {\n return _offset;\n },\n set offset(/*Number*/ val) {\n _offset = val;\n },\n\n get commentLength() {\n return _commentLength;\n },\n set commentLength(/*Number*/ val) {\n _commentLength = val;\n },\n\n get mainHeaderSize() {\n return (needsZip64() ? Constants.ZIP64HDR + Constants.END64HDR : 0) + Constants.ENDHDR + _commentLength;\n },\n\n loadFromBinary: function (/*Buffer*/ data) {\n // data should be 22 bytes and start with \"PK 05 06\"\n // or be 56+ bytes and start with \"PK 06 06\" for Zip64\n if (\n (data.length !== Constants.ENDHDR || data.readUInt32LE(0) !== Constants.ENDSIG) &&\n (data.length < Constants.ZIP64HDR || data.readUInt32LE(0) !== Constants.ZIP64SIG)\n ) {\n throw Utils.Errors.INVALID_END();\n }\n\n if (data.readUInt32LE(0) === Constants.ENDSIG) {\n // number of entries on this volume\n _volumeEntries = data.readUInt16LE(Constants.ENDSUB);\n // total number of entries\n _totalEntries = data.readUInt16LE(Constants.ENDTOT);\n // central directory size in bytes\n _size = data.readUInt32LE(Constants.ENDSIZ);\n // offset of first CEN header\n _offset = data.readUInt32LE(Constants.ENDOFF);\n // zip file comment length\n _commentLength = data.readUInt16LE(Constants.ENDCOM);\n } else {\n // number of entries on this volume\n _volumeEntries = Utils.readBigUInt64LE(data, Constants.ZIP64SUB);\n // total number of entries\n _totalEntries = Utils.readBigUInt64LE(data, Constants.ZIP64TOT);\n // central directory size in bytes\n _size = Utils.readBigUInt64LE(data, Constants.ZIP64SIZB);\n // offset of first CEN header\n _offset = Utils.readBigUInt64LE(data, Constants.ZIP64OFF);\n\n _commentLength = 0;\n }\n },\n\n toBinary: function () {\n if (!needsZip64()) {\n var b = Buffer.alloc(Constants.ENDHDR + _commentLength);\n // \"PK 05 06\" signature\n b.writeUInt32LE(Constants.ENDSIG, 0);\n b.writeUInt32LE(0, 4);\n // number of entries on this volume\n b.writeUInt16LE(_volumeEntries, Constants.ENDSUB);\n // total number of entries\n b.writeUInt16LE(_totalEntries, Constants.ENDTOT);\n // central directory size in bytes\n b.writeUInt32LE(_size, Constants.ENDSIZ);\n // offset of first CEN header\n b.writeUInt32LE(_offset, Constants.ENDOFF);\n // zip file comment length\n b.writeUInt16LE(_commentLength, Constants.ENDCOM);\n // fill comment memory with spaces so no garbage is left there\n b.fill(\" \", Constants.ENDHDR);\n\n return b;\n }\n\n var b = Buffer.alloc(this.mainHeaderSize);\n let offset = 0;\n\n // Zip64 end of central directory record.\n b.writeUInt32LE(Constants.ZIP64SIG, offset);\n Utils.writeBigUInt64LE(b, Constants.ZIP64HDR - Constants.ZIP64LEAD, offset + Constants.ZIP64SIZE);\n b.writeUInt16LE(45, offset + Constants.ZIP64VEM);\n b.writeUInt16LE(45, offset + Constants.ZIP64VER);\n b.writeUInt32LE(0, offset + Constants.ZIP64DSK);\n b.writeUInt32LE(0, offset + Constants.ZIP64DSKDIR);\n Utils.writeBigUInt64LE(b, _volumeEntries, offset + Constants.ZIP64SUB);\n Utils.writeBigUInt64LE(b, _totalEntries, offset + Constants.ZIP64TOT);\n Utils.writeBigUInt64LE(b, _size, offset + Constants.ZIP64SIZB);\n Utils.writeBigUInt64LE(b, _offset, offset + Constants.ZIP64OFF);\n\n const zip64EndOffset = _offset + _size;\n offset += Constants.ZIP64HDR;\n\n // Zip64 end of central directory locator.\n b.writeUInt32LE(Constants.END64SIG, offset);\n b.writeUInt32LE(0, offset + Constants.END64START);\n Utils.writeBigUInt64LE(b, zip64EndOffset, offset + Constants.END64OFF);\n b.writeUInt32LE(1, offset + Constants.END64NUMDISKS);\n offset += Constants.END64HDR;\n\n // \"PK 05 06\" signature\n b.writeUInt32LE(Constants.ENDSIG, offset);\n b.writeUInt32LE(0, offset + 4);\n // number of entries on this volume\n b.writeUInt16LE(Math.min(_volumeEntries, Constants.EF_ZIP64_OR_16), offset + Constants.ENDSUB);\n // total number of entries\n b.writeUInt16LE(Math.min(_totalEntries, Constants.EF_ZIP64_OR_16), offset + Constants.ENDTOT);\n // central directory size in bytes\n b.writeUInt32LE(Math.min(_size, Constants.EF_ZIP64_OR_32), offset + Constants.ENDSIZ);\n // offset of first CEN header\n b.writeUInt32LE(Math.min(_offset, Constants.EF_ZIP64_OR_32), offset + Constants.ENDOFF);\n // zip file comment length\n b.writeUInt16LE(_commentLength, offset + Constants.ENDCOM);\n // fill comment memory with spaces so no garbage is left there\n b.fill(\" \", offset + Constants.ENDHDR);\n\n return b;\n },\n\n toJSON: function () {\n // creates 0x0000 style output\n const offset = function (nr, len) {\n let offs = nr.toString(16).toUpperCase();\n while (offs.length < len) offs = \"0\" + offs;\n return \"0x\" + offs;\n };\n\n return {\n diskEntries: _volumeEntries,\n totalEntries: _totalEntries,\n size: _size + \" bytes\",\n offset: offset(_offset, 4),\n commentLength: _commentLength\n };\n },\n\n toString: function () {\n return JSON.stringify(this.toJSON(), null, \"\\t\");\n }\n };\n};\n// Misspelled\n", "exports.EntryHeader = require(\"./entryHeader\");\nexports.MainHeader = require(\"./mainHeader\");\n", "module.exports = function (/*Buffer*/ inbuf) {\n var zlib = require(\"zlib\");\n\n var opts = { chunkSize: (parseInt(inbuf.length / 1024) + 1) * 1024 };\n\n return {\n deflate: function () {\n return zlib.deflateRawSync(inbuf, opts);\n },\n\n deflateAsync: function (/*Function*/ callback) {\n var tmp = zlib.createDeflateRaw(opts),\n parts = [],\n total = 0;\n tmp.on(\"data\", function (data) {\n parts.push(data);\n total += data.length;\n });\n tmp.on(\"end\", function () {\n var buf = Buffer.alloc(total),\n written = 0;\n buf.fill(0);\n for (var i = 0; i < parts.length; i++) {\n var part = parts[i];\n part.copy(buf, written);\n written += part.length;\n }\n callback && callback(buf);\n });\n tmp.end(inbuf);\n }\n };\n};\n", "const version = +(process?.versions?.node ?? \"\").split(\".\")[0] || 0;\nconst Errors = require(\"../util/errors\");\n\nmodule.exports = function (/*Buffer*/ inbuf, /*number*/ expectedLength) {\n var zlib = require(\"zlib\");\n // Cap decompression output at the entry's declared uncompressed size to bound\n // decompression bombs (CVE-2026-39244). A declared size of 0 must not disable\n // the cap: a genuinely empty entry inflates to 0 bytes, so a 1-byte floor\n // still lets it through while stopping a bomb that lies about its size\n // (GHSA-rcw4-f5rp-g42v). zlib requires maxOutputLength >= 1.\n const maxOutputLength = expectedLength > 0 ? expectedLength : 1;\n const option = version >= 15 ? { maxOutputLength } : {};\n\n return {\n inflate: function () {\n return zlib.inflateRawSync(inbuf, option);\n },\n\n inflateAsync: function (/*Function*/ callback) {\n var tmp = zlib.createInflateRaw(option),\n parts = [],\n total = 0,\n done = false;\n const fail = function (err) {\n if (done) return;\n done = true;\n tmp.destroy();\n callback && callback(Buffer.alloc(0), err);\n };\n // Route stream errors (e.g. Z_DATA_ERROR on malformed input) through the\n // callback. Without an \"error\" listener zlib re-throws the event as an\n // uncaught exception on a later tick, crashing the host process instead\n // of failing the call (GHSA-8238-w5pm-2374).\n tmp.on(\"error\", function (err) {\n fail(err);\n });\n tmp.on(\"data\", function (data) {\n if (done) return;\n total += data.length;\n // The streaming API ignores maxOutputLength, so enforce the cap by\n // hand; otherwise the async path decompresses without limit while the\n // sync path is capped (GHSA-v429-h5qx-84wm, GHSA-c6fg-446q-cg94).\n if (total > maxOutputLength) {\n return fail(Errors.MAX_OUTPUT_EXCEEDED());\n }\n parts.push(data);\n });\n tmp.on(\"end\", function () {\n if (done) return;\n done = true;\n var buf = Buffer.alloc(total),\n written = 0;\n buf.fill(0);\n for (var i = 0; i < parts.length; i++) {\n var part = parts[i];\n part.copy(buf, written);\n written += part.length;\n }\n callback && callback(buf);\n });\n tmp.end(inbuf);\n }\n };\n};\n", "\"use strict\";\n\n// node crypt, we use it for generate salt\n// eslint-disable-next-line node/no-unsupported-features/node-builtins\nconst { randomFillSync } = require(\"crypto\");\nconst Errors = require(\"../util/errors\");\n\n// generate CRC32 lookup table\nconst crctable = new Uint32Array(256).map((t, crc) => {\n for (let j = 0; j < 8; j++) {\n if (0 !== (crc & 1)) {\n crc = (crc >>> 1) ^ 0xedb88320;\n } else {\n crc >>>= 1;\n }\n }\n return crc >>> 0;\n});\n\n// C-style uInt32 Multiply (discards higher bits, when JS multiply discards lower bits)\nconst uMul = (a, b) => Math.imul(a, b) >>> 0;\n\n// crc32 byte single update (actually same function is part of utils.crc32 function :) )\nconst crc32update = (pCrc32, bval) => {\n return crctable[(pCrc32 ^ bval) & 0xff] ^ (pCrc32 >>> 8);\n};\n\n// function for generating salt for encrytion header\nconst genSalt = () => {\n if (\"function\" === typeof randomFillSync) {\n return randomFillSync(Buffer.alloc(12));\n } else {\n // fallback if function is not defined\n return genSalt.node();\n }\n};\n\n// salt generation with node random function (mainly as fallback)\ngenSalt.node = () => {\n const salt = Buffer.alloc(12);\n const len = salt.length;\n for (let i = 0; i < len; i++) salt[i] = (Math.random() * 256) & 0xff;\n return salt;\n};\n\n// general config\nconst config = {\n genSalt\n};\n\n// Class Initkeys handles same basic ops with keys\nfunction Initkeys(pw) {\n const pass = Buffer.isBuffer(pw) ? pw : Buffer.from(pw);\n this.keys = new Uint32Array([0x12345678, 0x23456789, 0x34567890]);\n for (let i = 0; i < pass.length; i++) {\n this.updateKeys(pass[i]);\n }\n}\n\nInitkeys.prototype.updateKeys = function (byteValue) {\n const keys = this.keys;\n keys[0] = crc32update(keys[0], byteValue);\n keys[1] += keys[0] & 0xff;\n keys[1] = uMul(keys[1], 134775813) + 1;\n keys[2] = crc32update(keys[2], keys[1] >>> 24);\n return byteValue;\n};\n\nInitkeys.prototype.next = function () {\n const k = (this.keys[2] | 2) >>> 0; // key\n return (uMul(k, k ^ 1) >> 8) & 0xff; // decode\n};\n\nfunction make_decrypter(/*Buffer*/ pwd) {\n // 1. Stage initialize key\n const keys = new Initkeys(pwd);\n\n // return decrypter function\n return function (/*Buffer*/ data) {\n // result - we create new Buffer for results\n const result = Buffer.alloc(data.length);\n let pos = 0;\n // process input data\n for (let c of data) {\n //c ^= keys.next();\n //result[pos++] = c; // decode & Save Value\n result[pos++] = keys.updateKeys(c ^ keys.next()); // update keys with decoded byte\n }\n return result;\n };\n}\n\nfunction make_encrypter(/*Buffer*/ pwd) {\n // 1. Stage initialize key\n const keys = new Initkeys(pwd);\n\n // return encrypting function, result and pos is here so we dont have to merge buffers later\n return function (/*Buffer*/ data, /*Buffer*/ result, /* Number */ pos = 0) {\n // result - we create new Buffer for results\n if (!result) result = Buffer.alloc(data.length);\n // process input data\n for (let c of data) {\n const k = keys.next(); // save key byte\n result[pos++] = c ^ k; // save val\n keys.updateKeys(c); // update keys with decoded byte\n }\n return result;\n };\n}\n\nfunction decrypt(/*Buffer*/ data, /*Object*/ header, /*String, Buffer*/ pwd) {\n if (!data || !Buffer.isBuffer(data) || data.length < 12) {\n return Buffer.alloc(0);\n }\n\n // 1. We Initialize and generate decrypting function\n const decrypter = make_decrypter(pwd);\n\n // 2. decrypt salt what is always 12 bytes and is a part of file content\n const salt = decrypter(data.slice(0, 12));\n\n // if bit 3 (0x08) of the general-purpose flags field is set, check salt[11] with the high byte of the header time\n // 2 byte data block (as per Info-Zip spec), otherwise check with the high byte of the header entry\n const verifyByte = (header.flags & 0x8) === 0x8 ? header.timeHighByte : header.crc >>> 24;\n\n //3. does password meet expectations\n if (salt[11] !== verifyByte) {\n throw Errors.WRONG_PASSWORD();\n }\n\n // 4. decode content\n return decrypter(data.slice(12));\n}\n\n// lets add way to populate salt, NOT RECOMMENDED for production but maybe useful for testing general functionality\nfunction _salter(data) {\n if (Buffer.isBuffer(data) && data.length >= 12) {\n // be aware - currently salting buffer data is modified\n config.genSalt = function () {\n return data.slice(0, 12);\n };\n } else if (data === \"node\") {\n // test salt generation with node random function\n config.genSalt = genSalt.node;\n } else {\n // if value is not acceptable config gets reset.\n config.genSalt = genSalt;\n }\n}\n\nfunction encrypt(/*Buffer*/ data, /*Object*/ header, /*String, Buffer*/ pwd, /*Boolean*/ oldlike = false) {\n // 1. test data if data is not Buffer we make buffer from it\n if (data == null) data = Buffer.alloc(0);\n // if data is not buffer be make buffer from it\n if (!Buffer.isBuffer(data)) data = Buffer.from(data.toString());\n\n // 2. We Initialize and generate encrypting function\n const encrypter = make_encrypter(pwd);\n\n // 3. generate salt (12-bytes of random data)\n const salt = config.genSalt();\n salt[11] = (header.crc >>> 24) & 0xff;\n\n // old implementations (before PKZip 2.04g) used two byte check\n if (oldlike) salt[10] = (header.crc >>> 16) & 0xff;\n\n // 4. create output\n const result = Buffer.alloc(data.length + 12);\n encrypter(salt, result);\n\n // finally encode content\n return encrypter(data, result, 12);\n}\n\nmodule.exports = { decrypt, encrypt, _salter };\n", "exports.Deflater = require(\"./deflater\");\nexports.Inflater = require(\"./inflater\");\nexports.ZipCrypto = require(\"./zipcrypto\");\n", "var Utils = require(\"./util\"),\n Headers = require(\"./headers\"),\n Constants = Utils.Constants,\n Methods = require(\"./methods\");\n\nmodule.exports = function (/** object */ options, /*Buffer*/ input) {\n var _centralHeader = new Headers.EntryHeader(),\n _entryName = Buffer.alloc(0),\n _comment = Buffer.alloc(0),\n _isDirectory = false,\n uncompressedData = null,\n _extra = Buffer.alloc(0),\n _extralocal = Buffer.alloc(0),\n _efs = true;\n\n // assign options\n const opts = options;\n\n const decoder = typeof opts.decoder === \"object\" ? opts.decoder : Utils.decoder;\n _efs = decoder.hasOwnProperty(\"efs\") ? decoder.efs : false;\n\n function getCompressedDataFromZip() {\n //if (!input || !Buffer.isBuffer(input)) {\n if (!input || !(input instanceof Uint8Array)) {\n return Buffer.alloc(0);\n }\n _extralocal = _centralHeader.loadLocalHeaderFromBinary(input);\n const dataOffset = _centralHeader.realDataOffset;\n const dataEnd = dataOffset + _centralHeader.compressedSize;\n // The offsets and sizes come from attacker-controlled headers. Require the\n // declared compressed extent to be fully present rather than letting slice()\n // silently clamp to a short buffer (which only surfaces later as a CRC\n // failure). Fail loudly with a header error instead (GHSA-wwrv-q5gf-5843).\n if (dataOffset < 0 || dataEnd < dataOffset || dataEnd > input.length) {\n throw Utils.Errors.INVALID_LOC();\n }\n return input.slice(dataOffset, dataEnd);\n }\n\n function crc32OK(data) {\n // When bit 3 (0x08) of the general-purpose flags is set, the crc-32 and\n // sizes were unknown when the local file header was written, so that\n // header carries placeholder zeros and the real values are repeated in a\n // data descriptor after the compressed data. adm-zip always parses the\n // central directory, whose header holds the authoritative crc-32 and\n // sizes, so we validate the payload against that value.\n //\n // Earlier versions instead located and parsed the trailing descriptor and\n // threw when it was absent or in an unexpected shape. Many valid archives\n // set the descriptor flag but write the real crc/sizes into the local and\n // central headers without emitting a descriptor (or write one we did not\n // recognise), so that strict handling rejected readable zips\n // (issues #533, #548, #554). Trusting the central-directory crc keeps the\n // integrity check while accepting those archives.\n const expectedCrc = _centralHeader.flags_desc || _centralHeader.localHeader.flags_desc ? _centralHeader.crc : _centralHeader.localHeader.crc;\n\n return Utils.crc32(data) === expectedCrc;\n }\n\n function decompress(/*Boolean*/ async, /*Function*/ callback, /*String, Buffer*/ pass) {\n if (typeof callback === \"undefined\" && typeof async === \"string\") {\n pass = async;\n async = void 0;\n }\n if (_isDirectory) {\n if (async && callback) {\n callback(Buffer.alloc(0), Utils.Errors.DIRECTORY_CONTENT_ERROR()); //si added error.\n }\n return Buffer.alloc(0);\n }\n\n var compressedData;\n try {\n compressedData = getCompressedDataFromZip();\n\n if (compressedData.length === 0) {\n // File is empty, nothing to decompress.\n if (async && callback) callback(compressedData);\n return compressedData;\n }\n\n if (_centralHeader.encrypted) {\n if (\"string\" !== typeof pass && !Buffer.isBuffer(pass)) {\n throw Utils.Errors.INVALID_PASS_PARAM();\n }\n compressedData = Methods.ZipCrypto.decrypt(compressedData, _centralHeader, pass);\n }\n } catch (err) {\n // These synchronous parse/setup steps run before any callback fires.\n // In async mode a malformed local header (e.g. a bad LOC offset) would\n // otherwise throw out of getDataAsync and bypass the callback error\n // channel, crashing the caller. Route it through the callback instead.\n if (async && callback) {\n callback(Buffer.alloc(0), err);\n return Buffer.alloc(0);\n }\n throw err;\n }\n\n var data;\n\n switch (_centralHeader.method) {\n case Utils.Constants.STORED:\n // STORED entries are not compressed, so the uncompressed output is\n // exactly the bytes present in the archive. Allocate from the real\n // data length rather than the attacker-declared central-directory\n // size, otherwise a tiny archive can declare a huge size and force a\n // multi-gigabyte allocation before any validation (CVE-2026-39244).\n data = Buffer.alloc(compressedData.length);\n compressedData.copy(data);\n if (!crc32OK(data)) {\n if (async && callback) callback(data, Utils.Errors.BAD_CRC()); //si added error\n throw Utils.Errors.BAD_CRC();\n } else {\n //si added otherwise did not seem to return data.\n if (async && callback) callback(data);\n return data;\n }\n case Utils.Constants.DEFLATED:\n // Do not pre-allocate the declared uncompressed size. The inflater\n // grows its output buffer as zlib emits data and caps the total at\n // the declared size (maxOutputLength), so a bogus size can no longer\n // trigger an eager allocation before the data is read (CVE-2026-39244).\n var inflater = new Methods.Inflater(compressedData, _centralHeader.size);\n if (!async) {\n data = inflater.inflate();\n if (!crc32OK(data)) {\n throw Utils.Errors.BAD_CRC(`\"${decoder.decode(_entryName)}\"`);\n }\n return data;\n } else {\n inflater.inflateAsync(function (result, err) {\n if (!callback) return;\n if (err) {\n // surface inflater/stream failures instead of validating\n // the empty placeholder buffer against the CRC\n callback(Buffer.alloc(0), err);\n } else if (!crc32OK(result)) {\n callback(result, Utils.Errors.BAD_CRC()); //si added error\n } else {\n callback(result);\n }\n });\n }\n break;\n default:\n if (async && callback) callback(Buffer.alloc(0), Utils.Errors.UNKNOWN_METHOD());\n throw Utils.Errors.UNKNOWN_METHOD();\n }\n }\n\n function compress(/*Boolean*/ async, /*Function*/ callback) {\n if ((!uncompressedData || !uncompressedData.length) && Buffer.isBuffer(input)) {\n // no data set or the data wasn't changed to require recompression\n if (async && callback) callback(getCompressedDataFromZip());\n return getCompressedDataFromZip();\n }\n\n if (uncompressedData.length && !_isDirectory) {\n var compressedData;\n // Local file header\n switch (_centralHeader.method) {\n case Utils.Constants.STORED:\n _centralHeader.compressedSize = _centralHeader.size;\n\n compressedData = Buffer.alloc(uncompressedData.length);\n uncompressedData.copy(compressedData);\n\n if (async && callback) callback(compressedData);\n return compressedData;\n default:\n case Utils.Constants.DEFLATED:\n var deflater = new Methods.Deflater(uncompressedData);\n if (!async) {\n var deflated = deflater.deflate();\n _centralHeader.compressedSize = deflated.length;\n return deflated;\n } else {\n deflater.deflateAsync(function (data) {\n compressedData = Buffer.alloc(data.length);\n _centralHeader.compressedSize = data.length;\n data.copy(compressedData);\n callback && callback(compressedData);\n });\n }\n deflater = null;\n break;\n }\n } else if (async && callback) {\n callback(Buffer.alloc(0));\n } else {\n return Buffer.alloc(0);\n }\n }\n\n function readUInt64LE(buffer, offset) {\n return Utils.readBigUInt64LE(buffer, offset);\n }\n\n function parseExtra(data) {\n try {\n var offset = 0;\n var signature, size, part;\n while (offset + 4 < data.length) {\n signature = data.readUInt16LE(offset);\n offset += 2;\n size = data.readUInt16LE(offset);\n offset += 2;\n part = data.slice(offset, offset + size);\n offset += size;\n if (Constants.ID_ZIP64 === signature) {\n parseZip64ExtendedInformation(part);\n }\n }\n } catch (error) {\n throw Utils.Errors.EXTRA_FIELD_PARSE_ERROR();\n }\n }\n\n //Override header field values with values from the ZIP64 extra field\n function parseZip64ExtendedInformation(data) {\n var size, compressedSize, offset, diskNumStart;\n\n if (data.length >= Constants.EF_ZIP64_SCOMP) {\n size = readUInt64LE(data, Constants.EF_ZIP64_SUNCOMP);\n if (_centralHeader.size === Constants.EF_ZIP64_OR_32) {\n _centralHeader.size = size;\n }\n }\n if (data.length >= Constants.EF_ZIP64_RHO) {\n compressedSize = readUInt64LE(data, Constants.EF_ZIP64_SCOMP);\n if (_centralHeader.compressedSize === Constants.EF_ZIP64_OR_32) {\n _centralHeader.compressedSize = compressedSize;\n }\n }\n if (data.length >= Constants.EF_ZIP64_DSN) {\n offset = readUInt64LE(data, Constants.EF_ZIP64_RHO);\n if (_centralHeader.offset === Constants.EF_ZIP64_OR_32) {\n _centralHeader.offset = offset;\n }\n }\n if (data.length >= Constants.EF_ZIP64_DSN + 4) {\n diskNumStart = data.readUInt32LE(Constants.EF_ZIP64_DSN);\n if (_centralHeader.diskNumStart === Constants.EF_ZIP64_OR_16) {\n _centralHeader.diskNumStart = diskNumStart;\n }\n }\n }\n\n return {\n get entryName() {\n return decoder.decode(_entryName);\n },\n get rawEntryName() {\n return _entryName;\n },\n set entryName(val) {\n _entryName = Utils.toBuffer(val, decoder.encode);\n var lastChar = _entryName[_entryName.length - 1];\n _isDirectory = lastChar === 47 || lastChar === 92;\n _centralHeader.fileNameLength = _entryName.length;\n },\n\n get efs() {\n if (typeof _efs === \"function\") {\n return _efs(this.entryName);\n } else {\n return _efs;\n }\n },\n\n get extra() {\n return _extra;\n },\n set extra(val) {\n _extra = val;\n _centralHeader.extraLength = val.length;\n parseExtra(val);\n },\n\n get comment() {\n return decoder.decode(_comment);\n },\n set comment(val) {\n _comment = Utils.toBuffer(val, decoder.encode);\n _centralHeader.commentLength = _comment.length;\n if (_comment.length > 0xffff) throw Utils.Errors.COMMENT_TOO_LONG();\n },\n\n get name() {\n const n = decoder.decode(_entryName);\n // For directories the name is the last path segment; drop the trailing\n // separator first so \"a/b/c/\" yields \"c\" and not \"\" (issue #466).\n return _isDirectory\n ? n\n .replace(/[/\\\\]$/, \"\")\n .split(\"/\")\n .pop()\n : n.split(\"/\").pop();\n },\n get isDirectory() {\n return _isDirectory;\n },\n\n getCompressedData: function () {\n return compress(false, null);\n },\n\n getCompressedDataAsync: function (/*Function*/ callback) {\n compress(true, callback);\n },\n\n setData: function (value) {\n uncompressedData = Utils.toBuffer(value, Utils.decoder.encode);\n if (!_isDirectory && uncompressedData.length) {\n _centralHeader.size = uncompressedData.length;\n _centralHeader.method = Utils.Constants.DEFLATED;\n _centralHeader.crc = Utils.crc32(value);\n _centralHeader.changed = true;\n } else {\n // folders and blank files should be stored\n _centralHeader.method = Utils.Constants.STORED;\n }\n },\n\n getData: function (pass) {\n if (_centralHeader.changed) {\n return uncompressedData;\n } else {\n return decompress(false, null, pass);\n }\n },\n\n getDataAsync: function (/*Function*/ callback, pass) {\n if (_centralHeader.changed) {\n callback(uncompressedData);\n } else {\n decompress(true, callback, pass);\n }\n },\n\n set attr(attr) {\n _centralHeader.attr = attr;\n },\n get attr() {\n return _centralHeader.attr;\n },\n\n set header(/*Buffer*/ data) {\n _centralHeader.loadFromBinary(data);\n },\n\n get header() {\n return _centralHeader;\n },\n\n packCentralHeader: function () {\n _centralHeader.flags_efs = this.efs;\n _centralHeader.extraLength = _extra.length;\n // 1. create header (buffer)\n var header = _centralHeader.centralHeaderToBinary();\n var addpos = Utils.Constants.CENHDR;\n // 2. add file name\n _entryName.copy(header, addpos);\n addpos += _entryName.length;\n // 3. add extra data\n _extra.copy(header, addpos);\n addpos += _centralHeader.extraLength;\n // 4. add file comment\n _comment.copy(header, addpos);\n return header;\n },\n\n packLocalHeader: function () {\n let addpos = 0;\n _centralHeader.flags_efs = this.efs;\n _centralHeader.extraLocalLength = _extralocal.length;\n // 1. construct local header Buffer\n const localHeaderBuf = _centralHeader.localHeaderToBinary();\n // 2. localHeader - crate header buffer\n const localHeader = Buffer.alloc(localHeaderBuf.length + _entryName.length + _centralHeader.extraLocalLength);\n // 2.1 add localheader\n localHeaderBuf.copy(localHeader, addpos);\n addpos += localHeaderBuf.length;\n // 2.2 add file name\n _entryName.copy(localHeader, addpos);\n addpos += _entryName.length;\n // 2.3 add extra field\n _extralocal.copy(localHeader, addpos);\n addpos += _extralocal.length;\n\n return localHeader;\n },\n\n toJSON: function () {\n const bytes = function (nr) {\n return \"<\" + ((nr && nr.length + \" bytes buffer\") || \"null\") + \">\";\n };\n\n return {\n entryName: this.entryName,\n name: this.name,\n comment: this.comment,\n isDirectory: this.isDirectory,\n header: _centralHeader.toJSON(),\n compressedData: bytes(input),\n data: bytes(uncompressedData)\n };\n },\n\n toString: function () {\n return JSON.stringify(this.toJSON(), null, \"\\t\");\n }\n };\n};\n", "const ZipEntry = require(\"./zipEntry\");\nconst Headers = require(\"./headers\");\nconst Utils = require(\"./util\");\n\nmodule.exports = function (/*Buffer|null*/ inBuffer, /** object */ options) {\n var entryList = [],\n // prototype-less: entry names come from untrusted input, so keys like\n // \"__proto__\" or \"constructor\" must be plain data, not touch the prototype\n // chain (which otherwise crashes addFile and hides such entries)\n entryTable = Object.create(null),\n _comment = Buffer.alloc(0),\n mainHeader = new Headers.MainHeader(),\n loadedEntries = false;\n var password = null;\n const temporary = new Set();\n\n // assign options\n const opts = options;\n\n const { noSort, decoder } = opts;\n\n if (inBuffer) {\n // is a memory buffer\n readMainHeader(opts.readEntries);\n } else {\n // none. is a new file\n loadedEntries = true;\n }\n\n function makeTemporaryFolders() {\n const foldersList = new Set();\n\n // Make list of all folders in file\n for (const elem of Object.keys(entryTable)) {\n const elements = elem.split(\"/\");\n elements.pop(); // filename\n if (!elements.length) continue; // no folders\n for (let i = 0; i < elements.length; i++) {\n const sub = elements.slice(0, i + 1).join(\"/\") + \"/\";\n foldersList.add(sub);\n }\n }\n\n // create missing folders as temporary\n for (const elem of foldersList) {\n if (!(elem in entryTable)) {\n const tempfolder = new ZipEntry(opts);\n tempfolder.entryName = elem;\n tempfolder.attr = 0x10;\n tempfolder.temporary = true;\n entryList.push(tempfolder);\n entryTable[tempfolder.entryName] = tempfolder;\n temporary.add(tempfolder);\n }\n }\n }\n\n function readEntries() {\n loadedEntries = true;\n entryTable = Object.create(null);\n if (mainHeader.diskEntries > (inBuffer.length - mainHeader.offset) / Utils.Constants.CENHDR) {\n throw Utils.Errors.DISK_ENTRY_TOO_LARGE();\n }\n entryList = new Array(mainHeader.diskEntries); // total number of entries\n var index = mainHeader.offset; // offset of first CEN header\n for (var i = 0; i < entryList.length; i++) {\n var tmp = index,\n entry = new ZipEntry(opts, inBuffer);\n entry.header = inBuffer.slice(tmp, (tmp += Utils.Constants.CENHDR));\n\n entry.entryName = inBuffer.slice(tmp, (tmp += entry.header.fileNameLength));\n\n if (entry.header.extraLength) {\n entry.extra = inBuffer.slice(tmp, (tmp += entry.header.extraLength));\n }\n\n if (entry.header.commentLength) entry.comment = inBuffer.slice(tmp, tmp + entry.header.commentLength);\n\n index += entry.header.centralHeaderSize;\n\n // Reject archives that declare the same entry name twice. adm-zip keeps\n // every entry in entryList but only the last in entryTable, so getEntry()\n // (table) and extractAllTo() (list) could resolve one name to different\n // content: an app that validates entry bytes via getEntry() before\n // extracting could approve one file while a different one lands on disk\n // (GHSA-p634-w6r4-rjp2). Fail closed on the ambiguity.\n if (entry.entryName in entryTable) {\n throw Utils.Errors.DUPLICATE_ENTRY(`\"${entry.entryName}\"`);\n }\n\n entryList[i] = entry;\n entryTable[entry.entryName] = entry;\n }\n temporary.clear();\n makeTemporaryFolders();\n }\n\n function readMainHeader(/*Boolean*/ readNow) {\n var i = inBuffer.length - Utils.Constants.ENDHDR, // END header size\n max = Math.max(0, i - 0xffff), // 0xFFFF is the max zip file comment length\n n = max,\n endStart = inBuffer.length,\n endOffset = -1, // Start offset of the END header\n commentEnd = 0;\n\n // option to search header form entire file\n const trailingSpace = typeof opts.trailingSpace === \"boolean\" ? opts.trailingSpace : false;\n if (trailingSpace) max = 0;\n\n for (i; i >= n; i--) {\n if (inBuffer[i] !== 0x50) continue; // quick check that the byte is 'P'\n if (inBuffer.readUInt32LE(i) === Utils.Constants.ENDSIG) {\n // \"PK\\005\\006\"\n endOffset = i;\n commentEnd = i;\n endStart = i + Utils.Constants.ENDHDR;\n // We already found a regular signature, let's look just a bit further to check if there's any zip64 signature\n n = i - Utils.Constants.END64HDR;\n continue;\n }\n\n if (inBuffer.readUInt32LE(i) === Utils.Constants.END64SIG) {\n // Found a zip64 signature, let's continue reading the whole zip64 record\n n = max;\n continue;\n }\n\n if (inBuffer.readUInt32LE(i) === Utils.Constants.ZIP64SIG) {\n // Found the zip64 record, let's determine it's size\n endOffset = i;\n endStart = i + Utils.readBigUInt64LE(inBuffer, i + Utils.Constants.ZIP64SIZE) + Utils.Constants.ZIP64LEAD;\n break;\n }\n }\n\n if (endOffset == -1) throw Utils.Errors.INVALID_FORMAT();\n\n mainHeader.loadFromBinary(inBuffer.slice(endOffset, endStart));\n if (mainHeader.commentLength) {\n _comment = inBuffer.slice(commentEnd + Utils.Constants.ENDHDR);\n }\n if (readNow) readEntries();\n }\n\n function sortEntries() {\n if (entryList.length > 1 && !noSort) {\n // Decode + lowercase each name once rather than on every comparison:\n // the entryName getter re-decodes the underlying buffer on each access,\n // so the previous inline comparator did O(n log n) redundant decoding.\n // Ordering is unchanged (same localeCompare on the same keys).\n entryList = entryList\n .map((entry) => ({ entry, key: entry.entryName.toLowerCase() }))\n .sort((a, b) => a.key.localeCompare(b.key))\n .map((pair) => pair.entry);\n }\n }\n\n return {\n /**\n * Returns an array of ZipEntry objects existent in the current opened archive\n * @return Array\n */\n get entries() {\n if (!loadedEntries) {\n readEntries();\n }\n return entryList.filter((e) => !temporary.has(e));\n },\n\n /**\n * Archive comment\n * @return {String}\n */\n get comment() {\n return decoder.decode(_comment);\n },\n set comment(val) {\n _comment = Utils.toBuffer(val, decoder.encode);\n mainHeader.commentLength = _comment.length;\n },\n\n getEntryCount: function () {\n if (!loadedEntries) {\n return mainHeader.diskEntries;\n }\n\n return entryList.length;\n },\n\n forEach: function (callback) {\n this.entries.forEach(callback);\n },\n\n /**\n * Returns a reference to the entry with the given name or null if entry is inexistent\n *\n * @param entryName\n * @return ZipEntry\n */\n getEntry: function (/*String*/ entryName) {\n if (!loadedEntries) {\n readEntries();\n }\n return entryTable[entryName] || null;\n },\n\n /**\n * Adds the given entry to the entry list\n *\n * @param entry\n */\n setEntry: function (/*ZipEntry*/ entry) {\n if (!loadedEntries) {\n readEntries();\n }\n entryList.push(entry);\n entryTable[entry.entryName] = entry;\n mainHeader.totalEntries = entryList.length;\n },\n\n /**\n * Removes the file with the given name from the entry list.\n *\n * If the entry is a directory, then all nested files and directories will be removed\n * @param entryName\n * @returns {void}\n */\n deleteFile: function (/*String*/ entryName, withsubfolders = true) {\n if (!loadedEntries) {\n readEntries();\n }\n const entry = entryTable[entryName];\n const list = this.getEntryChildren(entry, withsubfolders).map((child) => child.entryName);\n\n list.forEach(this.deleteEntry);\n },\n\n /**\n * Removes the entry with the given name from the entry list.\n *\n * @param {string} entryName\n * @returns {void}\n */\n deleteEntry: function (/*String*/ entryName) {\n if (!loadedEntries) {\n readEntries();\n }\n const entry = entryTable[entryName];\n const index = entryList.indexOf(entry);\n if (index >= 0) {\n entryList.splice(index, 1);\n delete entryTable[entryName];\n mainHeader.totalEntries = entryList.length;\n }\n },\n\n /**\n * Iterates and returns all nested files and directories of the given entry\n *\n * @param entry\n * @return Array\n */\n getEntryChildren: function (/*ZipEntry*/ entry, subfolders = true) {\n if (!loadedEntries) {\n readEntries();\n }\n if (typeof entry === \"object\") {\n if (entry.isDirectory && subfolders) {\n const list = [];\n const name = entry.entryName;\n\n for (const zipEntry of entryList) {\n if (zipEntry.entryName.startsWith(name)) {\n list.push(zipEntry);\n }\n }\n return list;\n } else {\n return [entry];\n }\n }\n return [];\n },\n\n /**\n * How many child elements entry has\n *\n * @param {ZipEntry} entry\n * @return {integer}\n */\n getChildCount: function (entry) {\n if (entry && entry.isDirectory) {\n const list = this.getEntryChildren(entry);\n return list.includes(entry) ? list.length - 1 : list.length;\n }\n return 0;\n },\n\n /**\n * Returns the zip file\n *\n * @return Buffer\n */\n compressToBuffer: function () {\n if (!loadedEntries) {\n readEntries();\n }\n sortEntries();\n\n const dataBlock = [];\n const headerBlocks = [];\n let totalSize = 0;\n let dindex = 0;\n\n mainHeader.size = 0;\n mainHeader.offset = 0;\n let totalEntries = 0;\n\n for (const entry of this.entries) {\n // compress data and set local and entry header accordingly. Reason why is called first\n const compressedData = entry.getCompressedData();\n entry.header.offset = dindex;\n\n // 1. construct local header\n const localHeader = entry.packLocalHeader();\n\n // 2. offsets\n const dataLength = localHeader.length + compressedData.length;\n dindex += dataLength;\n\n // 3. store values in sequence\n dataBlock.push(localHeader);\n dataBlock.push(compressedData);\n\n // 4. construct central header\n const centralHeader = entry.packCentralHeader();\n headerBlocks.push(centralHeader);\n // 5. update main header\n mainHeader.size += centralHeader.length;\n totalSize += dataLength + centralHeader.length;\n totalEntries++;\n }\n\n totalSize += mainHeader.mainHeaderSize; // also includes zip file comment length\n // point to end of data and beginning of central directory first record\n mainHeader.offset = dindex;\n mainHeader.totalEntries = totalEntries;\n\n dindex = 0;\n const outBuffer = Buffer.alloc(totalSize);\n // write data blocks\n for (const content of dataBlock) {\n content.copy(outBuffer, dindex);\n dindex += content.length;\n }\n\n // write central directory entries\n for (const content of headerBlocks) {\n content.copy(outBuffer, dindex);\n dindex += content.length;\n }\n\n // write main header\n const mh = mainHeader.toBinary();\n if (_comment) {\n _comment.copy(mh, mh.length - _comment.length); // add zip file comment\n }\n mh.copy(outBuffer, dindex);\n\n // Since we update entry and main header offsets,\n // they are no longer valid and we have to reset content\n // (Issue 64)\n\n inBuffer = outBuffer;\n loadedEntries = false;\n\n return outBuffer;\n },\n\n toAsyncBuffer: function (/*Function*/ onSuccess, /*Function*/ onFail, /*Function*/ onItemStart, /*Function*/ onItemEnd) {\n try {\n if (!loadedEntries) {\n readEntries();\n }\n sortEntries();\n\n const dataBlock = [];\n const centralHeaders = [];\n let totalSize = 0;\n let dindex = 0;\n let totalEntries = 0;\n\n mainHeader.size = 0;\n mainHeader.offset = 0;\n\n const compress2Buffer = function (entryLists) {\n if (entryLists.length > 0) {\n const entry = entryLists.shift();\n const name = entry.entryName + entry.extra.toString();\n if (onItemStart) onItemStart(name);\n entry.getCompressedDataAsync(function (compressedData) {\n if (onItemEnd) onItemEnd(name);\n entry.header.offset = dindex;\n\n // 1. construct local header\n const localHeader = entry.packLocalHeader();\n\n // 2. offsets\n const dataLength = localHeader.length + compressedData.length;\n dindex += dataLength;\n\n // 3. store values in sequence\n dataBlock.push(localHeader);\n dataBlock.push(compressedData);\n\n // central header\n const centalHeader = entry.packCentralHeader();\n centralHeaders.push(centalHeader);\n mainHeader.size += centalHeader.length;\n totalSize += dataLength + centalHeader.length;\n totalEntries++;\n\n compress2Buffer(entryLists);\n });\n } else {\n totalSize += mainHeader.mainHeaderSize; // also includes zip file comment length\n // point to end of data and beginning of central directory first record\n mainHeader.offset = dindex;\n mainHeader.totalEntries = totalEntries;\n\n dindex = 0;\n const outBuffer = Buffer.alloc(totalSize);\n dataBlock.forEach(function (content) {\n content.copy(outBuffer, dindex); // write data blocks\n dindex += content.length;\n });\n centralHeaders.forEach(function (content) {\n content.copy(outBuffer, dindex); // write central directory entries\n dindex += content.length;\n });\n\n const mh = mainHeader.toBinary();\n if (_comment) {\n _comment.copy(mh, mh.length - _comment.length); // add zip file comment\n }\n\n mh.copy(outBuffer, dindex); // write main header\n\n // Since we update entry and main header offsets, they are no\n // longer valid and we have to reset content using our new buffer\n // (Issue 64)\n\n inBuffer = outBuffer;\n loadedEntries = false;\n\n onSuccess(outBuffer);\n }\n };\n\n compress2Buffer(Array.from(this.entries));\n } catch (e) {\n onFail(e);\n }\n }\n };\n};\n", "const Utils = require(\"./util\");\nconst pth = require(\"path\");\nconst ZipEntry = require(\"./zipEntry\");\nconst ZipFile = require(\"./zipFile\");\n\nconst get_Bool = (...val) => Utils.findLast(val, (c) => typeof c === \"boolean\");\nconst get_Str = (...val) => Utils.findLast(val, (c) => typeof c === \"string\");\nconst get_Fun = (...val) => Utils.findLast(val, (c) => typeof c === \"function\");\n\nconst defaultOptions = {\n // option \"noSort\" : if true it disables files sorting\n noSort: false,\n // read entries during load (initial loading may be slower)\n readEntries: false,\n // default method is none\n method: Utils.Constants.NONE,\n // file system\n fs: null\n};\n\nmodule.exports = function (/**String*/ input, /** object */ options) {\n let inBuffer = null;\n\n // create object based default options, allowing them to be overwritten\n const opts = Object.assign(Object.create(null), defaultOptions);\n\n // test input variable\n if (input && \"object\" === typeof input) {\n // if value is not buffer we accept it to be object with options\n if (!(input instanceof Uint8Array)) {\n Object.assign(opts, input);\n input = opts.input ? opts.input : undefined;\n if (opts.input) delete opts.input;\n }\n\n // if input is buffer\n if (Buffer.isBuffer(input)) {\n inBuffer = input;\n opts.method = Utils.Constants.BUFFER;\n input = undefined;\n }\n }\n\n // assign options\n Object.assign(opts, options);\n\n // instanciate utils filesystem\n const filetools = new Utils(opts);\n\n // Restore the archived permissions on extracted directories. This has to run\n // after a directory's contents are written: applying a restrictive mode\n // (e.g. 0o500) up front would stop us writing the files it contains. Applying\n // the deepest paths first keeps parent directories traversable while their\n // children are updated (issue #530).\n const applyDirAttributes = (dirEntries) => {\n dirEntries\n .filter((d) => d.attr)\n .sort((a, b) => b.path.length - a.path.length)\n .forEach((d) => filetools.fs.chmodSync(d.path, d.attr));\n };\n\n if (typeof opts.decoder !== \"object\" || typeof opts.decoder.encode !== \"function\" || typeof opts.decoder.decode !== \"function\") {\n opts.decoder = Utils.decoder;\n }\n\n // if input is file name we retrieve its content\n if (input && \"string\" === typeof input) {\n // load zip file\n if (filetools.fs.existsSync(input)) {\n opts.method = Utils.Constants.FILE;\n opts.filename = input;\n inBuffer = filetools.fs.readFileSync(input);\n } else {\n throw Utils.Errors.INVALID_FILENAME();\n }\n }\n\n // create variable\n const _zip = new ZipFile(inBuffer, opts);\n\n const { canonical, sanitize, zipnamefix } = Utils;\n\n function getEntry(/**Object*/ entry) {\n if (entry && _zip) {\n var item;\n // If entry was given as a file name\n if (typeof entry === \"string\") item = _zip.getEntry(pth.posix.normalize(entry));\n // if entry was given as a ZipEntry object\n if (typeof entry === \"object\" && typeof entry.entryName !== \"undefined\" && typeof entry.header !== \"undefined\") item = _zip.getEntry(entry.entryName);\n\n if (item) {\n return item;\n }\n }\n return null;\n }\n\n function fixPath(zipPath) {\n const { join, normalize, sep } = pth.posix;\n // convert windows file separators and normalize\n return join(pth.isAbsolute(zipPath) ? \"/\": '.', normalize(sep + zipPath.split(\"\\\\\").join(sep) + sep));\n }\n\n function filenameFilter(filterfn) {\n if (filterfn instanceof RegExp) {\n // if filter is RegExp wrap it\n return (function (rx) {\n return function (filename) {\n return rx.test(filename);\n };\n })(filterfn);\n } else if (\"function\" !== typeof filterfn) {\n // if filter is not function we will replace it\n return () => true;\n }\n return filterfn;\n }\n\n // keep last character on folders\n const relativePath = (local, entry) => {\n let lastChar = entry.slice(-1);\n lastChar = lastChar === filetools.sep ? filetools.sep : \"\";\n return pth.relative(local, entry) + lastChar;\n };\n\n return {\n /**\n * Extracts the given entry from the archive and returns the content as a Buffer object\n * @param {ZipEntry|string} entry ZipEntry object or String with the full path of the entry\n * @param {Buffer|string} [pass] - password\n * @return Buffer or Null in case of error\n */\n readFile: function (entry, pass) {\n var item = getEntry(entry);\n return (item && item.getData(pass)) || null;\n },\n\n /**\n * Returns how many child elements has on entry (directories) on files it is always 0\n * @param {ZipEntry|string} entry ZipEntry object or String with the full path of the entry\n * @returns {integer}\n */\n childCount: function (entry) {\n const item = getEntry(entry);\n if (item) {\n return _zip.getChildCount(item);\n }\n },\n\n /**\n * Asynchronous readFile\n * @param {ZipEntry|string} entry ZipEntry object or String with the full path of the entry\n * @param {callback} callback\n *\n * @return Buffer or Null in case of error\n */\n readFileAsync: function (entry, callback) {\n var item = getEntry(entry);\n if (item) {\n item.getDataAsync(callback);\n } else {\n callback(null, \"getEntry failed for:\" + entry);\n }\n },\n\n /**\n * Extracts the given entry from the archive and returns the content as plain text in the given encoding\n * @param {ZipEntry|string} entry - ZipEntry object or String with the full path of the entry\n * @param {string} encoding - Optional. If no encoding is specified utf8 is used\n *\n * @return String\n */\n readAsText: function (entry, encoding) {\n var item = getEntry(entry);\n if (item) {\n var data = item.getData();\n if (data && data.length) {\n return data.toString(encoding || \"utf8\");\n }\n }\n return \"\";\n },\n\n /**\n * Asynchronous readAsText\n * @param {ZipEntry|string} entry ZipEntry object or String with the full path of the entry\n * @param {callback} callback\n * @param {string} [encoding] - Optional. If no encoding is specified utf8 is used\n *\n * @return String\n */\n readAsTextAsync: function (entry, callback, encoding) {\n var item = getEntry(entry);\n if (item) {\n item.getDataAsync(function (data, err) {\n if (err) {\n callback(data, err);\n return;\n }\n\n if (data && data.length) {\n callback(data.toString(encoding || \"utf8\"));\n } else {\n callback(\"\");\n }\n });\n } else {\n callback(\"\");\n }\n },\n\n /**\n * Remove the entry from the file or the entry and all it's nested directories and files if the given entry is a directory\n *\n * @param {ZipEntry|string} entry\n * @param {boolean} withsubfolders\n * @returns {void}\n */\n deleteFile: function (entry, withsubfolders = true) {\n // @TODO: test deleteFile\n var item = getEntry(entry);\n if (item) {\n _zip.deleteFile(item.entryName, withsubfolders);\n }\n },\n\n /**\n * Remove the entry from the file or directory without affecting any nested entries\n *\n * @param {ZipEntry|string} entry\n * @returns {void}\n */\n deleteEntry: function (entry) {\n // @TODO: test deleteEntry\n var item = getEntry(entry);\n if (item) {\n _zip.deleteEntry(item.entryName);\n }\n },\n\n /**\n * Adds a comment to the zip. The zip must be rewritten after adding the comment.\n *\n * @param {string} comment\n */\n addZipComment: function (comment) {\n // @TODO: test addZipComment\n _zip.comment = comment;\n },\n\n /**\n * Returns the zip comment\n *\n * @return String\n */\n getZipComment: function () {\n return _zip.comment || \"\";\n },\n\n /**\n * Adds a comment to a specified zipEntry. The zip must be rewritten after adding the comment\n * The comment cannot exceed 65535 characters in length\n *\n * @param {ZipEntry} entry\n * @param {string} comment\n */\n addZipEntryComment: function (entry, comment) {\n var item = getEntry(entry);\n if (item) {\n item.comment = comment;\n }\n },\n\n /**\n * Returns the comment of the specified entry\n *\n * @param {ZipEntry} entry\n * @return String\n */\n getZipEntryComment: function (entry) {\n var item = getEntry(entry);\n if (item) {\n return item.comment || \"\";\n }\n return \"\";\n },\n\n /**\n * Updates the content of an existing entry inside the archive. The zip must be rewritten after updating the content\n *\n * @param {ZipEntry} entry\n * @param {Buffer} content\n */\n updateFile: function (entry, content) {\n var item = getEntry(entry);\n if (item) {\n item.setData(content);\n }\n },\n\n /**\n * Adds a file from the disk to the archive\n *\n * @param {string} localPath File to add to zip\n * @param {string} [zipPath] Optional path inside the zip\n * @param {string} [zipName] Optional name for the file\n * @param {string} [comment] Optional file comment\n */\n addLocalFile: function (localPath, zipPath, zipName, comment) {\n if (filetools.fs.existsSync(localPath)) {\n // fix ZipPath\n zipPath = zipPath ? fixPath(zipPath) : \"\";\n\n // p - local file name\n const p = pth.win32.basename(pth.win32.normalize(localPath));\n\n // add file name into zippath\n zipPath += zipName ? zipName : p;\n\n // read file attributes\n const _attr = filetools.fs.statSync(localPath);\n\n // get file content\n const data = _attr.isFile() ? filetools.fs.readFileSync(localPath) : Buffer.alloc(0);\n\n // if folder\n if (_attr.isDirectory()) zipPath += filetools.sep;\n\n // add file into zip file\n this.addFile(zipPath, data, comment, _attr);\n } else {\n throw Utils.Errors.FILE_NOT_FOUND(localPath);\n }\n },\n\n /**\n * Callback for showing if everything was done.\n *\n * @callback doneCallback\n * @param {Error} err - Error object\n * @param {boolean} done - was request fully completed\n */\n\n /**\n * Adds a file from the disk to the archive\n *\n * @param {(object|string)} options - options object, if it is string it us used as localPath.\n * @param {string} options.localPath - Local path to the file.\n * @param {string} [options.comment] - Optional file comment.\n * @param {string} [options.zipPath] - Optional path inside the zip\n * @param {string} [options.zipName] - Optional name for the file\n * @param {doneCallback} callback - The callback that handles the response.\n */\n addLocalFileAsync: function (options, callback) {\n options = typeof options === \"object\" ? options : { localPath: options };\n const localPath = pth.resolve(options.localPath);\n const { comment } = options;\n let { zipPath, zipName } = options;\n const self = this;\n\n filetools.fs.stat(localPath, function (err, stats) {\n if (err) return callback(err, false);\n // fix ZipPath\n zipPath = zipPath ? fixPath(zipPath) : \"\";\n // p - local file name\n const p = pth.win32.basename(pth.win32.normalize(localPath));\n // add file name into zippath\n zipPath += zipName ? zipName : p;\n\n if (stats.isFile()) {\n filetools.fs.readFile(localPath, function (err, data) {\n if (err) return callback(err, false);\n self.addFile(zipPath, data, comment, stats);\n return setImmediate(callback, undefined, true);\n });\n } else if (stats.isDirectory()) {\n zipPath += filetools.sep;\n self.addFile(zipPath, Buffer.alloc(0), comment, stats);\n return setImmediate(callback, undefined, true);\n }\n });\n },\n\n /**\n * Adds a local directory and all its nested files and directories to the archive\n *\n * @param {string} localPath - local path to the folder\n * @param {string} [zipPath] - optional path inside zip\n * @param {(RegExp|function)} [filter] - optional RegExp or Function if files match will be included.\n */\n addLocalFolder: function (localPath, zipPath, filter) {\n // Prepare filter\n filter = filenameFilter(filter);\n\n // fix ZipPath\n zipPath = zipPath ? fixPath(zipPath) : \"\";\n\n // normalize the path first\n localPath = pth.normalize(localPath);\n\n if (filetools.fs.existsSync(localPath)) {\n const items = filetools.findFiles(localPath);\n const self = this;\n\n if (items.length) {\n for (const filepath of items) {\n const p = pth.join(zipPath, relativePath(localPath, filepath));\n if (filter(p)) {\n self.addLocalFile(filepath, pth.dirname(p));\n }\n }\n }\n } else {\n throw Utils.Errors.FILE_NOT_FOUND(localPath);\n }\n },\n\n /**\n * Asynchronous addLocalFolder\n * @param {string} localPath\n * @param {callback} callback\n * @param {string} [zipPath] optional path inside zip\n * @param {RegExp|function} [filter] optional RegExp or Function if files match will\n * be included.\n */\n addLocalFolderAsync: function (localPath, callback, zipPath, filter) {\n // Prepare filter\n filter = filenameFilter(filter);\n\n // fix ZipPath\n zipPath = zipPath ? fixPath(zipPath) : \"\";\n\n // normalize the path first\n localPath = pth.normalize(localPath);\n\n var self = this;\n filetools.fs.open(localPath, \"r\", function (err) {\n if (err && err.code === \"ENOENT\") {\n callback(undefined, Utils.Errors.FILE_NOT_FOUND(localPath));\n } else if (err) {\n callback(undefined, err);\n } else {\n var items = filetools.findFiles(localPath);\n var i = -1;\n\n var next = function () {\n i += 1;\n if (i < items.length) {\n var filepath = items[i];\n var p = relativePath(localPath, filepath).split(\"\\\\\").join(\"/\"); //windows fix\n p = p\n .normalize(\"NFD\")\n .replace(/[\\u0300-\\u036f]/g, \"\")\n .replace(/[^\\x20-\\x7E]/g, \"\"); // accent fix\n if (filter(p)) {\n filetools.fs.stat(filepath, function (er0, stats) {\n if (er0) callback(undefined, er0);\n if (stats.isFile()) {\n filetools.fs.readFile(filepath, function (er1, data) {\n if (er1) {\n callback(undefined, er1);\n } else {\n self.addFile(zipPath + p, data, \"\", stats);\n next();\n }\n });\n } else {\n self.addFile(zipPath + p + \"/\", Buffer.alloc(0), \"\", stats);\n next();\n }\n });\n } else {\n process.nextTick(() => {\n next();\n });\n }\n } else {\n callback(true, undefined);\n }\n };\n\n next();\n }\n });\n },\n\n /**\n * Adds a local directory and all its nested files and directories to the archive\n *\n * @param {object | string} options - options object, if it is string it us used as localPath.\n * @param {string} options.localPath - Local path to the folder.\n * @param {string} [options.zipPath] - optional path inside zip.\n * @param {RegExp|function} [options.filter] - optional RegExp or Function if files match will be included.\n * @param {function|string} [options.namefix] - optional function to help fix filename\n * @param {doneCallback} callback - The callback that handles the response.\n *\n */\n addLocalFolderAsync2: function (options, callback) {\n const self = this;\n options = typeof options === \"object\" ? options : { localPath: options };\n // Resolve the local filesystem path with the platform resolver. Do NOT\n // run it through fixPath: that normalizes ZIP-internal paths to POSIX\n // and prepends \"/\", which turns a Windows path like C:\\dir into\n // \\C:\\dir, so readdir finds nothing and the archive comes out empty.\n const localPath = pth.resolve(options.localPath);\n let { zipPath, filter, namefix } = options;\n\n if (filter instanceof RegExp) {\n filter = (function (rx) {\n return function (filename) {\n return rx.test(filename);\n };\n })(filter);\n } else if (\"function\" !== typeof filter) {\n filter = function () {\n return true;\n };\n }\n\n // fix ZipPath\n zipPath = zipPath ? fixPath(zipPath) : \"\";\n\n // Check Namefix function\n if (namefix === \"latin1\") {\n namefix = (str) =>\n str\n .normalize(\"NFD\")\n .replace(/[\\u0300-\\u036f]/g, \"\")\n .replace(/[^\\x20-\\x7E]/g, \"\"); // accent fix (latin1 characers only)\n }\n\n if (typeof namefix !== \"function\") namefix = (str) => str;\n\n // internal, create relative path + fix the name\n const relPathFix = (entry) => pth.join(zipPath, namefix(relativePath(localPath, entry)));\n const fileNameFix = (entry) => pth.win32.basename(pth.win32.normalize(namefix(entry)));\n\n filetools.fs.open(localPath, \"r\", function (err) {\n if (err && err.code === \"ENOENT\") {\n // callback is (err, done); errors belong in the first argument,\n // otherwise addLocalFolderPromise treats the error as \"done\" and\n // resolves instead of rejecting.\n callback(Utils.Errors.FILE_NOT_FOUND(localPath), false);\n } else if (err) {\n callback(err, false);\n } else {\n filetools.findFilesAsync(localPath, function (err, fileEntries) {\n if (err) return callback(err, false);\n fileEntries = fileEntries.filter((dir) => filter(relPathFix(dir)));\n // Nothing to add (empty folder or everything filtered out) is a\n // success, not an error. Report done and stop, otherwise the\n // reduce below runs and the callback fires a second time -- and\n // signalling done=false left addLocalFolderPromise hanging.\n if (!fileEntries.length) return callback(undefined, true);\n\n setImmediate(\n fileEntries.reverse().reduce(function (next, entry) {\n return function (err, done) {\n if (err || done === false) return setImmediate(next, err, false);\n\n self.addLocalFileAsync(\n {\n localPath: entry,\n zipPath: pth.dirname(relPathFix(entry)),\n zipName: fileNameFix(entry)\n },\n next\n );\n };\n }, callback)\n );\n });\n }\n });\n },\n\n /**\n * Adds a local directory and all its nested files and directories to the archive\n *\n * @param {string} localPath - path where files will be extracted\n * @param {object} props - optional properties\n * @param {string} [props.zipPath] - optional path inside zip\n * @param {RegExp|function} [props.filter] - optional RegExp or Function if files match will be included.\n * @param {function|string} [props.namefix] - optional function to help fix filename\n */\n addLocalFolderPromise: function (localPath, props) {\n return new Promise((resolve, reject) => {\n this.addLocalFolderAsync2(Object.assign({ localPath }, props), (err, done) => {\n if (err) return reject(err);\n if (done) resolve(this);\n });\n });\n },\n\n /**\n * Allows you to create a entry (file or directory) in the zip file.\n * If you want to create a directory the entryName must end in / and a null buffer should be provided.\n * Comment and attributes are optional\n *\n * @param {string} entryName\n * @param {Buffer | string} content - file content as buffer or utf8 coded string\n * @param {string} [comment] - file comment\n * @param {number | object} [attr] - number as unix file permissions, object as filesystem Stats object\n */\n addFile: function (entryName, content, comment, attr) {\n entryName = zipnamefix(entryName);\n let entry = getEntry(entryName);\n const update = entry != null;\n\n // prepare new entry\n if (!update) {\n entry = new ZipEntry(opts);\n entry.entryName = entryName;\n }\n entry.comment = comment || \"\";\n\n const isStat = \"object\" === typeof attr && attr instanceof filetools.fs.Stats;\n\n // last modification time from file stats\n if (isStat) {\n entry.header.time = attr.mtime;\n }\n\n // Set file attribute\n var fileattr = entry.isDirectory ? 0x10 : 0; // (MS-DOS directory flag)\n\n // extended attributes field for Unix\n // set file type either S_IFDIR / S_IFREG\n let unix = entry.isDirectory ? 0x4000 : 0x8000;\n\n if (isStat) {\n // File attributes from file stats\n unix |= 0xfff & attr.mode;\n } else if (\"number\" === typeof attr) {\n // attr from given attr values\n unix |= 0xfff & attr;\n } else {\n // Default values:\n unix |= entry.isDirectory ? 0o755 : 0o644; // permissions (drwxr-xr-x) or (-r-wr--r--)\n }\n\n fileattr = (fileattr | (unix << 16)) >>> 0; // add attributes\n\n entry.attr = fileattr;\n\n entry.setData(content);\n if (!update) _zip.setEntry(entry);\n\n return entry;\n },\n\n /**\n * Returns an array of ZipEntry objects representing the files and folders inside the archive\n *\n * @param {string} [password]\n * @returns Array\n */\n getEntries: function (password) {\n _zip.password = password;\n return _zip ? _zip.entries : [];\n },\n\n /**\n * Returns a ZipEntry object representing the file or folder specified by ``name``.\n *\n * @param {string} name\n * @return ZipEntry\n */\n getEntry: function (/**String*/ name) {\n return getEntry(name);\n },\n\n getEntryCount: function () {\n return _zip.getEntryCount();\n },\n\n forEach: function (callback) {\n return _zip.forEach(callback);\n },\n\n /**\n * Extracts the given entry to the given targetPath\n * If the entry is a directory inside the archive, the entire directory and it's subdirectories will be extracted\n *\n * @param {string|ZipEntry} entry - ZipEntry object or String with the full path of the entry\n * @param {string} targetPath - Target folder where to write the file\n * @param {boolean} [maintainEntryPath=true] - If maintainEntryPath is true and the entry is inside a folder, the entry folder will be created in targetPath as well. Default is TRUE\n * @param {boolean} [overwrite=false] - If the file already exists at the target path, the file will be overwriten if this is true.\n * @param {boolean} [keepOriginalPermission=false] - The file will be set as the permission from the entry if this is true.\n * @param {string} [outFileName] - String If set will override the filename of the extracted file (Only works if the entry is a file)\n *\n * @return Boolean\n */\n extractEntryTo: function (entry, targetPath, maintainEntryPath, overwrite, keepOriginalPermission, outFileName) {\n overwrite = get_Bool(false, overwrite);\n keepOriginalPermission = get_Bool(false, keepOriginalPermission);\n maintainEntryPath = get_Bool(true, maintainEntryPath);\n outFileName = get_Str(keepOriginalPermission, outFileName);\n\n var item = getEntry(entry);\n if (!item) {\n throw Utils.Errors.NO_ENTRY();\n }\n\n var entryName = canonical(item.entryName);\n\n var target = sanitize(targetPath, outFileName && !item.isDirectory ? canonical(outFileName) : maintainEntryPath ? entryName : pth.basename(entryName));\n\n if (item.isDirectory) {\n var children = _zip.getEntryChildren(item);\n children.forEach(function (child) {\n if (child.isDirectory) return;\n var content = child.getData();\n if (!content) {\n throw Utils.Errors.CANT_EXTRACT_FILE();\n }\n // When not maintaining the full entry path, keep each child's path\n // relative to the extracted directory (drop the directory's own\n // prefix) instead of flattening every file to its basename, which\n // collapsed subdirectories together (issue #306).\n var name = canonical(maintainEntryPath ? child.entryName : child.entryName.substring(item.entryName.length));\n var childName = sanitize(targetPath, name);\n // reject writing through a pre-existing symlink inside the target\n filetools.assertPathSafe(targetPath, childName);\n // The reverse operation for attr depend on method addFile()\n const fileAttr = keepOriginalPermission ? child.header.fileAttr : undefined;\n filetools.writeFileTo(childName, content, overwrite, fileAttr);\n });\n return true;\n }\n\n var content = item.getData(_zip.password);\n if (!content) throw Utils.Errors.CANT_EXTRACT_FILE();\n\n // reject writing through a pre-existing symlink inside the target\n filetools.assertPathSafe(targetPath, target);\n\n if (filetools.fs.existsSync(target) && !overwrite) {\n throw Utils.Errors.CANT_OVERRIDE();\n }\n // The reverse operation for attr depend on method addFile()\n const fileAttr = keepOriginalPermission ? entry.header.fileAttr : undefined;\n filetools.writeFileTo(target, content, overwrite, fileAttr);\n\n return true;\n },\n\n /**\n * Test the archive\n * @param {string} [pass]\n */\n test: function (pass) {\n if (!_zip) {\n return false;\n }\n\n for (var entry of _zip.entries) {\n try {\n if (entry.isDirectory) {\n continue;\n }\n // was `_zip.entries[entry]` (indexing the array with an entry\n // object -> undefined -> threw -> test() always returned false)\n var content = entry.getData(pass);\n if (!content) {\n return false;\n }\n } catch (err) {\n return false;\n }\n }\n return true;\n },\n\n /**\n * Extracts the entire archive to the given location\n *\n * @param {string} targetPath Target location\n * @param {boolean} [overwrite=false] If the file already exists at the target path, the file will be overwriten if this is true.\n * Default is FALSE\n * @param {boolean} [keepOriginalPermission=false] The file will be set as the permission from the entry if this is true.\n * Default is FALSE\n * @param {string|Buffer} [pass] password\n */\n extractAllTo: function (targetPath, overwrite, keepOriginalPermission, pass) {\n keepOriginalPermission = get_Bool(false, keepOriginalPermission);\n pass = get_Str(keepOriginalPermission, pass);\n overwrite = get_Bool(false, overwrite);\n if (!_zip) throw Utils.Errors.NO_ZIP();\n\n const dirEntries = [];\n _zip.entries.forEach(function (entry) {\n var entryName = sanitize(targetPath, canonical(entry.entryName));\n // reject writing through a pre-existing symlink inside the target\n filetools.assertPathSafe(targetPath, entryName);\n if (entry.isDirectory) {\n filetools.makeDir(entryName);\n // defer restoring the directory permission until its files are written\n if (keepOriginalPermission) dirEntries.push({ path: entryName, attr: entry.header.fileAttr });\n return;\n }\n var content = entry.getData(pass);\n if (!content) {\n throw Utils.Errors.CANT_EXTRACT_FILE();\n }\n // The reverse operation for attr depend on method addFile()\n const fileAttr = keepOriginalPermission ? entry.header.fileAttr : undefined;\n filetools.writeFileTo(entryName, content, overwrite, fileAttr);\n try {\n // best-effort: an invalid date in the archive or a filesystem that\n // rejects utimes must not fail extraction of already-written content (issue #379)\n filetools.fs.utimesSync(entryName, entry.header.time, entry.header.time);\n } catch (err) {\n /* ignore timestamp failures */\n }\n });\n\n applyDirAttributes(dirEntries);\n },\n\n /**\n * Asynchronous extractAllTo\n *\n * @param {string} targetPath Target location\n * @param {boolean} [overwrite=false] If the file already exists at the target path, the file will be overwriten if this is true.\n * Default is FALSE\n * @param {boolean} [keepOriginalPermission=false] The file will be set as the permission from the entry if this is true.\n * Default is FALSE\n * @param {function} callback The callback will be executed when all entries are extracted successfully or any error is thrown.\n */\n extractAllToAsync: function (targetPath, overwrite, keepOriginalPermission, callback) {\n callback = get_Fun(overwrite, keepOriginalPermission, callback);\n keepOriginalPermission = get_Bool(false, keepOriginalPermission);\n overwrite = get_Bool(false, overwrite);\n if (!callback) {\n return new Promise((resolve, reject) => {\n this.extractAllToAsync(targetPath, overwrite, keepOriginalPermission, function (err) {\n if (err) {\n reject(err);\n } else {\n resolve(this);\n }\n });\n });\n }\n if (!_zip) {\n callback(Utils.Errors.NO_ZIP());\n return;\n }\n\n targetPath = pth.resolve(targetPath);\n // convert entryName to\n const getPath = (entry) => sanitize(targetPath, pth.normalize(canonical(entry.entryName)));\n const getError = (msg, file) => new Error(msg + ': \"' + file + '\"');\n\n // separate directories from files\n const dirEntries = [];\n const fileEntries = [];\n _zip.entries.forEach((e) => {\n if (e.isDirectory) {\n dirEntries.push(e);\n } else {\n fileEntries.push(e);\n }\n });\n\n // Create directory entries first synchronously\n // this prevents race condition and assures folders are there before writing files\n const deferredDirAttr = [];\n for (const entry of dirEntries) {\n const dirPath = getPath(entry);\n // The reverse operation for attr depend on method addFile()\n const dirAttr = keepOriginalPermission ? entry.header.fileAttr : undefined;\n try {\n // reject writing through a pre-existing symlink inside the target\n filetools.assertPathSafe(targetPath, dirPath);\n filetools.makeDir(dirPath);\n } catch (er) {\n callback(getError(\"Unable to create folder\", dirPath));\n continue;\n }\n // defer restoring the directory permission until its files are written:\n // a restrictive mode applied now would block writing them\n if (dirAttr) deferredDirAttr.push({ path: dirPath, attr: dirAttr });\n try {\n // in unix timestamp will change if files are later added to folder, but still.\n // best-effort: a utimes failure must not abort extraction (issue #379)\n filetools.fs.utimesSync(dirPath, entry.header.time, entry.header.time);\n } catch (er) {\n /* ignore timestamp failures */\n }\n }\n\n // restore directory permissions once every file has been extracted\n const done = (err) => {\n if (!err) {\n try {\n applyDirAttributes(deferredDirAttr);\n } catch (er) {\n return callback(getError(\"Unable to set folder permissions\", er.path || \"\"));\n }\n }\n callback(err);\n };\n\n fileEntries.reverse().reduce(function (next, entry) {\n return function (err) {\n if (err) {\n next(err);\n } else {\n const entryName = pth.normalize(canonical(entry.entryName));\n const filePath = sanitize(targetPath, entryName);\n try {\n // reject writing through a pre-existing symlink inside the target\n filetools.assertPathSafe(targetPath, filePath);\n } catch (er) {\n return next(er);\n }\n entry.getDataAsync(function (content, err_1) {\n if (err_1) {\n next(err_1);\n } else if (!content) {\n next(Utils.Errors.CANT_EXTRACT_FILE());\n } else {\n // The reverse operation for attr depend on method addFile()\n const fileAttr = keepOriginalPermission ? entry.header.fileAttr : undefined;\n filetools.writeFileToAsync(filePath, content, overwrite, fileAttr, function (succ) {\n if (!succ) {\n return next(getError(\"Unable to write file\", filePath));\n }\n filetools.fs.utimes(filePath, entry.header.time, entry.header.time, function () {\n // best-effort: a utimes failure must not abort extraction\n // of already-written content (issue #379)\n next();\n });\n });\n }\n });\n }\n };\n }, done)();\n },\n\n /**\n * Writes the newly created zip file to disk at the specified location or if a zip was opened and no ``targetFileName`` is provided, it will overwrite the opened zip\n *\n * @param {string} targetFileName\n * @param {function} callback\n */\n writeZip: function (targetFileName, callback) {\n if (arguments.length === 1) {\n if (typeof targetFileName === \"function\") {\n callback = targetFileName;\n targetFileName = \"\";\n }\n }\n\n if (!targetFileName && opts.filename) {\n targetFileName = opts.filename;\n }\n if (!targetFileName) return;\n\n var zipData = _zip.compressToBuffer();\n if (zipData) {\n var ok = filetools.writeFileTo(targetFileName, zipData, true);\n if (typeof callback === \"function\") callback(!ok ? new Error(\"failed\") : null, \"\");\n }\n },\n\n /**\n *\n * @param {string} targetFileName\n * @param {object} [props]\n * @param {boolean} [props.overwrite=true] If the file already exists at the target path, the file will be overwriten if this is true.\n * @param {boolean} [props.perm] The file will be set as the permission from the entry if this is true.\n\n * @returns {Promise<void>}\n */\n writeZipPromise: function (/**String*/ targetFileName, /* object */ props) {\n const { overwrite, perm } = Object.assign({ overwrite: true }, props);\n\n return new Promise((resolve, reject) => {\n // find file name\n if (!targetFileName && opts.filename) targetFileName = opts.filename;\n if (!targetFileName) reject(\"ADM-ZIP: ZIP File Name Missing\");\n\n this.toBufferPromise().then((zipData) => {\n const ret = (done) => (done ? resolve(done) : reject(\"ADM-ZIP: Wasn't able to write zip file\"));\n filetools.writeFileToAsync(targetFileName, zipData, overwrite, perm, ret);\n }, reject);\n });\n },\n\n /**\n * @returns {Promise<Buffer>} A promise to the Buffer.\n */\n toBufferPromise: function () {\n return new Promise((resolve, reject) => {\n _zip.toAsyncBuffer(resolve, reject);\n });\n },\n\n /**\n * Returns the content of the entire zip file as a Buffer object\n *\n * @prop {function} [onSuccess]\n * @prop {function} [onFail]\n * @prop {function} [onItemStart]\n * @prop {function} [onItemEnd]\n * @returns {Buffer}\n */\n toBuffer: function (onSuccess, onFail, onItemStart, onItemEnd) {\n if (typeof onSuccess === \"function\") {\n _zip.toAsyncBuffer(onSuccess, onFail, onItemStart, onItemEnd);\n return null;\n }\n return _zip.compressToBuffer();\n }\n };\n};\n", "import { parseArgs } from \"node:util\";\nimport { ApiError } from \"./api.js\";\nimport {\n checkCommand,\n handoffCommand,\n linkCommand,\n loginCommand,\n logoutCommand,\n monitorCommand,\n projectsCommand,\n pullCommand,\n skillsInstallCommand,\n statusCommand,\n syncCommand,\n taskCompleteCommand,\n taskFailCommand,\n taskNextCommand,\n taskResetCommand,\n taskStartCommand,\n whoamiCommand,\n} from \"./commands.js\";\nimport type { CliOptions } from \"./types.js\";\n\ndeclare const __JIOO_VERSION__: string;\nconst VERSION = __JIOO_VERSION__;\n\nconst USAGE = `jioogen \u2014 CLI JiooGen (task selection lokal, server read-only)\n\nUsage:\n jioogen login --token <token> [--api <url>]\n jioogen login --email <email> (--password <pass> | --password-stdin)\n jioogen logout\n jioogen whoami\n jioogen projects\n jioogen pull <projectId> [--dir <dir>]\n jioogen link <projectId> [--dir <dir>]\n jioogen skills install [--dir <dir>]\n jioogen check [--dir <dir>] [--json]\n jioogen handoff [--project <id>] [--json]\n jioogen task next [--json]\n jioogen task start <ref>\n jioogen task complete <ref> [--note <text>]\n jioogen task fail <ref> [reason...] [--note <text>]\n jioogen task reset <ref> [reason...] [--note <text>]\n jioogen status [--remote] [--json]\n jioogen sync [--files a.md,b.md] [--json]\n jioogen monitor [--json]\n\nAlias: \\`jioocode\\` tetap tersedia untuk kompatibilitas.\n\nGlobal options:\n --api <url> Base URL JiooGen (env JIOOGEN_API / JIOOCODE_API / tersimpan)\n --project <id> Override binding project\n --dir <dir> Override direktori bundle\n -h, --help Tampilkan bantuan\n -v, --version Tampilkan versi\n`;\n\nclass UsageError extends Error {}\n\nasync function main(): Promise<void> {\n let raw: { [key: string]: string | boolean | undefined } = {};\n let positionals: string[] = [];\n try {\n const parsed = parseArgs({\n args: process.argv.slice(2),\n allowPositionals: true,\n options: {\n api: { type: \"string\" },\n email: { type: \"string\" },\n password: { type: \"string\" },\n \"password-stdin\": { type: \"boolean\" },\n token: { type: \"string\" },\n project: { type: \"string\" },\n dir: { type: \"string\" },\n remote: { type: \"boolean\" },\n files: { type: \"string\" },\n note: { type: \"string\" },\n json: { type: \"boolean\" },\n help: { type: \"boolean\", short: \"h\" },\n version: { type: \"boolean\", short: \"v\" },\n },\n });\n raw = parsed.values as { [key: string]: string | boolean | undefined };\n positionals = parsed.positionals;\n } catch (error) {\n console.error(`Error: ${error instanceof Error ? error.message : String(error)}\\n`);\n console.error(USAGE);\n process.exitCode = 2;\n return;\n }\n\n const options: CliOptions = {\n api: text(raw.api),\n email: text(raw.email),\n password: text(raw.password),\n passwordStdin: flag(raw[\"password-stdin\"]),\n token: text(raw.token),\n project: text(raw.project),\n dir: text(raw.dir),\n remote: flag(raw.remote),\n files: text(raw.files),\n note: text(raw.note),\n json: flag(raw.json),\n };\n\n if (flag(raw.version)) {\n console.log(`jioogen ${VERSION}`);\n return;\n }\n\n const [command, ...rest] = positionals;\n if (flag(raw.help) || command === undefined || command === \"help\") {\n console.log(USAGE);\n return;\n }\n\n try {\n await dispatch(command, rest, options);\n } catch (error) {\n if (error instanceof UsageError) {\n console.error(`Error: ${error.message}\\n`);\n console.error(USAGE);\n process.exitCode = 2;\n return;\n }\n if (error instanceof ApiError) {\n const code = error.code !== undefined ? ` [${error.code}]` : \"\";\n console.error(`Error ${error.status}${code}: ${error.message}`);\n } else {\n console.error(`Error: ${error instanceof Error ? error.message : String(error)}`);\n }\n process.exitCode = 1;\n }\n}\n\nasync function dispatch(\n command: string,\n rest: readonly string[],\n options: CliOptions,\n): Promise<void> {\n switch (command) {\n case \"login\":\n await loginCommand(options);\n return;\n case \"logout\":\n await logoutCommand();\n return;\n case \"whoami\":\n await whoamiCommand(options);\n return;\n case \"projects\":\n await projectsCommand(options);\n return;\n case \"pull\": {\n const projectId = rest[0];\n if (projectId === undefined) throw new UsageError(\"`jioogen pull` butuh <projectId>.\");\n await pullCommand(projectId, options);\n return;\n }\n case \"link\": {\n const projectId = rest[0];\n if (projectId === undefined) throw new UsageError(\"`jioogen link` butuh <projectId>.\");\n await linkCommand(projectId, options);\n return;\n }\n case \"skills\":\n await dispatchSkills(rest, options);\n return;\n case \"check\":\n await checkCommand(options);\n return;\n case \"handoff\":\n await handoffCommand(options);\n return;\n case \"task\":\n await dispatchTask(rest, options);\n return;\n case \"status\":\n await statusCommand(options);\n return;\n case \"sync\":\n await syncCommand(options);\n return;\n case \"monitor\":\n await monitorCommand(options);\n return;\n default:\n throw new UsageError(`Perintah tidak dikenal: ${command}`);\n }\n}\n\nasync function dispatchSkills(rest: readonly string[], options: CliOptions): Promise<void> {\n const subcommand = rest[0];\n switch (subcommand) {\n case undefined:\n case \"install\":\n await skillsInstallCommand(options);\n return;\n default:\n throw new UsageError(\"Subcommand skills: install\");\n }\n}\n\nasync function dispatchTask(rest: readonly string[], options: CliOptions): Promise<void> {\n const subcommand = rest[0];\n const ref = rest[1];\n switch (subcommand) {\n case \"next\":\n await taskNextCommand(options);\n return;\n case \"start\":\n await taskStartCommand(requireRef(ref, \"start\"), options);\n return;\n case \"complete\":\n await taskCompleteCommand(requireRef(ref, \"complete\"), options);\n return;\n case \"fail\":\n await taskFailCommand(requireRef(ref, \"fail\"), rest.slice(2), options);\n return;\n case \"reset\":\n await taskResetCommand(requireRef(ref, \"reset\"), rest.slice(2), options);\n return;\n default:\n throw new UsageError(\"Subcommand task: next | start | complete | fail | reset\");\n }\n}\n\nfunction requireRef(ref: string | undefined, subcommand: string): string {\n if (ref === undefined || ref.length === 0) {\n throw new UsageError(`\\`jioogen task ${subcommand}\\` butuh <ref>.`);\n }\n return ref;\n}\n\nfunction text(value: string | boolean | undefined): string | undefined {\n return typeof value === \"string\" ? value : undefined;\n}\n\nfunction flag(value: string | boolean | undefined): boolean {\n return value === true;\n}\n\nawait main();\n", "import type { ExecutionCounts, ExecutionCurrent, ExecutionTaskState } from \"@jioo2/contracts\";\n\nexport const DEFAULT_API_URL = \"https://gen.jioo.site\";\nexport const SESSION_COOKIE = \"jioo_session\";\n\nexport const ENDPOINTS = {\n me: \"/api/auth/me\",\n projects: \"/api/workspace/projects\",\n} as const;\n\nexport interface SessionUser {\n id: string;\n email: string;\n role: string;\n subscriptionPlan: string;\n}\n\nexport interface ProjectSummary {\n id: string;\n title: string;\n status: string;\n engineMode: string;\n domainResolved: number;\n domainTotal: number;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface HandoffPayload {\n promptVersion?: number;\n instruction: string;\n checkpointRules?: string[];\n sidecarSchemaVersion?: number;\n}\n\nexport interface ExecutionSnapshot {\n hasExecution: boolean;\n tasks: ExecutionTaskState[];\n counts: ExecutionCounts;\n current: ExecutionCurrent | null;\n updatedAt: string | null;\n}\n\nexport interface SyncResult {\n synced: unknown;\n written?: string[];\n rejected?: { path: string; code: string; reason: string }[];\n warning?: string;\n}\n\nexport class ApiError extends Error {\n readonly status: number;\n readonly code: string | undefined;\n\n constructor(status: number, message: string, code?: string) {\n super(message);\n this.name = \"ApiError\";\n this.status = status;\n this.code = code;\n }\n}\n\nexport function normalizeBaseUrl(value: string): string {\n return value.trim().replace(/\\/+$/, \"\");\n}\n\nexport function projectPath(projectId: string, suffix = \"\"): string {\n return `/api/workspace/projects/${encodeURIComponent(projectId)}${suffix}`;\n}\n\nasync function apiError(response: Response): Promise<ApiError> {\n let message = `HTTP ${response.status} ${response.statusText}`.trim();\n let code: string | undefined;\n try {\n const body = (await response.json()) as unknown;\n if (typeof body === \"object\" && body !== null) {\n const record = body as Record<string, unknown>;\n if (typeof record.error === \"string\" && record.error.length > 0) message = record.error;\n if (typeof record.code === \"string\" && record.code.length > 0) code = record.code;\n }\n } catch {\n // Non-JSON error bodies keep the HTTP status message.\n }\n return new ApiError(response.status, message, code);\n}\n\nfunction sessionCookieFrom(response: Response): string | null {\n const bag = response.headers as Headers & { getSetCookie?: () => string[] };\n const fromList = bag.getSetCookie?.() ?? [];\n const candidates = fromList.length > 0 ? fromList : [response.headers.get(\"set-cookie\") ?? \"\"];\n for (const candidate of candidates) {\n const pair = candidate.split(\";\")[0]?.trim();\n if (pair?.startsWith(`${SESSION_COOKIE}=`)) return pair;\n }\n const match = new RegExp(`${SESSION_COOKIE}=([^;,\\\\s]+)`).exec(candidates.join(\",\"));\n return match?.[1] !== undefined ? `${SESSION_COOKIE}=${match[1]}` : null;\n}\n\nexport async function apiLogin(\n apiUrl: string,\n email: string,\n password: string,\n): Promise<{ cookie: string; user: SessionUser; apiUrl: string }> {\n const baseUrl = normalizeBaseUrl(apiUrl);\n const response = await fetch(`${baseUrl}/api/auth/login`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\", accept: \"application/json\" },\n body: JSON.stringify({ email, password, remember: true }),\n });\n if (!response.ok) throw await apiError(response);\n const cookie = sessionCookieFrom(response);\n if (cookie === null) {\n throw new Error(\"Login berhasil tetapi cookie sesi tidak ditemukan pada respons.\");\n }\n const body = (await response.json()) as { user: SessionUser };\n return { cookie, user: body.user, apiUrl: baseUrl };\n}\n\ninterface RequestOptions extends RequestInit {\n json?: unknown;\n}\n\nexport class ApiClient {\n readonly baseUrl: string;\n private readonly cookie: string;\n\n constructor(apiUrl: string, cookie: string) {\n this.baseUrl = normalizeBaseUrl(apiUrl);\n this.cookie = cookie;\n }\n\n async getJson<T>(path: string): Promise<T> {\n const response = await this.request(path);\n return (await response.json()) as T;\n }\n\n async postJson<T>(path: string, json?: unknown): Promise<T> {\n const options: RequestOptions = { method: \"POST\" };\n if (json !== undefined) options.json = json;\n const response = await this.request(path, options);\n return (await response.json()) as T;\n }\n\n async getBytes(path: string): Promise<Uint8Array> {\n const response = await this.request(path);\n return new Uint8Array(await response.arrayBuffer());\n }\n\n private async request(path: string, options: RequestOptions = {}): Promise<Response> {\n const { json, ...init } = options;\n const headers = new Headers(init.headers);\n headers.set(\"accept\", \"application/json\");\n headers.set(\"cookie\", this.cookie);\n const requestInit: RequestInit = { ...init, headers };\n if (json !== undefined) {\n headers.set(\"content-type\", \"application/json\");\n requestInit.body = JSON.stringify(json);\n }\n const response = await fetch(`${this.baseUrl}${path}`, requestInit);\n if (!response.ok) throw await apiError(response);\n return response;\n }\n}\n", "import { readdir, readFile } from \"node:fs/promises\";\nimport { join, resolve } from \"node:path\";\nimport type { ExecutionCounts, ExecutionCurrent, ExecutionTaskState } from \"@jioo2/contracts\";\nimport { EXECUTION_SIDECAR_PATH, summarizeExecutionCounts } from \"@jioo2/contracts\";\nimport {\n ApiClient,\n ApiError,\n apiLogin,\n DEFAULT_API_URL,\n ENDPOINTS,\n type ExecutionSnapshot,\n type HandoffPayload,\n normalizeBaseUrl,\n type ProjectSummary,\n projectPath,\n SESSION_COOKIE,\n type SessionUser,\n type SyncResult,\n} from \"./api.js\";\nimport { formatBundleCheck, inspectBundle } from \"./check.js\";\nimport {\n clearCredentials,\n credentialsPath,\n findProjectLink,\n readCredentials,\n writeCredentials,\n writeProjectLink,\n} from \"./config.js\";\nimport { formatTable } from \"./output.js\";\nimport {\n createState,\n mergeTasks,\n readState,\n setCurrent,\n withStatus,\n writeState,\n} from \"./sidecar.js\";\nimport { installAgentSkills } from \"./skills.js\";\nimport { blockedTasks, isBoundary, loadTasks, renderActiveTask, selectNext } from \"./tasks.js\";\nimport type { CliOptions } from \"./types.js\";\nimport { extractBundle } from \"./zip.js\";\n\ninterface ApiContext {\n apiUrl: string;\n client: ApiClient;\n}\n\ninterface LocalBundleContext {\n projectId: string;\n bundleDir: string;\n linkedApiUrl: string | undefined;\n}\n\ninterface BundleContext extends ApiContext, LocalBundleContext {}\n\ninterface LocalState extends LocalBundleContext {\n state: Awaited<ReturnType<typeof createState>>;\n definitions: Awaited<ReturnType<typeof loadTasks>>;\n}\n\nexport async function loginCommand(options: CliOptions): Promise<void> {\n const token = options.token ?? envFirst(\"JIOOGEN_TOKEN\", \"JIOOCODE_TOKEN\");\n if (token !== undefined && token.length > 0) {\n const apiUrl = normalizeBaseUrl(\n options.api ?? envFirst(\"JIOOGEN_API\", \"JIOOCODE_API\") ?? DEFAULT_API_URL,\n );\n const client = new ApiClient(apiUrl, `${SESSION_COOKIE}=${token}`);\n const body = await client.getJson<{ user: SessionUser }>(ENDPOINTS.me);\n await writeCredentials({\n apiUrl,\n cookie: `${SESSION_COOKIE}=${token}`,\n savedAt: new Date().toISOString(),\n });\n console.log(\n `Login sebagai ${body.user.email} (${body.user.role}/${body.user.subscriptionPlan}) di ${apiUrl}`,\n );\n console.log(`Credential disimpan di ${credentialsPath()} (mode 0600).`);\n return;\n }\n\n const email = options.email ?? envFirst(\"JIOOGEN_EMAIL\", \"JIOOCODE_EMAIL\");\n if (email === undefined || email.length === 0) {\n throw new Error(\"--email wajib diisi (atau set JIOOGEN_EMAIL).\");\n }\n let password = options.password ?? envFirst(\"JIOOGEN_PASSWORD\", \"JIOOCODE_PASSWORD\");\n if (options.passwordStdin === true) password = (await readStdin()).trim();\n if (password === undefined || password.length === 0) {\n throw new Error(\"--password atau --password-stdin wajib diisi.\");\n }\n const result = await apiLogin(\n options.api ?? envFirst(\"JIOOGEN_API\", \"JIOOCODE_API\") ?? DEFAULT_API_URL,\n email,\n password,\n );\n await writeCredentials({\n apiUrl: result.apiUrl,\n cookie: result.cookie,\n savedAt: new Date().toISOString(),\n });\n console.log(\n `Login sebagai ${result.user.email} (${result.user.role}/${result.user.subscriptionPlan}) di ${result.apiUrl}`,\n );\n console.log(`Credential disimpan di ${credentialsPath()} (mode 0600).`);\n}\n\nexport async function logoutCommand(): Promise<void> {\n const removed = await clearCredentials();\n console.log(removed ? \"Credential lokal dihapus.\" : \"Tidak ada credential tersimpan.\");\n}\n\nexport async function whoamiCommand(options: CliOptions): Promise<void> {\n const { apiUrl, client } = await resolveApi(options);\n const body = await client.getJson<{ user: SessionUser }>(ENDPOINTS.me);\n if (options.json === true) {\n console.log(JSON.stringify({ ...body.user, apiUrl }, null, 2));\n return;\n }\n console.log(`${body.user.email} (${body.user.role}/${body.user.subscriptionPlan}) @ ${apiUrl}`);\n}\n\nexport async function projectsCommand(options: CliOptions): Promise<void> {\n const { client } = await resolveApi(options);\n const body = await client.getJson<{ projects: ProjectSummary[] }>(ENDPOINTS.projects);\n if (options.json === true) {\n console.log(JSON.stringify(body.projects, null, 2));\n return;\n }\n if (body.projects.length === 0) {\n console.log(\"Belum ada project.\");\n return;\n }\n console.log(\n formatTable(\n [\"ID\", \"STATUS\", \"TITLE\", \"DOMAIN\"],\n body.projects.map((project) => [\n project.id,\n project.status,\n project.title,\n `${project.domainResolved}/${project.domainTotal}`,\n ]),\n ),\n );\n}\n\nexport async function pullCommand(projectId: string, options: CliOptions): Promise<void> {\n const { apiUrl, client } = await resolveApi(options);\n const target = resolve(options.dir ?? projectId);\n await assertPullTarget(target, projectId);\n const bytes = await client.getBytes(projectPath(projectId, \"/bundle\"));\n const written = await extractBundle(bytes, target);\n const skills = await installAgentSkills(target);\n await writeProjectLink(target, { projectId, apiUrl });\n if (options.json === true) {\n console.log(JSON.stringify({ projectId, target, files: written, skills }, null, 2));\n return;\n }\n console.log(`Pulled ${written.length} file ke ${target}`);\n console.log(\"Project ter-bind lewat .jioogen/project.json.\");\n console.log(\n `Skills eksekusi terpasang: ${skills.written.length} file (AGENTS.md + 4 harness skill).`,\n );\n}\n\nexport async function linkCommand(projectId: string, options: CliOptions): Promise<void> {\n const { apiUrl, client } = await resolveApi(options);\n const target = resolve(options.dir ?? process.cwd());\n await assertLinkTarget(target, projectId);\n await verifyProjectAccess(client, projectId);\n await writeProjectLink(target, { projectId, apiUrl });\n const skills = await installAgentSkills(target);\n const linkedFile = join(target, \".jioogen\", \"project.json\");\n if (options.json === true) {\n console.log(\n JSON.stringify(\n { projectId, target, apiUrl, linkedFile, skills: skills.written.length },\n null,\n 2,\n ),\n );\n return;\n }\n console.log(`Project ${projectId} ter-bind ke ${target}.`);\n console.log(`File link: ${linkedFile} (API ${apiUrl}).`);\n console.log(`Skills eksekusi terpasang: ${skills.written.length} file.`);\n}\n\nexport async function skillsInstallCommand(options: CliOptions): Promise<void> {\n const link = await findProjectLink(options.dir ?? process.cwd());\n const bundleDir = resolve(link?.bundleDir ?? options.dir ?? process.cwd());\n const skills = await installAgentSkills(bundleDir);\n if (options.json === true) {\n console.log(JSON.stringify({ bundleDir, ...skills }, null, 2));\n return;\n }\n console.log(`Skills eksekusi terpasang di ${bundleDir}:`);\n for (const file of skills.written) console.log(`- ${file}`);\n for (const file of skills.preserved) console.log(`- ${file} (dilewati: milik user)`);\n}\n\nexport async function checkCommand(options: CliOptions): Promise<void> {\n const link = await findProjectLink(options.dir ?? process.cwd());\n const bundleDir = resolve(link?.bundleDir ?? options.dir ?? process.cwd());\n const result = await inspectBundle(bundleDir);\n if (options.json === true) {\n console.log(JSON.stringify(result, null, 2));\n } else {\n console.log(formatBundleCheck(result));\n }\n if (!result.ok) process.exitCode = 1;\n}\n\nexport async function handoffCommand(options: CliOptions): Promise<void> {\n const { client, projectId } = await resolveBundle(options);\n const payload = await client.postJson<HandoffPayload>(\n projectPath(projectId, \"/execution/handoff\"),\n );\n if (options.json === true) {\n console.log(JSON.stringify(payload, null, 2));\n return;\n }\n console.log(payload.instruction);\n if (payload.checkpointRules !== undefined && payload.checkpointRules.length > 0) {\n console.log(\"\\nCheckpoint rules:\");\n for (const rule of payload.checkpointRules) console.log(`- ${rule}`);\n }\n}\n\nexport async function taskNextCommand(options: CliOptions): Promise<void> {\n const { bundleDir, state, definitions, projectId } = await loadLocalState(options);\n const written = await writeState(bundleDir, state);\n const next = selectNext(definitions, written.tasks);\n if (next === null) {\n if (options.json === true) {\n console.log(JSON.stringify({ done: true, projectId }, null, 2));\n return;\n }\n console.log(\"Semua task selesai.\");\n const blocked = blockedTasks(definitions, written.tasks);\n if (blocked.length > 0) {\n console.log(\"\\nTask yang masih menunggu dependency:\");\n for (const entry of blocked) {\n console.log(`- ${entry.task.id}: ${entry.missing.join(\", \")}`);\n }\n }\n return;\n }\n\n const awaitingCheckpoint = written.current?.awaitingCheckpoint === true;\n const instruction = renderActiveTask(next.task);\n if (options.json === true) {\n console.log(\n JSON.stringify(\n {\n done: false,\n projectId,\n task: next.task,\n instruction,\n reason: next.reason,\n awaitingCheckpoint,\n progress: `${written.counts?.done ?? 0}/${definitions.length}`,\n },\n null,\n 2,\n ),\n );\n return;\n }\n\n if (awaitingCheckpoint) {\n console.log(\n `Checkpoint aktif: ${written.current?.ref ?? \"-\"}. Minta konfirmasi user sebelum melanjutkan.`,\n );\n }\n console.log(instruction);\n if (next.reason === \"in_progress\") console.log(\"\\nStatus: sedang dikerjakan.\");\n if (next.reason === \"retry\") console.log(`\\nStatus: ${next.state.status} \u2014 silakan ulangi.`);\n console.log(`\\nProgress: ${written.counts?.done ?? 0}/${definitions.length} task selesai.`);\n}\n\nexport async function taskStartCommand(ref: string, options: CliOptions): Promise<void> {\n const { bundleDir, state } = await loadLocalState(options);\n const updated = withStatus(state, ref, \"in_progress\", {\n awaitingCheckpoint: false,\n note: \"\",\n });\n await writeState(bundleDir, updated);\n const task = updated.tasks.find((entry) => entry.ref.toUpperCase() === ref.toUpperCase());\n console.log(`Started ${task?.ref ?? ref} (attempt ${task?.attempt ?? 1}).`);\n}\n\nexport async function taskCompleteCommand(ref: string, options: CliOptions): Promise<void> {\n const { bundleDir, state, definitions } = await loadLocalState(options);\n const completed = withStatus(state, ref, \"done\", {\n note: options.note ?? \"\",\n awaitingCheckpoint: false,\n });\n const completedTask = completed.tasks.find(\n (entry) => entry.ref.toUpperCase() === ref.toUpperCase(),\n );\n const next = selectNext(definitions, completed.tasks);\n if (completedTask !== undefined && next !== null && isBoundary(completedTask, next.task)) {\n const withCheckpoint = setCurrent(completed, {\n ref: next.task.id,\n ...(next.task.layer !== undefined ? { layer: next.task.layer } : {}),\n phase: next.task.phase,\n awaitingCheckpoint: true,\n });\n await writeState(bundleDir, withCheckpoint);\n console.log(`Done ${completedTask.ref}.`);\n console.log(\n `Checkpoint berikutnya: ${next.task.id} (${next.task.layer ?? \"-\"} / phase ${next.task.phase}).`,\n );\n console.log(\"Berhenti dan minta konfirmasi user sebelum task start berikutnya.\");\n return;\n }\n await writeState(bundleDir, completed);\n console.log(`Done ${completedTask?.ref ?? ref}.`);\n if (next !== null) console.log(`Berikutnya: ${next.task.id} \u2014 ${next.task.title}`);\n}\n\nexport async function taskFailCommand(\n ref: string,\n reasonParts: readonly string[],\n options: CliOptions,\n): Promise<void> {\n const reason = reasonParts.join(\" \").trim() || options.note || \"\";\n const { bundleDir, state } = await loadLocalState(options);\n const updated = withStatus(state, ref, \"failed\", {\n note: reason,\n awaitingCheckpoint: false,\n });\n await writeState(bundleDir, updated);\n console.log(`Failed ${ref}${reason.length > 0 ? `: ${reason}` : \".\"}`);\n}\n\nexport async function taskResetCommand(\n ref: string,\n reasonParts: readonly string[],\n options: CliOptions,\n): Promise<void> {\n const reason = reasonParts.join(\" \").trim() || options.note || \"\";\n const { bundleDir, state } = await loadLocalState(options);\n const updated = withStatus(state, ref, \"todo\", {\n note: reason,\n awaitingCheckpoint: false,\n });\n await writeState(bundleDir, updated);\n console.log(`Reset ${ref} ke todo${reason.length > 0 ? `: ${reason}` : \".\"}`);\n}\n\nexport async function statusCommand(options: CliOptions): Promise<void> {\n if (options.remote === true) {\n await monitorCommand(options);\n return;\n }\n const { bundleDir, projectId } = await resolveLocalBundle(options);\n const existing = await readState(bundleDir);\n if (existing === null) {\n console.log(`Project ${projectId}: belum ada sidecar. Jalankan \\`jioogen task next\\`.`);\n return;\n }\n printExecution(\n {\n tasks: existing.tasks,\n counts: existing.counts ?? summarizeExecutionCounts(existing.tasks),\n current: existing.current ?? null,\n updatedAt: existing.updatedAt ?? null,\n },\n options.json === true,\n );\n}\n\nexport async function monitorCommand(options: CliOptions): Promise<void> {\n const { client, projectId } = await resolveBundle(options);\n const snapshot = await client.getJson<ExecutionSnapshot>(projectPath(projectId, \"/execution\"));\n if (options.json === true) {\n console.log(JSON.stringify(snapshot, null, 2));\n return;\n }\n if (!snapshot.hasExecution) {\n console.log(\"Belum ada eksekusi yang tersinkron.\");\n return;\n }\n printExecution(snapshot, false);\n}\n\nexport async function syncCommand(options: CliOptions): Promise<void> {\n const { client, projectId, bundleDir } = await resolveBundle(options);\n const state = await readState(bundleDir);\n if (state === null) {\n throw new Error(\"Sidecar belum ada. Jalankan `jioogen task next` lebih dulu.\");\n }\n const files: { path: string; content: string }[] = [\n {\n path: EXECUTION_SIDECAR_PATH,\n content: `${JSON.stringify(\n { ...state, counts: summarizeExecutionCounts(state.tasks) },\n null,\n 2,\n )}\\n`,\n },\n ];\n if (options.files !== undefined) {\n for (const raw of options.files.split(\",\")) {\n const relative = raw.trim();\n if (relative.length === 0) continue;\n assertBundleRelative(relative);\n files.push({\n path: relative,\n content: await readFile(join(bundleDir, relative), \"utf8\"),\n });\n }\n }\n const result = await client.postJson<SyncResult>(projectPath(projectId, \"/artifacts\"), {\n files,\n });\n if (options.json === true) {\n console.log(JSON.stringify(result, null, 2));\n return;\n }\n console.log(`Synced ${result.written?.length ?? 0} file.`);\n if (result.rejected !== undefined && result.rejected.length > 0) {\n for (const rejection of result.rejected) {\n console.log(`Ditolak: ${rejection.path} (${rejection.code}) \u2014 ${rejection.reason}`);\n }\n }\n if (result.warning !== undefined) console.log(`Peringatan: ${result.warning}`);\n}\n\nasync function resolveApi(options: CliOptions): Promise<ApiContext> {\n const stored = await readCredentials();\n const apiUrl = normalizeBaseUrl(\n options.api ?? envFirst(\"JIOOGEN_API\", \"JIOOCODE_API\") ?? stored?.apiUrl ?? DEFAULT_API_URL,\n );\n const explicitCookie = envFirst(\"JIOOGEN_COOKIE\", \"JIOOCODE_COOKIE\");\n const storedCookie =\n stored !== null && normalizeBaseUrl(stored.apiUrl) === apiUrl ? stored.cookie : undefined;\n const cookie = explicitCookie || storedCookie;\n if (cookie === undefined || cookie.length === 0) {\n if (stored !== null && storedCookie === undefined) {\n throw new Error(\n `Credential tersimpan untuk ${normalizeBaseUrl(stored.apiUrl)}, bukan ${apiUrl}. Jalankan \\`jioogen login --api ${apiUrl}\\` atau set JIOOGEN_COOKIE.`,\n );\n }\n throw new Error(\"Belum login. Jalankan `jioogen login --email ... --password-stdin`.\");\n }\n return { apiUrl, client: new ApiClient(apiUrl, cookie) };\n}\n\nasync function resolveLocalBundle(options: CliOptions): Promise<LocalBundleContext> {\n const link = await findProjectLink(options.dir ?? process.cwd());\n const projectId =\n options.project ?? envFirst(\"JIOOGEN_PROJECT\", \"JIOOCODE_PROJECT\") ?? link?.projectId;\n if (projectId === undefined || projectId.length === 0) {\n throw new Error(\n \"Project belum di-bind. Jalankan `jioogen pull <projectId>` atau pakai --project.\",\n );\n }\n return {\n projectId,\n bundleDir: resolve(link?.bundleDir ?? options.dir ?? process.cwd()),\n linkedApiUrl: link?.apiUrl,\n };\n}\n\nasync function resolveBundle(options: CliOptions): Promise<BundleContext> {\n const local = await resolveLocalBundle(options);\n const api = await resolveApi({ api: options.api ?? local.linkedApiUrl });\n return { ...api, ...local };\n}\n\nasync function loadLocalState(options: CliOptions): Promise<LocalState> {\n const context = await resolveLocalBundle(options);\n const definitions = await loadTasks(context.bundleDir);\n const existing = await readState(context.bundleDir);\n const state =\n existing === null\n ? createState(context.projectId, definitions)\n : mergeTasks(existing, definitions);\n return { ...context, definitions, state };\n}\n\nasync function assertPullTarget(target: string, projectId: string): Promise<void> {\n let entries: string[];\n try {\n entries = await readdir(target);\n } catch (error) {\n if (isMissingFile(error)) return;\n throw error;\n }\n if (entries.length === 0) return;\n const link = await findProjectLink(target);\n if (link === null || link.bundleDir !== target) {\n throw new Error(`Direktori ${target} tidak kosong dan bukan bundle JiooGen. Pilih --dir lain.`);\n }\n if (link.projectId !== projectId) {\n throw new Error(`Direktori ${target} terikat ke project ${link.projectId}.`);\n }\n}\n\nexport async function assertLinkTarget(target: string, projectId: string): Promise<void> {\n if (!(await hasBundleMarkers(target))) {\n throw new Error(\n `Direktori ${target} tidak berisi bundle JiooGen (butuh PRD.md atau tasks/*.md). Jalankan \\`jioogen pull ${projectId} --dir <dir-kosong>\\` untuk mengunduh bundle baru.`,\n );\n }\n const link = await findProjectLink(target);\n if (link !== null && link.projectId !== projectId) {\n throw new Error(\n `Direktori ${target} sudah terikat ke project ${link.projectId}. Hapus .jioogen/project.json di sana atau pilih --dir lain.`,\n );\n }\n}\n\nasync function hasBundleMarkers(target: string): Promise<boolean> {\n try {\n await readFile(join(target, \"PRD.md\"));\n return true;\n } catch (error) {\n if (!isMissingFile(error)) throw error;\n }\n return hasTaskMarkdown(join(target, \"tasks\"));\n}\n\nasync function hasTaskMarkdown(directory: string): Promise<boolean> {\n let names: string[];\n try {\n names = await readdir(directory);\n } catch (error) {\n if (isMissingFile(error)) return false;\n throw error;\n }\n return names.some((name) => name.toLowerCase().endsWith(\".md\"));\n}\n\nasync function verifyProjectAccess(client: ApiClient, projectId: string): Promise<void> {\n try {\n await client.getJson<ExecutionSnapshot>(projectPath(projectId, \"/execution\"));\n } catch (error) {\n if (error instanceof ApiError && error.status === 404) {\n throw new Error(`Project ${projectId} tidak ditemukan atau bukan milik akun ini.`);\n }\n throw error;\n }\n}\n\nfunction assertBundleRelative(path: string): void {\n const normalized = path.replace(/\\\\/g, \"/\");\n if (\n normalized.startsWith(\"/\") ||\n normalized.split(\"/\").some((part) => part === \"..\" || part.length === 0)\n ) {\n throw new Error(`Path harus relatif terhadap bundle: ${path}`);\n }\n}\n\nfunction printExecution(\n data: {\n tasks: ExecutionTaskState[];\n counts: ExecutionCounts;\n current: ExecutionCurrent | null;\n updatedAt: string | null;\n },\n asJson: boolean,\n): void {\n if (asJson) {\n console.log(JSON.stringify(data, null, 2));\n return;\n }\n console.log(`Updated: ${data.updatedAt ?? \"-\"}`);\n console.log(\n `Counts: todo=${data.counts.todo} in_progress=${data.counts.inProgress} done=${data.counts.done} failed=${data.counts.failed} blocked=${data.counts.blocked}`,\n );\n if (data.current !== null) {\n const checkpoint = data.current.awaitingCheckpoint ? \" (checkpoint)\" : \"\";\n console.log(`Current: ${data.current.ref ?? \"-\"}${checkpoint}`);\n }\n if (data.tasks.length === 0) {\n console.log(\"Belum ada task di sidecar.\");\n return;\n }\n console.log(\n formatTable(\n [\"REF\", \"STATUS\", \"LAYER\", \"PHASE\", \"ATTEMPT\"],\n data.tasks.map((task) => [\n task.ref,\n task.status,\n task.layer ?? \"-\",\n String(task.phase ?? \"-\"),\n String(task.attempt ?? \"-\"),\n ]),\n ),\n );\n}\n\nasync function readStdin(): Promise<string> {\n const chunks: Buffer[] = [];\n for await (const chunk of process.stdin) chunks.push(Buffer.from(chunk as Uint8Array));\n return Buffer.concat(chunks).toString(\"utf8\");\n}\n\nfunction envFirst(primary: string, legacy: string): string | undefined {\n const value = process.env[primary]?.trim();\n if (value !== undefined && value.length > 0) return value;\n const fallback = process.env[legacy]?.trim();\n return fallback !== undefined && fallback.length > 0 ? fallback : undefined;\n}\n\nfunction isMissingFile(error: unknown): boolean {\n return typeof error === \"object\" && error !== null && \"code\" in error && error.code === \"ENOENT\";\n}\n", "export * from \"./errors.js\";\nexport * from \"./helpers/parseUtil.js\";\nexport * from \"./helpers/typeAliases.js\";\nexport * from \"./helpers/util.js\";\nexport * from \"./types.js\";\nexport * from \"./ZodError.js\";\n", "export var util;\n(function (util) {\n util.assertEqual = (_) => { };\n function assertIs(_arg) { }\n util.assertIs = assertIs;\n function assertNever(_x) {\n throw new Error();\n }\n util.assertNever = assertNever;\n util.arrayToEnum = (items) => {\n const obj = {};\n for (const item of items) {\n obj[item] = item;\n }\n return obj;\n };\n util.getValidEnumValues = (obj) => {\n const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n const filtered = {};\n for (const k of validKeys) {\n filtered[k] = obj[k];\n }\n return util.objectValues(filtered);\n };\n util.objectValues = (obj) => {\n return util.objectKeys(obj).map(function (e) {\n return obj[e];\n });\n };\n util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n : (object) => {\n const keys = [];\n for (const key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n keys.push(key);\n }\n }\n return keys;\n };\n util.find = (arr, checker) => {\n for (const item of arr) {\n if (checker(item))\n return item;\n }\n return undefined;\n };\n util.isInteger = typeof Number.isInteger === \"function\"\n ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n : (val) => typeof val === \"number\" && Number.isFinite(val) && Math.floor(val) === val;\n function joinValues(array, separator = \" | \") {\n return array.map((val) => (typeof val === \"string\" ? `'${val}'` : val)).join(separator);\n }\n util.joinValues = joinValues;\n util.jsonStringifyReplacer = (_, value) => {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n return value;\n };\n})(util || (util = {}));\nexport var objectUtil;\n(function (objectUtil) {\n objectUtil.mergeShapes = (first, second) => {\n return {\n ...first,\n ...second, // second overwrites first\n };\n };\n})(objectUtil || (objectUtil = {}));\nexport const ZodParsedType = util.arrayToEnum([\n \"string\",\n \"nan\",\n \"number\",\n \"integer\",\n \"float\",\n \"boolean\",\n \"date\",\n \"bigint\",\n \"symbol\",\n \"function\",\n \"undefined\",\n \"null\",\n \"array\",\n \"object\",\n \"unknown\",\n \"promise\",\n \"void\",\n \"never\",\n \"map\",\n \"set\",\n]);\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return ZodParsedType.undefined;\n case \"string\":\n return ZodParsedType.string;\n case \"number\":\n return Number.isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n case \"boolean\":\n return ZodParsedType.boolean;\n case \"function\":\n return ZodParsedType.function;\n case \"bigint\":\n return ZodParsedType.bigint;\n case \"symbol\":\n return ZodParsedType.symbol;\n case \"object\":\n if (Array.isArray(data)) {\n return ZodParsedType.array;\n }\n if (data === null) {\n return ZodParsedType.null;\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return ZodParsedType.promise;\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return ZodParsedType.map;\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return ZodParsedType.set;\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return ZodParsedType.date;\n }\n return ZodParsedType.object;\n default:\n return ZodParsedType.unknown;\n }\n};\n", "import { util } from \"./helpers/util.js\";\nexport const ZodIssueCode = util.arrayToEnum([\n \"invalid_type\",\n \"invalid_literal\",\n \"custom\",\n \"invalid_union\",\n \"invalid_union_discriminator\",\n \"invalid_enum_value\",\n \"unrecognized_keys\",\n \"invalid_arguments\",\n \"invalid_return_type\",\n \"invalid_date\",\n \"invalid_string\",\n \"too_small\",\n \"too_big\",\n \"invalid_intersection_types\",\n \"not_multiple_of\",\n \"not_finite\",\n]);\nexport const quotelessJson = (obj) => {\n const json = JSON.stringify(obj, null, 2);\n return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nexport class ZodError extends Error {\n get errors() {\n return this.issues;\n }\n constructor(issues) {\n super();\n this.issues = [];\n this.addIssue = (sub) => {\n this.issues = [...this.issues, sub];\n };\n this.addIssues = (subs = []) => {\n this.issues = [...this.issues, ...subs];\n };\n const actualProto = new.target.prototype;\n if (Object.setPrototypeOf) {\n // eslint-disable-next-line ban/ban\n Object.setPrototypeOf(this, actualProto);\n }\n else {\n this.__proto__ = actualProto;\n }\n this.name = \"ZodError\";\n this.issues = issues;\n }\n format(_mapper) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\") {\n issue.unionErrors.map(processError);\n }\n else if (issue.code === \"invalid_return_type\") {\n processError(issue.returnTypeError);\n }\n else if (issue.code === \"invalid_arguments\") {\n processError(issue.argumentsError);\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n // if (typeof el === \"string\") {\n // curr[el] = curr[el] || { _errors: [] };\n // } else if (typeof el === \"number\") {\n // const errorArray: any = [];\n // errorArray._errors = [];\n // curr[el] = curr[el] || errorArray;\n // }\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(this);\n return fieldErrors;\n }\n static assert(value) {\n if (!(value instanceof ZodError)) {\n throw new Error(`Not a ZodError: ${value}`);\n }\n }\n toString() {\n return this.message;\n }\n get message() {\n return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n }\n get isEmpty() {\n return this.issues.length === 0;\n }\n flatten(mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of this.issues) {\n if (sub.path.length > 0) {\n const firstEl = sub.path[0];\n fieldErrors[firstEl] = fieldErrors[firstEl] || [];\n fieldErrors[firstEl].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n }\n get formErrors() {\n return this.flatten();\n }\n}\nZodError.create = (issues) => {\n const error = new ZodError(issues);\n return error;\n};\n", "import { ZodIssueCode } from \"../ZodError.js\";\nimport { util, ZodParsedType } from \"../helpers/util.js\";\nconst errorMap = (issue, _ctx) => {\n let message;\n switch (issue.code) {\n case ZodIssueCode.invalid_type:\n if (issue.received === ZodParsedType.undefined) {\n message = \"Required\";\n }\n else {\n message = `Expected ${issue.expected}, received ${issue.received}`;\n }\n break;\n case ZodIssueCode.invalid_literal:\n message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n break;\n case ZodIssueCode.unrecognized_keys:\n message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n break;\n case ZodIssueCode.invalid_union:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_union_discriminator:\n message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n break;\n case ZodIssueCode.invalid_enum_value:\n message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n break;\n case ZodIssueCode.invalid_arguments:\n message = `Invalid function arguments`;\n break;\n case ZodIssueCode.invalid_return_type:\n message = `Invalid function return type`;\n break;\n case ZodIssueCode.invalid_date:\n message = `Invalid date`;\n break;\n case ZodIssueCode.invalid_string:\n if (typeof issue.validation === \"object\") {\n if (\"includes\" in issue.validation) {\n message = `Invalid input: must include \"${issue.validation.includes}\"`;\n if (typeof issue.validation.position === \"number\") {\n message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n }\n }\n else if (\"startsWith\" in issue.validation) {\n message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n }\n else if (\"endsWith\" in issue.validation) {\n message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n }\n else {\n util.assertNever(issue.validation);\n }\n }\n else if (issue.validation !== \"regex\") {\n message = `Invalid ${issue.validation}`;\n }\n else {\n message = \"Invalid\";\n }\n break;\n case ZodIssueCode.too_small:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"bigint\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${new Date(Number(issue.minimum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.too_big:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"bigint\")\n message = `BigInt must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly` : issue.inclusive ? `smaller than or equal to` : `smaller than`} ${new Date(Number(issue.maximum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.custom:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_intersection_types:\n message = `Intersection results could not be merged`;\n break;\n case ZodIssueCode.not_multiple_of:\n message = `Number must be a multiple of ${issue.multipleOf}`;\n break;\n case ZodIssueCode.not_finite:\n message = \"Number must be finite\";\n break;\n default:\n message = _ctx.defaultError;\n util.assertNever(issue);\n }\n return { message };\n};\nexport default errorMap;\n", "import defaultErrorMap from \"./locales/en.js\";\nlet overrideErrorMap = defaultErrorMap;\nexport { defaultErrorMap };\nexport function setErrorMap(map) {\n overrideErrorMap = map;\n}\nexport function getErrorMap() {\n return overrideErrorMap;\n}\n", "import { getErrorMap } from \"../errors.js\";\nimport defaultErrorMap from \"../locales/en.js\";\nexport const makeIssue = (params) => {\n const { data, path, errorMaps, issueData } = params;\n const fullPath = [...path, ...(issueData.path || [])];\n const fullIssue = {\n ...issueData,\n path: fullPath,\n };\n if (issueData.message !== undefined) {\n return {\n ...issueData,\n path: fullPath,\n message: issueData.message,\n };\n }\n let errorMessage = \"\";\n const maps = errorMaps\n .filter((m) => !!m)\n .slice()\n .reverse();\n for (const map of maps) {\n errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n }\n return {\n ...issueData,\n path: fullPath,\n message: errorMessage,\n };\n};\nexport const EMPTY_PATH = [];\nexport function addIssueToContext(ctx, issueData) {\n const overrideMap = getErrorMap();\n const issue = makeIssue({\n issueData: issueData,\n data: ctx.data,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap, // contextual error map is first priority\n ctx.schemaErrorMap, // then schema-bound map if available\n overrideMap, // then global override map\n overrideMap === defaultErrorMap ? undefined : defaultErrorMap, // then global default map\n ].filter((x) => !!x),\n });\n ctx.common.issues.push(issue);\n}\nexport class ParseStatus {\n constructor() {\n this.value = \"valid\";\n }\n dirty() {\n if (this.value === \"valid\")\n this.value = \"dirty\";\n }\n abort() {\n if (this.value !== \"aborted\")\n this.value = \"aborted\";\n }\n static mergeArray(status, results) {\n const arrayValue = [];\n for (const s of results) {\n if (s.status === \"aborted\")\n return INVALID;\n if (s.status === \"dirty\")\n status.dirty();\n arrayValue.push(s.value);\n }\n return { status: status.value, value: arrayValue };\n }\n static async mergeObjectAsync(status, pairs) {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n });\n }\n return ParseStatus.mergeObjectSync(status, syncPairs);\n }\n static mergeObjectSync(status, pairs) {\n const finalObject = {};\n for (const pair of pairs) {\n const { key, value } = pair;\n if (key.status === \"aborted\")\n return INVALID;\n if (value.status === \"aborted\")\n return INVALID;\n if (key.status === \"dirty\")\n status.dirty();\n if (value.status === \"dirty\")\n status.dirty();\n if (key.value !== \"__proto__\" && (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n finalObject[key.value] = value.value;\n }\n }\n return { status: status.value, value: finalObject };\n }\n}\nexport const INVALID = Object.freeze({\n status: \"aborted\",\n});\nexport const DIRTY = (value) => ({ status: \"dirty\", value });\nexport const OK = (value) => ({ status: \"valid\", value });\nexport const isAborted = (x) => x.status === \"aborted\";\nexport const isDirty = (x) => x.status === \"dirty\";\nexport const isValid = (x) => x.status === \"valid\";\nexport const isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n", "export var errorUtil;\n(function (errorUtil) {\n errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n // biome-ignore lint:\n errorUtil.toString = (message) => typeof message === \"string\" ? message : message?.message;\n})(errorUtil || (errorUtil = {}));\n", "import { ZodError, ZodIssueCode, } from \"./ZodError.js\";\nimport { defaultErrorMap, getErrorMap } from \"./errors.js\";\nimport { errorUtil } from \"./helpers/errorUtil.js\";\nimport { DIRTY, INVALID, OK, ParseStatus, addIssueToContext, isAborted, isAsync, isDirty, isValid, makeIssue, } from \"./helpers/parseUtil.js\";\nimport { util, ZodParsedType, getParsedType } from \"./helpers/util.js\";\nclass ParseInputLazyPath {\n constructor(parent, value, path, key) {\n this._cachedPath = [];\n this.parent = parent;\n this.data = value;\n this._path = path;\n this._key = key;\n }\n get path() {\n if (!this._cachedPath.length) {\n if (Array.isArray(this._key)) {\n this._cachedPath.push(...this._path, ...this._key);\n }\n else {\n this._cachedPath.push(...this._path, this._key);\n }\n }\n return this._cachedPath;\n }\n}\nconst handleResult = (ctx, result) => {\n if (isValid(result)) {\n return { success: true, data: result.value };\n }\n else {\n if (!ctx.common.issues.length) {\n throw new Error(\"Validation failed but no issues detected.\");\n }\n return {\n success: false,\n get error() {\n if (this._error)\n return this._error;\n const error = new ZodError(ctx.common.issues);\n this._error = error;\n return this._error;\n },\n };\n }\n};\nfunction processCreateParams(params) {\n if (!params)\n return {};\n const { errorMap, invalid_type_error, required_error, description } = params;\n if (errorMap && (invalid_type_error || required_error)) {\n throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n }\n if (errorMap)\n return { errorMap: errorMap, description };\n const customMap = (iss, ctx) => {\n const { message } = params;\n if (iss.code === \"invalid_enum_value\") {\n return { message: message ?? ctx.defaultError };\n }\n if (typeof ctx.data === \"undefined\") {\n return { message: message ?? required_error ?? ctx.defaultError };\n }\n if (iss.code !== \"invalid_type\")\n return { message: ctx.defaultError };\n return { message: message ?? invalid_type_error ?? ctx.defaultError };\n };\n return { errorMap: customMap, description };\n}\nexport class ZodType {\n get description() {\n return this._def.description;\n }\n _getType(input) {\n return getParsedType(input.data);\n }\n _getOrReturnCtx(input, ctx) {\n return (ctx || {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n });\n }\n _processInputParams(input) {\n return {\n status: new ParseStatus(),\n ctx: {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n },\n };\n }\n _parseSync(input) {\n const result = this._parse(input);\n if (isAsync(result)) {\n throw new Error(\"Synchronous parse encountered promise.\");\n }\n return result;\n }\n _parseAsync(input) {\n const result = this._parse(input);\n return Promise.resolve(result);\n }\n parse(data, params) {\n const result = this.safeParse(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n safeParse(data, params) {\n const ctx = {\n common: {\n issues: [],\n async: params?.async ?? false,\n contextualErrorMap: params?.errorMap,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n return handleResult(ctx, result);\n }\n \"~validate\"(data) {\n const ctx = {\n common: {\n issues: [],\n async: !!this[\"~standard\"].async,\n },\n path: [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n if (!this[\"~standard\"].async) {\n try {\n const result = this._parseSync({ data, path: [], parent: ctx });\n return isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n };\n }\n catch (err) {\n if (err?.message?.toLowerCase()?.includes(\"encountered\")) {\n this[\"~standard\"].async = true;\n }\n ctx.common = {\n issues: [],\n async: true,\n };\n }\n }\n return this._parseAsync({ data, path: [], parent: ctx }).then((result) => isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n });\n }\n async parseAsync(data, params) {\n const result = await this.safeParseAsync(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n async safeParseAsync(data, params) {\n const ctx = {\n common: {\n issues: [],\n contextualErrorMap: params?.errorMap,\n async: true,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n const result = await (isAsync(maybeAsyncResult) ? maybeAsyncResult : Promise.resolve(maybeAsyncResult));\n return handleResult(ctx, result);\n }\n refine(check, message) {\n const getIssueProperties = (val) => {\n if (typeof message === \"string\" || typeof message === \"undefined\") {\n return { message };\n }\n else if (typeof message === \"function\") {\n return message(val);\n }\n else {\n return message;\n }\n };\n return this._refinement((val, ctx) => {\n const result = check(val);\n const setError = () => ctx.addIssue({\n code: ZodIssueCode.custom,\n ...getIssueProperties(val),\n });\n if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n return result.then((data) => {\n if (!data) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n if (!result) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n refinement(check, refinementData) {\n return this._refinement((val, ctx) => {\n if (!check(val)) {\n ctx.addIssue(typeof refinementData === \"function\" ? refinementData(val, ctx) : refinementData);\n return false;\n }\n else {\n return true;\n }\n });\n }\n _refinement(refinement) {\n return new ZodEffects({\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"refinement\", refinement },\n });\n }\n superRefine(refinement) {\n return this._refinement(refinement);\n }\n constructor(def) {\n /** Alias of safeParseAsync */\n this.spa = this.safeParseAsync;\n this._def = def;\n this.parse = this.parse.bind(this);\n this.safeParse = this.safeParse.bind(this);\n this.parseAsync = this.parseAsync.bind(this);\n this.safeParseAsync = this.safeParseAsync.bind(this);\n this.spa = this.spa.bind(this);\n this.refine = this.refine.bind(this);\n this.refinement = this.refinement.bind(this);\n this.superRefine = this.superRefine.bind(this);\n this.optional = this.optional.bind(this);\n this.nullable = this.nullable.bind(this);\n this.nullish = this.nullish.bind(this);\n this.array = this.array.bind(this);\n this.promise = this.promise.bind(this);\n this.or = this.or.bind(this);\n this.and = this.and.bind(this);\n this.transform = this.transform.bind(this);\n this.brand = this.brand.bind(this);\n this.default = this.default.bind(this);\n this.catch = this.catch.bind(this);\n this.describe = this.describe.bind(this);\n this.pipe = this.pipe.bind(this);\n this.readonly = this.readonly.bind(this);\n this.isNullable = this.isNullable.bind(this);\n this.isOptional = this.isOptional.bind(this);\n this[\"~standard\"] = {\n version: 1,\n vendor: \"zod\",\n validate: (data) => this[\"~validate\"](data),\n };\n }\n optional() {\n return ZodOptional.create(this, this._def);\n }\n nullable() {\n return ZodNullable.create(this, this._def);\n }\n nullish() {\n return this.nullable().optional();\n }\n array() {\n return ZodArray.create(this);\n }\n promise() {\n return ZodPromise.create(this, this._def);\n }\n or(option) {\n return ZodUnion.create([this, option], this._def);\n }\n and(incoming) {\n return ZodIntersection.create(this, incoming, this._def);\n }\n transform(transform) {\n return new ZodEffects({\n ...processCreateParams(this._def),\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"transform\", transform },\n });\n }\n default(def) {\n const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodDefault({\n ...processCreateParams(this._def),\n innerType: this,\n defaultValue: defaultValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n });\n }\n brand() {\n return new ZodBranded({\n typeName: ZodFirstPartyTypeKind.ZodBranded,\n type: this,\n ...processCreateParams(this._def),\n });\n }\n catch(def) {\n const catchValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodCatch({\n ...processCreateParams(this._def),\n innerType: this,\n catchValue: catchValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n });\n }\n describe(description) {\n const This = this.constructor;\n return new This({\n ...this._def,\n description,\n });\n }\n pipe(target) {\n return ZodPipeline.create(this, target);\n }\n readonly() {\n return ZodReadonly.create(this);\n }\n isOptional() {\n return this.safeParse(undefined).success;\n }\n isNullable() {\n return this.safeParse(null).success;\n }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[0-9a-z]+$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;\n// const uuidRegex =\n// /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/i;\nconst nanoidRegex = /^[a-z0-9_-]{21}$/i;\nconst jwtRegex = /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/;\nconst durationRegex = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n// /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n// /^[a-zA-Z0-9\\.\\!\\#\\$\\%\\&\\'\\*\\+\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// const emailRegex =\n// /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n// /^[a-z0-9.!#$%&\u2019*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\n// faster, simpler, safer\nconst ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nconst ipv4CidrRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/;\n// const ipv6Regex =\n// /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\nconst ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;\nconst ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nconst base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// https://base64.guru/standards/base64url\nconst base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;\n// simple\n// const dateRegexSource = `\\\\d{4}-\\\\d{2}-\\\\d{2}`;\n// no leap year validation\n// const dateRegexSource = `\\\\d{4}-((0[13578]|10|12)-31|(0[13-9]|1[0-2])-30|(0[1-9]|1[0-2])-(0[1-9]|1\\\\d|2\\\\d))`;\n// with leap year validation\nconst dateRegexSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateRegex = new RegExp(`^${dateRegexSource}$`);\nfunction timeRegexSource(args) {\n let secondsRegexSource = `[0-5]\\\\d`;\n if (args.precision) {\n secondsRegexSource = `${secondsRegexSource}\\\\.\\\\d{${args.precision}}`;\n }\n else if (args.precision == null) {\n secondsRegexSource = `${secondsRegexSource}(\\\\.\\\\d+)?`;\n }\n const secondsQuantifier = args.precision ? \"+\" : \"?\"; // require seconds if precision is nonzero\n return `([01]\\\\d|2[0-3]):[0-5]\\\\d(:${secondsRegexSource})${secondsQuantifier}`;\n}\nfunction timeRegex(args) {\n return new RegExp(`^${timeRegexSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetimeRegex(args) {\n let regex = `${dateRegexSource}T${timeRegexSource(args)}`;\n const opts = [];\n opts.push(args.local ? `Z?` : `Z`);\n if (args.offset)\n opts.push(`([+-]\\\\d{2}:?\\\\d{2})`);\n regex = `${regex}(${opts.join(\"|\")})`;\n return new RegExp(`^${regex}$`);\n}\nfunction isValidIP(ip, version) {\n if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n return true;\n }\n return false;\n}\nfunction isValidJWT(jwt, alg) {\n if (!jwtRegex.test(jwt))\n return false;\n try {\n const [header] = jwt.split(\".\");\n if (!header)\n return false;\n // Convert base64url to base64\n const base64 = header\n .replace(/-/g, \"+\")\n .replace(/_/g, \"/\")\n .padEnd(header.length + ((4 - (header.length % 4)) % 4), \"=\");\n const decoded = JSON.parse(atob(base64));\n if (typeof decoded !== \"object\" || decoded === null)\n return false;\n if (\"typ\" in decoded && decoded?.typ !== \"JWT\")\n return false;\n if (!decoded.alg)\n return false;\n if (alg && decoded.alg !== alg)\n return false;\n return true;\n }\n catch {\n return false;\n }\n}\nfunction isValidCidr(ip, version) {\n if ((version === \"v4\" || !version) && ipv4CidrRegex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6CidrRegex.test(ip)) {\n return true;\n }\n return false;\n}\nexport class ZodString extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = String(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.string) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.string,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.length < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.length > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"length\") {\n const tooBig = input.data.length > check.value;\n const tooSmall = input.data.length < check.value;\n if (tooBig || tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n if (tooBig) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n else if (tooSmall) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n status.dirty();\n }\n }\n else if (check.kind === \"email\") {\n if (!emailRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"email\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"emoji\") {\n if (!emojiRegex) {\n emojiRegex = new RegExp(_emojiRegex, \"u\");\n }\n if (!emojiRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"emoji\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"uuid\") {\n if (!uuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"uuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"nanoid\") {\n if (!nanoidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"nanoid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid\") {\n if (!cuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid2\") {\n if (!cuid2Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid2\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ulid\") {\n if (!ulidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ulid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"url\") {\n try {\n new URL(input.data);\n }\n catch {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"regex\") {\n check.regex.lastIndex = 0;\n const testResult = check.regex.test(input.data);\n if (!testResult) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"regex\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"trim\") {\n input.data = input.data.trim();\n }\n else if (check.kind === \"includes\") {\n if (!input.data.includes(check.value, check.position)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { includes: check.value, position: check.position },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"toLowerCase\") {\n input.data = input.data.toLowerCase();\n }\n else if (check.kind === \"toUpperCase\") {\n input.data = input.data.toUpperCase();\n }\n else if (check.kind === \"startsWith\") {\n if (!input.data.startsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { startsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"endsWith\") {\n if (!input.data.endsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { endsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"datetime\") {\n const regex = datetimeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"datetime\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"date\") {\n const regex = dateRegex;\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"date\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"time\") {\n const regex = timeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"time\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"duration\") {\n if (!durationRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"duration\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ip\") {\n if (!isValidIP(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ip\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"jwt\") {\n if (!isValidJWT(input.data, check.alg)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"jwt\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cidr\") {\n if (!isValidCidr(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cidr\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64\") {\n if (!base64Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64url\") {\n if (!base64urlRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _regex(regex, validation, message) {\n return this.refinement((data) => regex.test(data), {\n validation,\n code: ZodIssueCode.invalid_string,\n ...errorUtil.errToObj(message),\n });\n }\n _addCheck(check) {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n email(message) {\n return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n }\n url(message) {\n return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n }\n emoji(message) {\n return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n }\n uuid(message) {\n return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n }\n nanoid(message) {\n return this._addCheck({ kind: \"nanoid\", ...errorUtil.errToObj(message) });\n }\n cuid(message) {\n return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n }\n cuid2(message) {\n return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n }\n ulid(message) {\n return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n }\n base64(message) {\n return this._addCheck({ kind: \"base64\", ...errorUtil.errToObj(message) });\n }\n base64url(message) {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return this._addCheck({\n kind: \"base64url\",\n ...errorUtil.errToObj(message),\n });\n }\n jwt(options) {\n return this._addCheck({ kind: \"jwt\", ...errorUtil.errToObj(options) });\n }\n ip(options) {\n return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n }\n cidr(options) {\n return this._addCheck({ kind: \"cidr\", ...errorUtil.errToObj(options) });\n }\n datetime(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"datetime\",\n precision: null,\n offset: false,\n local: false,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"datetime\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n offset: options?.offset ?? false,\n local: options?.local ?? false,\n ...errorUtil.errToObj(options?.message),\n });\n }\n date(message) {\n return this._addCheck({ kind: \"date\", message });\n }\n time(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"time\",\n precision: null,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"time\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n ...errorUtil.errToObj(options?.message),\n });\n }\n duration(message) {\n return this._addCheck({ kind: \"duration\", ...errorUtil.errToObj(message) });\n }\n regex(regex, message) {\n return this._addCheck({\n kind: \"regex\",\n regex: regex,\n ...errorUtil.errToObj(message),\n });\n }\n includes(value, options) {\n return this._addCheck({\n kind: \"includes\",\n value: value,\n position: options?.position,\n ...errorUtil.errToObj(options?.message),\n });\n }\n startsWith(value, message) {\n return this._addCheck({\n kind: \"startsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n endsWith(value, message) {\n return this._addCheck({\n kind: \"endsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n min(minLength, message) {\n return this._addCheck({\n kind: \"min\",\n value: minLength,\n ...errorUtil.errToObj(message),\n });\n }\n max(maxLength, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxLength,\n ...errorUtil.errToObj(message),\n });\n }\n length(len, message) {\n return this._addCheck({\n kind: \"length\",\n value: len,\n ...errorUtil.errToObj(message),\n });\n }\n /**\n * Equivalent to `.min(1)`\n */\n nonempty(message) {\n return this.min(1, errorUtil.errToObj(message));\n }\n trim() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"trim\" }],\n });\n }\n toLowerCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n });\n }\n toUpperCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n });\n }\n get isDatetime() {\n return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n }\n get isDate() {\n return !!this._def.checks.find((ch) => ch.kind === \"date\");\n }\n get isTime() {\n return !!this._def.checks.find((ch) => ch.kind === \"time\");\n }\n get isDuration() {\n return !!this._def.checks.find((ch) => ch.kind === \"duration\");\n }\n get isEmail() {\n return !!this._def.checks.find((ch) => ch.kind === \"email\");\n }\n get isURL() {\n return !!this._def.checks.find((ch) => ch.kind === \"url\");\n }\n get isEmoji() {\n return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n }\n get isUUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n }\n get isNANOID() {\n return !!this._def.checks.find((ch) => ch.kind === \"nanoid\");\n }\n get isCUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n }\n get isCUID2() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n }\n get isULID() {\n return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n }\n get isIP() {\n return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n }\n get isCIDR() {\n return !!this._def.checks.find((ch) => ch.kind === \"cidr\");\n }\n get isBase64() {\n return !!this._def.checks.find((ch) => ch.kind === \"base64\");\n }\n get isBase64url() {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return !!this._def.checks.find((ch) => ch.kind === \"base64url\");\n }\n get minLength() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxLength() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodString.create = (params) => {\n return new ZodString({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodString,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return (valInt % stepInt) / 10 ** decCount;\n}\nexport class ZodNumber extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n this.step = this.multipleOf;\n }\n _parse(input) {\n if (this._def.coerce) {\n input.data = Number(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.number) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.number,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"int\") {\n if (!util.isInteger(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: \"integer\",\n received: \"float\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (floatSafeRemainder(input.data, check.value) !== 0) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"finite\") {\n if (!Number.isFinite(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_finite,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodNumber({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodNumber({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n int(message) {\n return this._addCheck({\n kind: \"int\",\n message: errorUtil.toString(message),\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value: value,\n message: errorUtil.toString(message),\n });\n }\n finite(message) {\n return this._addCheck({\n kind: \"finite\",\n message: errorUtil.toString(message),\n });\n }\n safe(message) {\n return this._addCheck({\n kind: \"min\",\n inclusive: true,\n value: Number.MIN_SAFE_INTEGER,\n message: errorUtil.toString(message),\n })._addCheck({\n kind: \"max\",\n inclusive: true,\n value: Number.MAX_SAFE_INTEGER,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n get isInt() {\n return !!this._def.checks.find((ch) => ch.kind === \"int\" || (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n }\n get isFinite() {\n let max = null;\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"finite\" || ch.kind === \"int\" || ch.kind === \"multipleOf\") {\n return true;\n }\n else if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n else if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return Number.isFinite(min) && Number.isFinite(max);\n }\n}\nZodNumber.create = (params) => {\n return new ZodNumber({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodNumber,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBigInt extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n }\n _parse(input) {\n if (this._def.coerce) {\n try {\n input.data = BigInt(input.data);\n }\n catch {\n return this._getInvalidInput(input);\n }\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.bigint) {\n return this._getInvalidInput(input);\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n type: \"bigint\",\n minimum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n type: \"bigint\",\n maximum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (input.data % check.value !== BigInt(0)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _getInvalidInput(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.bigint,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodBigInt({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodBigInt({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodBigInt.create = (params) => {\n return new ZodBigInt({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodBigInt,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBoolean extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = Boolean(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.boolean) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.boolean,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodBoolean.create = (params) => {\n return new ZodBoolean({\n typeName: ZodFirstPartyTypeKind.ZodBoolean,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodDate extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = new Date(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.date) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.date,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (Number.isNaN(input.data.getTime())) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_date,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.getTime() < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n message: check.message,\n inclusive: true,\n exact: false,\n minimum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.getTime() > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n message: check.message,\n inclusive: true,\n exact: false,\n maximum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return {\n status: status.value,\n value: new Date(input.data.getTime()),\n };\n }\n _addCheck(check) {\n return new ZodDate({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n min(minDate, message) {\n return this._addCheck({\n kind: \"min\",\n value: minDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n max(maxDate, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n get minDate() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min != null ? new Date(min) : null;\n }\n get maxDate() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max != null ? new Date(max) : null;\n }\n}\nZodDate.create = (params) => {\n return new ZodDate({\n checks: [],\n coerce: params?.coerce || false,\n typeName: ZodFirstPartyTypeKind.ZodDate,\n ...processCreateParams(params),\n });\n};\nexport class ZodSymbol extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.symbol) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.symbol,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodSymbol.create = (params) => {\n return new ZodSymbol({\n typeName: ZodFirstPartyTypeKind.ZodSymbol,\n ...processCreateParams(params),\n });\n};\nexport class ZodUndefined extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.undefined,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodUndefined.create = (params) => {\n return new ZodUndefined({\n typeName: ZodFirstPartyTypeKind.ZodUndefined,\n ...processCreateParams(params),\n });\n};\nexport class ZodNull extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.null) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.null,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodNull.create = (params) => {\n return new ZodNull({\n typeName: ZodFirstPartyTypeKind.ZodNull,\n ...processCreateParams(params),\n });\n};\nexport class ZodAny extends ZodType {\n constructor() {\n super(...arguments);\n // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n this._any = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodAny.create = (params) => {\n return new ZodAny({\n typeName: ZodFirstPartyTypeKind.ZodAny,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnknown extends ZodType {\n constructor() {\n super(...arguments);\n // required\n this._unknown = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodUnknown.create = (params) => {\n return new ZodUnknown({\n typeName: ZodFirstPartyTypeKind.ZodUnknown,\n ...processCreateParams(params),\n });\n};\nexport class ZodNever extends ZodType {\n _parse(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.never,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n}\nZodNever.create = (params) => {\n return new ZodNever({\n typeName: ZodFirstPartyTypeKind.ZodNever,\n ...processCreateParams(params),\n });\n};\nexport class ZodVoid extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.void,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodVoid.create = (params) => {\n return new ZodVoid({\n typeName: ZodFirstPartyTypeKind.ZodVoid,\n ...processCreateParams(params),\n });\n};\nexport class ZodArray extends ZodType {\n _parse(input) {\n const { ctx, status } = this._processInputParams(input);\n const def = this._def;\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (def.exactLength !== null) {\n const tooBig = ctx.data.length > def.exactLength.value;\n const tooSmall = ctx.data.length < def.exactLength.value;\n if (tooBig || tooSmall) {\n addIssueToContext(ctx, {\n code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n minimum: (tooSmall ? def.exactLength.value : undefined),\n maximum: (tooBig ? def.exactLength.value : undefined),\n type: \"array\",\n inclusive: true,\n exact: true,\n message: def.exactLength.message,\n });\n status.dirty();\n }\n }\n if (def.minLength !== null) {\n if (ctx.data.length < def.minLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.minLength.message,\n });\n status.dirty();\n }\n }\n if (def.maxLength !== null) {\n if (ctx.data.length > def.maxLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.maxLength.message,\n });\n status.dirty();\n }\n }\n if (ctx.common.async) {\n return Promise.all([...ctx.data].map((item, i) => {\n return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n })).then((result) => {\n return ParseStatus.mergeArray(status, result);\n });\n }\n const result = [...ctx.data].map((item, i) => {\n return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n });\n return ParseStatus.mergeArray(status, result);\n }\n get element() {\n return this._def.type;\n }\n min(minLength, message) {\n return new ZodArray({\n ...this._def,\n minLength: { value: minLength, message: errorUtil.toString(message) },\n });\n }\n max(maxLength, message) {\n return new ZodArray({\n ...this._def,\n maxLength: { value: maxLength, message: errorUtil.toString(message) },\n });\n }\n length(len, message) {\n return new ZodArray({\n ...this._def,\n exactLength: { value: len, message: errorUtil.toString(message) },\n });\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodArray.create = (schema, params) => {\n return new ZodArray({\n type: schema,\n minLength: null,\n maxLength: null,\n exactLength: null,\n typeName: ZodFirstPartyTypeKind.ZodArray,\n ...processCreateParams(params),\n });\n};\nfunction deepPartialify(schema) {\n if (schema instanceof ZodObject) {\n const newShape = {};\n for (const key in schema.shape) {\n const fieldSchema = schema.shape[key];\n newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n }\n return new ZodObject({\n ...schema._def,\n shape: () => newShape,\n });\n }\n else if (schema instanceof ZodArray) {\n return new ZodArray({\n ...schema._def,\n type: deepPartialify(schema.element),\n });\n }\n else if (schema instanceof ZodOptional) {\n return ZodOptional.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodNullable) {\n return ZodNullable.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodTuple) {\n return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n }\n else {\n return schema;\n }\n}\nexport class ZodObject extends ZodType {\n constructor() {\n super(...arguments);\n this._cached = null;\n /**\n * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n * If you want to pass through unknown properties, use `.passthrough()` instead.\n */\n this.nonstrict = this.passthrough;\n // extend<\n // Augmentation extends ZodRawShape,\n // NewOutput extends util.flatten<{\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // }>,\n // NewInput extends util.flatten<{\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }>\n // >(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<T, Augmentation>,\n // UnknownKeys,\n // Catchall,\n // NewOutput,\n // NewInput\n // > {\n // return new ZodObject({\n // ...this._def,\n // shape: () => ({\n // ...this._def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // }\n /**\n * @deprecated Use `.extend` instead\n * */\n this.augment = this.extend;\n }\n _getCached() {\n if (this._cached !== null)\n return this._cached;\n const shape = this._def.shape();\n const keys = util.objectKeys(shape);\n this._cached = { shape, keys };\n return this._cached;\n }\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.object) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const { status, ctx } = this._processInputParams(input);\n const { shape, keys: shapeKeys } = this._getCached();\n const extraKeys = [];\n if (!(this._def.catchall instanceof ZodNever && this._def.unknownKeys === \"strip\")) {\n for (const key in ctx.data) {\n if (!shapeKeys.includes(key)) {\n extraKeys.push(key);\n }\n }\n }\n const pairs = [];\n for (const key of shapeKeys) {\n const keyValidator = shape[key];\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (this._def.catchall instanceof ZodNever) {\n const unknownKeys = this._def.unknownKeys;\n if (unknownKeys === \"passthrough\") {\n for (const key of extraKeys) {\n pairs.push({\n key: { status: \"valid\", value: key },\n value: { status: \"valid\", value: ctx.data[key] },\n });\n }\n }\n else if (unknownKeys === \"strict\") {\n if (extraKeys.length > 0) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.unrecognized_keys,\n keys: extraKeys,\n });\n status.dirty();\n }\n }\n else if (unknownKeys === \"strip\") {\n }\n else {\n throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n }\n }\n else {\n // run catchall validation\n const catchall = this._def.catchall;\n for (const key of extraKeys) {\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n ),\n alwaysSet: key in ctx.data,\n });\n }\n }\n if (ctx.common.async) {\n return Promise.resolve()\n .then(async () => {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n alwaysSet: pair.alwaysSet,\n });\n }\n return syncPairs;\n })\n .then((syncPairs) => {\n return ParseStatus.mergeObjectSync(status, syncPairs);\n });\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get shape() {\n return this._def.shape();\n }\n strict(message) {\n errorUtil.errToObj;\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strict\",\n ...(message !== undefined\n ? {\n errorMap: (issue, ctx) => {\n const defaultError = this._def.errorMap?.(issue, ctx).message ?? ctx.defaultError;\n if (issue.code === \"unrecognized_keys\")\n return {\n message: errorUtil.errToObj(message).message ?? defaultError,\n };\n return {\n message: defaultError,\n };\n },\n }\n : {}),\n });\n }\n strip() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strip\",\n });\n }\n passthrough() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"passthrough\",\n });\n }\n // const AugmentFactory =\n // <Def extends ZodObjectDef>(def: Def) =>\n // <Augmentation extends ZodRawShape>(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n // Def[\"unknownKeys\"],\n // Def[\"catchall\"]\n // > => {\n // return new ZodObject({\n // ...def,\n // shape: () => ({\n // ...def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // };\n extend(augmentation) {\n return new ZodObject({\n ...this._def,\n shape: () => ({\n ...this._def.shape(),\n ...augmentation,\n }),\n });\n }\n /**\n * Prior to zod@1.0.12 there was a bug in the\n * inferred type of merged objects. Please\n * upgrade if you are experiencing issues.\n */\n merge(merging) {\n const merged = new ZodObject({\n unknownKeys: merging._def.unknownKeys,\n catchall: merging._def.catchall,\n shape: () => ({\n ...this._def.shape(),\n ...merging._def.shape(),\n }),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n });\n return merged;\n }\n // merge<\n // Incoming extends AnyZodObject,\n // Augmentation extends Incoming[\"shape\"],\n // NewOutput extends {\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // },\n // NewInput extends {\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }\n // >(\n // merging: Incoming\n // ): ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"],\n // NewOutput,\n // NewInput\n // > {\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n setKey(key, schema) {\n return this.augment({ [key]: schema });\n }\n // merge<Incoming extends AnyZodObject>(\n // merging: Incoming\n // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n // ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"]\n // > {\n // // const mergedShape = objectUtil.mergeShapes(\n // // this._def.shape(),\n // // merging._def.shape()\n // // );\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n catchall(index) {\n return new ZodObject({\n ...this._def,\n catchall: index,\n });\n }\n pick(mask) {\n const shape = {};\n for (const key of util.objectKeys(mask)) {\n if (mask[key] && this.shape[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n omit(mask) {\n const shape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (!mask[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n /**\n * @deprecated\n */\n deepPartial() {\n return deepPartialify(this);\n }\n partial(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n const fieldSchema = this.shape[key];\n if (mask && !mask[key]) {\n newShape[key] = fieldSchema;\n }\n else {\n newShape[key] = fieldSchema.optional();\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n required(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (mask && !mask[key]) {\n newShape[key] = this.shape[key];\n }\n else {\n const fieldSchema = this.shape[key];\n let newField = fieldSchema;\n while (newField instanceof ZodOptional) {\n newField = newField._def.innerType;\n }\n newShape[key] = newField;\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n keyof() {\n return createZodEnum(util.objectKeys(this.shape));\n }\n}\nZodObject.create = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.strictCreate = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strict\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.lazycreate = (shape, params) => {\n return new ZodObject({\n shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const options = this._def.options;\n function handleResults(results) {\n // return first issue-free validation if it exists\n for (const result of results) {\n if (result.result.status === \"valid\") {\n return result.result;\n }\n }\n for (const result of results) {\n if (result.result.status === \"dirty\") {\n // add issues from dirty option\n ctx.common.issues.push(...result.ctx.common.issues);\n return result.result;\n }\n }\n // return invalid\n const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return Promise.all(options.map(async (option) => {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n return {\n result: await option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n }),\n ctx: childCtx,\n };\n })).then(handleResults);\n }\n else {\n let dirty = undefined;\n const issues = [];\n for (const option of options) {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n const result = option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n });\n if (result.status === \"valid\") {\n return result;\n }\n else if (result.status === \"dirty\" && !dirty) {\n dirty = { result, ctx: childCtx };\n }\n if (childCtx.common.issues.length) {\n issues.push(childCtx.common.issues);\n }\n }\n if (dirty) {\n ctx.common.issues.push(...dirty.ctx.common.issues);\n return dirty.result;\n }\n const unionErrors = issues.map((issues) => new ZodError(issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n }\n get options() {\n return this._def.options;\n }\n}\nZodUnion.create = (types, params) => {\n return new ZodUnion({\n options: types,\n typeName: ZodFirstPartyTypeKind.ZodUnion,\n ...processCreateParams(params),\n });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n////////// //////////\n////////// ZodDiscriminatedUnion //////////\n////////// //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n if (type instanceof ZodLazy) {\n return getDiscriminator(type.schema);\n }\n else if (type instanceof ZodEffects) {\n return getDiscriminator(type.innerType());\n }\n else if (type instanceof ZodLiteral) {\n return [type.value];\n }\n else if (type instanceof ZodEnum) {\n return type.options;\n }\n else if (type instanceof ZodNativeEnum) {\n // eslint-disable-next-line ban/ban\n return util.objectValues(type.enum);\n }\n else if (type instanceof ZodDefault) {\n return getDiscriminator(type._def.innerType);\n }\n else if (type instanceof ZodUndefined) {\n return [undefined];\n }\n else if (type instanceof ZodNull) {\n return [null];\n }\n else if (type instanceof ZodOptional) {\n return [undefined, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodNullable) {\n return [null, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodBranded) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodReadonly) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodCatch) {\n return getDiscriminator(type._def.innerType);\n }\n else {\n return [];\n }\n};\nexport class ZodDiscriminatedUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const discriminator = this.discriminator;\n const discriminatorValue = ctx.data[discriminator];\n const option = this.optionsMap.get(discriminatorValue);\n if (!option) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union_discriminator,\n options: Array.from(this.optionsMap.keys()),\n path: [discriminator],\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n else {\n return option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n get discriminator() {\n return this._def.discriminator;\n }\n get options() {\n return this._def.options;\n }\n get optionsMap() {\n return this._def.optionsMap;\n }\n /**\n * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n * have a different value for each object in the union.\n * @param discriminator the name of the discriminator property\n * @param types an array of object schemas\n * @param params\n */\n static create(discriminator, options, params) {\n // Get all the valid discriminator values\n const optionsMap = new Map();\n // try {\n for (const type of options) {\n const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n if (!discriminatorValues.length) {\n throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n }\n for (const value of discriminatorValues) {\n if (optionsMap.has(value)) {\n throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n }\n optionsMap.set(value, type);\n }\n }\n return new ZodDiscriminatedUnion({\n typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n discriminator,\n options,\n optionsMap,\n ...processCreateParams(params),\n });\n }\n}\nfunction mergeValues(a, b) {\n const aType = getParsedType(a);\n const bType = getParsedType(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n const bKeys = util.objectKeys(b);\n const sharedKeys = util.objectKeys(a).filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n for (const key of sharedKeys) {\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n if (a.length !== b.length) {\n return { valid: false };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n else if (aType === ZodParsedType.date && bType === ZodParsedType.date && +a === +b) {\n return { valid: true, data: a };\n }\n else {\n return { valid: false };\n }\n}\nexport class ZodIntersection extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const handleParsed = (parsedLeft, parsedRight) => {\n if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n return INVALID;\n }\n const merged = mergeValues(parsedLeft.value, parsedRight.value);\n if (!merged.valid) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_intersection_types,\n });\n return INVALID;\n }\n if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n status.dirty();\n }\n return { status: status.value, value: merged.data };\n };\n if (ctx.common.async) {\n return Promise.all([\n this._def.left._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n this._def.right._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n ]).then(([left, right]) => handleParsed(left, right));\n }\n else {\n return handleParsed(this._def.left._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }), this._def.right._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }));\n }\n }\n}\nZodIntersection.create = (left, right, params) => {\n return new ZodIntersection({\n left: left,\n right: right,\n typeName: ZodFirstPartyTypeKind.ZodIntersection,\n ...processCreateParams(params),\n });\n};\n// type ZodTupleItems = [ZodTypeAny, ...ZodTypeAny[]];\nexport class ZodTuple extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (ctx.data.length < this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n return INVALID;\n }\n const rest = this._def.rest;\n if (!rest && ctx.data.length > this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n status.dirty();\n }\n const items = [...ctx.data]\n .map((item, itemIndex) => {\n const schema = this._def.items[itemIndex] || this._def.rest;\n if (!schema)\n return null;\n return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n })\n .filter((x) => !!x); // filter nulls\n if (ctx.common.async) {\n return Promise.all(items).then((results) => {\n return ParseStatus.mergeArray(status, results);\n });\n }\n else {\n return ParseStatus.mergeArray(status, items);\n }\n }\n get items() {\n return this._def.items;\n }\n rest(rest) {\n return new ZodTuple({\n ...this._def,\n rest,\n });\n }\n}\nZodTuple.create = (schemas, params) => {\n if (!Array.isArray(schemas)) {\n throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n }\n return new ZodTuple({\n items: schemas,\n typeName: ZodFirstPartyTypeKind.ZodTuple,\n rest: null,\n ...processCreateParams(params),\n });\n};\nexport class ZodRecord extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const pairs = [];\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n for (const key in ctx.data) {\n pairs.push({\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (ctx.common.async) {\n return ParseStatus.mergeObjectAsync(status, pairs);\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get element() {\n return this._def.valueType;\n }\n static create(first, second, third) {\n if (second instanceof ZodType) {\n return new ZodRecord({\n keyType: first,\n valueType: second,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(third),\n });\n }\n return new ZodRecord({\n keyType: ZodString.create(),\n valueType: first,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(second),\n });\n }\n}\nexport class ZodMap extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.map) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.map,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n return {\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n };\n });\n if (ctx.common.async) {\n const finalMap = new Map();\n return Promise.resolve().then(async () => {\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n });\n }\n else {\n const finalMap = new Map();\n for (const pair of pairs) {\n const key = pair.key;\n const value = pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n }\n }\n}\nZodMap.create = (keyType, valueType, params) => {\n return new ZodMap({\n valueType,\n keyType,\n typeName: ZodFirstPartyTypeKind.ZodMap,\n ...processCreateParams(params),\n });\n};\nexport class ZodSet extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.set) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.set,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const def = this._def;\n if (def.minSize !== null) {\n if (ctx.data.size < def.minSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.minSize.message,\n });\n status.dirty();\n }\n }\n if (def.maxSize !== null) {\n if (ctx.data.size > def.maxSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.maxSize.message,\n });\n status.dirty();\n }\n }\n const valueType = this._def.valueType;\n function finalizeSet(elements) {\n const parsedSet = new Set();\n for (const element of elements) {\n if (element.status === \"aborted\")\n return INVALID;\n if (element.status === \"dirty\")\n status.dirty();\n parsedSet.add(element.value);\n }\n return { status: status.value, value: parsedSet };\n }\n const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n if (ctx.common.async) {\n return Promise.all(elements).then((elements) => finalizeSet(elements));\n }\n else {\n return finalizeSet(elements);\n }\n }\n min(minSize, message) {\n return new ZodSet({\n ...this._def,\n minSize: { value: minSize, message: errorUtil.toString(message) },\n });\n }\n max(maxSize, message) {\n return new ZodSet({\n ...this._def,\n maxSize: { value: maxSize, message: errorUtil.toString(message) },\n });\n }\n size(size, message) {\n return this.min(size, message).max(size, message);\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodSet.create = (valueType, params) => {\n return new ZodSet({\n valueType,\n minSize: null,\n maxSize: null,\n typeName: ZodFirstPartyTypeKind.ZodSet,\n ...processCreateParams(params),\n });\n};\nexport class ZodFunction extends ZodType {\n constructor() {\n super(...arguments);\n this.validate = this.implement;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.function) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.function,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n function makeArgsIssue(args, error) {\n return makeIssue({\n data: args,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_arguments,\n argumentsError: error,\n },\n });\n }\n function makeReturnsIssue(returns, error) {\n return makeIssue({\n data: returns,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_return_type,\n returnTypeError: error,\n },\n });\n }\n const params = { errorMap: ctx.common.contextualErrorMap };\n const fn = ctx.data;\n if (this._def.returns instanceof ZodPromise) {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(async function (...args) {\n const error = new ZodError([]);\n const parsedArgs = await me._def.args.parseAsync(args, params).catch((e) => {\n error.addIssue(makeArgsIssue(args, e));\n throw error;\n });\n const result = await Reflect.apply(fn, this, parsedArgs);\n const parsedReturns = await me._def.returns._def.type\n .parseAsync(result, params)\n .catch((e) => {\n error.addIssue(makeReturnsIssue(result, e));\n throw error;\n });\n return parsedReturns;\n });\n }\n else {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(function (...args) {\n const parsedArgs = me._def.args.safeParse(args, params);\n if (!parsedArgs.success) {\n throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n }\n const result = Reflect.apply(fn, this, parsedArgs.data);\n const parsedReturns = me._def.returns.safeParse(result, params);\n if (!parsedReturns.success) {\n throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n }\n return parsedReturns.data;\n });\n }\n }\n parameters() {\n return this._def.args;\n }\n returnType() {\n return this._def.returns;\n }\n args(...items) {\n return new ZodFunction({\n ...this._def,\n args: ZodTuple.create(items).rest(ZodUnknown.create()),\n });\n }\n returns(returnType) {\n return new ZodFunction({\n ...this._def,\n returns: returnType,\n });\n }\n implement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n strictImplement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n static create(args, returns, params) {\n return new ZodFunction({\n args: (args ? args : ZodTuple.create([]).rest(ZodUnknown.create())),\n returns: returns || ZodUnknown.create(),\n typeName: ZodFirstPartyTypeKind.ZodFunction,\n ...processCreateParams(params),\n });\n }\n}\nexport class ZodLazy extends ZodType {\n get schema() {\n return this._def.getter();\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const lazySchema = this._def.getter();\n return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n }\n}\nZodLazy.create = (getter, params) => {\n return new ZodLazy({\n getter: getter,\n typeName: ZodFirstPartyTypeKind.ZodLazy,\n ...processCreateParams(params),\n });\n};\nexport class ZodLiteral extends ZodType {\n _parse(input) {\n if (input.data !== this._def.value) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_literal,\n expected: this._def.value,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n get value() {\n return this._def.value;\n }\n}\nZodLiteral.create = (value, params) => {\n return new ZodLiteral({\n value: value,\n typeName: ZodFirstPartyTypeKind.ZodLiteral,\n ...processCreateParams(params),\n });\n};\nfunction createZodEnum(values, params) {\n return new ZodEnum({\n values,\n typeName: ZodFirstPartyTypeKind.ZodEnum,\n ...processCreateParams(params),\n });\n}\nexport class ZodEnum extends ZodType {\n _parse(input) {\n if (typeof input.data !== \"string\") {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(this._def.values);\n }\n if (!this._cache.has(input.data)) {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get options() {\n return this._def.values;\n }\n get enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Values() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n extract(values, newDef = this._def) {\n return ZodEnum.create(values, {\n ...this._def,\n ...newDef,\n });\n }\n exclude(values, newDef = this._def) {\n return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {\n ...this._def,\n ...newDef,\n });\n }\n}\nZodEnum.create = createZodEnum;\nexport class ZodNativeEnum extends ZodType {\n _parse(input) {\n const nativeEnumValues = util.getValidEnumValues(this._def.values);\n const ctx = this._getOrReturnCtx(input);\n if (ctx.parsedType !== ZodParsedType.string && ctx.parsedType !== ZodParsedType.number) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(util.getValidEnumValues(this._def.values));\n }\n if (!this._cache.has(input.data)) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get enum() {\n return this._def.values;\n }\n}\nZodNativeEnum.create = (values, params) => {\n return new ZodNativeEnum({\n values: values,\n typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n ...processCreateParams(params),\n });\n};\nexport class ZodPromise extends ZodType {\n unwrap() {\n return this._def.type;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.promise && ctx.common.async === false) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.promise,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const promisified = ctx.parsedType === ZodParsedType.promise ? ctx.data : Promise.resolve(ctx.data);\n return OK(promisified.then((data) => {\n return this._def.type.parseAsync(data, {\n path: ctx.path,\n errorMap: ctx.common.contextualErrorMap,\n });\n }));\n }\n}\nZodPromise.create = (schema, params) => {\n return new ZodPromise({\n type: schema,\n typeName: ZodFirstPartyTypeKind.ZodPromise,\n ...processCreateParams(params),\n });\n};\nexport class ZodEffects extends ZodType {\n innerType() {\n return this._def.schema;\n }\n sourceType() {\n return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n ? this._def.schema.sourceType()\n : this._def.schema;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const effect = this._def.effect || null;\n const checkCtx = {\n addIssue: (arg) => {\n addIssueToContext(ctx, arg);\n if (arg.fatal) {\n status.abort();\n }\n else {\n status.dirty();\n }\n },\n get path() {\n return ctx.path;\n },\n };\n checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n if (effect.type === \"preprocess\") {\n const processed = effect.transform(ctx.data, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(processed).then(async (processed) => {\n if (status.value === \"aborted\")\n return INVALID;\n const result = await this._def.schema._parseAsync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n });\n }\n else {\n if (status.value === \"aborted\")\n return INVALID;\n const result = this._def.schema._parseSync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n }\n }\n if (effect.type === \"refinement\") {\n const executeRefinement = (acc) => {\n const result = effect.refinement(acc, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(result);\n }\n if (result instanceof Promise) {\n throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n }\n return acc;\n };\n if (ctx.common.async === false) {\n const inner = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n // return value is ignored\n executeRefinement(inner.value);\n return { status: status.value, value: inner.value };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((inner) => {\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n return executeRefinement(inner.value).then(() => {\n return { status: status.value, value: inner.value };\n });\n });\n }\n }\n if (effect.type === \"transform\") {\n if (ctx.common.async === false) {\n const base = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (!isValid(base))\n return INVALID;\n const result = effect.transform(base.value, checkCtx);\n if (result instanceof Promise) {\n throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n }\n return { status: status.value, value: result };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((base) => {\n if (!isValid(base))\n return INVALID;\n return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({\n status: status.value,\n value: result,\n }));\n });\n }\n }\n util.assertNever(effect);\n }\n}\nZodEffects.create = (schema, effect, params) => {\n return new ZodEffects({\n schema,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect,\n ...processCreateParams(params),\n });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n return new ZodEffects({\n schema,\n effect: { type: \"preprocess\", transform: preprocess },\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n ...processCreateParams(params),\n });\n};\nexport { ZodEffects as ZodTransformer };\nexport class ZodOptional extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.undefined) {\n return OK(undefined);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodOptional.create = (type, params) => {\n return new ZodOptional({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodOptional,\n ...processCreateParams(params),\n });\n};\nexport class ZodNullable extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.null) {\n return OK(null);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodNullable.create = (type, params) => {\n return new ZodNullable({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodNullable,\n ...processCreateParams(params),\n });\n};\nexport class ZodDefault extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n let data = ctx.data;\n if (ctx.parsedType === ZodParsedType.undefined) {\n data = this._def.defaultValue();\n }\n return this._def.innerType._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n removeDefault() {\n return this._def.innerType;\n }\n}\nZodDefault.create = (type, params) => {\n return new ZodDefault({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n defaultValue: typeof params.default === \"function\" ? params.default : () => params.default,\n ...processCreateParams(params),\n });\n};\nexport class ZodCatch extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n // newCtx is used to not collect issues from inner types in ctx\n const newCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n };\n const result = this._def.innerType._parse({\n data: newCtx.data,\n path: newCtx.path,\n parent: {\n ...newCtx,\n },\n });\n if (isAsync(result)) {\n return result.then((result) => {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n });\n }\n else {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n }\n }\n removeCatch() {\n return this._def.innerType;\n }\n}\nZodCatch.create = (type, params) => {\n return new ZodCatch({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n ...processCreateParams(params),\n });\n};\nexport class ZodNaN extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.nan) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.nan,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n}\nZodNaN.create = (params) => {\n return new ZodNaN({\n typeName: ZodFirstPartyTypeKind.ZodNaN,\n ...processCreateParams(params),\n });\n};\nexport const BRAND = Symbol(\"zod_brand\");\nexport class ZodBranded extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const data = ctx.data;\n return this._def.type._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n unwrap() {\n return this._def.type;\n }\n}\nexport class ZodPipeline extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.common.async) {\n const handleAsync = async () => {\n const inResult = await this._def.in._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return DIRTY(inResult.value);\n }\n else {\n return this._def.out._parseAsync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n };\n return handleAsync();\n }\n else {\n const inResult = this._def.in._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return {\n status: \"dirty\",\n value: inResult.value,\n };\n }\n else {\n return this._def.out._parseSync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n }\n static create(a, b) {\n return new ZodPipeline({\n in: a,\n out: b,\n typeName: ZodFirstPartyTypeKind.ZodPipeline,\n });\n }\n}\nexport class ZodReadonly extends ZodType {\n _parse(input) {\n const result = this._def.innerType._parse(input);\n const freeze = (data) => {\n if (isValid(data)) {\n data.value = Object.freeze(data.value);\n }\n return data;\n };\n return isAsync(result) ? result.then((data) => freeze(data)) : freeze(result);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodReadonly.create = (type, params) => {\n return new ZodReadonly({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodReadonly,\n ...processCreateParams(params),\n });\n};\n////////////////////////////////////////\n////////////////////////////////////////\n////////// //////////\n////////// z.custom //////////\n////////// //////////\n////////////////////////////////////////\n////////////////////////////////////////\nfunction cleanParams(params, data) {\n const p = typeof params === \"function\" ? params(data) : typeof params === \"string\" ? { message: params } : params;\n const p2 = typeof p === \"string\" ? { message: p } : p;\n return p2;\n}\nexport function custom(check, _params = {}, \n/**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) {\n if (check)\n return ZodAny.create().superRefine((data, ctx) => {\n const r = check(data);\n if (r instanceof Promise) {\n return r.then((r) => {\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n });\n }\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n return;\n });\n return ZodAny.create();\n}\nexport { ZodType as Schema, ZodType as ZodSchema };\nexport const late = {\n object: ZodObject.lazycreate,\n};\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n// requires TS 4.4+\nclass Class {\n constructor(..._) { }\n}\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nexport const coerce = {\n string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n boolean: ((arg) => ZodBoolean.create({\n ...arg,\n coerce: true,\n })),\n bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nexport { anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, dateType as date, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, instanceOfType as instanceof, intersectionType as intersection, lazyType as lazy, literalType as literal, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, recordType as record, setType as set, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, voidType as void, };\nexport const NEVER = INVALID;\n", "import { z } from \"zod\";\n\n/**\n * JIOO 2 \u2014 PRD Content Standard (Blueprint B.2.1) and\n * PRD Bundle Packaging Standard (Blueprint B.2.2).\n *\n * These are the deterministic bundle SHAPES (paths + the 12 canonical PRD\n * sections). The single deterministic gate that judges a bundle lives in\n * `prd-linter.ts` (`lintBundle`); this module only declares the contract that\n * gate reads. Quality of the prose is owned by Product Skills.\n */\n\n/* -------------------------------------------------------------------------- */\n/* B.2.1 PRD Content Standard \u2014 The 12 Canonical Sections */\n/* -------------------------------------------------------------------------- */\n\nexport const PRD_CANONICAL_SECTIONS = [\n \"1. Product Overview\",\n \"2. Problem & Opportunity\",\n \"3. Goals & Success Criteria\",\n \"4. Target Users & Roles\",\n \"5. Core Features\",\n \"6. User Journeys & Flows\",\n \"7. Functional Requirements\",\n \"8. Business Rules\",\n \"9. Scope & Boundaries\",\n \"10. Quality & Constraints\",\n \"11. Acceptance & Outcomes\",\n \"12. Decisions & Unknowns\",\n] as const;\n\nexport const PRD_CANONICAL_SECTION_COUNT = PRD_CANONICAL_SECTIONS.length;\n\n/* -------------------------------------------------------------------------- */\n/* B.2.2 PRD Bundle Packaging Standard \u2014 Repository-Grade Markdown Structure */\n/* -------------------------------------------------------------------------- */\n\n/** Exact relative paths that constitute a JIOO 2 project bundle. */\nexport const BUNDLE_PATHS = {\n PRD: \"PRD.md\",\n SPECS_INDEX: \"specs/README.md\",\n SPECS_FUNCTIONAL: \"specs/functional.md\",\n SPECS_DATA: \"specs/data.md\",\n SPECS_INTERFACES: \"specs/interfaces.md\",\n TASKS_INDEX: \"tasks/README.md\",\n /** Single-file task variant for small projects (Anti-Bloat Rule). */\n TASKS_SINGLE: \"tasks/TASKS.md\",\n TRACEABILITY: \"traceability.md\",\n} as const;\n\n/**\n * Execution layer vocabulary (Blueprint \u00A7B.2.4 rule 8, FE-first layering).\n * Shared with the connected-execution sidecar (\u00A7G.7) so both contracts agree.\n * FE-first phase/layer order and the Anti-Bloat Rule are authored by\n * `tasks-authoring`; the gate judges structure, phases, and traceability.\n *\n * The four values below are common defaults; the LLM may use any string layer\n * value that makes sense for the product type (e.g. `cli_build`, `game_loop`,\n * `data_pipeline`, `firmware_flash`, etc.). The gate validates that layer\n * values are non-empty strings, not that they match a fixed enum.\n */\nexport const TASK_LAYERS = [\n \"frontend_mock\",\n \"database\",\n \"backend_api\",\n \"integration\",\n \"verification\",\n] as readonly string[];\nexport const TaskLayerSchema = z.union([\n z.literal(\"frontend_mock\"),\n z.literal(\"backend_api\"),\n z.literal(\"database\"),\n z.literal(\"integration\"),\n z.literal(\"verification\"),\n z.string(), // extensible: any other string is accepted\n]);\n\n/**\n * FE-first execution phases (Phase 1 \u2192 4). `phase` on a task is an EXECUTION\n * phase, not the PRD roadmap phase: the whole frontend is finished on mock data\n * first, then persistence/API, then integration, then the final verification.\n */\nexport const TASK_EXECUTION_PHASES = {\n frontend_mock: 1,\n database: 2,\n backend_api: 2,\n integration: 3,\n verification: 4,\n} as const satisfies Readonly<Record<string, number>>;\n\n/* -------------------------------------------------------------------------- */\n/* Technical Module & Concern \u2014 traceability separation */\n/* -------------------------------------------------------------------------- */\n\n/**\n * Technical Module: a unit of implementation responsibility (e.g. \"auth\",\n * \"payment-gateway\", \"notification-service\"). Modules live in specs/ and are\n * referenced by tasks via `moduleId`. A module is NOT a Core Feature \u2014\n * multiple features may share a module, and one feature may span modules.\n * Stable ID format: `MODULE-XXX` (3+ digits).\n */\nexport const TECHNICAL_MODULE_ID_RE = /\\bMODULE-\\d{3,}\\b/g;\n\n/**\n * Concern: a cross-cutting technical aspect (authentication, authorization,\n * validation, persistence, notification, integration). Concerns cut across\n * features and modules; tasks declare `concernIds` to show which concerns\n * they touch. Stable ID format: `CONCERN-XXX` (3+ digits).\n */\nexport const CONCERN_ID_RE = /\\bCONCERN-\\d{3,}\\b/g;\n\n/**\n * Isolation boundary: an explicit tenant/owner access boundary that must be\n * enforced in code, not merely described. Declared in PRD.md and mirrored in\n * specs/ (`## Isolation Coverage`), then owned by a task via `isolationRefs`.\n * Stable ID format: `ISOLATION-XXX` (3+ digits). Optional/backward-compatible:\n * bundles without isolation IDs keep validating.\n */\nexport const ISOLATION_ID_RE = /\\bISOLATION-\\d{3,}\\b/g;\n\n/** Canonical concerns recognised by the platform. Extensible via specs. */\nexport const CANONICAL_CONCERNS = [\n \"authentication\",\n \"authorization\",\n \"validation\",\n \"persistence\",\n \"notification\",\n \"integration\",\n] as const;\nexport type CanonicalConcern = (typeof CANONICAL_CONCERNS)[number];\n", "import { z } from \"zod\";\nimport { TaskLayerSchema } from \"./bundle.js\";\n\n/**\n * JIOO 2 \u2014 Connected Execution & Monitoring (Eksekusi #1, DEC-14).\n *\n * Blueprint \u00A7G.7 binds a single, narrow Domain B slice: the user's *local*\n * harness runs the confirmed `tasks/` bundle while JiooGen only *reads* status\n * from a disk sidecar. This module is that sidecar's contract \u2014 data only, no\n * runtime behavior and **no database entity** (\u00A7H.2, DEC-10 stays at 8 tables).\n */\n\n/** Fixed location of the status sidecar inside the project bundle (\u00A7G.7). */\nexport const EXECUTION_SIDECAR_PATH = \"tasks/.execution/state.json\" as const;\n\n/** Directory holding execution metadata; excluded from ZIP + L2 gate. */\nexport const EXECUTION_SIDECAR_DIRNAME = \".execution\" as const;\n\n/** Versioned schema; an unknown version is rejected, unknown fields ignored. */\nexport const EXECUTION_SIDECAR_VERSION = 1 as const;\n\n/**\n * Version of the generated handoff-prompt contract (docs/12 E-12, docs/09 \u00A76).\n * Bumped when the prompt's required sections or commands change, so a stale\n * copied prompt is detectable.\n */\nexport const HANDOFF_PROMPT_VERSION = 16 as const;\n\n/** Agent-token lifetime embedded in the handoff prompt (30 days, like \"remember me\"). */\nexport const HANDOFF_AGENT_TOKEN_TTL_SECONDS = 30 * 24 * 3600;\n\n/** Default base URL the generated prompt tells the local `jioogen` CLI to target. */\nexport const DEFAULT_HANDOFF_API_BASE_URL = \"https://gen.jioo.site\" as const;\n\n/**\n * The handoff instruction handed to a user's local harness (Eksekusi #1).\n * Server-read-only: it is assembled deterministically and never spawns anything.\n * When `agentToken` is present the prompt logs in with it instead of a password.\n */\nexport const HandoffPayloadSchema = z\n .object({\n promptVersion: z.literal(HANDOFF_PROMPT_VERSION),\n instruction: z.string().min(1),\n checkpointRules: z.array(z.string().min(1)),\n sidecarSchemaVersion: z.literal(EXECUTION_SIDECAR_VERSION),\n agentToken: z.string().min(1).optional(),\n agentTokenExpiresAt: z.string().datetime().optional(),\n })\n .passthrough();\nexport type HandoffPayload = z.infer<typeof HandoffPayloadSchema>;\n\n/**\n * Status vocabulary \u2014 1:1 with the \u00A7D.2 lifecycle\n * (`todo \u2192 in_progress \u2192 verifying \u2192 done | failed | blocked`).\n */\nexport const EXECUTION_STATUSES = [\n \"todo\",\n \"in_progress\",\n \"verifying\",\n \"done\",\n \"failed\",\n \"blocked\",\n] as const;\n\nexport const ExecutionStatusSchema = z.enum(EXECUTION_STATUSES);\nexport type ExecutionStatus = z.infer<typeof ExecutionStatusSchema>;\n\n/** Counts summary; keys mirror the lifecycle phases a dashboard shows. */\nexport const ExecutionCountsSchema = z\n .object({\n todo: z.number().int().nonnegative().default(0),\n inProgress: z.number().int().nonnegative().default(0),\n done: z.number().int().nonnegative().default(0),\n failed: z.number().int().nonnegative().default(0),\n blocked: z.number().int().nonnegative().default(0),\n })\n .passthrough();\nexport type ExecutionCounts = z.infer<typeof ExecutionCountsSchema>;\n\n/** Who is executing. Opaque metadata; JiooGen never derives control from it. */\nexport const ExecutionExecutorSchema = z\n .object({\n engine: z.string().min(1).optional(),\n harness: z.string().min(1).optional(),\n sessionRef: z.string().optional(),\n })\n .passthrough();\nexport type ExecutionExecutor = z.infer<typeof ExecutionExecutorSchema>;\n\n/** The task the harness is on right now, and whether it is awaiting a checkpoint. */\nexport const ExecutionCurrentSchema = z\n .object({\n ref: z.string().min(1).optional(),\n layer: TaskLayerSchema.optional(),\n phase: z.number().int().min(1).optional(),\n awaitingCheckpoint: z.boolean().default(false),\n })\n .passthrough();\nexport type ExecutionCurrent = z.infer<typeof ExecutionCurrentSchema>;\n\n/** One task's execution state. `layer`/`phase`/`checkpoint` align with \u00A7B.2.4 rule 8. */\nexport const ExecutionTaskStateSchema = z\n .object({\n ref: z.string().min(1),\n status: ExecutionStatusSchema,\n layer: TaskLayerSchema.optional(),\n phase: z.number().int().min(1).optional(),\n checkpoint: z.boolean().optional(),\n attempt: z.number().int().positive().optional(),\n updatedAt: z.string().datetime().optional(),\n note: z.string().optional(),\n })\n .passthrough();\nexport type ExecutionTaskState = z.infer<typeof ExecutionTaskStateSchema>;\n\n/**\n * The full sidecar. Deliberately **not** `.strict()` \u2014 a forward-compatible\n * reader must tolerate fields written by a newer harness without failing.\n */\nexport const ExecutionStateSchema = z\n .object({\n schemaVersion: z.literal(EXECUTION_SIDECAR_VERSION),\n projectId: z.string().min(1).optional(),\n updatedAt: z.string().datetime().optional(),\n executor: ExecutionExecutorSchema.optional(),\n counts: ExecutionCountsSchema.optional(),\n current: ExecutionCurrentSchema.optional(),\n tasks: z.array(ExecutionTaskStateSchema).default([]),\n })\n .passthrough();\nexport type ExecutionState = z.infer<typeof ExecutionStateSchema>;\n\n/** Roll up per-task statuses into the dashboard counts. */\nexport function summarizeExecutionCounts(tasks: readonly ExecutionTaskState[]): ExecutionCounts {\n const base = ExecutionCountsSchema.parse({});\n for (const task of tasks) {\n switch (task.status) {\n case \"in_progress\":\n case \"verifying\":\n base.inProgress += 1;\n break;\n case \"done\":\n base.done += 1;\n break;\n case \"failed\":\n base.failed += 1;\n break;\n case \"blocked\":\n base.blocked += 1;\n break;\n default:\n base.todo += 1;\n }\n }\n return base;\n}\n", "import {\n BUNDLE_PATHS,\n CANONICAL_CONCERNS,\n CONCERN_ID_RE,\n ISOLATION_ID_RE,\n PRD_CANONICAL_SECTIONS,\n TASK_EXECUTION_PHASES,\n TECHNICAL_MODULE_ID_RE,\n} from \"./bundle.js\";\n\n/**\n * The JIOO 2 deterministic bundle gate.\n *\n * Responsibility split (Blueprint \u00A71.3):\n * - JIOOGEN keeps only deterministic, offline integrity that the SYSTEM must\n * guarantee: required artifacts exist, the 12 canonical sections are\n * present, tasks are traceable (no orphan / dangling / uncovered\n * requirement), the task DAG is acyclic and FE-first layered, and every\n * declared lifecycle has an owner task.\n * - Quality of the prose (acceptance wording, reference-grade richness,\n * feature hierarchies, task envelope completeness such as targetFiles /\n * verificationCommand / tujuan) is owned by the Product Skills and the LLM\n * \u2014 NOT by this gate. There is exactly ONE gate: `lintBundle`.\n * - Amandemen 2026-10-29 (GradSnapshot audit): the \u00A75 STRUCTURE is presence,\n * not prose \u2014 a populated \u00A75 that has requirement rows but no `#### N.`\n * feature blocks, or \u22652 features without `### Fase` grouping, cannot drive\n * the \u00A7B.2.4 feature contract downstream, so both are rejected here. The\n * wording inside a feature block stays skill/LLM-owned.\n *\n * A section may be skipped ONLY by declaring itself not applicable with a\n * justification. Silence is never an acceptable answer.\n */\n\nexport type LintCode =\n | \"MISSING_SECTION\"\n | \"EMPTY_SECTION\"\n | \"NA_WITHOUT_JUSTIFICATION\"\n | \"ORPHAN_TASK\"\n | \"NO_ARTIFACT\"\n | \"MISSING_PRD\"\n | \"MISSING_SPECS_INDEX\"\n | \"MISSING_TASKS_INDEX\"\n | \"MISSING_SPEC_FUNCTIONAL\"\n | \"MISSING_SPEC_CONTENT\"\n | \"DANGLING_REFERENCE\"\n | \"DANGLING_DEPENDENCY\"\n | \"DANGLING_SPEC_REFERENCE\"\n | \"AC_WITHOUT_OWNER\"\n | \"FEATURE_WITHOUT_TASK\"\n | \"UNCOVERED_REQUIREMENT\"\n | \"CYCLIC_DEPENDENCY\"\n /** A task's `layer` is in the wrong execution phase (FE-first contract). */\n | \"PHASE_LAYER_MISMATCH\"\n /** A `frontend_mock` task depends on a later layer, so FE is not independent. */\n | \"FE_DEPENDS_ON_LATER_LAYER\"\n /** A UI bundle has no `verification` task to close the execution plan. */\n | \"MISSING_FINAL_VERIFICATION\"\n /** PRD lifecycle domain is RESOLVED but specs/ or tasks/ does not map it. */\n | \"MISSING_LIFECYCLE_COVERAGE\"\n /** PRD actors domain is RESOLVED but \u00A76 has no User Mental Model table. */\n | \"MISSING_USER_MENTAL_MODEL\"\n /** PRD entities/data domains are RESOLVED but specs/ or tasks/ has no engine model. */\n | \"MISSING_ENGINE_MENTAL_MODEL\"\n /** PRD workflows domain is RESOLVED but a flow/step has no owner task. */\n | \"MISSING_FLOW_COVERAGE\"\n | \"FEATURE_EXCLUDED\"\n /** \u00A75 carries requirement rows but no `#### N. <title>` feature blocks. */\n | \"FEATURE_TITLES_MISSING\"\n /** \u22652 features exist yet no `### Fase` grouping (\u00A7B.2.1 \u00A75). */\n | \"PHASE_GROUPING_MISSING\"\n /** \u00A77 requirement absent from a structured \u00A711 acceptance table. */\n | \"REQ_WITHOUT_AC\"\n /** \u00A711 acceptance-table row carries an AC id but cites no REQ/FR owner. */\n | \"AC_WITHOUT_REQ\"\n /** Task references a MODULE-XXX not declared in specs/. */\n | \"MODULE_WITHOUT_SPEC\"\n /** Task references a CONCERN-XXX that is neither canonical nor declared. */\n | \"CONCERN_UNKNOWN\"\n /** Declared module has no owning task. */\n | \"MODULE_UNUSED\"\n /** Task references a CONTRACT-XXX not declared in specs/. */\n | \"CONTRACT_WITHOUT_SPEC\"\n /** A contract used by a frontend_mock task has no backend_api/database owner. */\n | \"CONTRACT_WITHOUT_PAIR\"\n /** FE and BE tasks exist but no `integration` task connects them. */\n | \"MISSING_INTEGRATION_TASK\"\n /** PRD declares an ISOLATION-XXX boundary that specs/ never mirrors. */\n | \"MISSING_ISOLATION_COVERAGE\"\n /** Task references an ISOLATION-XXX that specs/ never declared. */\n | \"ISOLATION_WITHOUT_SPEC\"\n /** specs/ declares an ISOLATION-XXX boundary with no owning task. */\n | \"ISOLATION_WITHOUT_OWNER\";\n\nexport interface LintIssue {\n code: LintCode;\n /** Section number, section title, task id, or requirement id depending on the code. */\n where: string;\n message: string;\n}\n\nexport interface LintReport {\n ok: boolean;\n issues: LintIssue[];\n /** 12 canonical sections accounted for (present, or justified N/A). */\n sectionsAccounted: number;\n}\n\nconst TASK_ID_RE = /\\b(?:FR|NFR)-\\d{2,}\\b|\\bBR-\\d{3,}\\b|\\bREQ-\\d{3,}\\b/;\nconst JUSTIFICATION_MIN_LENGTH = 12;\n\n// Requirement IDs are traceable as either canonical `REQ-XXX` or the functional\n// `FR-XXX` convention (both 3+ digits).\nexport const REQUIREMENT_ID_RE = /\\b(?:REQ|FR)-\\d{3,}\\b/g;\n// Acceptance-criterion IDs (\u00A711). Optional, feature-first convention: an AC\n// row may carry an `AC-XXX` so it can be traced to a task deterministically.\nexport const AC_ID_RE = /\\bAC-\\d{2,}\\b/g;\nexport const FEATURE_ID_RE = /\\bFEATURE-\\d{3,}\\b/g;\nexport const CONTRACT_ID_RE = /\\bCONTRACT-\\d{3,}\\b/g;\n// Requirement references a task may cite. Global so EVERY cited reference is\n// captured (a task may trace to many), which the coverage check relies on.\nconst TASK_REF_RE = /\\b(?:FR|NFR)-\\d{2,}\\b|\\bREQ-\\d{3,}\\b/g;\n\nconst SPEC_INDEX = BUNDLE_PATHS.SPECS_INDEX;\nconst TASKS_INDEX = BUNDLE_PATHS.TASKS_INDEX;\nconst SPEC_FILE_RE = /^specs\\/.+\\.md$/;\nconst TASK_FILE_RE = /^tasks\\/.+\\.md$/;\n\nconst SPEC_REF_RE = /\\bSPEC-\\d{3,}\\b/g;\n\n/**\n * Execution phases are layer-first, not roadmap-first: Phase 1 finishes the\n * whole frontend on mock data, Phase 2 builds persistence + API, Phase 3 wires\n * the real data in, and Phase 4 proves the result. A layer outside the shared\n * map (e.g. `cli_build`, `game_loop`) keeps its own invented phase.\n */\nconst executionPhaseFor = (layer: string): number | undefined =>\n Object.hasOwn(TASK_EXECUTION_PHASES, layer)\n ? TASK_EXECUTION_PHASES[layer as keyof typeof TASK_EXECUTION_PHASES]\n : undefined;\n\n/**\n * Splits a PRD into its canonical sections by their `## N. Title` headings.\n * A heading that is not in the canonical list is ignored (extra prose is fine).\n */\nexport function splitPrdSections(markdown: string): Map<string, string> {\n const sections = new Map<string, string>();\n const headingRe = /^##\\s+(.+?)\\s*$/;\n const numberedRe = /^(\\d{1,2})\\.\\s+\\S/;\n\n let current: string | null = null;\n let buffer: string[] = [];\n\n const flush = () => {\n if (current !== null) sections.set(current, buffer.join(\"\\n\").trim());\n };\n\n for (const line of markdown.split(\"\\n\")) {\n const heading = headingRe.exec(line);\n if (heading !== null) {\n flush();\n const title = heading[1] ?? \"\";\n current = numberedRe.test(title)\n ? (PRD_CANONICAL_SECTIONS.find((section) =>\n section.startsWith(`${title.split(\".\")[0]}.`),\n ) ?? null)\n : null;\n buffer = [];\n } else if (current !== null) {\n buffer.push(line);\n }\n }\n flush();\n\n return sections;\n}\n\n/** Lints `PRD.md` structure against the 12-section contract (integrity only). */\nexport function lintPrd(markdown: string): LintReport {\n if (markdown.trim().length === 0) {\n return {\n ok: false,\n sectionsAccounted: 0,\n issues: [{ code: \"NO_ARTIFACT\", where: \"PRD.md\", message: \"PRD.md kosong atau tidak ada\" }],\n };\n }\n\n const sections = splitPrdSections(markdown);\n const issues: LintIssue[] = [];\n let accounted = 0;\n\n for (const section of PRD_CANONICAL_SECTIONS) {\n const body = sections.get(section);\n\n if (body === undefined) {\n issues.push({\n code: \"MISSING_SECTION\",\n where: section,\n message: `Bagian \"${section}\" tidak ada di PRD.md`,\n });\n continue;\n }\n\n if (body.trim().length === 0) {\n issues.push({\n code: \"EMPTY_SECTION\",\n where: section,\n message: `Bagian \"${section}\" kosong`,\n });\n continue;\n }\n\n if (/\\bN\\/A\\b/i.test(body)) {\n const justification = body.split(/N\\/A/i).slice(1).join(\" \").trim();\n if (justification.length < JUSTIFICATION_MIN_LENGTH) {\n issues.push({\n code: \"NA_WITHOUT_JUSTIFICATION\",\n where: section,\n message: `Bagian \"${section}\" ditandai N/A tanpa justifikasi`,\n });\n continue;\n }\n }\n\n accounted += 1;\n }\n\n // The feature/scope contradiction is deterministic integrity, so it belongs\n // to the one gate \u2014 not to a separate advisory check.\n issues.push(...lintFeatureScope(markdown).issues);\n\n // \u00A75 must parse into the decomposable form (Amandemen 2026-10-29).\n issues.push(...lintFeatureDecomposition(sections.get(\"5. Core Features\") ?? \"\"));\n\n // \u00A77 \u2192 \u00A711 coverage, but only once \u00A711 opts into the auditable table.\n issues.push(...lintRequirementAcceptance(markdown).issues);\n\n return { ok: issues.length === 0, issues, sectionsAccounted: accounted };\n}\n\n/** Normalize a feature/scope label for an exact, punctuation-insensitive match. */\nfunction normalizeLabel(value: string): string {\n return value\n .toLowerCase()\n .replace(/[^\\p{L}\\p{N}]+/gu, \" \")\n .trim()\n .replace(/\\s+/g, \" \");\n}\n\n/** Feature titles from \u00A75: `#### 1. <title>`. */\nfunction coreFeatureTitles(section: string): string[] {\n const titles: string[] = [];\n for (const line of section.split(\"\\n\")) {\n const match = /^####\\s+\\d+\\.\\s+(.+)$/.exec(line.trim());\n if (match !== null) titles.push((match[1] ?? \"\").replace(/[*_`]/g, \"\").trim());\n }\n return titles;\n}\n\n/** Rows of \u00A79 whose second cell says the item is OUT of scope. */\nfunction excludedScopeItems(section: string): string[] {\n const items: string[] = [];\n for (const line of section.split(\"\\n\")) {\n if (!line.trim().startsWith(\"|\")) continue;\n const cells = line.split(\"|\").map((cell) => cell.trim());\n if (cells.length < 4) continue;\n const scope = cells[1] ?? \"\";\n const relation = cells[2] ?? \"\";\n if (scope.length === 0) continue;\n if (/^(di luar|out of scope|excluded)\\b/i.test(relation)) items.push(scope);\n }\n return items;\n}\n\n/**\n * Amandemen 2026-10-29 (GradSnapshot audit): \u00A75 is the parent contract for\n * specs/tasks (`\u00A7B.2.4`), so its STRUCTURE is gate-owned presence:\n * - requirement rows (REQ/FR) inside \u00A75 without any `#### N. <title>` block\n * = the flat-table failure this gate now rejects deterministically;\n * - two or more feature blocks must sit under an explicit `### Fase` heading.\n * Prose-only \u00A75 without IDs (e.g. the external PadelGo reference) and\n * `N/A`-justified sections stay untouched \u2014 quality wording is not the gate's\n * business.\n */\nfunction lintFeatureDecomposition(section: string): LintIssue[] {\n const body = section.trim();\n if (body.length === 0 || /\\bN\\/A\\b/i.test(body)) return [];\n const titles = coreFeatureTitles(body);\n if (titles.length === 0 && /\\b(?:REQ|FR)-\\d{3,}\\b/.test(body)) {\n return [\n {\n code: \"FEATURE_TITLES_MISSING\",\n where: \"5. Core Features\",\n message:\n \"\u00A75 memuat ID requirement tetapi tidak ada satu pun Fitur Utama berformat `#### N. <judul>` \u2014 dekomposisi 6-field tidak bisa dinaikkan\",\n },\n ];\n }\n if (titles.length >= 2 && !/^###[ \\t]+Fase\\b/m.test(body)) {\n return [\n {\n code: \"PHASE_GROUPING_MISSING\",\n where: \"5. Core Features\",\n message: `${titles.length} Fitur Utama belum dikelompokkan ke \\`### Fase N\\` (\u00A7B.2.1 \u00A75)`,\n },\n ];\n }\n return [];\n}\n\n/**\n * \u00A75 Core Features \u2286 \u00A79 Scope: a feature the PRD asks to BUILD must never also\n * appear as an excluded scope item. The comparison is an exact normalized title\n * match \u2014 broad token overlap would flag different features that share words\n * (\"Mode belajar\" vs \"Mode belajar lanjutan\"), which the semantic review owns.\n */\nexport function lintFeatureScope(markdown: string): LintReport {\n const sections = splitPrdSections(markdown);\n const features = coreFeatureTitles(sections.get(\"5. Core Features\") ?? \"\");\n const excluded = new Set(\n excludedScopeItems(sections.get(\"9. Scope & Boundaries\") ?? \"\").map(normalizeLabel),\n );\n const issues: LintIssue[] = [];\n for (const feature of features) {\n if (excluded.has(normalizeLabel(feature))) {\n issues.push({\n code: \"FEATURE_EXCLUDED\",\n where: `5. Core Features: ${feature}`,\n message: `Fitur \"${feature}\" ada di Core Features tetapi ditandai \"Di luar\" di \u00A79 Scope`,\n });\n }\n }\n return { ok: issues.length === 0, issues, sectionsAccounted: 0 };\n}\n\n/** A \u00A711 header row that declares the auditable AC table (`\u2026 | REQ |`). */\nfunction hasAcceptanceTable(section: string): boolean {\n return section.split(\"\\n\").some((line) => {\n if (!line.trim().startsWith(\"|\")) return false;\n return line\n .split(\"|\")\n .map((cell) => cell.trim().toLowerCase())\n .includes(\"req\");\n });\n}\n\n/**\n * \u00A77 \u2192 \u00A711 coverage. Blocking only when \u00A711 declares the auditable acceptance\n * table (`| AC | \u2026 | REQ |`): the document itself then claims every requirement\n * is verified, so an ID absent from that table is an integrity defect \u2014 the same\n * class as `UNCOVERED_REQUIREMENT`, not a prose-quality judgement. A prose \u00A711\n * is intentionally left to the Skill (`l2-linter.test.ts`: acceptance wording is\n * not a gate rule), so the check never fires without the table.\n *\n * Traceability is bidirectional once the table opts in (Doctor correction A):\n * - every \u00A77 REQ must appear in the table (`REQ_WITHOUT_AC`);\n * - every AC row that carries an `AC-XXX` id must cite the REQ/FR it\n * acceptance-tests (`AC_WITHOUT_REQ`) \u2014 an orphan AC cannot be traced to a\n * requirement, so tasks cannot own it either.\n * A \u00A711 ASSUMPTION marker never satisfies coverage: only a REQ id inside the\n * table row counts.\n */\nexport function lintRequirementAcceptance(markdown: string): LintReport {\n const sections = splitPrdSections(markdown);\n const acceptance = sections.get(\"11. Acceptance & Outcomes\") ?? \"\";\n if (/\\bN\\/A\\b/i.test(acceptance) || !hasAcceptanceTable(acceptance)) {\n return { ok: true, issues: [], sectionsAccounted: 0 };\n }\n\n const declared = Array.from(\n new Set((sections.get(\"7. Functional Requirements\") ?? \"\").match(REQUIREMENT_ID_RE) ?? []),\n );\n const covered = new Set(acceptance.match(REQUIREMENT_ID_RE) ?? []);\n const issues: LintIssue[] = [];\n\n for (const reqId of declared) {\n if (covered.has(reqId)) continue;\n issues.push({\n code: \"REQ_WITHOUT_AC\",\n where: reqId,\n message: `Requirement \"${reqId}\" dideklarikan di \u00A77 tetapi tidak muncul di tabel acceptance \u00A711`,\n });\n }\n\n // AC rows without a REQ owner: only table rows are judged, and only rows\n // that actually carry an AC id (prose lines stay with the Skill).\n const rowRe = /^\\|(.+)\\|\\s*$/;\n for (const rawLine of acceptance.split(\"\\n\")) {\n const line = rawLine.trim();\n if (!line.startsWith(\"|\")) continue;\n const match = rowRe.exec(line);\n if (match === null) continue;\n const row = match[1] ?? \"\";\n // Skip header/separator rows: a header mentions AC/REQ as column names,\n // a separator is made of dashes.\n if (/^[-\\s:|]+$/.test(row)) continue;\n const acIds = row.match(AC_ID_RE) ?? [];\n if (acIds.length === 0) continue;\n if ((row.match(REQUIREMENT_ID_RE) ?? []).length > 0) continue;\n issues.push({\n code: \"AC_WITHOUT_REQ\",\n where: acIds[0] ?? line.slice(0, 40),\n message: `Acceptance criterion \"${acIds[0]}\" di tabel \u00A711 tidak merujuk requirement (REQ/FR) mana pun`,\n });\n }\n\n return { ok: issues.length === 0, issues, sectionsAccounted: 0 };\n}\n/**\n * Lints the `tasks/` bundle: every task must reference an upstream requirement\n * so the DAG never contains an orphan (\u00A7B.2.3).\n */\nexport function lintTaskBundle(files: { path: string; content: string }[]): LintReport {\n const issues: LintIssue[] = [];\n\n for (const file of files) {\n // The index/combined file is not a task node: it carries ordering and the\n // Lifecycle Coverage table, not a REQ trace. Counting it as an orphan made\n // every bundle with tasks/README.md fail the task gate.\n if (file.path === BUNDLE_PATHS.TASKS_INDEX || file.path === BUNDLE_PATHS.TASKS_SINGLE) {\n continue;\n }\n if (file.content.trim().length === 0) {\n issues.push({\n code: \"EMPTY_SECTION\",\n where: file.path,\n message: `Task file \"${file.path}\" kosong`,\n });\n continue;\n }\n // A foundation/setup task has no product requirement by nature; it is only\n // an orphan when it neither traces nor declares `foundation: true`.\n const foundation = /foundation:\\s*true/i.test(file.content);\n if (!TASK_ID_RE.test(file.content) && !foundation) {\n issues.push({\n code: \"ORPHAN_TASK\",\n where: file.path,\n message: `Task \"${file.path}\" tidak merujuk requirement mana pun (FR/NFR/BR/REQ) dan bukan foundation`,\n });\n }\n }\n\n return { ok: issues.length === 0, issues, sectionsAccounted: 0 };\n}\n\n/**\n * Lints the bundle *packaging* (\u00A7B.2.2): `PRD.md` at the root, a\n * `specs/README.md` index once specs exist, and a `tasks/README.md` order once\n * there is more than one task file.\n */\nexport function lintBundlePackaging(files: { path: string; content: string }[]): LintReport {\n const issues: LintIssue[] = [];\n const paths = files.map((file) => file.path);\n\n if (!paths.includes(BUNDLE_PATHS.PRD)) {\n issues.push({\n code: \"MISSING_PRD\",\n where: BUNDLE_PATHS.PRD,\n message: \"PRD.md harus ada di root project-bundle\",\n });\n }\n\n const specFiles = files.filter(\n (file) => SPEC_FILE_RE.test(file.path) && file.path !== SPEC_INDEX,\n );\n if (specFiles.length > 0 && !paths.includes(SPEC_INDEX)) {\n issues.push({\n code: \"MISSING_SPECS_INDEX\",\n where: SPEC_INDEX,\n message: \"Ada berkas di specs/ tetapi specs/README.md (indeks & urutan baca) tidak ada\",\n });\n }\n\n const taskFiles = files.filter(\n (file) => TASK_FILE_RE.test(file.path) && file.path !== TASKS_INDEX,\n );\n if (taskFiles.length > 1 && !paths.includes(TASKS_INDEX)) {\n issues.push({\n code: \"MISSING_TASKS_INDEX\",\n where: TASKS_INDEX,\n message: \"Lebih dari satu task file tetapi tasks/README.md (urutan & dependency) tidak ada\",\n });\n }\n\n return { ok: issues.length === 0, issues, sectionsAccounted: 0 };\n}\n\n/* -------------------------------------------------------------------------- */\n/* Parsing (shared by the gate) \u2014 moved from the retired bundle-manifest.ts */\n/* -------------------------------------------------------------------------- */\n\nexport interface ParsedPrdSection {\n section: string;\n body: { kind: \"content\"; markdown: string } | { kind: \"not_applicable\"; justification: string };\n}\n\n/**\n * The DAG-relevant slice of a task file. Deliberately narrow: only the fields\n * the gate reasons about (requirement trace, ordering). Envelope completeness\n * (`targetFiles`, `verificationCommand`, `tujuan`) is Skills/LLM territory.\n */\nexport interface ParsedTaskContext {\n reTracedRequirement: string[];\n dependsOn: string[];\n taskId: string;\n /**\n * Layer vocabulary is extensible. The four canonical UI/product layers plus\n * `verification` (Phase 4, the final gate) are the ones the contract enforces.\n */\n layer?: \"frontend_mock\" | \"backend_api\" | \"database\" | \"integration\" | \"verification\" | string;\n phase?: number;\n checkpoint?: boolean;\n /** A setup/scaffolding task that legitimately has no product requirement. */\n foundation?: boolean;\n /** Feature this task belongs to (feature-first). Optional, additive. */\n featureId?: string;\n /** Acceptance criteria (AC-XXX) this task owns. Optional, additive. */\n acceptance?: string[];\n /** Spec files/IDs this task implements. Optional, additive. */\n specRef?: string[];\n /** Shared contract IDs (`CONTRACT-XXX`) this task depends on. Optional, additive. */\n contracts?: string[];\n /** Technical Module (`MODULE-XXX`) this task implements. Optional, additive. */\n moduleId?: string;\n /** Concern IDs (`CONCERN-XXX`) this task touches. Optional, additive. */\n concernIds?: string[];\n /** Isolation boundaries (`ISOLATION-XXX`) this task enforces. Optional, additive. */\n isolationRefs?: string[];\n}\n\n/**\n * Parse PRD markdown into 12 canonical sections + extract requirement IDs.\n * Purely structural \u2014 no quality judgement.\n */\nexport function parsePrd(prd: string): {\n sections: ParsedPrdSection[];\n requirementIds: string[];\n acceptanceIds: string[];\n featureIds: string[];\n contractIds: string[];\n} {\n const requirementIds = Array.from(new Set(prd.match(REQUIREMENT_ID_RE) ?? []));\n const acceptanceIds = Array.from(new Set(prd.match(AC_ID_RE) ?? []));\n const featureIds = Array.from(new Set(prd.match(FEATURE_ID_RE) ?? []));\n const contractIds = Array.from(new Set(prd.match(CONTRACT_ID_RE) ?? []));\n\n const headerRegex = /^##\\s+(\\d+\\.\\s+.+)$/gm;\n const matches = Array.from(prd.matchAll(headerRegex));\n\n const sectionIndices = new Map<string, number>();\n for (const match of matches) {\n const header = (match[1] ?? \"\").trim();\n const idx = PRD_CANONICAL_SECTIONS.findIndex((s) => s.trim() === header);\n const index = match.index ?? -1;\n if (idx >= 0 && index >= 0) sectionIndices.set(header, index);\n }\n\n const sections: ParsedPrdSection[] = [];\n for (const section of PRD_CANONICAL_SECTIONS) {\n const i = PRD_CANONICAL_SECTIONS.indexOf(section);\n const start = sectionIndices.get(section) ?? -1;\n const nextSection = PRD_CANONICAL_SECTIONS[i + 1];\n const end = nextSection ? (sectionIndices.get(nextSection) ?? prd.length) : prd.length;\n\n let body = \"\";\n if (start >= 0 && end > start) {\n const slice = prd.slice(start, end);\n const lines = slice.split(\"\\n\");\n if (lines.length > 1) body = lines.slice(1).join(\"\\n\").trim();\n }\n\n if (body.trim().length === 0) {\n sections.push({\n section,\n body: { kind: \"not_applicable\", justification: \"Tidak berlaku untuk produk ini.\" },\n });\n } else {\n const isNa = /\\bN\\/A\\b/i.test(body) && body.trim().length < 200;\n if (isNa) {\n const justificationMatch = body.match(/justifikasi[:\\s]+([\\s\\S]+)/i);\n const justification =\n (justificationMatch?.[1]?.trim() as string) ?? \"Tidak berlaku untuk produk ini.\";\n sections.push({ section, body: { kind: \"not_applicable\", justification } });\n } else {\n sections.push({ section, body: { kind: \"content\", markdown: body } });\n }\n }\n }\n\n return { sections, requirementIds, acceptanceIds, featureIds, contractIds };\n}\n\n/**\n * Real generated bundles emit labels as bullets and/or Markdown bold\n * (`- **layer**: backend_api`). Normalize only known field labels so the gate\n * reads the same task the CLI and the UI read; YAML block-list items such as\n * ` - TASK-001` are left untouched.\n */\nconst TASK_FIELD_LABELS =\n \"id|layer|phase|checkpoint|foundation|dependsOn|dependencies|featureId|feature|acceptance|specRef|contracts|moduleId|concernIds|isolationRefs|lifecycleRefs|engineRef|flowRef\";\n\nfunction normalizeTaskLabels(content: string): string {\n const re = new RegExp(`^\\\\s*(?:[-*]\\\\s*)?\\\\*{0,2}(${TASK_FIELD_LABELS})\\\\*{0,2}\\\\s*:`, \"gim\");\n return content.replace(re, \"$1:\");\n}\n\n/** Parse a task markdown file into the DAG-relevant context the gate reads. */\nexport function parseTaskContext(content: string, taskId: string): ParsedTaskContext {\n const normalized = normalizeTaskLabels(content);\n const reqs = Array.from(new Set(content.match(TASK_REF_RE) ?? []));\n\n // The stable identity is the declared `id:` field. The file name is only a\n // fallback: `T-001-x.md` + `- **id:** TASK-001` used to make `dependsOn:\n // [TASK-001]` unresolvable, which silently disabled DAG checks entirely.\n const declaredId = normalized.match(\n /^\\s*(?:[-*]\\s*)?\\*{0,2}\\s*id\\s*:?\\s*\\*{0,2}\\s*([A-Za-z]+-\\d{3,})\\b/im,\n )?.[1];\n const resolvedTaskId = declaredId?.trim() ?? taskId;\n\n const layerMatch = normalized.match(/layer:\\s*([^\\n]+)/i);\n const phaseMatch = normalized.match(/phase:\\s*(\\d+)/i);\n const checkpointMatch = normalized.match(/checkpoint:\\s*(true|false)/i);\n const foundationMatch = normalized.match(/foundation:\\s*(true|false)/i);\n\n const cleanItem = (value: string) =>\n value\n .replace(/^[-*]\\s+/, \"\")\n .replace(/[[\\]`]/g, \"\")\n .trim();\n const cleanList = (value: string | undefined): string[] =>\n value === undefined\n ? []\n : value\n .split(\",\")\n .map(cleanItem)\n .filter((part) => part.length > 0 && !/^(?:\\(?none\\)?|n\\/a|\u2014+|-+)$/i.test(part));\n\n /**\n * Read a list field in BOTH formats the authoring model actually emits:\n * inline (`dependsOn: [TASK-001, TASK-002]`) and YAML block lists\n * (`dependsOn:\\n - TASK-001`). Reading only the inline form silently\n * produced an empty DAG for real bundles.\n */\n const readListField = (label: string): string[] | undefined => {\n const lines = normalized.split(/\\r?\\n/);\n const labelRe = new RegExp(`^\\\\s*${label}\\\\s*:\\\\s*(.*)$`, \"i\");\n const index = lines.findIndex((line) => labelRe.test(line));\n if (index === -1) return undefined;\n const first = lines[index]?.match(labelRe)?.[1]?.trim() ?? \"\";\n if (first.length > 0) {\n if (first === \"[]\") return [];\n return cleanList(first);\n }\n const items: string[] = [];\n for (let i = index + 1; i < lines.length; i += 1) {\n const line = lines[i] ?? \"\";\n if (line.trim().length === 0) continue;\n const item = /^\\s*-\\s+(.+?)\\s*$/.exec(line);\n if (item === null) break;\n items.push(cleanItem(item[1] ?? \"\"));\n }\n return items.filter(Boolean);\n };\n\n const dependsOn = readListField(\"dependsOn\") ?? [];\n const acceptance = readListField(\"acceptance\");\n const specRef = readListField(\"specRef\");\n const contracts = readListField(\"contracts\");\n const concernIds = readListField(\"concernIds\");\n const isolationRefs = readListField(\"isolationRefs\");\n\n const featureMatch = normalized.match(/(?:featureId|feature):\\s*([^\\n]+)/i);\n const moduleIdMatch = normalized.match(/moduleId:\\s*([^\\n]+)/i);\n\n const moduleId = moduleIdMatch?.[1]?.trim();\n\n return {\n reTracedRequirement: reqs,\n dependsOn,\n taskId: resolvedTaskId,\n ...(layerMatch?.[1] && {\n layer: layerMatch[1] as string,\n }),\n ...(phaseMatch?.[1] && { phase: parseInt(phaseMatch[1], 10) }),\n ...(checkpointMatch && { checkpoint: checkpointMatch[1] === \"true\" }),\n ...(foundationMatch && { foundation: foundationMatch[1] === \"true\" }),\n ...(featureMatch?.[1] && { featureId: featureMatch[1].trim() }),\n ...(acceptance && acceptance.length > 0 && { acceptance }),\n ...(specRef && specRef.length > 0 && { specRef }),\n ...(contracts && contracts.length > 0 && { contracts }),\n ...(moduleId && { moduleId }),\n ...(concernIds && concernIds.length > 0 && { concernIds }),\n ...(isolationRefs && isolationRefs.length > 0 && { isolationRefs }),\n };\n}\n\ninterface MarkdownTable {\n header: string[];\n rows: string[][];\n}\n\n/** Markdown table under a heading; null when the heading/table is absent. */\nfunction tableUnderHeading(content: string, heading: RegExp): MarkdownTable | null {\n const lines = content.split(/\\r?\\n/);\n let inside = false;\n const tableLines: string[] = [];\n for (const line of lines) {\n const trimmed = line.trim();\n if (!inside) {\n if (heading.test(trimmed)) inside = true;\n continue;\n }\n if (/^#{1,6}\\s+/.test(trimmed)) break;\n if (trimmed.startsWith(\"|\")) tableLines.push(trimmed);\n }\n if (tableLines.length < 2) return null;\n const parsed = tableLines.map((line) =>\n line\n .replace(/^\\|/, \"\")\n .replace(/\\|$/, \"\")\n .split(\"|\")\n .map((cell) => cell.trim()),\n );\n const header = parsed[0] ?? [];\n const rows = parsed\n .slice(1)\n .filter((cells) => !cells.every((cell) => cell.length === 0 || /^:?-{2,}:?$/.test(cell)));\n return { header, rows };\n}\n\nconst LIFECYCLE_HEADING = /^#{1,6}\\s+Lifecycle Coverage\\s*$/i;\nconst USER_MENTAL_HEADING = /^#{1,6}\\s+User Mental Model\\s*$/i;\nconst ENGINE_MENTAL_HEADING = /^#{1,6}\\s+Engine Mental Model\\s*$/i;\nconst ENGINE_COVERAGE_HEADING = /^#{1,6}\\s+Engine Coverage\\s*$/i;\n\n/** State of one PRD ledger row; undefined when the ledger row is absent. */\nfunction domainState(\n prd: string,\n index: number,\n label: string,\n): \"RESOLVED\" | \"EXPLICIT_NA\" | undefined {\n const escaped = label.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const match = new RegExp(`\\\\[${index}\\\\]\\\\s*${escaped}\\\\s*:\\\\s*(RESOLVED|EXPLICIT_NA)`, \"i\").exec(\n prd,\n );\n return match?.[1]?.toUpperCase() as \"RESOLVED\" | \"EXPLICIT_NA\" | undefined;\n}\n\n/** State of the PRD's [6] ledger row; undefined when the PRD has no ledger row. */\nfunction lifecycleDomainState(prd: string): \"RESOLVED\" | \"EXPLICIT_NA\" | undefined {\n return domainState(prd, 6, \"Lifecycles & State Machines\");\n}\n\n/** \u00A76 User Mental Model table: at least one actor row. */\nfunction isMeaningfulMentalModelCell(value: string | undefined): boolean {\n const trimmed = (value ?? \"\").trim();\n if (trimmed.length === 0) return false;\n // Placeholder tokens that masquerade as content but carry no information.\n return !/^(?:\\(?none\\)?|n\\/a|\u2014+|-+)$/i.test(trimmed);\n}\n\nfunction hasUserMentalModel(prd: string): boolean {\n const section = splitPrdSections(prd).get(\"6. User Journeys & Flows\") ?? \"\";\n const table = tableUnderHeading(section, USER_MENTAL_HEADING);\n if (table === null) return false;\n // Seven-column contract: a partial table (fewer than the 7 declared columns)\n // must not be accepted as a User Mental Model.\n if (table.header.length < 7) return false;\n const actorIndex = table.header.findIndex((cell) => /^(aktor|actor)$/i.test(cell.trim()));\n if (actorIndex === -1) return false;\n return table.rows.some((row) => {\n if (!isMeaningfulMentalModelCell(row[actorIndex])) return false;\n // An \"empty\" row (actor present but every other cell blank/placeholder) is\n // not a mental model; require at least one substantive supporting cell.\n return row.some((cell, index) => index !== actorIndex && isMeaningfulMentalModelCell(cell));\n });\n}\n\n/** Gate-level check reused by the PRD pipeline stage. */\nexport function userMentalModelIssues(prd: string): LintIssue[] {\n if (domainState(prd, 1, \"Actors & Roles\") !== \"RESOLVED\") return [];\n if (hasUserMentalModel(prd)) return [];\n return [\n {\n code: \"MISSING_USER_MENTAL_MODEL\",\n where: \"6. User Journeys & Flows\",\n message:\n \"PRD menandai `[1] Actors & Roles : RESOLVED`, tetapi \u00A76 tidak punya tabel `### User Mental Model` (Aktor | Tujuan | Ekspektasi | Langkah mental | Kosakata user | Titik bingung | Sinyal sukses/trust)\",\n },\n ];\n}\n\n/** Engine Mental Model aspects declared in specs/README.md. */\nfunction specEngineAspects(files: { path: string; content: string }[]): Map<string, string> {\n const aspects = new Map<string, string>();\n const index = files.find((file) => file.path === BUNDLE_PATHS.SPECS_INDEX);\n if (index === undefined) return aspects;\n const table = tableUnderHeading(index.content, ENGINE_MENTAL_HEADING);\n if (table === null) return aspects;\n const aspectIndex = table.header.findIndex((cell) => /^(aspek|aspect)$/i.test(cell.trim()));\n if (aspectIndex === -1) return aspects;\n for (const row of table.rows) {\n const aspect = row[aspectIndex]?.trim() ?? \"\";\n if (aspect.length === 0) continue;\n aspects.set(aspect.toLowerCase(), aspect);\n }\n return aspects;\n}\n\n/** Aspect \u2192 owner task refs from the `## Engine Coverage` table in tasks/README.md. */\nfunction taskEngineOwners(\n files: { path: string; content: string }[],\n): Map<string, { aspect: string; owners: string[] }> {\n const rows = new Map<string, { aspect: string; owners: string[] }>();\n const index = files.find((file) => file.path === BUNDLE_PATHS.TASKS_INDEX);\n if (index === undefined) return rows;\n const table = tableUnderHeading(index.content, ENGINE_COVERAGE_HEADING);\n if (table === null) return rows;\n const aspectIndex = table.header.findIndex((cell) => /^(aspek|aspect)$/i.test(cell.trim()));\n const ownerIndex = table.header.findIndex((cell) => /owner\\s*task|^task$/i.test(cell.trim()));\n if (aspectIndex === -1) return rows;\n for (const row of table.rows) {\n const aspect = row[aspectIndex]?.trim() ?? \"\";\n if (aspect.length === 0) continue;\n const owners = ownerIndex === -1 ? [] : (row[ownerIndex]?.match(/TASK-\\d{3,}/gi) ?? []);\n rows.set(aspect.toLowerCase(), { aspect, owners: owners.map((id) => id.toUpperCase()) });\n }\n return rows;\n}\n\nconst FLOW_COVERAGE_HEADING = /^#{1,6}\\s+Flow Coverage\\s*$/i;\nconst USER_FLOW_COVERAGE_HEADING = /^#{1,6}\\s+User Flow Coverage\\s*$/i;\nconst FLOW_ID_RE = /\\bFLOW-\\d{3,}\\b/i;\nconst STEP_ID_RE = /\\bSTEP-\\d{2,}\\b/i;\n\nconst flowStepKey = (flowId: string, stepId: string): string =>\n `${flowId.toUpperCase()}/${stepId.toUpperCase()}`;\n\n/** FLOW-XXX rows from PRD \u00A76 `### Flow Coverage`. */\nfunction prdFlowIds(prd: string): Map<string, string> {\n const flows = new Map<string, string>();\n const section = splitPrdSections(prd).get(\"6. User Journeys & Flows\") ?? \"\";\n const table = tableUnderHeading(section, FLOW_COVERAGE_HEADING);\n if (table === null) return flows;\n const flowIndex = table.header.findIndex((cell) => /^flow(\\s*id)?$/i.test(cell.trim()));\n if (flowIndex === -1) return flows;\n for (const row of table.rows) {\n const cell = row[flowIndex]?.trim() ?? \"\";\n const flowId = FLOW_ID_RE.exec(cell)?.[0];\n if (flowId === undefined) continue;\n flows.set(flowId.toUpperCase(), flowId.toUpperCase());\n }\n return flows;\n}\n\n/** PRD flows + specs flow steps (`FLOW-XXX` / `STEP-XX`). */\nfunction specFlowSteps(\n files: { path: string; content: string }[],\n): Map<string, { flowId: string; stepId: string }> {\n const steps = new Map<string, { flowId: string; stepId: string }>();\n for (const file of files) {\n if (!file.path.startsWith(\"specs/\")) continue;\n const table = tableUnderHeading(file.content, FLOW_COVERAGE_HEADING);\n if (table === null) continue;\n const flowIndex = table.header.findIndex((cell) => /^flow(\\s*id)?$/i.test(cell.trim()));\n const stepIndex = table.header.findIndex((cell) => /^step(\\s*id)?$/i.test(cell.trim()));\n if (flowIndex === -1 || stepIndex === -1) continue;\n for (const row of table.rows) {\n const flowId = FLOW_ID_RE.exec(row[flowIndex]?.trim() ?? \"\")?.[0];\n if (flowId === undefined) continue;\n const rawStep = row[stepIndex]?.trim() ?? \"\";\n const stepId = STEP_ID_RE.exec(rawStep)?.[0] ?? rawStep;\n if (stepId.length === 0) continue;\n steps.set(flowStepKey(flowId, stepId), {\n flowId: flowId.toUpperCase(),\n stepId: stepId.toUpperCase(),\n });\n }\n }\n return steps;\n}\n\n/** Step \u2192 owner task refs from `## User Flow Coverage` in tasks/README.md. */\nfunction taskFlowOwners(\n files: { path: string; content: string }[],\n): Map<string, { flowId: string; stepId: string; owners: string[] }> {\n const rows = new Map<string, { flowId: string; stepId: string; owners: string[] }>();\n const index = files.find((file) => file.path === BUNDLE_PATHS.TASKS_INDEX);\n if (index === undefined) return rows;\n const table = tableUnderHeading(index.content, USER_FLOW_COVERAGE_HEADING);\n if (table === null) return rows;\n const flowIndex = table.header.findIndex((cell) => /^flow(\\s*id)?$/i.test(cell.trim()));\n const stepIndex = table.header.findIndex((cell) => /^step(\\s*id)?$/i.test(cell.trim()));\n const ownerIndex = table.header.findIndex((cell) => /owner\\s*task|^task$/i.test(cell.trim()));\n if (flowIndex === -1 || stepIndex === -1) return rows;\n for (const row of table.rows) {\n const flowId = FLOW_ID_RE.exec(row[flowIndex]?.trim() ?? \"\")?.[0];\n const rawStep = row[stepIndex]?.trim() ?? \"\";\n const stepId = STEP_ID_RE.exec(rawStep)?.[0] ?? rawStep;\n if (flowId === undefined || stepId.length === 0) continue;\n const owners = ownerIndex === -1 ? [] : (row[ownerIndex]?.match(/TASK-\\d{3,}/gi) ?? []);\n rows.set(flowStepKey(flowId, stepId), {\n flowId: flowId.toUpperCase(),\n stepId: stepId.toUpperCase(),\n owners: owners.map((id) => id.toUpperCase()),\n });\n }\n return rows;\n}\n\n/** Gate-level PRD check reused by the PRD pipeline stage. */\nexport function flowCoverageIssues(prd: string): LintIssue[] {\n if (domainState(prd, 7, \"Workflows & Sequences\") !== \"RESOLVED\") return [];\n if (prdFlowIds(prd).size > 0) return [];\n return [\n {\n code: \"MISSING_FLOW_COVERAGE\",\n where: \"6. User Journeys & Flows\",\n message:\n \"PRD menandai `[7] Workflows & Sequences : RESOLVED`, tetapi \u00A76 tidak punya tabel `### Flow Coverage` (Flow ID | Actor | Trigger | Steps | Screens | Outcome | Alternative | Failure | Exit)\",\n },\n ];\n}\n\n/** Entity names declared in the `## Lifecycle Coverage` table inside specs/. */\nfunction specLifecycleEntities(files: { path: string; content: string }[]): Map<string, string> {\n const entities = new Map<string, string>();\n for (const file of files) {\n if (!file.path.startsWith(\"specs/\")) continue;\n const table = tableUnderHeading(file.content, LIFECYCLE_HEADING);\n if (table === null) continue;\n const entityIndex = table.header.findIndex((cell) => /^entity$/i.test(cell.trim()));\n if (entityIndex === -1) continue;\n for (const row of table.rows) {\n const entity = row[entityIndex]?.trim() ?? \"\";\n if (entity.length === 0) continue;\n entities.set(entity.toLowerCase(), entity);\n }\n }\n return entities;\n}\n\n/** Entity \u2192 owner task refs from the `## Lifecycle Coverage` table in tasks/README.md. */\nfunction taskLifecycleOwners(\n files: { path: string; content: string }[],\n): Map<string, { entity: string; owners: string[] }> {\n const rows = new Map<string, { entity: string; owners: string[] }>();\n const index = files.find((file) => file.path === BUNDLE_PATHS.TASKS_INDEX);\n if (index === undefined) return rows;\n const table = tableUnderHeading(index.content, LIFECYCLE_HEADING);\n if (table === null) return rows;\n const entityIndex = table.header.findIndex((cell) => /^entity$/i.test(cell.trim()));\n const ownerIndex = table.header.findIndex((cell) => /owner\\s*task|^task$/i.test(cell.trim()));\n if (entityIndex === -1) return rows;\n for (const row of table.rows) {\n const entity = row[entityIndex]?.trim() ?? \"\";\n if (entity.length === 0) continue;\n const owners = ownerIndex === -1 ? [] : (row[ownerIndex]?.match(/TASK-\\d{3,}/gi) ?? []);\n rows.set(entity.toLowerCase(), { entity, owners: owners.map((id) => id.toUpperCase()) });\n }\n return rows;\n}\n\n/* -------------------------------------------------------------------------- */\n/* Bundle integrity \u2014 required paths, traceability, envelope, DAG */\n/* -------------------------------------------------------------------------- */\n\n/**\n * Deterministic integrity checks that require the full file set (not just the\n * PRD string). Kept intentionally narrow: only invariants the system must\n * guarantee for a bundle to be executable and traceable.\n */\nfunction lintBundleIntegrity(prd: string, files: { path: string; content: string }[]): LintIssue[] {\n const issues: LintIssue[] = [];\n const paths = new Set(files.map((f) => f.path));\n const specsPresent = [...paths].some((p) => p.startsWith(\"specs/\"));\n const specContentFiles = [...paths].filter(\n (p) => p.startsWith(\"specs/\") && p !== BUNDLE_PATHS.SPECS_INDEX,\n );\n\n // Feature-first: any spec content file is acceptable; the legacy\n // `functional.md` name is no longer the sole gate. A specs/ directory that\n // only contains its README (no content) is still incomplete.\n if (specsPresent && specContentFiles.length === 0) {\n issues.push({\n code: \"MISSING_SPEC_CONTENT\",\n where: \"specs/\",\n message: \"specs/ berisi berkas tetapi tidak ada satu pun file spec konten (selain README.md)\",\n });\n }\n\n const taskFiles = files.filter(\n (f) =>\n f.path.startsWith(\"tasks/\") &&\n f.path !== BUNDLE_PATHS.TASKS_INDEX &&\n f.path !== BUNDLE_PATHS.TASKS_SINGLE,\n );\n const { requirementIds } = parsePrd(prd);\n const requirementIdsSet = new Set(requirementIds);\n const coveredReqIds = new Set<string>();\n const taskRecords = taskFiles.map((tf) => {\n const stem = tf.path.replace(/^tasks\\//, \"\").replace(/\\.md$/, \"\");\n return { tf, stem, ctx: parseTaskContext(tf.content, stem) };\n });\n const taskContexts = taskRecords.map((record) => record.ctx);\n /** Case-insensitive identity: declared id OR file stem both resolve. */\n const taskKey = (value: string) => value.trim().toUpperCase();\n const taskIndexByKey = new Map<string, number>();\n taskRecords.forEach((record, index) => {\n taskIndexByKey.set(taskKey(record.ctx.taskId), index);\n taskIndexByKey.set(taskKey(record.stem), index);\n });\n\n // Lifecycle traceability: when the PRD declares the lifecycle domain as\n // RESOLVED, every stateful entity must appear in specs/ AND in the tasks\n // index with at least one owning task. A PRD sentence alone is not coverage.\n if (lifecycleDomainState(prd) === \"RESOLVED\") {\n const specEntities = specLifecycleEntities(files);\n if (specEntities.size === 0) {\n issues.push({\n code: \"MISSING_LIFECYCLE_COVERAGE\",\n where: \"specs/\",\n message:\n \"PRD menandai `[6] Lifecycles & State Machines : RESOLVED`, tetapi specs/ tidak punya tabel `## Lifecycle Coverage` berisi entity\",\n });\n } else if (taskRecords.length > 0) {\n const owners = taskLifecycleOwners(files);\n if (owners.size === 0) {\n issues.push({\n code: \"MISSING_LIFECYCLE_COVERAGE\",\n where: BUNDLE_PATHS.TASKS_INDEX,\n message:\n \"tasks/README.md tidak punya tabel `## Lifecycle Coverage` (Entity | Owner Task) untuk entity yang dideklarasikan specs/\",\n });\n } else {\n for (const [key, entity] of specEntities) {\n const row = owners.get(key);\n if (row === undefined) {\n issues.push({\n code: \"MISSING_LIFECYCLE_COVERAGE\",\n where: entity,\n message: `Entity lifecycle \"${entity}\" tidak dipetakan ke task manapun di tasks/README.md`,\n });\n continue;\n }\n if (row.owners.length === 0) {\n issues.push({\n code: \"MISSING_LIFECYCLE_COVERAGE\",\n where: entity,\n message: `Entity lifecycle \"${entity}\" belum punya owner task`,\n });\n continue;\n }\n for (const owner of row.owners) {\n if (!taskIndexByKey.has(taskKey(owner))) {\n issues.push({\n code: \"MISSING_LIFECYCLE_COVERAGE\",\n where: entity,\n message: `Owner task \"${owner}\" untuk lifecycle \"${entity}\" tidak ditemukan`,\n });\n }\n }\n }\n for (const [key, row] of owners) {\n if (!specEntities.has(key)) {\n issues.push({\n code: \"MISSING_LIFECYCLE_COVERAGE\",\n where: row.entity,\n message: `Lifecycle \"${row.entity}\" ada di tasks/README.md tetapi tidak dideklarasikan di specs/`,\n });\n }\n }\n }\n }\n }\n\n // User Mental Model: the PRD's actor domain is not \"covered\" by a role list\n // alone. \u00A76 must state what each actor expects, the mental steps, their\n // vocabulary, confusion points, and trust cues.\n issues.push(...userMentalModelIssues(prd));\n\n // Engine Mental Model: entities/persistence are not \"covered\" by an ERD\n // alone. specs/README states boundaries, source of truth, ownership,\n // invariants, consistency, and failure/recovery; tasks/README maps each\n // aspect to an owner task.\n const engineResolved =\n domainState(prd, 3, \"Entities & Concepts\") === \"RESOLVED\" ||\n domainState(prd, 9, \"Data & Persistence\") === \"RESOLVED\";\n if (engineResolved) {\n const specAspects = specEngineAspects(files);\n if (specAspects.size === 0) {\n issues.push({\n code: \"MISSING_ENGINE_MENTAL_MODEL\",\n where: BUNDLE_PATHS.SPECS_INDEX,\n message:\n \"PRD menandai entities/data RESOLVED, tetapi specs/README.md tidak punya tabel `## Engine Mental Model` (Aspek | Keputusan)\",\n });\n } else if (taskRecords.length > 0) {\n const owners = taskEngineOwners(files);\n if (owners.size === 0) {\n issues.push({\n code: \"MISSING_ENGINE_MENTAL_MODEL\",\n where: BUNDLE_PATHS.TASKS_INDEX,\n message:\n \"tasks/README.md tidak punya tabel `## Engine Coverage` (Aspek | Owner Task) untuk Engine Mental Model di specs/\",\n });\n } else {\n for (const [key, aspect] of specAspects) {\n const row = owners.get(key);\n if (row === undefined || row.owners.length === 0) {\n issues.push({\n code: \"MISSING_ENGINE_MENTAL_MODEL\",\n where: aspect,\n message: `Aspek engine \"${aspect}\" belum punya owner task di tasks/README.md`,\n });\n continue;\n }\n for (const owner of row.owners) {\n if (!taskIndexByKey.has(taskKey(owner))) {\n issues.push({\n code: \"MISSING_ENGINE_MENTAL_MODEL\",\n where: aspect,\n message: `Owner task \"${owner}\" untuk aspek engine \"${aspect}\" tidak ditemukan`,\n });\n }\n }\n }\n for (const [key, row] of owners) {\n if (!specAspects.has(key)) {\n issues.push({\n code: \"MISSING_ENGINE_MENTAL_MODEL\",\n where: row.aspect,\n message: `Aspek engine \"${row.aspect}\" ada di tasks/README.md tetapi tidak dideklarasikan di specs/README.md`,\n });\n }\n }\n }\n }\n }\n\n // User Flow Coverage: a flow is not executable until every step has a task.\n if (domainState(prd, 7, \"Workflows & Sequences\") === \"RESOLVED\") {\n const flows = prdFlowIds(prd);\n if (flows.size === 0) {\n issues.push({\n code: \"MISSING_FLOW_COVERAGE\",\n where: \"6. User Journeys & Flows\",\n message:\n \"PRD menandai `[7] Workflows & Sequences : RESOLVED`, tetapi \u00A76 tidak punya tabel `### Flow Coverage` berisi FLOW-XXX\",\n });\n } else {\n const steps = specFlowSteps(files);\n if (steps.size === 0) {\n issues.push({\n code: \"MISSING_FLOW_COVERAGE\",\n where: \"specs/\",\n message:\n \"PRD punya Flow Coverage, tetapi specs/ tidak punya tabel `## Flow Coverage` (Flow ID | Step | \u2026) yang menurunkan langkahnya\",\n });\n } else {\n for (const [flowId] of flows) {\n const hasStep = [...steps.values()].some((step) => step.flowId === flowId);\n if (!hasStep) {\n issues.push({\n code: \"MISSING_FLOW_COVERAGE\",\n where: flowId,\n message: `Flow \"${flowId}\" tidak punya langkah di specs/ ## Flow Coverage`,\n });\n }\n }\n if (taskRecords.length > 0) {\n const owners = taskFlowOwners(files);\n if (owners.size === 0) {\n issues.push({\n code: \"MISSING_FLOW_COVERAGE\",\n where: BUNDLE_PATHS.TASKS_INDEX,\n message:\n \"tasks/README.md tidak punya tabel `## User Flow Coverage` (Flow ID | Step | Owner Task) untuk setiap langkah di specs/\",\n });\n } else {\n for (const [key, step] of steps) {\n const row = owners.get(key);\n if (row === undefined || row.owners.length === 0) {\n issues.push({\n code: \"MISSING_FLOW_COVERAGE\",\n where: `${step.flowId}/${step.stepId}`,\n message: `Langkah flow \"${step.flowId}/${step.stepId}\" belum punya owner task`,\n });\n continue;\n }\n for (const owner of row.owners) {\n if (!taskIndexByKey.has(taskKey(owner))) {\n issues.push({\n code: \"MISSING_FLOW_COVERAGE\",\n where: `${step.flowId}/${step.stepId}`,\n message: `Owner task \"${owner}\" untuk langkah \"${step.flowId}/${step.stepId}\" tidak ditemukan`,\n });\n }\n }\n }\n for (const [key, row] of owners) {\n if (!steps.has(key)) {\n issues.push({\n code: \"MISSING_FLOW_COVERAGE\",\n where: `${row.flowId}/${row.stepId}`,\n message: `Langkah flow \"${row.flowId}/${row.stepId}\" ada di tasks/README.md tetapi tidak dideklarasikan di specs/`,\n });\n }\n }\n }\n }\n }\n }\n }\n\n for (const record of taskRecords) {\n const ctx = record.ctx;\n\n for (const reqId of ctx.reTracedRequirement) {\n // NFR-XX follow a parallel convention the PRD requirement set does not\n // enumerate, so they are not dangling-checked.\n if (/^(?:REQ|FR)-\\d{3,}$/.test(reqId) && !requirementIdsSet.has(reqId)) {\n issues.push({\n code: \"DANGLING_REFERENCE\",\n where: reqId,\n message: `Task merujuk requirement \"${reqId}\" yang tidak didefinisikan di PRD`,\n });\n }\n coveredReqIds.add(reqId);\n }\n }\n\n if (taskContexts.length > 0) {\n // Dependency references must resolve. A mismatch (file `T-001-x.md` but\n // `dependsOn: [TASK-001]`) used to silently produce an empty DAG, so cycle\n // detection and ordering were both vacuous.\n for (const record of taskRecords) {\n const missing = new Set<string>();\n for (const dep of record.ctx.dependsOn) {\n if (!taskIndexByKey.has(taskKey(dep))) missing.add(dep);\n }\n for (const dep of missing) {\n issues.push({\n code: \"DANGLING_DEPENDENCY\",\n where: `tasks/${record.ctx.taskId}`,\n message: `dependsOn \"${dep}\" tidak merujuk task yang ada (id atau nama file)`,\n });\n }\n }\n\n // FE-first execution contract: all frontend_mock tasks are Phase 1, then\n // database/backend_api Phase 2, integration Phase 3, verification Phase 4.\n // A frontend task may not depend on a later layer \u2014 Phase 1 must finish on\n // mock data alone, before backend/database exist.\n for (const record of taskRecords) {\n const layer = record.ctx.layer?.toLowerCase();\n if (layer === undefined) continue;\n const expectedPhase = executionPhaseFor(layer);\n if (expectedPhase !== undefined && record.ctx.phase !== expectedPhase) {\n issues.push({\n code: \"PHASE_LAYER_MISMATCH\",\n where: `tasks/${record.ctx.taskId}`,\n message:\n record.ctx.phase === undefined\n ? `layer \"${layer}\" wajib phase ${expectedPhase} (FE-first execution contract)`\n : `layer \"${layer}\" harus phase ${expectedPhase}, bukan ${record.ctx.phase} (FE-first execution contract)`,\n });\n }\n if (layer !== \"frontend_mock\") continue;\n for (const dep of record.ctx.dependsOn) {\n const depIndex = taskIndexByKey.get(taskKey(dep));\n const depLayer =\n depIndex === undefined ? undefined : taskContexts[depIndex]?.layer?.toLowerCase();\n if (depLayer !== undefined && depLayer !== \"frontend_mock\") {\n issues.push({\n code: \"FE_DEPENDS_ON_LATER_LAYER\",\n where: `tasks/${record.ctx.taskId}`,\n message: `Task frontend_mock bergantung pada \"${dep}\" (${depLayer}); frontend harus selesai mandiri dengan mock data`,\n });\n }\n }\n }\n\n const hasFrontend = taskRecords.some(\n (record) => record.ctx.layer?.toLowerCase() === \"frontend_mock\",\n );\n const hasVerification = taskRecords.some(\n (record) => record.ctx.layer?.toLowerCase() === \"verification\",\n );\n if (hasFrontend && !hasVerification) {\n issues.push({\n code: \"MISSING_FINAL_VERIFICATION\",\n where: \"tasks/\",\n message:\n \"Bundle ber-UI wajib punya task final `layer: verification` (phase 4) yang menjalankan seluruh verifikasi\",\n });\n }\n\n // `specRef` is additive, but once a task uses it the referenced SPEC IDs\n // must really exist in specs/ \u2014 otherwise the traceability matrix is prose.\n const declaredSpecIds = new Set<string>();\n for (const file of files) {\n if (!file.path.startsWith(\"specs/\")) continue;\n for (const specId of file.content.match(SPEC_REF_RE) ?? []) {\n declaredSpecIds.add(specId.toUpperCase());\n }\n }\n if (taskRecords.some((record) => (record.ctx.specRef?.length ?? 0) > 0)) {\n const specFileExists = (ref: string): boolean => {\n const bare = ref.replace(/^specs\\//, \"\");\n return files.some((file) => file.path === ref || file.path === `specs/${bare}`);\n };\n for (const record of taskRecords) {\n for (const specRef of record.ctx.specRef ?? []) {\n const isId = /^SPEC-\\d{3,}$/i.test(specRef);\n const exists = isId\n ? declaredSpecIds.has(specRef.toUpperCase())\n : specFileExists(specRef);\n if (!exists) {\n issues.push({\n code: \"DANGLING_SPEC_REFERENCE\",\n where: `tasks/${record.ctx.taskId}`,\n message: isId\n ? `specRef \"${specRef}\" tidak dideklarasikan di specs/`\n : `specRef \"${specRef}\" tidak menunjuk berkas spec yang ada`,\n });\n }\n }\n }\n }\n\n for (const reqId of requirementIds) {\n if (!coveredReqIds.has(reqId)) {\n issues.push({\n code: \"UNCOVERED_REQUIREMENT\",\n where: reqId,\n message: `Requirement \"${reqId}\" tidak tertutup oleh task manapun`,\n });\n }\n }\n\n // Feature-first (additive, backward-compatible): only when the bundle opts\n // into the new conventions do we enforce the new invariants.\n const sectionsMap = splitPrdSections(prd);\n const featureTitles = coreFeatureTitles(sectionsMap.get(\"5. Core Features\") ?? \"\");\n const acceptanceIds = Array.from(new Set(prd.match(AC_ID_RE) ?? []));\n\n // AC coverage: if \u00A711 declares AC-XXX ids, every one must be owned by a task.\n if (acceptanceIds.length > 0) {\n const ownedAc = new Set<string>();\n for (const record of taskRecords) {\n for (const ac of record.ctx.acceptance ?? []) ownedAc.add(ac);\n for (const m of record.tf.content.match(AC_ID_RE) ?? []) ownedAc.add(m);\n }\n for (const ac of acceptanceIds) {\n if (!ownedAc.has(ac)) {\n issues.push({\n code: \"AC_WITHOUT_OWNER\",\n where: ac,\n message: `Acceptance criterion \"${ac}\" tidak dimiliki task manapun`,\n });\n }\n }\n }\n\n // Feature coverage: enforced when the bundle opts in by declaring a\n // `featureId` OR when \u00A75 itself carries stable FEATURE-XXX IDs. An ID-first\n // PRD can no longer disable the gate by simply omitting featureId in every\n // task. Legacy ID-less bundles keep the normalized-title fallback.\n const tasksDeclareFeature = taskContexts.some((c) => c.featureId);\n const prdDeclaresFeatureIds = featureTitles.some((title) => /\\bFEATURE-\\d{3,}\\b/i.test(title));\n if ((tasksDeclareFeature || prdDeclaresFeatureIds) && featureTitles.length > 0) {\n const normalize = (s: string) =>\n s\n .toLowerCase()\n .replace(/[^\\p{L}\\p{N}]+/gu, \" \")\n .trim();\n const stripFeatureId = (s: string) => normalize(s.replace(/\\bFEATURE-\\d{3,}\\b/gi, \" \"));\n const taskFeatureValues = taskContexts\n .map((c) => c.featureId)\n .filter((v): v is string => Boolean(v));\n const taskFeatureIds = new Set(\n taskFeatureValues\n .flatMap((v) => v.match(/\\bFEATURE-\\d{3,}\\b/gi) ?? [])\n .map((m) => m.toUpperCase()),\n );\n const coveredFeatures = new Set(\n taskFeatureValues.map((v) => stripFeatureId(v)).filter((v) => v.length > 0),\n );\n const fuzzy = (n: string) =>\n n.length > 0 &&\n [...coveredFeatures].some((cf) => cf === n || cf.includes(n) || n.includes(cf));\n for (const title of featureTitles) {\n const titleId = title.match(/\\bFEATURE-\\d{3,}\\b/i)?.[0]?.toUpperCase();\n const owned =\n titleId !== undefined && taskFeatureIds.size > 0\n ? taskFeatureIds.has(titleId)\n : fuzzy(stripFeatureId(title));\n if (!owned) {\n issues.push({\n code: \"FEATURE_WITHOUT_TASK\",\n where: `5. Core Features: ${title}`,\n message: `Fitur \"${title}\" tidak memiliki task yang merujuknya (featureId)`,\n });\n }\n }\n }\n\n // Module & Concern traceability (additive, backward-compatible): only\n // enforced when the bundle opts in by declaring moduleId/concernIds on\n // tasks. Modules and concerns are declared in specs/ files.\n const declaredModules = new Set<string>();\n const declaredConcerns = new Set<string>();\n const declaredContracts = new Set<string>();\n for (const tf of files) {\n if (!tf.path.startsWith(\"specs/\")) continue;\n for (const m of tf.content.match(TECHNICAL_MODULE_ID_RE) ?? [])\n declaredModules.add(m.toUpperCase());\n for (const m of tf.content.match(CONCERN_ID_RE) ?? []) declaredConcerns.add(m.toUpperCase());\n for (const m of tf.content.match(CONTRACT_ID_RE) ?? [])\n declaredContracts.add(m.toUpperCase());\n }\n\n const tasksDeclareModule = taskContexts.some((c) => c.moduleId);\n if (tasksDeclareModule) {\n for (const ctx of taskContexts) {\n if (!ctx.moduleId) continue;\n const modId = ctx.moduleId.toUpperCase();\n if (!declaredModules.has(modId)) {\n issues.push({\n code: \"MODULE_WITHOUT_SPEC\",\n where: `tasks/${ctx.taskId}`,\n message: `Task merujuk modul \"${ctx.moduleId}\" yang tidak dideklarasikan di specs/`,\n });\n }\n }\n // Every declared module should have at least one owning task.\n const taskModuleIds = new Set(\n taskContexts\n .map((c) => c.moduleId)\n .filter((v): v is string => Boolean(v))\n .map((v) => v.toUpperCase()),\n );\n for (const modId of declaredModules) {\n if (!taskModuleIds.has(modId)) {\n issues.push({\n code: \"MODULE_UNUSED\",\n where: modId,\n message: `Modul \"${modId}\" dideklarasikan di specs/ tetapi tidak ada task yang memilikinya`,\n });\n }\n }\n }\n\n const tasksDeclareConcern = taskContexts.some((c) => c.concernIds);\n if (tasksDeclareConcern) {\n const knownConcerns = new Set(\n [...CANONICAL_CONCERNS, ...Array.from(declaredConcerns)].map((c) => c.toUpperCase()),\n );\n for (const ctx of taskContexts) {\n if (!ctx.concernIds) continue;\n for (const concernId of ctx.concernIds) {\n if (!knownConcerns.has(concernId.toUpperCase())) {\n issues.push({\n code: \"CONCERN_UNKNOWN\",\n where: `tasks/${ctx.taskId}`,\n message: `Task merujuk concern \"${concernId}\" yang tidak diketahui atau tidak dideklarasikan`,\n });\n }\n }\n }\n }\n\n // Shared Contract traceability: FE mock and BE implementation must point at\n // the same CONTRACT-XXX, otherwise the mock can drift from the real API.\n const tasksDeclareContract = taskContexts.some(\n (c) => c.contracts !== undefined && c.contracts.length > 0,\n );\n if (tasksDeclareContract) {\n for (const ctx of taskContexts) {\n for (const contractId of ctx.contracts ?? []) {\n if (!declaredContracts.has(contractId.toUpperCase())) {\n issues.push({\n code: \"CONTRACT_WITHOUT_SPEC\",\n where: `tasks/${ctx.taskId}`,\n message: `Task merujuk contract \"${contractId}\" yang tidak dideklarasikan di specs/`,\n });\n }\n }\n }\n }\n\n const contractFrontend = taskContexts.some((c) => c.layer === \"frontend_mock\");\n const contractBackend = taskContexts.some(\n (c) => c.layer === \"backend_api\" || c.layer === \"database\",\n );\n if (contractFrontend && contractBackend) {\n const frontendContracts = new Set<string>();\n const backendContracts = new Set<string>();\n for (const ctx of taskContexts) {\n const target =\n ctx.layer === \"frontend_mock\"\n ? frontendContracts\n : ctx.layer === \"backend_api\" || ctx.layer === \"database\"\n ? backendContracts\n : null;\n if (target === null) continue;\n for (const contractId of ctx.contracts ?? []) target.add(contractId.toUpperCase());\n }\n for (const contractId of frontendContracts) {\n if (!backendContracts.has(contractId)) {\n issues.push({\n code: \"CONTRACT_WITHOUT_PAIR\",\n where: contractId,\n message: `Contract \"${contractId}\" dipakai task FE tetapi tidak ada task BE yang memakainya; mock dan API bisa drift`,\n });\n }\n }\n if (!taskContexts.some((c) => c.layer === \"integration\")) {\n issues.push({\n code: \"MISSING_INTEGRATION_TASK\",\n where: \"tasks/\",\n message:\n \"Bundle punya FE dan BE tetapi tidak ada task layer `integration` untuk mengganti mock dengan API nyata\",\n });\n }\n }\n\n // Isolation traceability: an access boundary is real only when PRD declares\n // it, specs/ mirrors it, and a task owns its enforcement. Optional:\n // bundles without ISOLATION-XXX keep validating (backward-compatible).\n const prdIsolationIds = new Set(\n (prd.match(ISOLATION_ID_RE) ?? []).map((id) => id.toUpperCase()),\n );\n const specIsolationIds = new Set<string>();\n for (const tf of files) {\n if (!tf.path.startsWith(\"specs/\")) continue;\n for (const id of tf.content.match(ISOLATION_ID_RE) ?? []) {\n specIsolationIds.add(id.toUpperCase());\n }\n }\n for (const id of prdIsolationIds) {\n if (!specIsolationIds.has(id)) {\n issues.push({\n code: \"MISSING_ISOLATION_COVERAGE\",\n where: id,\n message: `Isolation \"${id}\" dideklarasikan di PRD tetapi tidak ada di specs/ (## Isolation Coverage)`,\n });\n }\n }\n const isolationOwners = new Map<string, string>();\n for (const ctx of taskContexts) {\n for (const ref of ctx.isolationRefs ?? []) {\n const id = ref.toUpperCase();\n if (!specIsolationIds.has(id)) {\n issues.push({\n code: \"ISOLATION_WITHOUT_SPEC\",\n where: `tasks/${ctx.taskId}`,\n message: `Task merujuk isolation \"${ref}\" yang tidak dideklarasikan di specs/`,\n });\n continue;\n }\n if (!isolationOwners.has(id)) isolationOwners.set(id, ctx.taskId);\n }\n }\n for (const id of specIsolationIds) {\n if (!isolationOwners.has(id)) {\n issues.push({\n code: \"ISOLATION_WITHOUT_OWNER\",\n where: id,\n message: `Isolation \"${id}\" dideklarasikan di specs/ tetapi tidak ada task yang memilikinya (isolationRefs)`,\n });\n }\n }\n\n // Cyclic dependency detection over the task DAG. Resolution uses the same\n // declared-id/stem aliases as the dangling check, so both agree.\n const adj = new Map<number, number[]>();\n for (let i = 0; i < taskContexts.length; i++) adj.set(i, []);\n for (let i = 0; i < taskContexts.length; i++) {\n const ctx = taskContexts[i];\n if (!ctx) continue;\n for (const dep of ctx.dependsOn) {\n const depIndex = taskIndexByKey.get(taskKey(dep));\n if (depIndex !== undefined) adj.get(i)?.push(depIndex);\n }\n }\n const visited = new Set<number>();\n const stack = new Set<number>();\n const visit = (node: number): boolean => {\n visited.add(node);\n stack.add(node);\n for (const next of adj.get(node) ?? []) {\n if (!visited.has(next)) {\n if (visit(next)) return true;\n } else if (stack.has(next)) {\n const cycle = [...stack, next]\n .map((idx) => taskContexts[idx]?.taskId ?? `task#${idx + 1}`)\n .join(\" -> \");\n issues.push({\n code: \"CYCLIC_DEPENDENCY\",\n where: \"task dependencies\",\n message: `Cyclic dependency detected: ${cycle}`,\n });\n return true;\n }\n }\n stack.delete(node);\n return false;\n };\n for (let i = 0; i < taskContexts.length; i++) {\n if (!visited.has(i)) visit(i);\n }\n }\n\n return issues;\n}\n\n/**\n * The single bundle gate. Judges a bundle's deterministic integrity only.\n *\n * When `files` is omitted (back-compat), only the PRD + task lints run; the\n * full-file integrity checks require the file set.\n */\nexport function lintBundle(artifacts: {\n prd?: string | undefined;\n tasks?: { path: string; content: string }[];\n /** When present, packaging + traceability/envelope/DAG integrity run. */\n files?: { path: string; content: string }[] | undefined;\n}): LintReport {\n const prd = artifacts.prd === undefined ? \"\" : artifacts.prd;\n const prdReport = lintPrd(prd);\n const taskReport = lintTaskBundle(artifacts.tasks ?? []);\n const packagingReport =\n artifacts.files === undefined\n ? { ok: true, issues: [] as LintIssue[], sectionsAccounted: 0 }\n : lintBundlePackaging(artifacts.files);\n const integrityIssues =\n artifacts.files === undefined ? [] : lintBundleIntegrity(prd, artifacts.files);\n\n return {\n ok: prdReport.ok && taskReport.ok && packagingReport.ok && integrityIssues.length === 0,\n issues: [\n ...prdReport.issues,\n ...taskReport.issues,\n ...packagingReport.issues,\n ...integrityIssues,\n ],\n sectionsAccounted: prdReport.sectionsAccounted,\n };\n}\n", "import type { Dirent } from \"node:fs\";\nimport { readdir, readFile } from \"node:fs/promises\";\nimport { join, relative } from \"node:path\";\nimport { ISOLATION_ID_RE, type LintIssue, lintBundle, parseTaskContext } from \"@jioo2/contracts\";\n\n/**\n * Compact bundle audit for `jioogen check`.\n *\n * This is a PRESENTATION layer over the existing deterministic gate. It never\n * re-implements a check and never becomes a second source of truth: `lintBundle`\n * stays the authority, and this module only groups its output so a human or an\n * agent can see the state of a bundle in one screen.\n */\n\nexport type CoverageState = \"ok\" | \"missing\" | \"n/a\";\n\nexport interface BundleCheckTask {\n id: string;\n layer?: string;\n phase: number;\n dependsOn: string[];\n}\n\nexport interface BundleCheck {\n dir: string;\n ok: boolean;\n files: number;\n bytes: number;\n sectionsAccounted: number;\n issueCount: number;\n issueCounts: Record<string, number>;\n issues: LintIssue[];\n coverage: {\n lifecycle: CoverageState;\n userMental: CoverageState;\n engineMental: CoverageState;\n flow: CoverageState;\n isolation: CoverageState;\n };\n dag: {\n tasks: number;\n edges: number;\n phases: Record<string, number>;\n layers: Record<string, number>;\n nodes: BundleCheckTask[];\n };\n}\n\ninterface BundleFile {\n path: string;\n content: string;\n}\n\nconst EXCLUDED_DIRS = new Set([\".execution\", \".jioogen\", \".jioocode\", \".git\", \"node_modules\"]);\n\nasync function collectMarkdownFiles(root: string): Promise<BundleFile[]> {\n const found: BundleFile[] = [];\n async function walk(dir: string): Promise<void> {\n let entries: Dirent[];\n try {\n entries = await readdir(dir, { withFileTypes: true });\n } catch {\n return;\n }\n for (const entry of entries) {\n if (entry.isDirectory()) {\n if (EXCLUDED_DIRS.has(entry.name)) continue;\n await walk(join(dir, entry.name));\n continue;\n }\n if (!entry.isFile() || !entry.name.toLowerCase().endsWith(\".md\")) continue;\n const absolute = join(dir, entry.name);\n found.push({\n path: relative(root, absolute).replace(/\\\\/g, \"/\"),\n content: await readFile(absolute, \"utf8\"),\n });\n }\n }\n await walk(root);\n return found.sort((left, right) => left.path.localeCompare(right.path));\n}\n\nfunction ledgerState(prd: string, index: number): \"RESOLVED\" | \"EXPLICIT_NA\" | undefined {\n const match = new RegExp(`\\\\[${index}\\\\]\\\\s*[^:\\\\n]+:\\\\s*(RESOLVED|EXPLICIT_NA)`, \"i\").exec(prd);\n return match?.[1]?.toUpperCase() as \"RESOLVED\" | \"EXPLICIT_NA\" | undefined;\n}\n\nfunction coverageOf(\n codes: ReadonlySet<string>,\n state: \"RESOLVED\" | \"EXPLICIT_NA\" | undefined,\n missingCode: string,\n): CoverageState {\n if (codes.has(missingCode)) return \"missing\";\n return state === \"RESOLVED\" ? \"ok\" : \"n/a\";\n}\n\nfunction countBy(values: readonly (string | undefined)[]): Record<string, number> {\n const counts: Record<string, number> = {};\n for (const value of values) {\n if (value === undefined) continue;\n counts[value] = (counts[value] ?? 0) + 1;\n }\n return counts;\n}\n\nfunction parseDag(tasks: readonly BundleFile[]): BundleCheck[\"dag\"] {\n const nodes: BundleCheckTask[] = [];\n for (const file of tasks) {\n if (file.path === \"tasks/README.md\" || file.path.toUpperCase() === \"TASKS.MD\") continue;\n const stem = file.path.replace(/^tasks\\//, \"\").replace(/\\.md$/i, \"\");\n const context = parseTaskContext(file.content, stem);\n nodes.push({\n id: context.taskId,\n ...(context.layer === undefined ? {} : { layer: context.layer }),\n phase: context.phase ?? 1,\n dependsOn: context.dependsOn,\n });\n }\n return {\n tasks: nodes.length,\n edges: nodes.reduce((total, node) => total + node.dependsOn.length, 0),\n phases: countBy(nodes.map((node) => String(node.phase))),\n layers: countBy(nodes.map((node) => node.layer)),\n nodes,\n };\n}\n\nexport async function inspectBundle(bundleDir: string): Promise<BundleCheck> {\n const files = await collectMarkdownFiles(bundleDir);\n const prd = files.find((file) => file.path === \"PRD.md\")?.content ?? \"\";\n const taskFiles = files.filter((file) => file.path.startsWith(\"tasks/\"));\n const report = lintBundle({ prd, tasks: taskFiles, files });\n\n const codes = new Set(report.issues.map((issue) => issue.code));\n const issueCounts: Record<string, number> = {};\n for (const issue of report.issues) {\n issueCounts[issue.code] = (issueCounts[issue.code] ?? 0) + 1;\n }\n\n const isolationDeclared = files.some((file) => {\n if (file.path !== \"PRD.md\" && !file.path.startsWith(\"specs/\")) return false;\n ISOLATION_ID_RE.lastIndex = 0;\n return ISOLATION_ID_RE.test(file.content);\n });\n\n return {\n dir: bundleDir,\n ok: report.ok,\n files: files.length,\n bytes: files.reduce((total, file) => total + Buffer.byteLength(file.content), 0),\n sectionsAccounted: report.sectionsAccounted,\n issueCount: report.issues.length,\n issueCounts,\n issues: report.issues,\n coverage: {\n lifecycle: coverageOf(codes, ledgerState(prd, 6), \"MISSING_LIFECYCLE_COVERAGE\"),\n userMental: coverageOf(codes, ledgerState(prd, 1), \"MISSING_USER_MENTAL_MODEL\"),\n engineMental: codes.has(\"MISSING_ENGINE_MENTAL_MODEL\")\n ? \"missing\"\n : ledgerState(prd, 3) === \"RESOLVED\" || ledgerState(prd, 9) === \"RESOLVED\"\n ? \"ok\"\n : \"n/a\",\n flow: coverageOf(codes, ledgerState(prd, 7), \"MISSING_FLOW_COVERAGE\"),\n isolation: isolationDeclared\n ? codes.has(\"MISSING_ISOLATION_COVERAGE\") ||\n codes.has(\"ISOLATION_WITHOUT_SPEC\") ||\n codes.has(\"ISOLATION_WITHOUT_OWNER\")\n ? \"missing\"\n : \"ok\"\n : \"n/a\",\n },\n dag: parseDag(taskFiles),\n };\n}\n\nfunction formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n return `${(bytes / 1024).toFixed(1)} KB`;\n}\n\nfunction formatCoverage(label: string, state: CoverageState): string {\n return ` ${label.padEnd(14)} ${state}`;\n}\n\nfunction formatIssues(check: BundleCheck): string[] {\n if (check.issueCount === 0) return [\"Issues: none\"];\n const lines = [`Issues (${check.issueCount}):`];\n const byCode = new Map<string, LintIssue[]>();\n for (const issue of check.issues) {\n const group = byCode.get(issue.code);\n if (group === undefined) byCode.set(issue.code, [issue]);\n else group.push(issue);\n }\n for (const [code, issues] of byCode) {\n const examples = issues\n .slice(0, 3)\n .map((issue) => issue.where || \"-\")\n .join(\", \");\n const rest = issues.length > 3 ? `, +${issues.length - 3} more` : \"\";\n lines.push(` ${code} (${issues.length}): ${examples}${rest}`);\n }\n return lines;\n}\n\nexport function formatBundleCheck(check: BundleCheck): string {\n const status = check.ok ? \"PASS\" : \"FAIL\";\n const lines = [\n `Bundle: ${check.dir}`,\n `Gate: ${status} | ${check.issueCount} issues | ${check.files} files | ${formatBytes(check.bytes)} | sections ${check.sectionsAccounted}/12`,\n \"\",\n \"Coverage:\",\n formatCoverage(\"lifecycle\", check.coverage.lifecycle),\n formatCoverage(\"user mental\", check.coverage.userMental),\n formatCoverage(\"engine mental\", check.coverage.engineMental),\n formatCoverage(\"flow\", check.coverage.flow),\n formatCoverage(\"isolation\", check.coverage.isolation),\n \"\",\n `DAG: tasks ${check.dag.tasks} | edges ${check.dag.edges} | phases ${JSON.stringify(check.dag.phases)} | layers ${JSON.stringify(check.dag.layers)}`,\n \"\",\n ...formatIssues(check),\n ];\n return lines.join(\"\\n\");\n}\n", "import { chmod, mkdir, readFile, rm, writeFile } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { dirname, join, resolve } from \"node:path\";\nimport type { ProjectLink, StoredCredentials } from \"./types.js\";\n\nconst CONFIG_DIR_ENV = \"JIOOGEN_CONFIG_DIR\";\nconst LEGACY_CONFIG_DIR_ENV = \"JIOOCODE_CONFIG_DIR\";\nconst CREDENTIALS_FILE = \"credentials.json\";\nconst PROJECT_DIR = \".jioogen\";\nconst LEGACY_PROJECT_DIR = \".jioocode\";\nconst PROJECT_FILE = \"project.json\";\n\nfunction envValue(name: string): string | undefined {\n const value = process.env[name]?.trim();\n return value !== undefined && value.length > 0 ? value : undefined;\n}\n\nexport function configDir(): string {\n const override = envValue(CONFIG_DIR_ENV) ?? envValue(LEGACY_CONFIG_DIR_ENV);\n return override !== undefined ? resolve(override) : join(homedir(), \".config\", \"jioogen\");\n}\n\n/** Pre-rename credentials location; read-only fallback, never the write target. */\nexport function legacyConfigDir(): string {\n return join(homedir(), \".config\", \"jioocode\");\n}\n\nexport function credentialsPath(): string {\n return join(configDir(), CREDENTIALS_FILE);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction parseCredentials(value: unknown): StoredCredentials | null {\n if (!isRecord(value)) return null;\n const { apiUrl, cookie, savedAt } = value;\n if (typeof apiUrl !== \"string\" || apiUrl.length === 0) return null;\n if (typeof cookie !== \"string\" || cookie.length === 0) return null;\n return {\n apiUrl,\n cookie,\n savedAt: typeof savedAt === \"string\" ? savedAt : new Date(0).toISOString(),\n };\n}\n\nasync function readCredentialsFile(path: string): Promise<StoredCredentials | null> {\n let raw: string;\n try {\n raw = await readFile(path, \"utf8\");\n } catch (error) {\n if (isMissingFile(error)) return null;\n throw error;\n }\n try {\n return parseCredentials(JSON.parse(raw) as unknown);\n } catch {\n return null;\n }\n}\n\nexport async function readCredentials(): Promise<StoredCredentials | null> {\n const primary = await readCredentialsFile(credentialsPath());\n if (primary !== null) return primary;\n const legacyPath = join(legacyConfigDir(), CREDENTIALS_FILE);\n if (legacyPath === credentialsPath()) return null;\n return readCredentialsFile(legacyPath);\n}\n\nexport async function writeCredentials(credentials: StoredCredentials): Promise<void> {\n const directory = configDir();\n await mkdir(directory, { recursive: true, mode: 0o700 });\n const target = credentialsPath();\n await writeFile(target, `${JSON.stringify(credentials, null, 2)}\\n`, {\n encoding: \"utf8\",\n mode: 0o600,\n });\n await chmod(target, 0o600);\n}\n\nexport async function clearCredentials(): Promise<boolean> {\n const removed = await removeCredentialsFile(credentialsPath());\n const legacyPath = join(legacyConfigDir(), CREDENTIALS_FILE);\n if (legacyPath === credentialsPath()) return removed;\n const removedLegacy = await removeCredentialsFile(legacyPath);\n return removed || removedLegacy;\n}\n\nasync function removeCredentialsFile(path: string): Promise<boolean> {\n try {\n await rm(path);\n return true;\n } catch (error) {\n if (isMissingFile(error)) return false;\n throw error;\n }\n}\n\nfunction parseProjectLink(value: unknown, bundleDir: string): ProjectLink | null {\n if (!isRecord(value)) return null;\n const { projectId, apiUrl } = value;\n if (typeof projectId !== \"string\" || projectId.length === 0) return null;\n if (typeof apiUrl !== \"string\" || apiUrl.length === 0) return null;\n return { projectId, apiUrl, bundleDir };\n}\n\nasync function readProjectLink(bundleDir: string): Promise<ProjectLink | null> {\n for (const directoryName of [PROJECT_DIR, LEGACY_PROJECT_DIR]) {\n const candidate = join(bundleDir, directoryName, PROJECT_FILE);\n let raw: string | null = null;\n try {\n raw = await readFile(candidate, \"utf8\");\n } catch (error) {\n if (!isMissingFile(error)) throw error;\n }\n if (raw === null) continue;\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch {\n throw new Error(`Project link is not valid JSON: ${candidate}`);\n }\n const link = parseProjectLink(parsed, bundleDir);\n if (link === null) throw new Error(`Project link is invalid: ${candidate}`);\n return link;\n }\n return null;\n}\n\nexport async function findProjectLink(startDir: string): Promise<ProjectLink | null> {\n let directory = resolve(startDir);\n for (;;) {\n const link = await readProjectLink(directory);\n if (link !== null) return link;\n const parent = dirname(directory);\n if (parent === directory) return null;\n directory = parent;\n }\n}\n\nexport async function writeProjectLink(\n bundleDir: string,\n link: Pick<ProjectLink, \"projectId\" | \"apiUrl\">,\n): Promise<void> {\n const directory = join(resolve(bundleDir), PROJECT_DIR);\n await mkdir(directory, { recursive: true });\n await writeFile(\n join(directory, PROJECT_FILE),\n `${JSON.stringify({ projectId: link.projectId, apiUrl: link.apiUrl }, null, 2)}\\n`,\n \"utf8\",\n );\n}\n\nfunction isMissingFile(error: unknown): boolean {\n return isRecord(error) && error.code === \"ENOENT\";\n}\n", "export function formatTable(\n headers: readonly string[],\n rows: readonly (readonly string[])[],\n): string {\n const widths = headers.map((header, index) =>\n Math.max(header.length, ...rows.map((row) => (row[index] ?? \"\").length)),\n );\n const render = (cells: readonly string[]): string =>\n cells\n .map((cell, index) => cell.padEnd(widths[index] ?? 0))\n .join(\" \")\n .trimEnd();\n const divider = widths.map((width) => \"-\".repeat(width)).join(\" \");\n return [render(headers), divider, ...rows.map(render)].join(\"\\n\");\n}\n", "import { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport type {\n ExecutionCurrent,\n ExecutionState,\n ExecutionStatus,\n ExecutionTaskState,\n} from \"@jioo2/contracts\";\nimport {\n EXECUTION_SIDECAR_PATH,\n EXECUTION_SIDECAR_VERSION,\n ExecutionStateSchema,\n summarizeExecutionCounts,\n} from \"@jioo2/contracts\";\nimport type { TaskDefinition } from \"./types.js\";\n\nexport interface StatusOptions {\n note?: string | undefined;\n awaitingCheckpoint?: boolean | undefined;\n now?: Date | undefined;\n}\n\nexport function sidecarPath(bundleDir: string): string {\n return join(bundleDir, EXECUTION_SIDECAR_PATH);\n}\n\nexport async function readState(bundleDir: string): Promise<ExecutionState | null> {\n let raw: string;\n try {\n raw = await readFile(sidecarPath(bundleDir), \"utf8\");\n } catch (error) {\n if (isMissingFile(error)) return null;\n throw error;\n }\n\n let payload: unknown;\n try {\n payload = JSON.parse(raw) as unknown;\n } catch {\n throw new Error(`Sidecar bukan JSON yang valid: ${sidecarPath(bundleDir)}`);\n }\n\n const parsed = ExecutionStateSchema.safeParse(payload);\n if (!parsed.success) {\n throw new Error(\n `Sidecar tidak cocok dengan schema v${EXECUTION_SIDECAR_VERSION}: ${sidecarPath(bundleDir)}`,\n );\n }\n return parsed.data;\n}\n\nexport function createState(\n projectId: string,\n definitions: readonly TaskDefinition[],\n now = new Date(),\n): ExecutionState {\n const tasks = definitions.map(toTaskState);\n return {\n schemaVersion: EXECUTION_SIDECAR_VERSION,\n projectId,\n updatedAt: now.toISOString(),\n executor: { engine: \"jioogen\" },\n counts: summarizeExecutionCounts(tasks),\n tasks,\n };\n}\n\nexport function mergeTasks(\n state: ExecutionState,\n definitions: readonly TaskDefinition[],\n): ExecutionState {\n const byId = new Map(definitions.map((task) => [task.id.toUpperCase(), task]));\n const known = new Set(state.tasks.map((task) => task.ref.toUpperCase()));\n\n let changed = false;\n const existing = state.tasks.map((task) => {\n const definition = byId.get(task.ref.toUpperCase());\n if (definition === undefined) return task;\n if (sameMetadata(task, definition)) return task;\n changed = true;\n const updated: ExecutionTaskState = {\n ...task,\n phase: definition.phase,\n checkpoint: definition.checkpoint,\n };\n if (definition.layer !== undefined) updated.layer = definition.layer;\n else delete updated.layer;\n return updated;\n });\n\n const additions = definitions\n .filter((task) => !known.has(task.id.toUpperCase()))\n .map(toTaskState);\n if (!changed && additions.length === 0) return state;\n return rebuild(state, [...existing, ...additions], state.current);\n}\n\nfunction sameMetadata(task: ExecutionTaskState, definition: TaskDefinition): boolean {\n return (\n task.layer === definition.layer &&\n task.phase === definition.phase &&\n task.checkpoint === definition.checkpoint\n );\n}\n\nexport function withStatus(\n state: ExecutionState,\n ref: string,\n status: ExecutionStatus,\n options: StatusOptions = {},\n): ExecutionState {\n const now = options.now ?? new Date();\n const index = state.tasks.findIndex((task) => task.ref.toUpperCase() === ref.toUpperCase());\n const previous = index === -1 ? undefined : state.tasks[index];\n if (previous === undefined) {\n throw new Error(`Task ${ref} tidak ada di sidecar. Jalankan \\`jioogen task next\\` lebih dulu.`);\n }\n\n const attempt = status === \"in_progress\" ? (previous.attempt ?? 0) + 1 : previous.attempt;\n const updated: ExecutionTaskState = { ...previous, status, updatedAt: now.toISOString() };\n if (attempt !== undefined) updated.attempt = attempt;\n if (options.note !== undefined) {\n if (options.note.length > 0) updated.note = options.note;\n else delete updated.note;\n }\n\n const tasks = state.tasks.map((task, taskIndex) => (taskIndex === index ? updated : task));\n const current =\n status === \"in_progress\" || status === \"verifying\"\n ? {\n ref: updated.ref,\n ...(updated.layer !== undefined ? { layer: updated.layer } : {}),\n ...(updated.phase !== undefined ? { phase: updated.phase } : {}),\n awaitingCheckpoint: options.awaitingCheckpoint === true,\n }\n : undefined;\n return rebuild(state, tasks, current, now);\n}\n\nexport function setCurrent(\n state: ExecutionState,\n current: ExecutionCurrent | null,\n): ExecutionState {\n return rebuild(state, state.tasks, current ?? undefined);\n}\n\nexport async function writeState(\n bundleDir: string,\n state: ExecutionState,\n): Promise<ExecutionState> {\n const normalized = rebuild(state, state.tasks, state.current);\n const target = sidecarPath(bundleDir);\n await mkdir(dirname(target), { recursive: true });\n await writeFile(target, `${JSON.stringify(normalized, null, 2)}\\n`, \"utf8\");\n return normalized;\n}\n\nfunction rebuild(\n state: ExecutionState,\n tasks: ExecutionTaskState[],\n current: ExecutionCurrent | undefined,\n now = new Date(),\n): ExecutionState {\n const next: ExecutionState = {\n schemaVersion: state.schemaVersion,\n updatedAt: now.toISOString(),\n counts: summarizeExecutionCounts(tasks),\n tasks,\n };\n if (state.projectId !== undefined) next.projectId = state.projectId;\n if (state.executor !== undefined) next.executor = state.executor;\n if (current !== undefined) next.current = current;\n return next;\n}\n\nfunction toTaskState(task: TaskDefinition): ExecutionTaskState {\n return {\n ref: task.id,\n status: \"todo\",\n ...(task.layer !== undefined ? { layer: task.layer } : {}),\n phase: task.phase,\n checkpoint: task.checkpoint,\n };\n}\n\nfunction isMissingFile(error: unknown): boolean {\n return typeof error === \"object\" && error !== null && \"code\" in error && error.code === \"ENOENT\";\n}\n", "import { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { dirname, join, resolve } from \"node:path\";\n\n/**\n * Agent-side execution contract installed by `jioogen pull` (and\n * `jioogen skills install`).\n *\n * The CLI only selects tasks; the local harness does the work. Without an\n * instruction file + skill in the bundle, the harness has no binding reminder of\n * the active task and tends to hallucinate scope or jump between tasks. These\n * files are written INTO the user's bundle (never uploaded: `sync` only sends the\n * sidecar and opt-in files), so every supported harness auto-loads them at the\n * start of a prompt.\n */\n\nexport const EXECUTION_SKILL_NAME = \"jioogen-execution\";\n\n/** Harness skill roots present in the JIOOGEN repo convention. */\nexport const AGENT_SKILL_DIRS = [\n \".claude/skills\",\n \".agent/skills\",\n \".codex/skills\",\n \".cursor/skills\",\n] as const;\n\nconst MARKER_PREFIX = \"<!-- jioogen-execution-skill:\";\nconst MARKER = `${MARKER_PREFIX} v1 -->`;\n\nexport const JIOOGEN_AGENTS_MD = `${MARKER}\n# AGENTS.md \u2014 Eksekusi Bundle JiooGen\n\n> File ini dipasang otomatis oleh \\`jioogen\\`. Kontrak eksekusi ini **mengikat**:\n> kerjakan **satu task per giliran**, **prioritaskan task aktif**, jangan mengarang,\n> dan jangan pindah-pindah kerja.\n\n## 0. Identitas\n- Kamu adalah **Local Agent executor** untuk bundle JiooGen di folder ini.\n- Sumber urutan task adalah \\`npx jioogen task next\\`. Jangan memilih task manual\n dari nomor atau tebakan. (Alias lama \\`jioocode\\` tetap berfungsi.)\n- Kamu mengeksekusi task; \\`jioogen\\` hanya memilih task dan menyinkronkan status.\n\n## 1. Prioritas mutlak (keras)\n- **Task aktif menang** atas ide, refactor, perbaikan, atau fitur lain.\n- **Satu task per giliran.** Dilarang mengerjakan lebih dari satu task sekaligus.\n- Dilarang pindah task sebelum task aktif \\`done\\` atau \\`failed\\`.\n- Jangan mengarang fitur/endpoint/kolom yang tidak ada di \\`PRD.md\\`/\\`specs/\\`.\n- Jangan mengubah \\`PRD.md\\` atau \\`specs/\\`; itu kontrak, bukan hasil eksekusi.\n\n## 2. Alur per giliran\n1. \\`npx jioogen task next\\` \u2014 baca blok **TASK AKTIF** + isi file task.\n2. \\`npx jioogen task start <ref>\\`.\n3. Implementasikan **hanya** task itu sampai semua Acceptance Criteria terpenuhi.\n4. Jalankan \\`verificationCommand\\` task itu sampai **exit 0** (jangan dipalsukan).\n5. \\`npx jioogen task complete <ref>\\`, lalu buat satu commit git kecil.\n6. \\`npx jioogen sync\\`, lalu kembali ke langkah 1.\n\n## 3. Batas scope\n- Edit **hanya** file/direktori/glob di \\`targetFiles\\` task aktif. Jangan melebar.\n- Jangan menambah halaman/route/fitur di luar realisasi \\`PRD.md\\` \u00A75/\u00A76.\n- Bila kontrak kurang jelas: berhenti dan tanya **satu** keputusan penting.\n\n## 3b. Kebebasan implementasi (dalam batas kontrak)\n- Detail implementasi milikmu: pola komponen/state, struktur file di dalam\n \\`targetFiles\\`, struktur test, dan library yang sudah ada. Ikuti konvensi proyek.\n- \\`targetFiles\\` boleh file exact, direktori, atau glob. File baru hanya di area itu.\n- Jangan mengubah \\`PRD.md\\`/\\`specs/\\`/kontrak. Butuh perubahan kontrak/data model?\n STOP dan laporkan \u2014 jangan mengarang atau menyimpang diam-diam.\n\n## 4. Verifikasi jujur\n- Pakai test runner yang dideklarasikan di \\`specs/\\` atau dibuat task scaffold.\n- Dilarang \\`--passWithNoTests\\` atau flag yang membuat command exit 0 tanpa test nyata.\n- Kalau test belum ada, task belum selesai.\n\n## 5. Checkpoint\nBerhenti dan minta konfirmasi user bila task berikutnya berpindah layer, nomor\n\\`phase\\` naik, atau task bertanda \\`checkpoint: true\\`. Jangan lanjut sebelum user\nmengetik \"lanjut\".\n\n## 6. Skill eksekusi\nBaca skill \\`${EXECUTION_SKILL_NAME}\\` di awal prompt\n(\\`.claude/skills\\`, \\`.agent/skills\\`, \\`.codex/skills\\`, atau \\`.cursor/skills\\`).\nSkill itu memuat kontrak lengkap; file ini adalah ringkasan yang mengikat.\n`;\n\nexport const JIOOGEN_EXECUTION_SKILL = `---\nname: ${EXECUTION_SKILL_NAME}\ndescription: Execute a JiooGen bundle one task at a time with jioogen. Use at the start of every turn to load the active task, keep scope locked to its targetFiles, verify honestly, and stop at checkpoints. Prevents hallucinated scope and task-hopping.\n---\n\n# JiooGen Execution \u2014 Satu Task per Giliran\n\nKamu adalah **Local Agent executor** untuk bundle JiooGen di folder ini. Kontrak ini\nmengikat setiap giliran. Tujuannya satu: **task yang sedang dikerjakan selalu menang**\natas ide, refactor, perbaikan, atau fitur lain.\n\n## 0. Sumber tunggal urutan task\n\n- Jalankan \\`npx jioogen task next\\` di awal giliran. CLI menyuntikkan blok\n **TASK AKTIF** beserta isi file task (ref, layer, phase, targetFiles,\n Acceptance Criteria, \\`verificationCommand\\`).\n- Jangan memilih task manual dari nomor, judul, atau tebakan.\n- \\`jioogen\\` TIDAK mengedit kode atau menjalankan test; eksekusi tetap milikmu.\n\n## 1. Prioritas mutlak (keras)\n\n- **Kerjakan HANYA task aktif.** Task aktif menang atas semua pekerjaan lain.\n- **Satu task per giliran.** Dilarang mengerjakan lebih dari satu task sekaligus.\n- Dilarang pindah task sebelum task aktif \\`done\\` atau \\`failed\\`.\n- Dilarang mengerjakan task yang belum dipilih \\`task next\\`, walau terlihat mudah.\n- Jangan mengarang fitur/endpoint/kolom/state yang tidak ada di \\`PRD.md\\`/\\`specs/\\`.\n- Jangan mengubah \\`PRD.md\\` atau \\`specs/\\`.\n\n## 2. Siklus per giliran\n\n1. \\`npx jioogen task next\\` \u2014 baca TASK AKTIF + isi file task.\n2. \\`npx jioogen task start <ref>\\`.\n3. Implementasikan **hanya** task itu sampai semua Acceptance Criteria terpenuhi.\n4. Jalankan \\`verificationCommand\\` task itu sampai **exit 0**.\n5. \\`npx jioogen task complete <ref>\\`, lalu buat **satu commit git kecil** untuk\n task itu (lewati bila folder bukan repo git).\n6. \\`npx jioogen sync\\`, lalu kembali ke langkah 1.\n\n## 3. Batas scope\n\n- Edit **hanya** file di \\`targetFiles\\` task aktif. Jangan melebar.\n- Halaman/route baru hanya boleh sebagai realisasi fitur \\`PRD.md\\` \u00A75/\u00A76.\n- Reuse komponen/token/utilitas yang sudah ada sebelum membuat yang baru.\n- Bila kontrak kurang jelas: berhenti, tanya **satu** keputusan paling penting\n (2\u20133 opsi). Jangan mengisi celah dengan asumsi diam-diam.\n\n## 3b. Kebebasan implementasi (dalam batas kontrak)\n\n- Kamu menentukan detail implementasi: pola komponen/state, struktur file di dalam\n \\`targetFiles\\`, struktur test, dan library yang sudah ada di proyek.\n- Ikuti konvensi proyek lebih dulu; jangan refactor di luar scope task.\n- \\`targetFiles\\` boleh file exact, direktori, atau glob (mis.\n \\`src/features/booking/**\\`). File baru hanya di dalam area itu.\n- Jangan mengubah \\`PRD.md\\`, \\`specs/\\`, atau kontrak (\\`CONTRACT-XXX\\`). Bila\n implementasi menuntut perubahan kontrak/data model/scope: STOP, laporkan, minta\n keputusan \u2014 bukan mengarang atau menyimpang diam-diam.\n\n## 4. Verifikasi jujur (jangan dipalsukan)\n\n- Pakai test runner yang dideklarasikan di \\`specs/\\` atau dibuat task scaffold.\n- **Dilarang** \\`--passWithNoTests\\` atau flag sejenis yang membuat command exit 0\n tanpa menjalankan test nyata.\n- Kalau test belum ada, task belum selesai.\n- Task \\`layer: verification\\` menjalankan semua \\`verificationCommand\\`, smoke test\n route/navigasi, cek UI states + responsive, dan verifikasi AC.\n\n## 5. Checkpoint\n\nBerhenti dan minta konfirmasi user bila:\n- task berikutnya berpindah \\`layer\\` (mis. \\`frontend_mock\\` \u2192 \\`backend_api\\`/\\`database\\`),\n- nomor \\`phase\\` naik,\n- task bertanda \\`checkpoint: true\\`.\n\nJangan lanjut sebelum user mengetik \"lanjut\". Set \\`current.awaitingCheckpoint = true\\`\ndi sidecar saat berhenti.\n\n## 6. Larangan ringkas\n\n- Jangan menulis di luar \\`targetFiles\\`.\n- Jangan membuat mockup terpisah yang tidak menjadi frontend.\n- Jangan menunda scaffold FE ke Phase 2.\n- Jangan mengganti ownership/consistency boundary tanpa memperbarui spec.\n- Jangan menandai \\`done\\` sebelum verification exit 0.\n- Jangan diam-diam lanjut setelah gagal; tandai \\`fail\\` + alasan singkat.\n\n## 7. Bila ragu\n\nBerhenti dan tanya. Sumber kebenaran: \\`AGENTS.md\\`, \\`PRD.md\\`, \\`specs/\\`, dan file\ntask aktif. Jangan menebak scope baru.\n`;\n\nexport interface SkillInstallResult {\n written: string[];\n /** Files owned by the user that were intentionally left untouched. */\n preserved: string[];\n}\n\nasync function readFileSafe(path: string): Promise<string | undefined> {\n try {\n return await readFile(path, \"utf8\");\n } catch {\n return undefined;\n }\n}\n\n/**\n * Install the execution contract into a bundle. Idempotent:\n * - \\`AGENTS.md\\` is only written when absent or still carries our marker, so a\n * user-edited file is never clobbered.\n * - skill files live in our own \\`${EXECUTION_SKILL_NAME}\\` directory and are refreshed.\n */\nexport async function installAgentSkills(bundleDir: string): Promise<SkillInstallResult> {\n const root = resolve(bundleDir);\n const written: string[] = [];\n const preserved: string[] = [];\n\n const agentsPath = join(root, \"AGENTS.md\");\n const existing = await readFileSafe(agentsPath);\n if (existing === undefined || existing.includes(MARKER_PREFIX)) {\n await writeFile(agentsPath, JIOOGEN_AGENTS_MD, \"utf8\");\n written.push(\"AGENTS.md\");\n } else {\n preserved.push(\"AGENTS.md\");\n }\n\n for (const dir of AGENT_SKILL_DIRS) {\n const relative = `${dir}/${EXECUTION_SKILL_NAME}/SKILL.md`;\n const target = join(root, relative);\n await mkdir(dirname(target), { recursive: true });\n await writeFile(target, JIOOGEN_EXECUTION_SKILL, \"utf8\");\n written.push(relative);\n }\n\n return { written, preserved };\n}\n", "import type { Dirent } from \"node:fs\";\nimport { readdir, readFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport type { ExecutionStatus, ExecutionTaskState } from \"@jioo2/contracts\";\nimport { parseTaskContext, TASK_LAYERS } from \"@jioo2/contracts\";\nimport type { NextTask, TaskDefinition, TaskLayer } from \"./types.js\";\n\nconst TASK_ID_RE = /\\b(?:TASK|T)-\\d{3,}\\b/i;\nconst HEADING_RE = /^#{1,4}\\s+(.+)$/m;\n\nconst LAYER_RANK: Record<string, number> = {\n frontend_mock: 0,\n database: 1,\n backend_api: 2,\n integration: 3,\n verification: 4,\n};\n\nconst IN_PROGRESS: readonly ExecutionStatus[] = [\"in_progress\", \"verifying\"];\n\nexport async function loadTasks(bundleDir: string): Promise<TaskDefinition[]> {\n const tasksDir = join(bundleDir, \"tasks\");\n let entries: Dirent[];\n try {\n entries = await readdir(tasksDir, { withFileTypes: true });\n } catch (error) {\n if (isMissingFile(error)) throw new Error(`Direktori tasks/ tidak ditemukan di ${bundleDir}`);\n throw error;\n }\n\n const names = entries\n .filter(\n (entry) =>\n entry.isFile() &&\n entry.name.toLowerCase().endsWith(\".md\") &&\n entry.name.toLowerCase() !== \"readme.md\" &&\n entry.name.toUpperCase() !== \"TASKS.MD\",\n )\n .map((entry) => entry.name)\n .sort();\n\n const tasks: TaskDefinition[] = [];\n if (names.length > 0) {\n for (const name of names) {\n const content = await readFile(join(tasksDir, name), \"utf8\");\n tasks.push(parseSingleTask(name, content));\n }\n } else {\n const singlePath = join(tasksDir, \"TASKS.md\");\n let content: string;\n try {\n content = await readFile(singlePath, \"utf8\");\n } catch (error) {\n if (isMissingFile(error)) throw new Error(`Tidak ada berkas task di ${tasksDir}`);\n throw error;\n }\n tasks.push(...parseSingleFile(content));\n }\n\n if (tasks.length === 0) throw new Error(`Tidak ada task yang bisa dibaca di ${tasksDir}`);\n assertUniqueIds(tasks);\n return tasks;\n}\n\nfunction parseSingleTask(file: string, content: string): TaskDefinition {\n const heading = firstHeading(content);\n const explicit = TASK_ID_RE.exec(file)?.[0] ?? explicitIdFromContent(content);\n const id = explicit ?? file.replace(/\\.md$/i, \"\");\n if (id.length === 0) {\n throw new Error(`Berkas task tanpa ID: ${file}`);\n }\n return buildTask(id, heading, file, content);\n}\n\nfunction explicitIdFromContent(content: string): string | undefined {\n const heading = firstHeading(content);\n const fromHeading = heading !== null ? TASK_ID_RE.exec(heading)?.[0] : undefined;\n if (fromHeading !== undefined) return fromHeading;\n return /(?:\\*\\*)?ID(?:\\*\\*)?\\s*[:=]\\s*`?((?:TASK|T)-\\d{3,})/i.exec(content)?.[1];\n}\n\nfunction parseSingleFile(content: string): TaskDefinition[] {\n const blocks = content.split(/\\n(?=#{1,4}\\s+(?:TASK|T)-\\d{3,}\\b)/i);\n const tasks: TaskDefinition[] = [];\n for (const block of blocks) {\n const heading = firstHeading(block);\n const id = heading !== null ? TASK_ID_RE.exec(heading)?.[0] : undefined;\n if (id === undefined) continue;\n tasks.push(buildTask(id, heading, \"TASKS.md\", block));\n }\n return tasks;\n}\n\nfunction buildTask(\n id: string,\n heading: string | null,\n file: string,\n content: string,\n): TaskDefinition {\n const context = parseTaskContext(content, id);\n const layer = resolveLayer(context.layer);\n if (context.layer !== undefined && layer === undefined) {\n throw new Error(`Task ${context.taskId} punya layer tidak dikenal: ${context.layer.trim()}`);\n }\n return {\n // Prefer the declared `id:` so `T-001-x.md` + `dependsOn: [TASK-001]` agree.\n id: context.taskId,\n title: titleFromGoal(content) ?? titleFromHeading(heading) ?? context.taskId,\n file,\n content: content.trim(),\n layer,\n phase: context.phase ?? 1,\n checkpoint: context.checkpoint === true,\n dependsOn: context.dependsOn,\n };\n}\n\n/**\n * Render the active task as a prompt block. `task next` prints this at the TOP\n * of its output so the harness sees the exact scope (ref, AC, targetFiles,\n * verificationCommand) before anything else \u2014 the missing injection that let\n * agents hallucinate scope or hop between tasks.\n */\nexport function renderActiveTask(task: TaskDefinition): string {\n const lines = [\n \"## TASK AKTIF \u2014 PRIORITASKAN INI (satu task per giliran)\",\n `ref: ${task.id}`,\n `title: ${task.title}`,\n `layer: ${task.layer ?? \"-\"} | phase: ${task.phase} | checkpoint: ${task.checkpoint}`,\n `file: tasks/${task.file}`,\n ];\n if (task.dependsOn.length > 0) lines.push(`dependsOn: ${task.dependsOn.join(\", \")}`);\n lines.push(\n \"\",\n \"Aturan mengikat:\",\n \"- Kerjakan HANYA task ini sampai semua Acceptance Criteria terpenuhi dan verificationCommand exit 0.\",\n \"- Jangan pindah task, jangan mengerjakan task lain, jangan melebar ke file di luar targetFiles (file/direktori/glob).\",\n \"- Jangan mengarang fitur/endpoint/kolom di luar PRD.md/specs/.\",\n \"- Detail implementasi (pola, struktur file dalam scope, library yang sudah ada) milikmu; ikuti konvensi proyek.\",\n \"- Jangan mengubah PRD.md/specs/kontrak. Butuh perubahan kontrak? STOP dan laporkan.\",\n \"- Selesai: `npx jioogen task complete <ref>`, lalu `npx jioogen sync`.\",\n \"\",\n \"--- ISI TASK (otoritas scope) ---\",\n task.content,\n \"--- AKHIR ISI TASK ---\",\n );\n return lines.join(\"\\n\");\n}\n\nfunction resolveLayer(value: string | undefined): TaskLayer | undefined {\n if (value === undefined) return undefined;\n const token = value\n .trim()\n .replace(/[`*]/g, \"\")\n .split(/[\\s,(]/)[0];\n if (token === undefined) return undefined;\n return (TASK_LAYERS as readonly string[]).includes(token) ? (token as TaskLayer) : undefined;\n}\n\nfunction titleFromGoal(content: string): string | null {\n const match = /goal\\s*\\*{0,2}\\s*[:=]\\s*\\*{0,2}\\s*([^\\n]+)/i.exec(content);\n if (match?.[1] === undefined) return null;\n return stripMarkup(match[1]);\n}\n\nfunction firstHeading(content: string): string | null {\n return HEADING_RE.exec(content)?.[1]?.trim() ?? null;\n}\n\nfunction titleFromHeading(heading: string | null): string | null {\n if (heading === null) return null;\n const withoutId = heading.replace(/^(?:TASK|T)-\\d{3,}\\s*[\u2014\u2013:-]?\\s*/i, \"\").trim();\n return withoutId.length > 0 ? withoutId : heading;\n}\n\nfunction stripMarkup(text: string): string {\n return text\n .replace(/[`*_]/g, \"\")\n .replace(/^[\"'\\s]+|[\"'\\s]+$/g, \"\")\n .trim();\n}\n\nfunction assertUniqueIds(tasks: readonly TaskDefinition[]): void {\n const seen = new Set<string>();\n for (const task of tasks) {\n const key = task.id.toUpperCase();\n if (seen.has(key)) throw new Error(`ID task duplikat: ${task.id}`);\n seen.add(key);\n }\n}\n\nexport function orderTasks(tasks: readonly TaskDefinition[]): TaskDefinition[] {\n return [...tasks].sort(\n (left, right) =>\n left.phase - right.phase ||\n layerRank(left.layer) - layerRank(right.layer) ||\n numericId(left.id) - numericId(right.id) ||\n left.id.localeCompare(right.id),\n );\n}\n\nfunction layerRank(layer: TaskLayer | undefined): number {\n return layer === undefined ? 0 : (LAYER_RANK[layer] ?? 0);\n}\n\nfunction numericId(id: string): number {\n const leading = /^(\\d+)/.exec(id);\n if (leading?.[1] !== undefined) return Number.parseInt(leading[1], 10);\n const trailing = /(?:^|[-\\s])(\\d{3,})$/.exec(id);\n return trailing?.[1] !== undefined ? Number.parseInt(trailing[1], 10) : Number.MAX_SAFE_INTEGER;\n}\n\nexport function selectNext(\n tasks: readonly TaskDefinition[],\n states: readonly ExecutionTaskState[],\n): NextTask | null {\n const byRef = new Map(states.map((state) => [state.ref.toUpperCase(), state]));\n const ordered = orderTasks(tasks);\n\n for (const task of ordered) {\n const state = byRef.get(task.id.toUpperCase());\n if (state !== undefined && IN_PROGRESS.includes(state.status)) {\n return { task, state, reason: \"in_progress\" };\n }\n }\n\n for (const task of ordered) {\n const state = byRef.get(task.id.toUpperCase());\n if (state?.status === \"done\") continue;\n if (hasUnfinishedDependency(task, byRef)) continue;\n const effective = state ?? { ref: task.id, status: \"todo\" as const };\n return { task, state: effective, reason: effective.status === \"todo\" ? \"todo\" : \"retry\" };\n }\n\n return null;\n}\n\nexport function blockedTasks(\n tasks: readonly TaskDefinition[],\n states: readonly ExecutionTaskState[],\n): { task: TaskDefinition; missing: string[] }[] {\n const byRef = new Map(states.map((state) => [state.ref.toUpperCase(), state]));\n return orderTasks(tasks)\n .filter((task) => byRef.get(task.id.toUpperCase())?.status !== \"done\")\n .map((task) => ({\n task,\n missing: task.dependsOn.filter(\n (dependency) => byRef.get(dependency.toUpperCase())?.status !== \"done\",\n ),\n }))\n .filter((entry) => entry.missing.length > 0);\n}\n\nfunction hasUnfinishedDependency(\n task: TaskDefinition,\n byRef: ReadonlyMap<string, ExecutionTaskState>,\n): boolean {\n return task.dependsOn.some(\n (dependency) => byRef.get(dependency.toUpperCase())?.status !== \"done\",\n );\n}\n\nexport function isBoundary(previous: ExecutionTaskState, next: TaskDefinition): boolean {\n if (next.checkpoint) return true;\n if (previous.layer !== undefined && next.layer !== undefined && previous.layer !== next.layer) {\n return true;\n }\n return previous.phase !== undefined && next.phase !== previous.phase;\n}\n\nfunction isMissingFile(error: unknown): boolean {\n return typeof error === \"object\" && error !== null && \"code\" in error && error.code === \"ENOENT\";\n}\n", "import { mkdir, writeFile } from \"node:fs/promises\";\nimport { dirname, resolve, sep } from \"node:path\";\nimport AdmZip from \"adm-zip\";\n\nexport async function extractBundle(bytes: Uint8Array, targetDir: string): Promise<string[]> {\n const root = resolve(targetDir);\n const zip = new AdmZip(Buffer.from(bytes));\n const written: string[] = [];\n for (const entry of zip.getEntries()) {\n if (entry.isDirectory) continue;\n const relative = entry.entryName.replace(/\\\\/g, \"/\");\n const segments = relative.split(\"/\");\n if (segments.some((segment) => segment.length === 0 || segment === \".\" || segment === \"..\")) {\n throw new Error(`Path bundle tidak aman: ${entry.entryName}`);\n }\n const destination = resolve(root, relative);\n if (!destination.startsWith(`${root}${sep}`)) {\n throw new Error(`Path bundle keluar dari direktori target: ${entry.entryName}`);\n }\n await mkdir(dirname(destination), { recursive: true });\n await writeFile(destination, entry.getData());\n written.push(relative);\n }\n return written;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["err", "fd", "path", "cb", "dir", "Headers", "Headers", "join", "sep", "options", "err", "resolve", "content", "fileAttr", "readdir", "readFile", "join", "resolve", "util", "objectUtil", "errorUtil", "errorMap", "ctx", "result", "issues", "elements", "processed", "result", "r", "ZodFirstPartyTypeKind", "readFile", "join", "mkdir", "readFile", "writeFile", "dirname", "join", "join", "readFile", "isMissingFile", "mkdir", "dirname", "writeFile", "mkdir", "readFile", "writeFile", "dirname", "join", "resolve", "relative", "readdir", "readFile", "join", "TASK_ID_RE", "join", "readdir", "isMissingFile", "readFile", "text", "mkdir", "writeFile", "dirname", "resolve", "AdmZip", "relative", "resolve", "join", "relative", "readFile", "readdir", "isMissingFile"]
|
|
7
|
+
}
|