{"version":3,"file":"dir.mjs","names":["createReadStream","join","pathJoin","Archive","Entry","PathType","fsLstat","fsLstatExists","fsReadlinkRaw","fsWalk","pathNormalize","pathResourceFork","statToPathType","walkOpts","ignoreUnreadableDirectories","EntryDir","sizeComp","uname","gname","constructor","info","archive","size","mode","uid","gid","atime","mtime","rsrcPathRaw","pathRaw","rsrcPath","path","ArchiveDir","FILE_EXTENSIONS","subpaths","read","itter","_read","each","pathFull","stat","type","readData","FILE","readSymlink","SYMLINK","entry","ret","trigger","rsrcPathFull","rsrcStat","sizeRsrc","readRsrc","entryRsrc","RESOURCE_FORK","subpath","isDirectory","pathRel"],"sources":["../../src/archive/dir.ts"],"sourcesContent":["/* eslint-disable max-classes-per-file */\n\nimport {Stats, createReadStream} from 'node:fs';\nimport {join as pathJoin} from 'node:path';\n\nimport {Archive, Entry, IEntryInfo} from '../archive.ts';\nimport {PathType} from '../types.ts';\nimport {\n\tfsLstat,\n\tfsLstatExists,\n\tfsReadlinkRaw,\n\tfsWalk,\n\tpathNormalize,\n\tpathResourceFork,\n\tstatToPathType\n} from '../util.ts';\n\nconst walkOpts = {\n\tignoreUnreadableDirectories: true\n};\n\nexport interface IEntryInfoDir extends IEntryInfo {\n\t/**\n\t * @inheritdoc\n\t */\n\tarchive: ArchiveDir;\n\n\t/**\n\t * @inheritdoc\n\t */\n\tsize: number;\n\n\t/**\n\t * @inheritdoc\n\t */\n\tsizeComp?: null;\n\n\t/**\n\t * @inheritdoc\n\t */\n\tmode: number;\n\n\t/**\n\t * @inheritdoc\n\t */\n\tuid: number;\n\n\t/**\n\t * @inheritdoc\n\t */\n\tgid: number;\n\n\t/**\n\t * @inheritdoc\n\t */\n\tuname?: null;\n\n\t/**\n\t * @inheritdoc\n\t */\n\tgname?: null;\n\n\t/**\n\t * @inheritdoc\n\t */\n\tatime: Date;\n\n\t/**\n\t * @inheritdoc\n\t */\n\tmtime: Date;\n}\n\n/**\n * EntryDir object.\n */\nexport class EntryDir extends Entry {\n\t/**\n\t * @inheritdoc\n\t */\n\tpublic readonly archive: ArchiveDir;\n\n\t/**\n\t * @inheritdoc\n\t */\n\tpublic readonly size: number;\n\n\t/**\n\t * @inheritdoc\n\t */\n\tpublic readonly sizeComp: null = null;\n\n\t/**\n\t * @inheritdoc\n\t */\n\tpublic readonly mode: number;\n\n\t/**\n\t * @inheritdoc\n\t */\n\tpublic readonly uid: number;\n\n\t/**\n\t * @inheritdoc\n\t */\n\tpublic readonly gid: number;\n\n\t/**\n\t * @inheritdoc\n\t */\n\tpublic readonly uname: null = null;\n\n\t/**\n\t * @inheritdoc\n\t */\n\tpublic readonly gname: null = null;\n\n\t/**\n\t * @inheritdoc\n\t */\n\tpublic readonly atime: Date;\n\n\t/**\n\t * @inheritdoc\n\t */\n\tpublic readonly mtime: Date;\n\n\t/**\n\t * EntryDir constructor.\n\t *\n\t * @param info Info object.\n\t */\n\tconstructor(info: Readonly<IEntryInfoDir>) {\n\t\tsuper(info);\n\n\t\tthis.archive = info.archive;\n\t\tthis.size = info.size;\n\t\tthis.mode = info.mode;\n\t\tthis.uid = info.uid;\n\t\tthis.gid = info.gid;\n\t\tthis.atime = info.atime;\n\t\tthis.mtime = info.mtime;\n\t}\n\n\t/**\n\t * Get the path of resource psuedo-file, raw.\n\t *\n\t * @returns Path string.\n\t */\n\tpublic get rsrcPathRaw() {\n\t\treturn pathResourceFork(this.pathRaw);\n\t}\n\n\t/**\n\t * Get the path of resource psuedo-file, normalized.\n\t *\n\t * @returns Path string.\n\t */\n\tpublic get rsrcPath() {\n\t\treturn pathNormalize(pathResourceFork(this.path));\n\t}\n}\n\n/**\n * ArchiveDir object.\n */\nexport class ArchiveDir extends Archive {\n\t/**\n\t * @inheritdoc\n\t */\n\tpublic static readonly FILE_EXTENSIONS: readonly string[] | null = null;\n\n\t/**\n\t * @inheritdoc\n\t */\n\tpublic readonly Entry = EntryDir;\n\n\t/**\n\t * Limit the directory reading to subpaths.\n\t */\n\tpublic subpaths: Readonly<string>[] | null = null;\n\n\t/**\n\t * ArchiveDir constructor.\n\t *\n\t * @param path File path.\n\t */\n\tconstructor(path: string) {\n\t\tsuper(path);\n\t}\n\n\t/**\n\t * @inheritdoc\n\t */\n\tpublic async read(itter: (entry: EntryDir) => Promise<unknown>) {\n\t\tawait super.read(itter as Parameters<Archive['read']>[0]);\n\t}\n\n\t/**\n\t * @inheritdoc\n\t */\n\tprotected async _read(itter: (entry: EntryDir) => Promise<unknown>) {\n\t\t/**\n\t\t * Each itterator.\n\t\t *\n\t\t * @param pathFull Full path.\n\t\t * @param pathRaw Raw path.\n\t\t * @param stat Stat object.\n\t\t * @returns Recursion hint.\n\t\t */\n\t\tconst each = async (pathFull: string, pathRaw: string, stat: Stats) => {\n\t\t\tconst type = statToPathType(stat);\n\t\t\tif (type === null) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tconst {size, mode, uid, gid, atime, mtime} = stat;\n\n\t\t\tconst readData =\n\t\t\t\ttype === PathType.FILE\n\t\t\t\t\t? async () => createReadStream(pathFull)\n\t\t\t\t\t: null;\n\n\t\t\tconst readSymlink =\n\t\t\t\ttype === PathType.SYMLINK\n\t\t\t\t\t? async () => fsReadlinkRaw(pathFull)\n\t\t\t\t\t: null;\n\n\t\t\tconst entry = new this.Entry({\n\t\t\t\tarchive: this,\n\t\t\t\ttype,\n\t\t\t\tpathRaw,\n\t\t\t\tsize,\n\t\t\t\tmode,\n\t\t\t\tuid,\n\t\t\t\tgid,\n\t\t\t\tatime,\n\t\t\t\tmtime,\n\t\t\t\treadData,\n\t\t\t\treadSymlink\n\t\t\t});\n\n\t\t\tconst ret = await entry.trigger(itter);\n\t\t\tif (ret === false) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (ret === null) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (type === PathType.FILE) {\n\t\t\t\tconst rsrcPathFull = pathResourceFork(pathFull);\n\t\t\t\tconst rsrcStat = await fsLstatExists(rsrcPathFull);\n\n\t\t\t\tif (rsrcStat) {\n\t\t\t\t\tconst sizeRsrc = rsrcStat.size;\n\n\t\t\t\t\t/**\n\t\t\t\t\t * Read RSRC.\n\t\t\t\t\t *\n\t\t\t\t\t * @returns Read stream.\n\t\t\t\t\t */\n\t\t\t\t\tconst readRsrc = async () => createReadStream(rsrcPathFull);\n\n\t\t\t\t\tconst entryRsrc = new this.Entry({\n\t\t\t\t\t\tarchive: this,\n\t\t\t\t\t\ttype: PathType.RESOURCE_FORK,\n\t\t\t\t\t\tpathRaw,\n\t\t\t\t\t\tsize: sizeRsrc,\n\t\t\t\t\t\tmode,\n\t\t\t\t\t\tuid,\n\t\t\t\t\t\tgid,\n\t\t\t\t\t\tatime,\n\t\t\t\t\t\tmtime,\n\t\t\t\t\t\treadRsrc\n\t\t\t\t\t});\n\n\t\t\t\t\tconst ret = await entryRsrc.trigger(itter);\n\t\t\t\t\tif (ret === false) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t\tif (ret === null) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t};\n\n\t\tconst {path, subpaths} = this;\n\t\tif (subpaths) {\n\t\t\tfor (const subpath of subpaths) {\n\t\t\t\t// eslint-disable-next-line no-await-in-loop\n\t\t\t\tconst stat = await fsLstat(pathJoin(path, subpath));\n\n\t\t\t\t// eslint-disable-next-line no-await-in-loop\n\t\t\t\tawait each(pathJoin(path, subpath), subpath, stat);\n\n\t\t\t\tif (stat.isDirectory()) {\n\t\t\t\t\t// eslint-disable-next-line no-await-in-loop\n\t\t\t\t\tawait fsWalk(\n\t\t\t\t\t\tpathJoin(path, subpath),\n\t\t\t\t\t\tasync (pathRel, stat) => {\n\t\t\t\t\t\t\tconst pathFull = pathJoin(path, subpath, pathRel);\n\t\t\t\t\t\t\treturn each(\n\t\t\t\t\t\t\t\tpathFull,\n\t\t\t\t\t\t\t\tpathJoin(subpath, pathRel),\n\t\t\t\t\t\t\t\tstat\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t},\n\t\t\t\t\t\twalkOpts\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tawait fsWalk(\n\t\t\tpath,\n\t\t\tasync (pathRel, stat) => {\n\t\t\t\tconst pathFull = pathJoin(path, pathRel);\n\t\t\t\treturn each(pathFull, pathRel, stat);\n\t\t\t},\n\t\t\twalkOpts\n\t\t);\n\t}\n}\n"],"mappings":"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","ignoreList":[]}