extract-base-iterator 3.3.0 → 3.3.2
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/cjs/FileEntry.js +2 -2
- package/dist/cjs/FileEntry.js.map +1 -1
- package/dist/cjs/LinkEntry.js +2 -2
- package/dist/cjs/LinkEntry.js.map +1 -1
- package/dist/cjs/SymbolicLinkEntry.js +2 -2
- package/dist/cjs/SymbolicLinkEntry.js.map +1 -1
- package/dist/cjs/fs/chmod.d.cts +1 -1
- package/dist/cjs/fs/chmod.d.ts +1 -1
- package/dist/cjs/fs/chmod.js +2 -2
- package/dist/cjs/fs/chmod.js.map +1 -1
- package/dist/cjs/fs/chown.d.cts +1 -1
- package/dist/cjs/fs/chown.d.ts +1 -1
- package/dist/cjs/fs/chown.js +2 -2
- package/dist/cjs/fs/chown.js.map +1 -1
- package/dist/cjs/fs/lutimes.d.cts +1 -1
- package/dist/cjs/fs/lutimes.d.ts +1 -1
- package/dist/cjs/fs/lutimes.js +3 -3
- package/dist/cjs/fs/lutimes.js.map +1 -1
- package/dist/cjs/fs/symlinkWin32.d.cts +1 -1
- package/dist/cjs/fs/symlinkWin32.d.ts +1 -1
- package/dist/cjs/fs/symlinkWin32.js +2 -2
- package/dist/cjs/fs/symlinkWin32.js.map +1 -1
- package/dist/cjs/fs/utimes.d.cts +1 -1
- package/dist/cjs/fs/utimes.d.ts +1 -1
- package/dist/cjs/fs/utimes.js +2 -2
- package/dist/cjs/fs/utimes.js.map +1 -1
- package/dist/cjs/shared/EntryStream.d.cts +2 -4
- package/dist/cjs/shared/EntryStream.d.ts +2 -4
- package/dist/cjs/shared/EntryStream.js +4 -17
- package/dist/cjs/shared/EntryStream.js.map +1 -1
- package/dist/cjs/waitForAccess.d.cts +1 -1
- package/dist/cjs/waitForAccess.d.ts +1 -1
- package/dist/cjs/waitForAccess.js +23 -36
- package/dist/cjs/waitForAccess.js.map +1 -1
- package/dist/esm/FileEntry.js +1 -1
- package/dist/esm/FileEntry.js.map +1 -1
- package/dist/esm/LinkEntry.js +1 -1
- package/dist/esm/LinkEntry.js.map +1 -1
- package/dist/esm/SymbolicLinkEntry.js +1 -1
- package/dist/esm/SymbolicLinkEntry.js.map +1 -1
- package/dist/esm/fs/chmod.d.ts +1 -1
- package/dist/esm/fs/chmod.js +1 -1
- package/dist/esm/fs/chmod.js.map +1 -1
- package/dist/esm/fs/chown.d.ts +1 -1
- package/dist/esm/fs/chown.js +1 -1
- package/dist/esm/fs/chown.js.map +1 -1
- package/dist/esm/fs/lutimes.d.ts +1 -1
- package/dist/esm/fs/lutimes.js +1 -1
- package/dist/esm/fs/lutimes.js.map +1 -1
- package/dist/esm/fs/symlinkWin32.d.ts +1 -1
- package/dist/esm/fs/symlinkWin32.js +1 -1
- package/dist/esm/fs/symlinkWin32.js.map +1 -1
- package/dist/esm/fs/utimes.d.ts +1 -1
- package/dist/esm/fs/utimes.js +1 -1
- package/dist/esm/fs/utimes.js.map +1 -1
- package/dist/esm/shared/EntryStream.d.ts +2 -4
- package/dist/esm/shared/EntryStream.js +2 -10
- package/dist/esm/shared/EntryStream.js.map +1 -1
- package/dist/esm/waitForAccess.d.ts +1 -1
- package/dist/esm/waitForAccess.js +20 -32
- package/dist/esm/waitForAccess.js.map +1 -1
- package/package.json +1 -1
package/dist/cjs/FileEntry.js
CHANGED
|
@@ -8,8 +8,8 @@ Object.defineProperty(exports, "default", {
|
|
|
8
8
|
return FileEntry;
|
|
9
9
|
}
|
|
10
10
|
});
|
|
11
|
-
var _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
|
|
12
11
|
var _fsremovecompat = require("fs-remove-compat");
|
|
12
|
+
var _gracefulfs = /*#__PURE__*/ _interop_require_default(require("graceful-fs"));
|
|
13
13
|
var _mkdirpclassic = /*#__PURE__*/ _interop_require_default(require("mkdirp-classic"));
|
|
14
14
|
var _path = /*#__PURE__*/ _interop_require_default(require("path"));
|
|
15
15
|
var _queuecb = /*#__PURE__*/ _interop_require_default(require("queue-cb"));
|
|
@@ -64,7 +64,7 @@ var FileEntry = /*#__PURE__*/ function() {
|
|
|
64
64
|
} else {
|
|
65
65
|
// Check if file exists - throw EEXIST if it does
|
|
66
66
|
queue.defer(function(callback) {
|
|
67
|
-
|
|
67
|
+
_gracefulfs.default.stat(fullPath, function(err) {
|
|
68
68
|
if (!err) {
|
|
69
69
|
var existsErr = new Error("EEXIST: file already exists, open '".concat(fullPath, "'"));
|
|
70
70
|
existsErr.code = 'EEXIST';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/FileEntry.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/FileEntry.ts"],"sourcesContent":["import { rm } from 'fs-remove-compat';\nimport fs from 'graceful-fs';\nimport mkdirp from 'mkdirp-classic';\nimport path from 'path';\nimport Queue from 'queue-cb';\nimport chmod from './fs/chmod.ts';\nimport chown from './fs/chown.ts';\nimport utimes from './fs/utimes.ts';\nimport { objectAssign } from './shared/index.ts';\nimport stripPath from './shared/stripPath.ts';\nimport validateAttributes from './validateAttributes.ts';\nimport waitForAccess from './waitForAccess.ts';\n\nconst MANDATORY_ATTRIBUTES = ['mode', 'mtime', 'path'];\n\nimport type { Mode } from 'fs';\nimport type { ExtractOptions, FileAttributes, NoParamCallback, WriteFileFn } from './types.ts';\n\ninterface AbstractFileEntry {\n _writeFile: WriteFileFn;\n}\n\nexport default class FileEntry {\n mode: Mode;\n mtime: number;\n path: string;\n basename: string;\n type: string;\n\n constructor(attributes: FileAttributes) {\n validateAttributes(attributes, MANDATORY_ATTRIBUTES);\n objectAssign(this, attributes);\n if (this.basename === undefined) this.basename = path.basename(this.path);\n if (this.type === undefined) this.type = 'file';\n if ((this as unknown as AbstractFileEntry)._writeFile === undefined) throw new Error('File this missing _writeFile. Please implement this method in your subclass');\n }\n\n create(dest: string, callback: NoParamCallback): void;\n create(dest: string, options: ExtractOptions, callback: NoParamCallback): void;\n create(dest: string, options?: ExtractOptions): Promise<boolean>;\n create(dest: string, options?: ExtractOptions | NoParamCallback, callback?: NoParamCallback): void | Promise<boolean> {\n callback = typeof options === 'function' ? options : callback;\n options = typeof options === 'function' ? {} : ((options || {}) as ExtractOptions);\n\n if (typeof callback === 'function') {\n try {\n const normalizedPath = path.normalize(this.path);\n const fullPath = path.join(dest, stripPath(normalizedPath, options));\n\n const queue = new Queue(1);\n if (options.force) {\n queue.defer((callback) => {\n rm(fullPath, (err) => {\n err && err.code !== 'ENOENT' ? callback(err) : callback();\n });\n });\n } else {\n // Check if file exists - throw EEXIST if it does\n queue.defer((callback) => {\n fs.stat(fullPath, (err) => {\n if (!err) {\n const existsErr = new Error(`EEXIST: file already exists, open '${fullPath}'`) as NodeJS.ErrnoException;\n existsErr.code = 'EEXIST';\n existsErr.path = fullPath;\n return callback(existsErr);\n }\n // ENOENT means file doesn't exist - that's what we want\n if (err.code === 'ENOENT') return callback();\n // Other errors should be reported\n callback(err);\n });\n });\n }\n queue.defer(mkdirp.bind(null, path.dirname(fullPath)));\n queue.defer((this as unknown as AbstractFileEntry)._writeFile.bind(this, fullPath, options));\n queue.defer(waitForAccess.bind(null, fullPath));\n queue.defer(chmod.bind(null, fullPath, this, options));\n queue.defer(chown.bind(null, fullPath, this, options));\n queue.defer(utimes.bind(null, fullPath, this, options));\n queue.await(callback);\n return;\n } catch (err) {\n callback(err);\n return;\n }\n }\n\n return new Promise((resolve, reject) => {\n this.create(dest, options, (err?: Error, done?: boolean) => (err ? reject(err) : resolve(done)));\n });\n }\n\n destroy() {}\n}\n"],"names":["FileEntry","MANDATORY_ATTRIBUTES","attributes","validateAttributes","objectAssign","basename","undefined","path","type","_writeFile","Error","create","dest","options","callback","normalizedPath","normalize","fullPath","join","stripPath","queue","Queue","force","defer","rm","err","code","fs","stat","existsErr","mkdirp","bind","dirname","waitForAccess","chmod","chown","utimes","await","Promise","resolve","reject","done","destroy"],"mappings":"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"}
|
package/dist/cjs/LinkEntry.js
CHANGED
|
@@ -8,8 +8,8 @@ Object.defineProperty(exports, "default", {
|
|
|
8
8
|
return LinkEntry;
|
|
9
9
|
}
|
|
10
10
|
});
|
|
11
|
+
var _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
|
|
11
12
|
var _fsremovecompat = require("fs-remove-compat");
|
|
12
|
-
var _gracefulfs = /*#__PURE__*/ _interop_require_default(require("graceful-fs"));
|
|
13
13
|
var _mkdirpclassic = /*#__PURE__*/ _interop_require_default(require("mkdirp-classic"));
|
|
14
14
|
var _path = /*#__PURE__*/ _interop_require_default(require("path"));
|
|
15
15
|
var _queuecb = /*#__PURE__*/ _interop_require_default(require("queue-cb"));
|
|
@@ -65,7 +65,7 @@ var LinkEntry = /*#__PURE__*/ function() {
|
|
|
65
65
|
});
|
|
66
66
|
}
|
|
67
67
|
queue.defer(_mkdirpclassic.default.bind(null, _path.default.dirname(fullPath)));
|
|
68
|
-
queue.defer(
|
|
68
|
+
queue.defer(_fs.default.link.bind(_fs.default, linkFullPath, fullPath));
|
|
69
69
|
queue.defer(_waitForAccessts.default.bind(null, fullPath));
|
|
70
70
|
queue.defer(_chmodts.default.bind(null, fullPath, this, options));
|
|
71
71
|
queue.defer(_chownts.default.bind(null, fullPath, this, options));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/LinkEntry.ts"],"sourcesContent":["import { rm } from 'fs-remove-compat';\nimport
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/LinkEntry.ts"],"sourcesContent":["import fs from 'fs';\nimport { rm } from 'fs-remove-compat';\nimport mkdirp from 'mkdirp-classic';\nimport path from 'path';\nimport Queue from 'queue-cb';\nimport chmod from './fs/chmod.ts';\nimport chown from './fs/chown.ts';\nimport utimes from './fs/utimes.ts';\nimport { objectAssign } from './shared/index.ts';\nimport stripPath from './shared/stripPath.ts';\nimport validateAttributes from './validateAttributes.ts';\nimport waitForAccess from './waitForAccess.ts';\n\nconst MANDATORY_ATTRIBUTES = ['mode', 'mtime', 'path', 'linkpath'];\n\nimport type { Mode } from 'fs';\nimport type { ExtractOptions, LinkAttributes, NoParamCallback } from './types.ts';\n\nexport default class LinkEntry {\n mode: Mode;\n mtime: number;\n path: string;\n linkpath: string;\n basename: string;\n type: string;\n\n constructor(attributes: LinkAttributes) {\n validateAttributes(attributes, MANDATORY_ATTRIBUTES);\n objectAssign(this, attributes);\n if (this.basename === undefined) this.basename = path.basename(this.path);\n if (this.type === undefined) this.type = 'link';\n }\n\n create(dest: string, callback: NoParamCallback): void;\n create(dest: string, options: ExtractOptions, callback: NoParamCallback): void;\n create(dest: string, options?: ExtractOptions): Promise<boolean>;\n create(dest: string, options?: ExtractOptions | NoParamCallback, callback?: NoParamCallback): void | Promise<boolean> {\n callback = typeof options === 'function' ? options : callback;\n options = typeof options === 'function' ? {} : ((options || {}) as ExtractOptions);\n\n if (typeof callback === 'function') {\n try {\n const normalizedPath = path.normalize(this.path);\n const fullPath = path.join(dest, stripPath(normalizedPath, options));\n const normalizedLinkpath = path.normalize(this.linkpath);\n const linkFullPath = path.join(dest, stripPath(normalizedLinkpath, options));\n\n const queue = new Queue(1);\n if (options.force) {\n queue.defer((callback) => {\n rm(fullPath, (err) => {\n err && err.code !== 'ENOENT' ? callback(err) : callback();\n });\n });\n }\n queue.defer(mkdirp.bind(null, path.dirname(fullPath)));\n queue.defer(fs.link.bind(fs, linkFullPath, fullPath));\n queue.defer(waitForAccess.bind(null, fullPath));\n queue.defer(chmod.bind(null, fullPath, this, options));\n queue.defer(chown.bind(null, fullPath, this, options));\n queue.defer(utimes.bind(null, fullPath, this, options));\n queue.await(callback);\n return;\n } catch (err) {\n callback(err);\n return;\n }\n }\n\n return new Promise((resolve, reject) => {\n this.create(dest, options, (err?: Error, done?: boolean) => (err ? reject(err) : resolve(done)));\n });\n }\n\n destroy() {}\n}\n"],"names":["LinkEntry","MANDATORY_ATTRIBUTES","attributes","validateAttributes","objectAssign","basename","undefined","path","type","create","dest","options","callback","normalizedPath","normalize","fullPath","join","stripPath","normalizedLinkpath","linkpath","linkFullPath","queue","Queue","force","defer","rm","err","code","mkdirp","bind","dirname","fs","link","waitForAccess","chmod","chown","utimes","await","Promise","resolve","reject","done","destroy"],"mappings":";;;;;;;eAkBqBA;;;yDAlBN;8BACI;oEACA;2DACF;8DACC;8DACA;8DACA;+DACC;uBACU;kEACP;2EACS;sEACL;;;;;;;;;;;AAE1B,IAAMC,uBAAuB;IAAC;IAAQ;IAAS;IAAQ;CAAW;AAKnD,IAAA,AAAMD,0BAAN;;aAAMA,UAQPE,UAA0B;gCARnBF;QASjBG,IAAAA,6BAAkB,EAACD,YAAYD;QAC/BG,IAAAA,qBAAY,EAAC,IAAI,EAAEF;QACnB,IAAI,IAAI,CAACG,QAAQ,KAAKC,WAAW,IAAI,CAACD,QAAQ,GAAGE,aAAI,CAACF,QAAQ,CAAC,IAAI,CAACE,IAAI;QACxE,IAAI,IAAI,CAACC,IAAI,KAAKF,WAAW,IAAI,CAACE,IAAI,GAAG;;iBAZxBR;IAkBnBS,OAAAA,MAoCC,GApCDA,SAAAA,OAAOC,IAAY,EAAEC,OAA0C,EAAEC,QAA0B;;QACzFA,WAAW,OAAOD,YAAY,aAAaA,UAAUC;QACrDD,UAAU,OAAOA,YAAY,aAAa,CAAC,IAAMA,WAAW,CAAC;QAE7D,IAAI,OAAOC,aAAa,YAAY;YAClC,IAAI;gBACF,IAAMC,iBAAiBN,aAAI,CAACO,SAAS,CAAC,IAAI,CAACP,IAAI;gBAC/C,IAAMQ,WAAWR,aAAI,CAACS,IAAI,CAACN,MAAMO,IAAAA,oBAAS,EAACJ,gBAAgBF;gBAC3D,IAAMO,qBAAqBX,aAAI,CAACO,SAAS,CAAC,IAAI,CAACK,QAAQ;gBACvD,IAAMC,eAAeb,aAAI,CAACS,IAAI,CAACN,MAAMO,IAAAA,oBAAS,EAACC,oBAAoBP;gBAEnE,IAAMU,QAAQ,IAAIC,gBAAK,CAAC;gBACxB,IAAIX,QAAQY,KAAK,EAAE;oBACjBF,MAAMG,KAAK,CAAC,SAACZ;wBACXa,IAAAA,kBAAE,EAACV,UAAU,SAACW;4BACZA,OAAOA,IAAIC,IAAI,KAAK,WAAWf,SAASc,OAAOd;wBACjD;oBACF;gBACF;gBACAS,MAAMG,KAAK,CAACI,sBAAM,CAACC,IAAI,CAAC,MAAMtB,aAAI,CAACuB,OAAO,CAACf;gBAC3CM,MAAMG,KAAK,CAACO,WAAE,CAACC,IAAI,CAACH,IAAI,CAACE,WAAE,EAAEX,cAAcL;gBAC3CM,MAAMG,KAAK,CAACS,wBAAa,CAACJ,IAAI,CAAC,MAAMd;gBACrCM,MAAMG,KAAK,CAACU,gBAAK,CAACL,IAAI,CAAC,MAAMd,UAAU,IAAI,EAAEJ;gBAC7CU,MAAMG,KAAK,CAACW,gBAAK,CAACN,IAAI,CAAC,MAAMd,UAAU,IAAI,EAAEJ;gBAC7CU,MAAMG,KAAK,CAACY,iBAAM,CAACP,IAAI,CAAC,MAAMd,UAAU,IAAI,EAAEJ;gBAC9CU,MAAMgB,KAAK,CAACzB;gBACZ;YACF,EAAE,OAAOc,KAAK;gBACZd,SAASc;gBACT;YACF;QACF;QAEA,OAAO,IAAIY,QAAQ,SAACC,SAASC;YAC3B,MAAK/B,MAAM,CAACC,MAAMC,SAAS,SAACe,KAAae;uBAAoBf,MAAMc,OAAOd,OAAOa,QAAQE;;QAC3F;IACF;IAEAC,OAAAA,OAAY,GAAZA,SAAAA,WAAW;WAxDQ1C"}
|
|
@@ -8,8 +8,8 @@ Object.defineProperty(exports, "default", {
|
|
|
8
8
|
return SymbolicLinkEntry;
|
|
9
9
|
}
|
|
10
10
|
});
|
|
11
|
+
var _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
|
|
11
12
|
var _fsremovecompat = require("fs-remove-compat");
|
|
12
|
-
var _gracefulfs = /*#__PURE__*/ _interop_require_default(require("graceful-fs"));
|
|
13
13
|
var _isabsolute = /*#__PURE__*/ _interop_require_default(require("is-absolute"));
|
|
14
14
|
var _mkdirpclassic = /*#__PURE__*/ _interop_require_default(require("mkdirp-classic"));
|
|
15
15
|
var _path = /*#__PURE__*/ _interop_require_default(require("path"));
|
|
@@ -74,7 +74,7 @@ var SymbolicLinkEntry = /*#__PURE__*/ function() {
|
|
|
74
74
|
}
|
|
75
75
|
queue.defer(_mkdirpclassic.default.bind(null, _path.default.dirname(fullPath)));
|
|
76
76
|
if (isWindows) queue.defer(_symlinkWin32ts.default.bind(null, linkFullPath, normalizedLinkpath, fullPath));
|
|
77
|
-
else queue.defer(
|
|
77
|
+
else queue.defer(_fs.default.symlink.bind(_fs.default, normalizedLinkpath, fullPath));
|
|
78
78
|
queue.defer(_waitForAccessts.default.bind(null, fullPath, true)); // noFollow=true for symlinks
|
|
79
79
|
queue.defer(_chmodts.default.bind(null, fullPath, this, options));
|
|
80
80
|
queue.defer(_chownts.default.bind(null, fullPath, this, options));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/SymbolicLinkEntry.ts"],"sourcesContent":["import { rm } from 'fs-remove-compat';\nimport
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/SymbolicLinkEntry.ts"],"sourcesContent":["import fs from 'fs';\nimport { rm } from 'fs-remove-compat';\nimport isAbsolute from 'is-absolute';\nimport mkdirp from 'mkdirp-classic';\nimport path from 'path';\nimport Queue from 'queue-cb';\nimport chmod from './fs/chmod.ts';\nimport chown from './fs/chown.ts';\nimport lutimes from './fs/lutimes.ts';\nimport symlinkWin32 from './fs/symlinkWin32.ts';\nimport { objectAssign } from './shared/index.ts';\nimport stripPath from './shared/stripPath.ts';\nimport validateAttributes from './validateAttributes.ts';\nimport waitForAccess from './waitForAccess.ts';\n\nconst isWindows = process.platform === 'win32' || /^(msys|cygwin)$/.test(process.env.OSTYPE);\n\nconst MANDATORY_ATTRIBUTES = ['mode', 'mtime', 'path', 'linkpath'];\n\nimport type { Mode } from 'fs';\nimport type { ExtractOptions, LinkAttributes, NoParamCallback } from './types.ts';\n\nexport default class SymbolicLinkEntry {\n mode: Mode;\n mtime: number;\n path: string;\n linkpath: string;\n basename: string;\n type: string;\n\n constructor(attributes: LinkAttributes) {\n validateAttributes(attributes, MANDATORY_ATTRIBUTES);\n objectAssign(this, attributes);\n if (this.basename === undefined) this.basename = path.basename(this.path);\n if (this.type === undefined) this.type = 'symlink';\n }\n\n create(dest: string, callback: NoParamCallback): void;\n create(dest: string, options: ExtractOptions, callback: NoParamCallback): void;\n create(dest: string, options?: ExtractOptions): Promise<boolean>;\n create(dest: string, options?: ExtractOptions | NoParamCallback, callback?: NoParamCallback): void | Promise<boolean> {\n callback = typeof options === 'function' ? options : callback;\n options = typeof options === 'function' ? {} : ((options || {}) as ExtractOptions);\n\n if (typeof callback === 'function') {\n try {\n const normalizedPath = path.normalize(this.path);\n const fullPath = path.join(dest, stripPath(normalizedPath, options));\n let normalizedLinkpath = path.normalize(this.linkpath);\n let linkFullPath = path.join(dest, stripPath(normalizedLinkpath, options));\n if (!isAbsolute(normalizedLinkpath)) {\n const linkRelativePath = path.join(path.dirname(normalizedPath), this.linkpath);\n linkFullPath = path.join(dest, stripPath(linkRelativePath, options));\n normalizedLinkpath = path.relative(path.dirname(fullPath), linkFullPath);\n }\n\n const queue = new Queue(1);\n if (options.force) {\n queue.defer((callback) => {\n rm(fullPath, (err) => {\n err && err.code !== 'ENOENT' ? callback(err) : callback();\n });\n });\n }\n queue.defer(mkdirp.bind(null, path.dirname(fullPath)));\n if (isWindows) queue.defer(symlinkWin32.bind(null, linkFullPath, normalizedLinkpath, fullPath));\n else queue.defer(fs.symlink.bind(fs, normalizedLinkpath, fullPath));\n queue.defer(waitForAccess.bind(null, fullPath, true)); // noFollow=true for symlinks\n queue.defer(chmod.bind(null, fullPath, this, options));\n queue.defer(chown.bind(null, fullPath, this, options));\n queue.defer(lutimes.bind(null, fullPath, this, options));\n queue.await(callback);\n return;\n } catch (err) {\n callback(err);\n return;\n }\n }\n\n return new Promise((resolve, reject) => {\n this.create(dest, options, (err?: Error, done?: boolean) => (err ? reject(err) : resolve(done)));\n });\n }\n\n destroy() {}\n}\n"],"names":["SymbolicLinkEntry","isWindows","process","platform","test","env","OSTYPE","MANDATORY_ATTRIBUTES","attributes","validateAttributes","objectAssign","basename","undefined","path","type","create","dest","options","callback","normalizedPath","normalize","fullPath","join","stripPath","normalizedLinkpath","linkpath","linkFullPath","isAbsolute","linkRelativePath","dirname","relative","queue","Queue","force","defer","rm","err","code","mkdirp","bind","symlinkWin32","fs","symlink","waitForAccess","chmod","chown","lutimes","await","Promise","resolve","reject","done","destroy"],"mappings":";;;;;;;eAsBqBA;;;yDAtBN;8BACI;iEACI;oEACJ;2DACF;8DACC;8DACA;8DACA;gEACE;qEACK;uBACI;kEACP;2EACS;sEACL;;;;;;;;;;;AAE1B,IAAMC,YAAYC,QAAQC,QAAQ,KAAK,WAAW,kBAAkBC,IAAI,CAACF,QAAQG,GAAG,CAACC,MAAM;AAE3F,IAAMC,uBAAuB;IAAC;IAAQ;IAAS;IAAQ;CAAW;AAKnD,IAAA,AAAMP,kCAAN;;aAAMA,kBAQPQ,UAA0B;gCARnBR;QASjBS,IAAAA,6BAAkB,EAACD,YAAYD;QAC/BG,IAAAA,qBAAY,EAAC,IAAI,EAAEF;QACnB,IAAI,IAAI,CAACG,QAAQ,KAAKC,WAAW,IAAI,CAACD,QAAQ,GAAGE,aAAI,CAACF,QAAQ,CAAC,IAAI,CAACE,IAAI;QACxE,IAAI,IAAI,CAACC,IAAI,KAAKF,WAAW,IAAI,CAACE,IAAI,GAAG;;iBAZxBd;IAkBnBe,OAAAA,MA0CC,GA1CDA,SAAAA,OAAOC,IAAY,EAAEC,OAA0C,EAAEC,QAA0B;;QACzFA,WAAW,OAAOD,YAAY,aAAaA,UAAUC;QACrDD,UAAU,OAAOA,YAAY,aAAa,CAAC,IAAMA,WAAW,CAAC;QAE7D,IAAI,OAAOC,aAAa,YAAY;YAClC,IAAI;gBACF,IAAMC,iBAAiBN,aAAI,CAACO,SAAS,CAAC,IAAI,CAACP,IAAI;gBAC/C,IAAMQ,WAAWR,aAAI,CAACS,IAAI,CAACN,MAAMO,IAAAA,oBAAS,EAACJ,gBAAgBF;gBAC3D,IAAIO,qBAAqBX,aAAI,CAACO,SAAS,CAAC,IAAI,CAACK,QAAQ;gBACrD,IAAIC,eAAeb,aAAI,CAACS,IAAI,CAACN,MAAMO,IAAAA,oBAAS,EAACC,oBAAoBP;gBACjE,IAAI,CAACU,IAAAA,mBAAU,EAACH,qBAAqB;oBACnC,IAAMI,mBAAmBf,aAAI,CAACS,IAAI,CAACT,aAAI,CAACgB,OAAO,CAACV,iBAAiB,IAAI,CAACM,QAAQ;oBAC9EC,eAAeb,aAAI,CAACS,IAAI,CAACN,MAAMO,IAAAA,oBAAS,EAACK,kBAAkBX;oBAC3DO,qBAAqBX,aAAI,CAACiB,QAAQ,CAACjB,aAAI,CAACgB,OAAO,CAACR,WAAWK;gBAC7D;gBAEA,IAAMK,QAAQ,IAAIC,gBAAK,CAAC;gBACxB,IAAIf,QAAQgB,KAAK,EAAE;oBACjBF,MAAMG,KAAK,CAAC,SAAChB;wBACXiB,IAAAA,kBAAE,EAACd,UAAU,SAACe;4BACZA,OAAOA,IAAIC,IAAI,KAAK,WAAWnB,SAASkB,OAAOlB;wBACjD;oBACF;gBACF;gBACAa,MAAMG,KAAK,CAACI,sBAAM,CAACC,IAAI,CAAC,MAAM1B,aAAI,CAACgB,OAAO,CAACR;gBAC3C,IAAIpB,WAAW8B,MAAMG,KAAK,CAACM,uBAAY,CAACD,IAAI,CAAC,MAAMb,cAAcF,oBAAoBH;qBAChFU,MAAMG,KAAK,CAACO,WAAE,CAACC,OAAO,CAACH,IAAI,CAACE,WAAE,EAAEjB,oBAAoBH;gBACzDU,MAAMG,KAAK,CAACS,wBAAa,CAACJ,IAAI,CAAC,MAAMlB,UAAU,QAAQ,6BAA6B;gBACpFU,MAAMG,KAAK,CAACU,gBAAK,CAACL,IAAI,CAAC,MAAMlB,UAAU,IAAI,EAAEJ;gBAC7Cc,MAAMG,KAAK,CAACW,gBAAK,CAACN,IAAI,CAAC,MAAMlB,UAAU,IAAI,EAAEJ;gBAC7Cc,MAAMG,KAAK,CAACY,kBAAO,CAACP,IAAI,CAAC,MAAMlB,UAAU,IAAI,EAAEJ;gBAC/Cc,MAAMgB,KAAK,CAAC7B;gBACZ;YACF,EAAE,OAAOkB,KAAK;gBACZlB,SAASkB;gBACT;YACF;QACF;QAEA,OAAO,IAAIY,QAAQ,SAACC,SAASC;YAC3B,MAAKnC,MAAM,CAACC,MAAMC,SAAS,SAACmB,KAAae;uBAAoBf,MAAMc,OAAOd,OAAOa,QAAQE;;QAC3F;IACF;IAEAC,OAAAA,OAAY,GAAZA,SAAAA,WAAW;WA9DQpD"}
|
package/dist/cjs/fs/chmod.d.cts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type NoParamCallback } from 'fs';
|
|
2
2
|
import type { AbstractEntry, ExtractOptions } from '../types.js';
|
|
3
3
|
export default function chmodFn(fullPath: string, entry: AbstractEntry, _options: ExtractOptions, callback: NoParamCallback): void;
|
package/dist/cjs/fs/chmod.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type NoParamCallback } from 'fs';
|
|
2
2
|
import type { AbstractEntry, ExtractOptions } from '../types.js';
|
|
3
3
|
export default function chmodFn(fullPath: string, entry: AbstractEntry, _options: ExtractOptions, callback: NoParamCallback): void;
|
package/dist/cjs/fs/chmod.js
CHANGED
|
@@ -9,7 +9,7 @@ Object.defineProperty(exports, "default", {
|
|
|
9
9
|
return chmodFn;
|
|
10
10
|
}
|
|
11
11
|
});
|
|
12
|
-
var
|
|
12
|
+
var _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
|
|
13
13
|
function _interop_require_default(obj) {
|
|
14
14
|
return obj && obj.__esModule ? obj : {
|
|
15
15
|
default: obj
|
|
@@ -21,7 +21,7 @@ var FMODE = 420;
|
|
|
21
21
|
var SMODE = 493;
|
|
22
22
|
var LMODE = 420;
|
|
23
23
|
function chmodFn(fullPath, entry, _options, callback) {
|
|
24
|
-
var chmod = entry.type === 'symlink' ?
|
|
24
|
+
var chmod = entry.type === 'symlink' ? _fs.default.lchmod : _fs.default.chmod;
|
|
25
25
|
if (!chmod || UMASK === null) return callback(null);
|
|
26
26
|
var mode = entry.mode;
|
|
27
27
|
if (!mode) {
|
package/dist/cjs/fs/chmod.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/fs/chmod.ts"],"sourcesContent":["// adapted from https://github.com/mafintosh/tar-fs\n\nimport
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/fs/chmod.ts"],"sourcesContent":["// adapted from https://github.com/mafintosh/tar-fs\n\nimport fs, { type NoParamCallback } from 'fs';\nimport type { AbstractEntry, ExtractOptions } from '../types.ts';\n\nconst UMASK = process.umask ? process.umask() : null;\nconst DMODE = 0o755;\nconst FMODE = 0o644;\nconst SMODE = 0o755;\nconst LMODE = 0o644;\n\nexport default function chmodFn(fullPath: string, entry: AbstractEntry, _options: ExtractOptions, callback: NoParamCallback) {\n const chmod = entry.type === 'symlink' ? fs.lchmod : fs.chmod;\n if (!chmod || UMASK === null) return callback(null);\n\n let mode = entry.mode;\n if (!mode) {\n switch (entry.type) {\n case 'directory':\n mode = DMODE;\n break;\n case 'file':\n mode = FMODE;\n break;\n case 'symlink':\n mode = SMODE;\n break;\n case 'link':\n mode = LMODE;\n break;\n }\n }\n chmod(fullPath, (mode as number) & ~UMASK, callback);\n}\n"],"names":["chmodFn","UMASK","process","umask","DMODE","FMODE","SMODE","LMODE","fullPath","entry","_options","callback","chmod","type","fs","lchmod","mode"],"mappings":"AAAA,mDAAmD;;;;;+BAWnD;;;eAAwBA;;;yDATiB;;;;;;AAGzC,IAAMC,QAAQC,QAAQC,KAAK,GAAGD,QAAQC,KAAK,KAAK;AAChD,IAAMC,QAAQ;AACd,IAAMC,QAAQ;AACd,IAAMC,QAAQ;AACd,IAAMC,QAAQ;AAEC,SAASP,QAAQQ,QAAgB,EAAEC,KAAoB,EAAEC,QAAwB,EAAEC,QAAyB;IACzH,IAAMC,QAAQH,MAAMI,IAAI,KAAK,YAAYC,WAAE,CAACC,MAAM,GAAGD,WAAE,CAACF,KAAK;IAC7D,IAAI,CAACA,SAASX,UAAU,MAAM,OAAOU,SAAS;IAE9C,IAAIK,OAAOP,MAAMO,IAAI;IACrB,IAAI,CAACA,MAAM;QACT,OAAQP,MAAMI,IAAI;YAChB,KAAK;gBACHG,OAAOZ;gBACP;YACF,KAAK;gBACHY,OAAOX;gBACP;YACF,KAAK;gBACHW,OAAOV;gBACP;YACF,KAAK;gBACHU,OAAOT;gBACP;QACJ;IACF;IACAK,MAAMJ,UAAU,AAACQ,OAAkB,CAACf,OAAOU;AAC7C"}
|
package/dist/cjs/fs/chown.d.cts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type NoParamCallback } from 'fs';
|
|
2
2
|
import type { AbstractEntry, ExtractOptions } from '../types.js';
|
|
3
3
|
export default function chownFn(fullPath: string, entry: AbstractEntry, _options: ExtractOptions, callback: NoParamCallback): void;
|
package/dist/cjs/fs/chown.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type NoParamCallback } from 'fs';
|
|
2
2
|
import type { AbstractEntry, ExtractOptions } from '../types.js';
|
|
3
3
|
export default function chownFn(fullPath: string, entry: AbstractEntry, _options: ExtractOptions, callback: NoParamCallback): void;
|
package/dist/cjs/fs/chown.js
CHANGED
|
@@ -9,7 +9,7 @@ Object.defineProperty(exports, "default", {
|
|
|
9
9
|
return chownFn;
|
|
10
10
|
}
|
|
11
11
|
});
|
|
12
|
-
var
|
|
12
|
+
var _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
|
|
13
13
|
function _interop_require_default(obj) {
|
|
14
14
|
return obj && obj.__esModule ? obj : {
|
|
15
15
|
default: obj
|
|
@@ -18,7 +18,7 @@ function _interop_require_default(obj) {
|
|
|
18
18
|
var UID = process.getuid ? process.getuid() : -1;
|
|
19
19
|
var OWN = process.platform !== 'win32' && UID === 0;
|
|
20
20
|
function chownFn(fullPath, entry, _options, callback) {
|
|
21
|
-
var chown = entry.type === 'symlink' ?
|
|
21
|
+
var chown = entry.type === 'symlink' ? _fs.default.lchown : _fs.default.chown;
|
|
22
22
|
if (!chown || !OWN || !entry.uid || !entry.gid) return callback(null);
|
|
23
23
|
chown(fullPath, entry.uid, entry.gid, callback);
|
|
24
24
|
}
|
package/dist/cjs/fs/chown.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/fs/chown.ts"],"sourcesContent":["// adapted from https://github.com/mafintosh/tar-fs\n\nimport
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/fs/chown.ts"],"sourcesContent":["// adapted from https://github.com/mafintosh/tar-fs\n\nimport fs, { type NoParamCallback } from 'fs';\nimport type { AbstractEntry, ExtractOptions } from '../types.ts';\n\nconst UID = process.getuid ? process.getuid() : -1;\nconst OWN = process.platform !== 'win32' && UID === 0;\n\nexport default function chownFn(fullPath: string, entry: AbstractEntry, _options: ExtractOptions, callback: NoParamCallback) {\n const chown = entry.type === 'symlink' ? fs.lchown : fs.chown;\n if (!chown || !OWN || !entry.uid || !entry.gid) return callback(null);\n chown(fullPath, entry.uid, entry.gid, callback);\n}\n"],"names":["chownFn","UID","process","getuid","OWN","platform","fullPath","entry","_options","callback","chown","type","fs","lchown","uid","gid"],"mappings":"AAAA,mDAAmD;;;;;+BAQnD;;;eAAwBA;;;yDANiB;;;;;;AAGzC,IAAMC,MAAMC,QAAQC,MAAM,GAAGD,QAAQC,MAAM,KAAK,CAAC;AACjD,IAAMC,MAAMF,QAAQG,QAAQ,KAAK,WAAWJ,QAAQ;AAErC,SAASD,QAAQM,QAAgB,EAAEC,KAAoB,EAAEC,QAAwB,EAAEC,QAAyB;IACzH,IAAMC,QAAQH,MAAMI,IAAI,KAAK,YAAYC,WAAE,CAACC,MAAM,GAAGD,WAAE,CAACF,KAAK;IAC7D,IAAI,CAACA,SAAS,CAACN,OAAO,CAACG,MAAMO,GAAG,IAAI,CAACP,MAAMQ,GAAG,EAAE,OAAON,SAAS;IAChEC,MAAMJ,UAAUC,MAAMO,GAAG,EAAEP,MAAMQ,GAAG,EAAEN;AACxC"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type NoParamCallback } from 'fs';
|
|
2
2
|
import type { AbstractEntry, ExtractOptions } from '../types.js';
|
|
3
3
|
export default function lutimes(fullPath: string, entry: AbstractEntry, options: ExtractOptions, callback: NoParamCallback): void;
|
package/dist/cjs/fs/lutimes.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type NoParamCallback } from 'fs';
|
|
2
2
|
import type { AbstractEntry, ExtractOptions } from '../types.js';
|
|
3
3
|
export default function lutimes(fullPath: string, entry: AbstractEntry, options: ExtractOptions, callback: NoParamCallback): void;
|
package/dist/cjs/fs/lutimes.js
CHANGED
|
@@ -11,19 +11,19 @@ Object.defineProperty(exports, "default", {
|
|
|
11
11
|
return lutimes;
|
|
12
12
|
}
|
|
13
13
|
});
|
|
14
|
-
var
|
|
14
|
+
var _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
|
|
15
15
|
function _interop_require_default(obj) {
|
|
16
16
|
return obj && obj.__esModule ? obj : {
|
|
17
17
|
default: obj
|
|
18
18
|
};
|
|
19
19
|
}
|
|
20
20
|
// biome-ignore lint/suspicious/noExplicitAny: fs.lutimes not in older @types/node
|
|
21
|
-
var HAS_LUTIMES = typeof
|
|
21
|
+
var HAS_LUTIMES = typeof _fs.default.lutimes === 'function';
|
|
22
22
|
function lutimes(fullPath, entry, options, callback) {
|
|
23
23
|
if (HAS_LUTIMES) {
|
|
24
24
|
var now = options.now || new Date();
|
|
25
25
|
// biome-ignore lint/suspicious/noExplicitAny: fs.lutimes not in older @types/node
|
|
26
|
-
|
|
26
|
+
_fs.default.lutimes(fullPath, now, new Date(entry.mtime), callback);
|
|
27
27
|
} else {
|
|
28
28
|
// On older Node versions, skip setting times on symlinks
|
|
29
29
|
// fs.utimes follows symlinks and will fail with ENOENT if target doesn't exist
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/fs/lutimes.ts"],"sourcesContent":["// lutimes - set times on symlinks without following them\n// fs.lutimes was added in Node.js 14.5.0\n// For older versions, we skip setting times on symlinks (no good alternative)\n\nimport
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/fs/lutimes.ts"],"sourcesContent":["// lutimes - set times on symlinks without following them\n// fs.lutimes was added in Node.js 14.5.0\n// For older versions, we skip setting times on symlinks (no good alternative)\n\nimport fs, { type NoParamCallback } from 'fs';\nimport type { AbstractEntry, ExtractOptions } from '../types.ts';\n\n// biome-ignore lint/suspicious/noExplicitAny: fs.lutimes not in older @types/node\nconst HAS_LUTIMES = typeof (fs as any).lutimes === 'function';\n\nexport default function lutimes(fullPath: string, entry: AbstractEntry, options: ExtractOptions, callback: NoParamCallback): void {\n if (HAS_LUTIMES) {\n const now = options.now || new Date();\n // biome-ignore lint/suspicious/noExplicitAny: fs.lutimes not in older @types/node\n (fs as any).lutimes(fullPath, now, new Date(entry.mtime), callback);\n } else {\n // On older Node versions, skip setting times on symlinks\n // fs.utimes follows symlinks and will fail with ENOENT if target doesn't exist\n callback(null);\n }\n}\n"],"names":["lutimes","HAS_LUTIMES","fs","fullPath","entry","options","callback","now","Date","mtime"],"mappings":"AAAA,yDAAyD;AACzD,yCAAyC;AACzC,8EAA8E;;;;;+BAQ9E;;;eAAwBA;;;yDANiB;;;;;;AAGzC,kFAAkF;AAClF,IAAMC,cAAc,OAAO,AAACC,WAAE,CAASF,OAAO,KAAK;AAEpC,SAASA,QAAQG,QAAgB,EAAEC,KAAoB,EAAEC,OAAuB,EAAEC,QAAyB;IACxH,IAAIL,aAAa;QACf,IAAMM,MAAMF,QAAQE,GAAG,IAAI,IAAIC;QAC/B,kFAAkF;QACjFN,WAAE,CAASF,OAAO,CAACG,UAAUI,KAAK,IAAIC,KAAKJ,MAAMK,KAAK,GAAGH;IAC5D,OAAO;QACL,yDAAyD;QACzD,+EAA+E;QAC/EA,SAAS;IACX;AACF"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type NoParamCallback } from 'fs';
|
|
2
2
|
export default function symlinkWin32(linkFullPath: string, linkpath: string, fullPath: string, callback: NoParamCallback): void;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type NoParamCallback } from 'fs';
|
|
2
2
|
export default function symlinkWin32(linkFullPath: string, linkpath: string, fullPath: string, callback: NoParamCallback): void;
|
|
@@ -8,7 +8,7 @@ Object.defineProperty(exports, "default", {
|
|
|
8
8
|
return symlinkWin32;
|
|
9
9
|
}
|
|
10
10
|
});
|
|
11
|
-
var
|
|
11
|
+
var _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
|
|
12
12
|
var _lstatRealts = /*#__PURE__*/ _interop_require_default(require("./lstatReal.js"));
|
|
13
13
|
function _interop_require_default(obj) {
|
|
14
14
|
return obj && obj.__esModule ? obj : {
|
|
@@ -19,7 +19,7 @@ function symlinkWin32(linkFullPath, linkpath, fullPath, callback) {
|
|
|
19
19
|
(0, _lstatRealts.default)(linkFullPath, function(err, targetStat) {
|
|
20
20
|
// If target doesn't exist, default to 'file' type (Windows requires a type for symlinks)
|
|
21
21
|
var type = !err && (targetStat === null || targetStat === void 0 ? void 0 : targetStat.isDirectory()) ? 'dir' : 'file';
|
|
22
|
-
|
|
22
|
+
_fs.default.symlink(linkpath, fullPath, type, callback);
|
|
23
23
|
});
|
|
24
24
|
}
|
|
25
25
|
/* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/fs/symlinkWin32.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/fs/symlinkWin32.ts"],"sourcesContent":["import fs, { type NoParamCallback } from 'fs';\nimport lstatReal from './lstatReal.ts';\n\nexport default function symlinkWin32(linkFullPath: string, linkpath: string, fullPath: string, callback: NoParamCallback) {\n lstatReal(linkFullPath, (err, targetStat) => {\n // If target doesn't exist, default to 'file' type (Windows requires a type for symlinks)\n const type = !err && targetStat?.isDirectory() ? 'dir' : 'file';\n fs.symlink(linkpath, fullPath, type, callback);\n });\n}\n"],"names":["symlinkWin32","linkFullPath","linkpath","fullPath","callback","lstatReal","err","targetStat","type","isDirectory","fs","symlink"],"mappings":";;;;+BAGA;;;eAAwBA;;;yDAHiB;kEACnB;;;;;;AAEP,SAASA,aAAaC,YAAoB,EAAEC,QAAgB,EAAEC,QAAgB,EAAEC,QAAyB;IACtHC,IAAAA,oBAAS,EAACJ,cAAc,SAACK,KAAKC;QAC5B,yFAAyF;QACzF,IAAMC,OAAO,CAACF,QAAOC,uBAAAA,iCAAAA,WAAYE,WAAW,MAAK,QAAQ;QACzDC,WAAE,CAACC,OAAO,CAACT,UAAUC,UAAUK,MAAMJ;IACvC;AACF"}
|
package/dist/cjs/fs/utimes.d.cts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type NoParamCallback } from 'fs';
|
|
2
2
|
import type { AbstractEntry, ExtractOptions } from '../types.js';
|
|
3
3
|
export default function utimes(fullPath: string, entry: AbstractEntry, options: ExtractOptions, callback: NoParamCallback): void;
|
package/dist/cjs/fs/utimes.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type NoParamCallback } from 'fs';
|
|
2
2
|
import type { AbstractEntry, ExtractOptions } from '../types.js';
|
|
3
3
|
export default function utimes(fullPath: string, entry: AbstractEntry, options: ExtractOptions, callback: NoParamCallback): void;
|
package/dist/cjs/fs/utimes.js
CHANGED
|
@@ -9,7 +9,7 @@ Object.defineProperty(exports, "default", {
|
|
|
9
9
|
return utimes;
|
|
10
10
|
}
|
|
11
11
|
});
|
|
12
|
-
var
|
|
12
|
+
var _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
|
|
13
13
|
function _interop_require_default(obj) {
|
|
14
14
|
return obj && obj.__esModule ? obj : {
|
|
15
15
|
default: obj
|
|
@@ -17,6 +17,6 @@ function _interop_require_default(obj) {
|
|
|
17
17
|
}
|
|
18
18
|
function utimes(fullPath, entry, options, callback) {
|
|
19
19
|
var now = options.now || new Date();
|
|
20
|
-
|
|
20
|
+
_fs.default.utimes(fullPath, now, new Date(entry.mtime), callback);
|
|
21
21
|
}
|
|
22
22
|
/* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/fs/utimes.ts"],"sourcesContent":["// adapted from https://github.com/mafintosh/tar-fs\n\nimport
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/fs/utimes.ts"],"sourcesContent":["// adapted from https://github.com/mafintosh/tar-fs\n\nimport fs, { type NoParamCallback } from 'fs';\nimport type { AbstractEntry, ExtractOptions } from '../types.ts';\n\nexport default function utimes(fullPath: string, entry: AbstractEntry, options: ExtractOptions, callback: NoParamCallback): void {\n const now = options.now || new Date();\n fs.utimes(fullPath, now, new Date(entry.mtime), callback);\n}\n"],"names":["utimes","fullPath","entry","options","callback","now","Date","fs","mtime"],"mappings":"AAAA,mDAAmD;;;;;+BAKnD;;;eAAwBA;;;yDAHiB;;;;;;AAG1B,SAASA,OAAOC,QAAgB,EAAEC,KAAoB,EAAEC,OAAuB,EAAEC,QAAyB;IACvH,IAAMC,MAAMF,QAAQE,GAAG,IAAI,IAAIC;IAC/BC,WAAE,CAACP,MAAM,CAACC,UAAUI,KAAK,IAAIC,KAAKJ,MAAMM,KAAK,GAAGJ;AAClD"}
|
|
@@ -10,13 +10,12 @@
|
|
|
10
10
|
* - tar-iterator
|
|
11
11
|
* - Any other archive iterator library
|
|
12
12
|
*/
|
|
13
|
-
import
|
|
14
|
-
declare let ReadableBase: typeof Stream.Readable;
|
|
13
|
+
import { Readable } from './compat.js';
|
|
15
14
|
/**
|
|
16
15
|
* Base stream class for archive entry content.
|
|
17
16
|
* Can be extended for special entry types like sparse files.
|
|
18
17
|
*/
|
|
19
|
-
export default class EntryStream extends
|
|
18
|
+
export default class EntryStream extends Readable {
|
|
20
19
|
protected _ended: boolean;
|
|
21
20
|
/**
|
|
22
21
|
* Signal end of stream by pushing null
|
|
@@ -32,4 +31,3 @@ export default class EntryStream extends ReadableBase {
|
|
|
32
31
|
*/
|
|
33
32
|
_read(_size: number): void;
|
|
34
33
|
}
|
|
35
|
-
export {};
|
|
@@ -10,13 +10,12 @@
|
|
|
10
10
|
* - tar-iterator
|
|
11
11
|
* - Any other archive iterator library
|
|
12
12
|
*/
|
|
13
|
-
import
|
|
14
|
-
declare let ReadableBase: typeof Stream.Readable;
|
|
13
|
+
import { Readable } from './compat.js';
|
|
15
14
|
/**
|
|
16
15
|
* Base stream class for archive entry content.
|
|
17
16
|
* Can be extended for special entry types like sparse files.
|
|
18
17
|
*/
|
|
19
|
-
export default class EntryStream extends
|
|
18
|
+
export default class EntryStream extends Readable {
|
|
20
19
|
protected _ended: boolean;
|
|
21
20
|
/**
|
|
22
21
|
* Signal end of stream by pushing null
|
|
@@ -32,4 +31,3 @@ export default class EntryStream extends ReadableBase {
|
|
|
32
31
|
*/
|
|
33
32
|
_read(_size: number): void;
|
|
34
33
|
}
|
|
35
|
-
export {};
|
|
@@ -19,7 +19,7 @@ Object.defineProperty(exports, "default", {
|
|
|
19
19
|
return EntryStream;
|
|
20
20
|
}
|
|
21
21
|
});
|
|
22
|
-
var
|
|
22
|
+
var _compatts = require("./compat.js");
|
|
23
23
|
function _assert_this_initialized(self) {
|
|
24
24
|
if (self === void 0) {
|
|
25
25
|
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
|
|
@@ -68,11 +68,6 @@ function _inherits(subClass, superClass) {
|
|
|
68
68
|
});
|
|
69
69
|
if (superClass) _set_prototype_of(subClass, superClass);
|
|
70
70
|
}
|
|
71
|
-
function _interop_require_default(obj) {
|
|
72
|
-
return obj && obj.__esModule ? obj : {
|
|
73
|
-
default: obj
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
71
|
function _possible_constructor_return(self, call) {
|
|
77
72
|
if (call && (_type_of(call) === "object" || typeof call === "function")) {
|
|
78
73
|
return call;
|
|
@@ -98,17 +93,9 @@ function _is_native_reflect_construct() {
|
|
|
98
93
|
return !!result;
|
|
99
94
|
})();
|
|
100
95
|
}
|
|
101
|
-
|
|
102
|
-
var major = +process.versions.node.split('.')[0];
|
|
103
|
-
var ReadableBase;
|
|
104
|
-
if (major > 0) {
|
|
105
|
-
ReadableBase = _stream.default.Readable;
|
|
106
|
-
} else {
|
|
107
|
-
ReadableBase = require('readable-stream').Readable;
|
|
108
|
-
}
|
|
109
|
-
var EntryStream = /*#__PURE__*/ function(ReadableBase) {
|
|
96
|
+
var EntryStream = /*#__PURE__*/ function(Readable) {
|
|
110
97
|
"use strict";
|
|
111
|
-
_inherits(EntryStream,
|
|
98
|
+
_inherits(EntryStream, Readable);
|
|
112
99
|
function EntryStream() {
|
|
113
100
|
_class_call_check(this, EntryStream);
|
|
114
101
|
var _this;
|
|
@@ -140,5 +127,5 @@ var EntryStream = /*#__PURE__*/ function(ReadableBase) {
|
|
|
140
127
|
}
|
|
141
128
|
]);
|
|
142
129
|
return EntryStream;
|
|
143
|
-
}(
|
|
130
|
+
}(_compatts.Readable);
|
|
144
131
|
/* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/shared/EntryStream.ts"],"sourcesContent":["/**\n * EntryStream - Simple readable stream for entry content\n *\n * Extends Readable to emit 'data', 'end', 'error' events.\n * Node 0.8 compatible via readable-stream polyfill.\n *\n * This base class is designed to be used by:\n * - zip-iterator\n * - 7z-iterator\n * - tar-iterator\n * - Any other archive iterator library\n */\n\nimport
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/shared/EntryStream.ts"],"sourcesContent":["/**\n * EntryStream - Simple readable stream for entry content\n *\n * Extends Readable to emit 'data', 'end', 'error' events.\n * Node 0.8 compatible via readable-stream polyfill.\n *\n * This base class is designed to be used by:\n * - zip-iterator\n * - 7z-iterator\n * - tar-iterator\n * - Any other archive iterator library\n */\n\nimport { Readable } from './compat.ts';\n\n/**\n * Base stream class for archive entry content.\n * Can be extended for special entry types like sparse files.\n */\nexport default class EntryStream extends Readable {\n protected _ended = false;\n\n /**\n * Signal end of stream by pushing null\n */\n end(): void {\n if (this._ended) return;\n this._ended = true;\n this.push(null);\n }\n\n /**\n * Check if stream has ended\n */\n get ended(): boolean {\n return this._ended;\n }\n\n /**\n * Required by Readable - called when consumer wants data.\n * Data is pushed externally via push(), nothing to do here.\n */\n _read(_size: number): void {\n // Data is pushed externally, nothing to do here\n }\n}\n"],"names":["EntryStream","_ended","end","push","_read","_size","ended","Readable"],"mappings":"AAAA;;;;;;;;;;;CAWC;;;;;;;eAQoBA;;;wBANI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMV,IAAA,AAAMA,4BAAN;;cAAMA;aAAAA;gCAAAA;;gBAAN,kBAAMA,+BACTC,SAAS;;;iBADAD;IAGnB;;GAEC,GACDE,OAAAA,GAIC,GAJDA,SAAAA;QACE,IAAI,IAAI,CAACD,MAAM,EAAE;QACjB,IAAI,CAACA,MAAM,GAAG;QACd,IAAI,CAACE,IAAI,CAAC;IACZ;IASA;;;GAGC,GACDC,OAAAA,KAEC,GAFDA,SAAAA,MAAMC,KAAa;IACjB,gDAAgD;IAClD;kBAzBmBL;;YAefM,KAAAA;iBAAJ,AAHA;;GAEC,GACD;gBACE,OAAO,IAAI,CAACL,MAAM;YACpB;;;WAjBmBD;EAAoBO,kBAAQ"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { NoParamCallback } from './types.js';
|
|
2
|
-
export default function waitForAccess(fullPath: string,
|
|
2
|
+
export default function waitForAccess(fullPath: string, noFollow: boolean | NoParamCallback, callback?: NoParamCallback | number): void;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { NoParamCallback } from './types.js';
|
|
2
|
-
export default function waitForAccess(fullPath: string,
|
|
2
|
+
export default function waitForAccess(fullPath: string, noFollow: boolean | NoParamCallback, callback?: NoParamCallback | number): void;
|
|
@@ -9,64 +9,51 @@ Object.defineProperty(exports, // Backward compatible: waitForAccess(path, callb
|
|
|
9
9
|
return waitForAccess;
|
|
10
10
|
}
|
|
11
11
|
});
|
|
12
|
-
var
|
|
12
|
+
var _gracefulfs = /*#__PURE__*/ _interop_require_default(require("graceful-fs"));
|
|
13
13
|
function _interop_require_default(obj) {
|
|
14
14
|
return obj && obj.__esModule ? obj : {
|
|
15
15
|
default: obj
|
|
16
16
|
};
|
|
17
17
|
}
|
|
18
|
-
|
|
19
|
-
function
|
|
20
|
-
|
|
21
|
-
//
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
// Old signature: waitForAccess(path, callback, attempts?)
|
|
26
|
-
noFollow = false;
|
|
27
|
-
callback = noFollowOrCallback;
|
|
28
|
-
attempts = callbackOrAttempts || 0;
|
|
29
|
-
} else {
|
|
30
|
-
// New signature: waitForAccess(path, noFollow, callback, attempts?)
|
|
31
|
-
noFollow = noFollowOrCallback;
|
|
32
|
-
callback = callbackOrAttempts;
|
|
33
|
-
}
|
|
34
|
-
// POSIX: finish event is reliable after decompression stream fixes
|
|
35
|
-
// Avoid Zalgo: ensure callback is always async for consistent API
|
|
36
|
-
if (!isWindows) return process.nextTick(callback);
|
|
37
|
-
// Windows: NTFS metadata may not be committed yet, verify accessibility
|
|
38
|
-
// For symlinks (noFollow=true), use lstat to check the link itself exists
|
|
39
|
-
// For files/dirs/hardlinks, use open to verify the file is accessible
|
|
40
|
-
if (noFollow) {
|
|
41
|
-
_fs.default.lstat(fullPath, function(err) {
|
|
18
|
+
function waitForAccess(fullPath, noFollow, callback) {
|
|
19
|
+
callback = typeof noFollow === 'function' ? noFollow : callback;
|
|
20
|
+
noFollow = typeof noFollow === 'function' ? false : noFollow;
|
|
21
|
+
// Exponential backoff: 5, 10, 20, 40, 80, 160, 320, 640, 1280, 2560ms
|
|
22
|
+
// Total max wait: ~5 seconds
|
|
23
|
+
function waitSymlink(attempts, cb) {
|
|
24
|
+
_gracefulfs.default.lstat(fullPath, function(err) {
|
|
42
25
|
if (err) {
|
|
43
26
|
if (err.code === 'ENOENT' && attempts < 10) {
|
|
44
27
|
var delay = Math.min(5 * Math.pow(2, attempts), 2560);
|
|
45
28
|
return setTimeout(function() {
|
|
46
|
-
return
|
|
29
|
+
return waitSymlink(attempts + 1, cb);
|
|
47
30
|
}, delay);
|
|
48
31
|
}
|
|
49
|
-
return
|
|
32
|
+
return cb(err);
|
|
50
33
|
}
|
|
51
|
-
|
|
34
|
+
cb();
|
|
52
35
|
});
|
|
53
|
-
}
|
|
54
|
-
|
|
36
|
+
}
|
|
37
|
+
function waitOpen(attempts, cb) {
|
|
38
|
+
_gracefulfs.default.open(fullPath, 'r', function(err, fd) {
|
|
55
39
|
if (err) {
|
|
56
40
|
if (err.code === 'ENOENT' && attempts < 10) {
|
|
57
|
-
// Exponential backoff: 5, 10, 20, 40, 80, 160, 320, 640, 1280, 2560ms
|
|
58
|
-
// Total max wait: ~5 seconds
|
|
59
41
|
var delay = Math.min(5 * Math.pow(2, attempts), 2560);
|
|
60
42
|
return setTimeout(function() {
|
|
61
|
-
return
|
|
43
|
+
return waitOpen(attempts + 1, cb);
|
|
62
44
|
}, delay);
|
|
63
45
|
}
|
|
64
|
-
return
|
|
46
|
+
return cb(err);
|
|
65
47
|
}
|
|
66
|
-
|
|
67
|
-
return
|
|
48
|
+
_gracefulfs.default.close(fd, function() {
|
|
49
|
+
return cb();
|
|
68
50
|
});
|
|
69
51
|
});
|
|
70
52
|
}
|
|
53
|
+
// Windows: NTFS metadata may not be committed yet, verify accessibility
|
|
54
|
+
// Node 0.10: the write stream's finish/close events may fire before the file is fully flushed to disk
|
|
55
|
+
// For symlinks (noFollow=true), use lstat to check the link itself exists
|
|
56
|
+
// For files/dirs/hardlinks, use open to verify the file is accessible
|
|
57
|
+
noFollow ? waitSymlink(0, callback) : waitOpen(0, callback);
|
|
71
58
|
}
|
|
72
59
|
/* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/waitForAccess.ts"],"sourcesContent":["import fs from 'fs';\n\nimport type { NoParamCallback } from './types.ts';\n\
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/waitForAccess.ts"],"sourcesContent":["import fs from 'graceful-fs';\n\nimport type { NoParamCallback } from './types.ts';\n\n// Backward compatible: waitForAccess(path, callback) or waitForAccess(path, noFollow, callback)\nexport default function waitForAccess(fullPath: string, noFollow: boolean | NoParamCallback, callback?: NoParamCallback | number) {\n callback = typeof noFollow === 'function' ? noFollow : callback;\n noFollow = typeof noFollow === 'function' ? false : (noFollow as boolean);\n\n // Exponential backoff: 5, 10, 20, 40, 80, 160, 320, 640, 1280, 2560ms\n // Total max wait: ~5 seconds\n function waitSymlink(attempts, cb) {\n fs.lstat(fullPath, (err) => {\n if (err) {\n if (err.code === 'ENOENT' && attempts < 10) {\n const delay = Math.min(5 * 2 ** attempts, 2560);\n return setTimeout(() => waitSymlink(attempts + 1, cb), delay);\n }\n return cb(err);\n }\n cb();\n });\n }\n function waitOpen(attempts, cb) {\n fs.open(fullPath, 'r', (err, fd) => {\n if (err) {\n if (err.code === 'ENOENT' && attempts < 10) {\n const delay = Math.min(5 * 2 ** attempts, 2560);\n return setTimeout(() => waitOpen(attempts + 1, cb), delay);\n }\n return cb(err);\n }\n fs.close(fd, () => cb());\n });\n }\n\n // Windows: NTFS metadata may not be committed yet, verify accessibility\n // Node 0.10: the write stream's finish/close events may fire before the file is fully flushed to disk\n // For symlinks (noFollow=true), use lstat to check the link itself exists\n // For files/dirs/hardlinks, use open to verify the file is accessible\n noFollow ? waitSymlink(0, callback) : waitOpen(0, callback);\n}\n"],"names":["waitForAccess","fullPath","noFollow","callback","waitSymlink","attempts","cb","fs","lstat","err","code","delay","Math","min","setTimeout","waitOpen","open","fd","close"],"mappings":";;;;+BAIA,gGAAgG;AAChG;;;eAAwBA;;;iEALT;;;;;;AAKA,SAASA,cAAcC,QAAgB,EAAEC,QAAmC,EAAEC,QAAmC;IAC9HA,WAAW,OAAOD,aAAa,aAAaA,WAAWC;IACvDD,WAAW,OAAOA,aAAa,aAAa,QAASA;IAErD,sEAAsE;IACtE,6BAA6B;IAC7B,SAASE,YAAYC,QAAQ,EAAEC,EAAE;QAC/BC,mBAAE,CAACC,KAAK,CAACP,UAAU,SAACQ;YAClB,IAAIA,KAAK;gBACP,IAAIA,IAAIC,IAAI,KAAK,YAAYL,WAAW,IAAI;oBAC1C,IAAMM,QAAQC,KAAKC,GAAG,CAAC,aAAI,GAAKR,WAAU;oBAC1C,OAAOS,WAAW;+BAAMV,YAAYC,WAAW,GAAGC;uBAAKK;gBACzD;gBACA,OAAOL,GAAGG;YACZ;YACAH;QACF;IACF;IACA,SAASS,SAASV,QAAQ,EAAEC,EAAE;QAC5BC,mBAAE,CAACS,IAAI,CAACf,UAAU,KAAK,SAACQ,KAAKQ;YAC3B,IAAIR,KAAK;gBACP,IAAIA,IAAIC,IAAI,KAAK,YAAYL,WAAW,IAAI;oBAC1C,IAAMM,QAAQC,KAAKC,GAAG,CAAC,aAAI,GAAKR,WAAU;oBAC1C,OAAOS,WAAW;+BAAMC,SAASV,WAAW,GAAGC;uBAAKK;gBACtD;gBACA,OAAOL,GAAGG;YACZ;YACAF,mBAAE,CAACW,KAAK,CAACD,IAAI;uBAAMX;;QACrB;IACF;IAEA,wEAAwE;IACxE,sGAAsG;IACtG,0EAA0E;IAC1E,sEAAsE;IACtEJ,WAAWE,YAAY,GAAGD,YAAYY,SAAS,GAAGZ;AACpD"}
|
package/dist/esm/FileEntry.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/FileEntry.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/FileEntry.ts"],"sourcesContent":["import { rm } from 'fs-remove-compat';\nimport fs from 'graceful-fs';\nimport mkdirp from 'mkdirp-classic';\nimport path from 'path';\nimport Queue from 'queue-cb';\nimport chmod from './fs/chmod.ts';\nimport chown from './fs/chown.ts';\nimport utimes from './fs/utimes.ts';\nimport { objectAssign } from './shared/index.ts';\nimport stripPath from './shared/stripPath.ts';\nimport validateAttributes from './validateAttributes.ts';\nimport waitForAccess from './waitForAccess.ts';\n\nconst MANDATORY_ATTRIBUTES = ['mode', 'mtime', 'path'];\n\nimport type { Mode } from 'fs';\nimport type { ExtractOptions, FileAttributes, NoParamCallback, WriteFileFn } from './types.ts';\n\ninterface AbstractFileEntry {\n _writeFile: WriteFileFn;\n}\n\nexport default class FileEntry {\n mode: Mode;\n mtime: number;\n path: string;\n basename: string;\n type: string;\n\n constructor(attributes: FileAttributes) {\n validateAttributes(attributes, MANDATORY_ATTRIBUTES);\n objectAssign(this, attributes);\n if (this.basename === undefined) this.basename = path.basename(this.path);\n if (this.type === undefined) this.type = 'file';\n if ((this as unknown as AbstractFileEntry)._writeFile === undefined) throw new Error('File this missing _writeFile. Please implement this method in your subclass');\n }\n\n create(dest: string, callback: NoParamCallback): void;\n create(dest: string, options: ExtractOptions, callback: NoParamCallback): void;\n create(dest: string, options?: ExtractOptions): Promise<boolean>;\n create(dest: string, options?: ExtractOptions | NoParamCallback, callback?: NoParamCallback): void | Promise<boolean> {\n callback = typeof options === 'function' ? options : callback;\n options = typeof options === 'function' ? {} : ((options || {}) as ExtractOptions);\n\n if (typeof callback === 'function') {\n try {\n const normalizedPath = path.normalize(this.path);\n const fullPath = path.join(dest, stripPath(normalizedPath, options));\n\n const queue = new Queue(1);\n if (options.force) {\n queue.defer((callback) => {\n rm(fullPath, (err) => {\n err && err.code !== 'ENOENT' ? callback(err) : callback();\n });\n });\n } else {\n // Check if file exists - throw EEXIST if it does\n queue.defer((callback) => {\n fs.stat(fullPath, (err) => {\n if (!err) {\n const existsErr = new Error(`EEXIST: file already exists, open '${fullPath}'`) as NodeJS.ErrnoException;\n existsErr.code = 'EEXIST';\n existsErr.path = fullPath;\n return callback(existsErr);\n }\n // ENOENT means file doesn't exist - that's what we want\n if (err.code === 'ENOENT') return callback();\n // Other errors should be reported\n callback(err);\n });\n });\n }\n queue.defer(mkdirp.bind(null, path.dirname(fullPath)));\n queue.defer((this as unknown as AbstractFileEntry)._writeFile.bind(this, fullPath, options));\n queue.defer(waitForAccess.bind(null, fullPath));\n queue.defer(chmod.bind(null, fullPath, this, options));\n queue.defer(chown.bind(null, fullPath, this, options));\n queue.defer(utimes.bind(null, fullPath, this, options));\n queue.await(callback);\n return;\n } catch (err) {\n callback(err);\n return;\n }\n }\n\n return new Promise((resolve, reject) => {\n this.create(dest, options, (err?: Error, done?: boolean) => (err ? reject(err) : resolve(done)));\n });\n }\n\n destroy() {}\n}\n"],"names":["rm","fs","mkdirp","path","Queue","chmod","chown","utimes","objectAssign","stripPath","validateAttributes","waitForAccess","MANDATORY_ATTRIBUTES","FileEntry","create","dest","options","callback","normalizedPath","normalize","fullPath","join","queue","force","defer","err","code","stat","existsErr","Error","bind","dirname","_writeFile","await","Promise","resolve","reject","done","destroy","attributes","basename","undefined","type"],"mappings":"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"}
|
package/dist/esm/LinkEntry.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/LinkEntry.ts"],"sourcesContent":["import { rm } from 'fs-remove-compat';\nimport
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/LinkEntry.ts"],"sourcesContent":["import fs from 'fs';\nimport { rm } from 'fs-remove-compat';\nimport mkdirp from 'mkdirp-classic';\nimport path from 'path';\nimport Queue from 'queue-cb';\nimport chmod from './fs/chmod.ts';\nimport chown from './fs/chown.ts';\nimport utimes from './fs/utimes.ts';\nimport { objectAssign } from './shared/index.ts';\nimport stripPath from './shared/stripPath.ts';\nimport validateAttributes from './validateAttributes.ts';\nimport waitForAccess from './waitForAccess.ts';\n\nconst MANDATORY_ATTRIBUTES = ['mode', 'mtime', 'path', 'linkpath'];\n\nimport type { Mode } from 'fs';\nimport type { ExtractOptions, LinkAttributes, NoParamCallback } from './types.ts';\n\nexport default class LinkEntry {\n mode: Mode;\n mtime: number;\n path: string;\n linkpath: string;\n basename: string;\n type: string;\n\n constructor(attributes: LinkAttributes) {\n validateAttributes(attributes, MANDATORY_ATTRIBUTES);\n objectAssign(this, attributes);\n if (this.basename === undefined) this.basename = path.basename(this.path);\n if (this.type === undefined) this.type = 'link';\n }\n\n create(dest: string, callback: NoParamCallback): void;\n create(dest: string, options: ExtractOptions, callback: NoParamCallback): void;\n create(dest: string, options?: ExtractOptions): Promise<boolean>;\n create(dest: string, options?: ExtractOptions | NoParamCallback, callback?: NoParamCallback): void | Promise<boolean> {\n callback = typeof options === 'function' ? options : callback;\n options = typeof options === 'function' ? {} : ((options || {}) as ExtractOptions);\n\n if (typeof callback === 'function') {\n try {\n const normalizedPath = path.normalize(this.path);\n const fullPath = path.join(dest, stripPath(normalizedPath, options));\n const normalizedLinkpath = path.normalize(this.linkpath);\n const linkFullPath = path.join(dest, stripPath(normalizedLinkpath, options));\n\n const queue = new Queue(1);\n if (options.force) {\n queue.defer((callback) => {\n rm(fullPath, (err) => {\n err && err.code !== 'ENOENT' ? callback(err) : callback();\n });\n });\n }\n queue.defer(mkdirp.bind(null, path.dirname(fullPath)));\n queue.defer(fs.link.bind(fs, linkFullPath, fullPath));\n queue.defer(waitForAccess.bind(null, fullPath));\n queue.defer(chmod.bind(null, fullPath, this, options));\n queue.defer(chown.bind(null, fullPath, this, options));\n queue.defer(utimes.bind(null, fullPath, this, options));\n queue.await(callback);\n return;\n } catch (err) {\n callback(err);\n return;\n }\n }\n\n return new Promise((resolve, reject) => {\n this.create(dest, options, (err?: Error, done?: boolean) => (err ? reject(err) : resolve(done)));\n });\n }\n\n destroy() {}\n}\n"],"names":["fs","rm","mkdirp","path","Queue","chmod","chown","utimes","objectAssign","stripPath","validateAttributes","waitForAccess","MANDATORY_ATTRIBUTES","LinkEntry","create","dest","options","callback","normalizedPath","normalize","fullPath","join","normalizedLinkpath","linkpath","linkFullPath","queue","force","defer","err","code","bind","dirname","link","await","Promise","resolve","reject","done","destroy","attributes","basename","undefined","type"],"mappings":"AAAA,OAAOA,QAAQ,KAAK;AACpB,SAASC,EAAE,QAAQ,mBAAmB;AACtC,OAAOC,YAAY,iBAAiB;AACpC,OAAOC,UAAU,OAAO;AACxB,OAAOC,WAAW,WAAW;AAC7B,OAAOC,WAAW,gBAAgB;AAClC,OAAOC,WAAW,gBAAgB;AAClC,OAAOC,YAAY,iBAAiB;AACpC,SAASC,YAAY,QAAQ,oBAAoB;AACjD,OAAOC,eAAe,wBAAwB;AAC9C,OAAOC,wBAAwB,0BAA0B;AACzD,OAAOC,mBAAmB,qBAAqB;AAE/C,MAAMC,uBAAuB;IAAC;IAAQ;IAAS;IAAQ;CAAW;AAKnD,IAAA,AAAMC,YAAN,MAAMA;IAkBnBC,OAAOC,IAAY,EAAEC,OAA0C,EAAEC,QAA0B,EAA2B;QACpHA,WAAW,OAAOD,YAAY,aAAaA,UAAUC;QACrDD,UAAU,OAAOA,YAAY,aAAa,CAAC,IAAMA,WAAW,CAAC;QAE7D,IAAI,OAAOC,aAAa,YAAY;YAClC,IAAI;gBACF,MAAMC,iBAAiBf,KAAKgB,SAAS,CAAC,IAAI,CAAChB,IAAI;gBAC/C,MAAMiB,WAAWjB,KAAKkB,IAAI,CAACN,MAAMN,UAAUS,gBAAgBF;gBAC3D,MAAMM,qBAAqBnB,KAAKgB,SAAS,CAAC,IAAI,CAACI,QAAQ;gBACvD,MAAMC,eAAerB,KAAKkB,IAAI,CAACN,MAAMN,UAAUa,oBAAoBN;gBAEnE,MAAMS,QAAQ,IAAIrB,MAAM;gBACxB,IAAIY,QAAQU,KAAK,EAAE;oBACjBD,MAAME,KAAK,CAAC,CAACV;wBACXhB,GAAGmB,UAAU,CAACQ;4BACZA,OAAOA,IAAIC,IAAI,KAAK,WAAWZ,SAASW,OAAOX;wBACjD;oBACF;gBACF;gBACAQ,MAAME,KAAK,CAACzB,OAAO4B,IAAI,CAAC,MAAM3B,KAAK4B,OAAO,CAACX;gBAC3CK,MAAME,KAAK,CAAC3B,GAAGgC,IAAI,CAACF,IAAI,CAAC9B,IAAIwB,cAAcJ;gBAC3CK,MAAME,KAAK,CAAChB,cAAcmB,IAAI,CAAC,MAAMV;gBACrCK,MAAME,KAAK,CAACtB,MAAMyB,IAAI,CAAC,MAAMV,UAAU,IAAI,EAAEJ;gBAC7CS,MAAME,KAAK,CAACrB,MAAMwB,IAAI,CAAC,MAAMV,UAAU,IAAI,EAAEJ;gBAC7CS,MAAME,KAAK,CAACpB,OAAOuB,IAAI,CAAC,MAAMV,UAAU,IAAI,EAAEJ;gBAC9CS,MAAMQ,KAAK,CAAChB;gBACZ;YACF,EAAE,OAAOW,KAAK;gBACZX,SAASW;gBACT;YACF;QACF;QAEA,OAAO,IAAIM,QAAQ,CAACC,SAASC;YAC3B,IAAI,CAACtB,MAAM,CAACC,MAAMC,SAAS,CAACY,KAAaS,OAAoBT,MAAMQ,OAAOR,OAAOO,QAAQE;QAC3F;IACF;IAEAC,UAAU,CAAC;IAhDX,YAAYC,UAA0B,CAAE;QACtC7B,mBAAmB6B,YAAY3B;QAC/BJ,aAAa,IAAI,EAAE+B;QACnB,IAAI,IAAI,CAACC,QAAQ,KAAKC,WAAW,IAAI,CAACD,QAAQ,GAAGrC,KAAKqC,QAAQ,CAAC,IAAI,CAACrC,IAAI;QACxE,IAAI,IAAI,CAACuC,IAAI,KAAKD,WAAW,IAAI,CAACC,IAAI,GAAG;IAC3C;AA4CF;AAzDA,SAAqB7B,uBAyDpB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/SymbolicLinkEntry.ts"],"sourcesContent":["import { rm } from 'fs-remove-compat';\nimport
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/SymbolicLinkEntry.ts"],"sourcesContent":["import fs from 'fs';\nimport { rm } from 'fs-remove-compat';\nimport isAbsolute from 'is-absolute';\nimport mkdirp from 'mkdirp-classic';\nimport path from 'path';\nimport Queue from 'queue-cb';\nimport chmod from './fs/chmod.ts';\nimport chown from './fs/chown.ts';\nimport lutimes from './fs/lutimes.ts';\nimport symlinkWin32 from './fs/symlinkWin32.ts';\nimport { objectAssign } from './shared/index.ts';\nimport stripPath from './shared/stripPath.ts';\nimport validateAttributes from './validateAttributes.ts';\nimport waitForAccess from './waitForAccess.ts';\n\nconst isWindows = process.platform === 'win32' || /^(msys|cygwin)$/.test(process.env.OSTYPE);\n\nconst MANDATORY_ATTRIBUTES = ['mode', 'mtime', 'path', 'linkpath'];\n\nimport type { Mode } from 'fs';\nimport type { ExtractOptions, LinkAttributes, NoParamCallback } from './types.ts';\n\nexport default class SymbolicLinkEntry {\n mode: Mode;\n mtime: number;\n path: string;\n linkpath: string;\n basename: string;\n type: string;\n\n constructor(attributes: LinkAttributes) {\n validateAttributes(attributes, MANDATORY_ATTRIBUTES);\n objectAssign(this, attributes);\n if (this.basename === undefined) this.basename = path.basename(this.path);\n if (this.type === undefined) this.type = 'symlink';\n }\n\n create(dest: string, callback: NoParamCallback): void;\n create(dest: string, options: ExtractOptions, callback: NoParamCallback): void;\n create(dest: string, options?: ExtractOptions): Promise<boolean>;\n create(dest: string, options?: ExtractOptions | NoParamCallback, callback?: NoParamCallback): void | Promise<boolean> {\n callback = typeof options === 'function' ? options : callback;\n options = typeof options === 'function' ? {} : ((options || {}) as ExtractOptions);\n\n if (typeof callback === 'function') {\n try {\n const normalizedPath = path.normalize(this.path);\n const fullPath = path.join(dest, stripPath(normalizedPath, options));\n let normalizedLinkpath = path.normalize(this.linkpath);\n let linkFullPath = path.join(dest, stripPath(normalizedLinkpath, options));\n if (!isAbsolute(normalizedLinkpath)) {\n const linkRelativePath = path.join(path.dirname(normalizedPath), this.linkpath);\n linkFullPath = path.join(dest, stripPath(linkRelativePath, options));\n normalizedLinkpath = path.relative(path.dirname(fullPath), linkFullPath);\n }\n\n const queue = new Queue(1);\n if (options.force) {\n queue.defer((callback) => {\n rm(fullPath, (err) => {\n err && err.code !== 'ENOENT' ? callback(err) : callback();\n });\n });\n }\n queue.defer(mkdirp.bind(null, path.dirname(fullPath)));\n if (isWindows) queue.defer(symlinkWin32.bind(null, linkFullPath, normalizedLinkpath, fullPath));\n else queue.defer(fs.symlink.bind(fs, normalizedLinkpath, fullPath));\n queue.defer(waitForAccess.bind(null, fullPath, true)); // noFollow=true for symlinks\n queue.defer(chmod.bind(null, fullPath, this, options));\n queue.defer(chown.bind(null, fullPath, this, options));\n queue.defer(lutimes.bind(null, fullPath, this, options));\n queue.await(callback);\n return;\n } catch (err) {\n callback(err);\n return;\n }\n }\n\n return new Promise((resolve, reject) => {\n this.create(dest, options, (err?: Error, done?: boolean) => (err ? reject(err) : resolve(done)));\n });\n }\n\n destroy() {}\n}\n"],"names":["fs","rm","isAbsolute","mkdirp","path","Queue","chmod","chown","lutimes","symlinkWin32","objectAssign","stripPath","validateAttributes","waitForAccess","isWindows","process","platform","test","env","OSTYPE","MANDATORY_ATTRIBUTES","SymbolicLinkEntry","create","dest","options","callback","normalizedPath","normalize","fullPath","join","normalizedLinkpath","linkpath","linkFullPath","linkRelativePath","dirname","relative","queue","force","defer","err","code","bind","symlink","await","Promise","resolve","reject","done","destroy","attributes","basename","undefined","type"],"mappings":"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"}
|
package/dist/esm/fs/chmod.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type NoParamCallback } from 'fs';
|
|
2
2
|
import type { AbstractEntry, ExtractOptions } from '../types.js';
|
|
3
3
|
export default function chmodFn(fullPath: string, entry: AbstractEntry, _options: ExtractOptions, callback: NoParamCallback): void;
|
package/dist/esm/fs/chmod.js
CHANGED
package/dist/esm/fs/chmod.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/fs/chmod.ts"],"sourcesContent":["// adapted from https://github.com/mafintosh/tar-fs\n\nimport
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/fs/chmod.ts"],"sourcesContent":["// adapted from https://github.com/mafintosh/tar-fs\n\nimport fs, { type NoParamCallback } from 'fs';\nimport type { AbstractEntry, ExtractOptions } from '../types.ts';\n\nconst UMASK = process.umask ? process.umask() : null;\nconst DMODE = 0o755;\nconst FMODE = 0o644;\nconst SMODE = 0o755;\nconst LMODE = 0o644;\n\nexport default function chmodFn(fullPath: string, entry: AbstractEntry, _options: ExtractOptions, callback: NoParamCallback) {\n const chmod = entry.type === 'symlink' ? fs.lchmod : fs.chmod;\n if (!chmod || UMASK === null) return callback(null);\n\n let mode = entry.mode;\n if (!mode) {\n switch (entry.type) {\n case 'directory':\n mode = DMODE;\n break;\n case 'file':\n mode = FMODE;\n break;\n case 'symlink':\n mode = SMODE;\n break;\n case 'link':\n mode = LMODE;\n break;\n }\n }\n chmod(fullPath, (mode as number) & ~UMASK, callback);\n}\n"],"names":["fs","UMASK","process","umask","DMODE","FMODE","SMODE","LMODE","chmodFn","fullPath","entry","_options","callback","chmod","type","lchmod","mode"],"mappings":"AAAA,mDAAmD;AAEnD,OAAOA,QAAkC,KAAK;AAG9C,MAAMC,QAAQC,QAAQC,KAAK,GAAGD,QAAQC,KAAK,KAAK;AAChD,MAAMC,QAAQ;AACd,MAAMC,QAAQ;AACd,MAAMC,QAAQ;AACd,MAAMC,QAAQ;AAEd,eAAe,SAASC,QAAQC,QAAgB,EAAEC,KAAoB,EAAEC,QAAwB,EAAEC,QAAyB;IACzH,MAAMC,QAAQH,MAAMI,IAAI,KAAK,YAAYd,GAAGe,MAAM,GAAGf,GAAGa,KAAK;IAC7D,IAAI,CAACA,SAASZ,UAAU,MAAM,OAAOW,SAAS;IAE9C,IAAII,OAAON,MAAMM,IAAI;IACrB,IAAI,CAACA,MAAM;QACT,OAAQN,MAAMI,IAAI;YAChB,KAAK;gBACHE,OAAOZ;gBACP;YACF,KAAK;gBACHY,OAAOX;gBACP;YACF,KAAK;gBACHW,OAAOV;gBACP;YACF,KAAK;gBACHU,OAAOT;gBACP;QACJ;IACF;IACAM,MAAMJ,UAAU,AAACO,OAAkB,CAACf,OAAOW;AAC7C"}
|
package/dist/esm/fs/chown.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type NoParamCallback } from 'fs';
|
|
2
2
|
import type { AbstractEntry, ExtractOptions } from '../types.js';
|
|
3
3
|
export default function chownFn(fullPath: string, entry: AbstractEntry, _options: ExtractOptions, callback: NoParamCallback): void;
|
package/dist/esm/fs/chown.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// adapted from https://github.com/mafintosh/tar-fs
|
|
2
|
-
import fs from '
|
|
2
|
+
import fs from 'fs';
|
|
3
3
|
const UID = process.getuid ? process.getuid() : -1;
|
|
4
4
|
const OWN = process.platform !== 'win32' && UID === 0;
|
|
5
5
|
export default function chownFn(fullPath, entry, _options, callback) {
|
package/dist/esm/fs/chown.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/fs/chown.ts"],"sourcesContent":["// adapted from https://github.com/mafintosh/tar-fs\n\nimport
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/fs/chown.ts"],"sourcesContent":["// adapted from https://github.com/mafintosh/tar-fs\n\nimport fs, { type NoParamCallback } from 'fs';\nimport type { AbstractEntry, ExtractOptions } from '../types.ts';\n\nconst UID = process.getuid ? process.getuid() : -1;\nconst OWN = process.platform !== 'win32' && UID === 0;\n\nexport default function chownFn(fullPath: string, entry: AbstractEntry, _options: ExtractOptions, callback: NoParamCallback) {\n const chown = entry.type === 'symlink' ? fs.lchown : fs.chown;\n if (!chown || !OWN || !entry.uid || !entry.gid) return callback(null);\n chown(fullPath, entry.uid, entry.gid, callback);\n}\n"],"names":["fs","UID","process","getuid","OWN","platform","chownFn","fullPath","entry","_options","callback","chown","type","lchown","uid","gid"],"mappings":"AAAA,mDAAmD;AAEnD,OAAOA,QAAkC,KAAK;AAG9C,MAAMC,MAAMC,QAAQC,MAAM,GAAGD,QAAQC,MAAM,KAAK,CAAC;AACjD,MAAMC,MAAMF,QAAQG,QAAQ,KAAK,WAAWJ,QAAQ;AAEpD,eAAe,SAASK,QAAQC,QAAgB,EAAEC,KAAoB,EAAEC,QAAwB,EAAEC,QAAyB;IACzH,MAAMC,QAAQH,MAAMI,IAAI,KAAK,YAAYZ,GAAGa,MAAM,GAAGb,GAAGW,KAAK;IAC7D,IAAI,CAACA,SAAS,CAACP,OAAO,CAACI,MAAMM,GAAG,IAAI,CAACN,MAAMO,GAAG,EAAE,OAAOL,SAAS;IAChEC,MAAMJ,UAAUC,MAAMM,GAAG,EAAEN,MAAMO,GAAG,EAAEL;AACxC"}
|
package/dist/esm/fs/lutimes.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type NoParamCallback } from 'fs';
|
|
2
2
|
import type { AbstractEntry, ExtractOptions } from '../types.js';
|
|
3
3
|
export default function lutimes(fullPath: string, entry: AbstractEntry, options: ExtractOptions, callback: NoParamCallback): void;
|
package/dist/esm/fs/lutimes.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// lutimes - set times on symlinks without following them
|
|
2
2
|
// fs.lutimes was added in Node.js 14.5.0
|
|
3
3
|
// For older versions, we skip setting times on symlinks (no good alternative)
|
|
4
|
-
import fs from '
|
|
4
|
+
import fs from 'fs';
|
|
5
5
|
// biome-ignore lint/suspicious/noExplicitAny: fs.lutimes not in older @types/node
|
|
6
6
|
const HAS_LUTIMES = typeof fs.lutimes === 'function';
|
|
7
7
|
export default function lutimes(fullPath, entry, options, callback) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/fs/lutimes.ts"],"sourcesContent":["// lutimes - set times on symlinks without following them\n// fs.lutimes was added in Node.js 14.5.0\n// For older versions, we skip setting times on symlinks (no good alternative)\n\nimport
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/fs/lutimes.ts"],"sourcesContent":["// lutimes - set times on symlinks without following them\n// fs.lutimes was added in Node.js 14.5.0\n// For older versions, we skip setting times on symlinks (no good alternative)\n\nimport fs, { type NoParamCallback } from 'fs';\nimport type { AbstractEntry, ExtractOptions } from '../types.ts';\n\n// biome-ignore lint/suspicious/noExplicitAny: fs.lutimes not in older @types/node\nconst HAS_LUTIMES = typeof (fs as any).lutimes === 'function';\n\nexport default function lutimes(fullPath: string, entry: AbstractEntry, options: ExtractOptions, callback: NoParamCallback): void {\n if (HAS_LUTIMES) {\n const now = options.now || new Date();\n // biome-ignore lint/suspicious/noExplicitAny: fs.lutimes not in older @types/node\n (fs as any).lutimes(fullPath, now, new Date(entry.mtime), callback);\n } else {\n // On older Node versions, skip setting times on symlinks\n // fs.utimes follows symlinks and will fail with ENOENT if target doesn't exist\n callback(null);\n }\n}\n"],"names":["fs","HAS_LUTIMES","lutimes","fullPath","entry","options","callback","now","Date","mtime"],"mappings":"AAAA,yDAAyD;AACzD,yCAAyC;AACzC,8EAA8E;AAE9E,OAAOA,QAAkC,KAAK;AAG9C,kFAAkF;AAClF,MAAMC,cAAc,OAAO,AAACD,GAAWE,OAAO,KAAK;AAEnD,eAAe,SAASA,QAAQC,QAAgB,EAAEC,KAAoB,EAAEC,OAAuB,EAAEC,QAAyB;IACxH,IAAIL,aAAa;QACf,MAAMM,MAAMF,QAAQE,GAAG,IAAI,IAAIC;QAC/B,kFAAkF;QACjFR,GAAWE,OAAO,CAACC,UAAUI,KAAK,IAAIC,KAAKJ,MAAMK,KAAK,GAAGH;IAC5D,OAAO;QACL,yDAAyD;QACzD,+EAA+E;QAC/EA,SAAS;IACX;AACF"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type NoParamCallback } from 'fs';
|
|
2
2
|
export default function symlinkWin32(linkFullPath: string, linkpath: string, fullPath: string, callback: NoParamCallback): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/fs/symlinkWin32.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/fs/symlinkWin32.ts"],"sourcesContent":["import fs, { type NoParamCallback } from 'fs';\nimport lstatReal from './lstatReal.ts';\n\nexport default function symlinkWin32(linkFullPath: string, linkpath: string, fullPath: string, callback: NoParamCallback) {\n lstatReal(linkFullPath, (err, targetStat) => {\n // If target doesn't exist, default to 'file' type (Windows requires a type for symlinks)\n const type = !err && targetStat?.isDirectory() ? 'dir' : 'file';\n fs.symlink(linkpath, fullPath, type, callback);\n });\n}\n"],"names":["fs","lstatReal","symlinkWin32","linkFullPath","linkpath","fullPath","callback","err","targetStat","type","isDirectory","symlink"],"mappings":"AAAA,OAAOA,QAAkC,KAAK;AAC9C,OAAOC,eAAe,iBAAiB;AAEvC,eAAe,SAASC,aAAaC,YAAoB,EAAEC,QAAgB,EAAEC,QAAgB,EAAEC,QAAyB;IACtHL,UAAUE,cAAc,CAACI,KAAKC;QAC5B,yFAAyF;QACzF,MAAMC,OAAO,CAACF,QAAOC,uBAAAA,iCAAAA,WAAYE,WAAW,MAAK,QAAQ;QACzDV,GAAGW,OAAO,CAACP,UAAUC,UAAUI,MAAMH;IACvC;AACF"}
|
package/dist/esm/fs/utimes.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type NoParamCallback } from 'fs';
|
|
2
2
|
import type { AbstractEntry, ExtractOptions } from '../types.js';
|
|
3
3
|
export default function utimes(fullPath: string, entry: AbstractEntry, options: ExtractOptions, callback: NoParamCallback): void;
|
package/dist/esm/fs/utimes.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// adapted from https://github.com/mafintosh/tar-fs
|
|
2
|
-
import fs from '
|
|
2
|
+
import fs from 'fs';
|
|
3
3
|
export default function utimes(fullPath, entry, options, callback) {
|
|
4
4
|
const now = options.now || new Date();
|
|
5
5
|
fs.utimes(fullPath, now, new Date(entry.mtime), callback);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/fs/utimes.ts"],"sourcesContent":["// adapted from https://github.com/mafintosh/tar-fs\n\nimport
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/fs/utimes.ts"],"sourcesContent":["// adapted from https://github.com/mafintosh/tar-fs\n\nimport fs, { type NoParamCallback } from 'fs';\nimport type { AbstractEntry, ExtractOptions } from '../types.ts';\n\nexport default function utimes(fullPath: string, entry: AbstractEntry, options: ExtractOptions, callback: NoParamCallback): void {\n const now = options.now || new Date();\n fs.utimes(fullPath, now, new Date(entry.mtime), callback);\n}\n"],"names":["fs","utimes","fullPath","entry","options","callback","now","Date","mtime"],"mappings":"AAAA,mDAAmD;AAEnD,OAAOA,QAAkC,KAAK;AAG9C,eAAe,SAASC,OAAOC,QAAgB,EAAEC,KAAoB,EAAEC,OAAuB,EAAEC,QAAyB;IACvH,MAAMC,MAAMF,QAAQE,GAAG,IAAI,IAAIC;IAC/BP,GAAGC,MAAM,CAACC,UAAUI,KAAK,IAAIC,KAAKJ,MAAMK,KAAK,GAAGH;AAClD"}
|
|
@@ -10,13 +10,12 @@
|
|
|
10
10
|
* - tar-iterator
|
|
11
11
|
* - Any other archive iterator library
|
|
12
12
|
*/
|
|
13
|
-
import
|
|
14
|
-
declare let ReadableBase: typeof Stream.Readable;
|
|
13
|
+
import { Readable } from './compat.js';
|
|
15
14
|
/**
|
|
16
15
|
* Base stream class for archive entry content.
|
|
17
16
|
* Can be extended for special entry types like sparse files.
|
|
18
17
|
*/
|
|
19
|
-
export default class EntryStream extends
|
|
18
|
+
export default class EntryStream extends Readable {
|
|
20
19
|
protected _ended: boolean;
|
|
21
20
|
/**
|
|
22
21
|
* Signal end of stream by pushing null
|
|
@@ -32,4 +31,3 @@ export default class EntryStream extends ReadableBase {
|
|
|
32
31
|
*/
|
|
33
32
|
_read(_size: number): void;
|
|
34
33
|
}
|
|
35
|
-
export {};
|
|
@@ -9,16 +9,8 @@
|
|
|
9
9
|
* - 7z-iterator
|
|
10
10
|
* - tar-iterator
|
|
11
11
|
* - Any other archive iterator library
|
|
12
|
-
*/ import
|
|
13
|
-
|
|
14
|
-
const major = +process.versions.node.split('.')[0];
|
|
15
|
-
let ReadableBase;
|
|
16
|
-
if (major > 0) {
|
|
17
|
-
ReadableBase = Stream.Readable;
|
|
18
|
-
} else {
|
|
19
|
-
ReadableBase = require('readable-stream').Readable;
|
|
20
|
-
}
|
|
21
|
-
let EntryStream = class EntryStream extends ReadableBase {
|
|
12
|
+
*/ import { Readable } from './compat.js';
|
|
13
|
+
let EntryStream = class EntryStream extends Readable {
|
|
22
14
|
/**
|
|
23
15
|
* Signal end of stream by pushing null
|
|
24
16
|
*/ end() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/shared/EntryStream.ts"],"sourcesContent":["/**\n * EntryStream - Simple readable stream for entry content\n *\n * Extends Readable to emit 'data', 'end', 'error' events.\n * Node 0.8 compatible via readable-stream polyfill.\n *\n * This base class is designed to be used by:\n * - zip-iterator\n * - 7z-iterator\n * - tar-iterator\n * - Any other archive iterator library\n */\n\nimport
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/shared/EntryStream.ts"],"sourcesContent":["/**\n * EntryStream - Simple readable stream for entry content\n *\n * Extends Readable to emit 'data', 'end', 'error' events.\n * Node 0.8 compatible via readable-stream polyfill.\n *\n * This base class is designed to be used by:\n * - zip-iterator\n * - 7z-iterator\n * - tar-iterator\n * - Any other archive iterator library\n */\n\nimport { Readable } from './compat.ts';\n\n/**\n * Base stream class for archive entry content.\n * Can be extended for special entry types like sparse files.\n */\nexport default class EntryStream extends Readable {\n protected _ended = false;\n\n /**\n * Signal end of stream by pushing null\n */\n end(): void {\n if (this._ended) return;\n this._ended = true;\n this.push(null);\n }\n\n /**\n * Check if stream has ended\n */\n get ended(): boolean {\n return this._ended;\n }\n\n /**\n * Required by Readable - called when consumer wants data.\n * Data is pushed externally via push(), nothing to do here.\n */\n _read(_size: number): void {\n // Data is pushed externally, nothing to do here\n }\n}\n"],"names":["Readable","EntryStream","end","_ended","push","ended","_read","_size"],"mappings":"AAAA;;;;;;;;;;;CAWC,GAED,SAASA,QAAQ,QAAQ,cAAc;AAMxB,IAAA,AAAMC,cAAN,MAAMA,oBAAoBD;IAGvC;;GAEC,GACDE,MAAY;QACV,IAAI,IAAI,CAACC,MAAM,EAAE;QACjB,IAAI,CAACA,MAAM,GAAG;QACd,IAAI,CAACC,IAAI,CAAC;IACZ;IAEA;;GAEC,GACD,IAAIC,QAAiB;QACnB,OAAO,IAAI,CAACF,MAAM;IACpB;IAEA;;;GAGC,GACDG,MAAMC,KAAa,EAAQ;IACzB,gDAAgD;IAClD;;QAzBa,qBACHJ,SAAS;;AAyBrB;AA9BA;;;CAGC,GACD,SAAqBF,yBA0BpB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { NoParamCallback } from './types.js';
|
|
2
|
-
export default function waitForAccess(fullPath: string,
|
|
2
|
+
export default function waitForAccess(fullPath: string, noFollow: boolean | NoParamCallback, callback?: NoParamCallback | number): void;
|
|
@@ -1,49 +1,37 @@
|
|
|
1
|
-
import fs from 'fs';
|
|
2
|
-
const isWindows = process.platform === 'win32' || /^(msys|cygwin)$/.test(process.env.OSTYPE);
|
|
1
|
+
import fs from 'graceful-fs';
|
|
3
2
|
// Backward compatible: waitForAccess(path, callback) or waitForAccess(path, noFollow, callback)
|
|
4
|
-
export default function waitForAccess(fullPath,
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
noFollow = false;
|
|
11
|
-
callback = noFollowOrCallback;
|
|
12
|
-
attempts = callbackOrAttempts || 0;
|
|
13
|
-
} else {
|
|
14
|
-
// New signature: waitForAccess(path, noFollow, callback, attempts?)
|
|
15
|
-
noFollow = noFollowOrCallback;
|
|
16
|
-
callback = callbackOrAttempts;
|
|
17
|
-
}
|
|
18
|
-
// POSIX: finish event is reliable after decompression stream fixes
|
|
19
|
-
// Avoid Zalgo: ensure callback is always async for consistent API
|
|
20
|
-
if (!isWindows) return process.nextTick(callback);
|
|
21
|
-
// Windows: NTFS metadata may not be committed yet, verify accessibility
|
|
22
|
-
// For symlinks (noFollow=true), use lstat to check the link itself exists
|
|
23
|
-
// For files/dirs/hardlinks, use open to verify the file is accessible
|
|
24
|
-
if (noFollow) {
|
|
3
|
+
export default function waitForAccess(fullPath, noFollow, callback) {
|
|
4
|
+
callback = typeof noFollow === 'function' ? noFollow : callback;
|
|
5
|
+
noFollow = typeof noFollow === 'function' ? false : noFollow;
|
|
6
|
+
// Exponential backoff: 5, 10, 20, 40, 80, 160, 320, 640, 1280, 2560ms
|
|
7
|
+
// Total max wait: ~5 seconds
|
|
8
|
+
function waitSymlink(attempts, cb) {
|
|
25
9
|
fs.lstat(fullPath, (err)=>{
|
|
26
10
|
if (err) {
|
|
27
11
|
if (err.code === 'ENOENT' && attempts < 10) {
|
|
28
12
|
const delay = Math.min(5 * 2 ** attempts, 2560);
|
|
29
|
-
return setTimeout(()=>
|
|
13
|
+
return setTimeout(()=>waitSymlink(attempts + 1, cb), delay);
|
|
30
14
|
}
|
|
31
|
-
return
|
|
15
|
+
return cb(err);
|
|
32
16
|
}
|
|
33
|
-
|
|
17
|
+
cb();
|
|
34
18
|
});
|
|
35
|
-
}
|
|
19
|
+
}
|
|
20
|
+
function waitOpen(attempts, cb) {
|
|
36
21
|
fs.open(fullPath, 'r', (err, fd)=>{
|
|
37
22
|
if (err) {
|
|
38
23
|
if (err.code === 'ENOENT' && attempts < 10) {
|
|
39
|
-
// Exponential backoff: 5, 10, 20, 40, 80, 160, 320, 640, 1280, 2560ms
|
|
40
|
-
// Total max wait: ~5 seconds
|
|
41
24
|
const delay = Math.min(5 * 2 ** attempts, 2560);
|
|
42
|
-
return setTimeout(()=>
|
|
25
|
+
return setTimeout(()=>waitOpen(attempts + 1, cb), delay);
|
|
43
26
|
}
|
|
44
|
-
return
|
|
27
|
+
return cb(err);
|
|
45
28
|
}
|
|
46
|
-
fs.close(fd, ()=>
|
|
29
|
+
fs.close(fd, ()=>cb());
|
|
47
30
|
});
|
|
48
31
|
}
|
|
32
|
+
// Windows: NTFS metadata may not be committed yet, verify accessibility
|
|
33
|
+
// Node 0.10: the write stream's finish/close events may fire before the file is fully flushed to disk
|
|
34
|
+
// For symlinks (noFollow=true), use lstat to check the link itself exists
|
|
35
|
+
// For files/dirs/hardlinks, use open to verify the file is accessible
|
|
36
|
+
noFollow ? waitSymlink(0, callback) : waitOpen(0, callback);
|
|
49
37
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/waitForAccess.ts"],"sourcesContent":["import fs from 'fs';\n\nimport type { NoParamCallback } from './types.ts';\n\
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/waitForAccess.ts"],"sourcesContent":["import fs from 'graceful-fs';\n\nimport type { NoParamCallback } from './types.ts';\n\n// Backward compatible: waitForAccess(path, callback) or waitForAccess(path, noFollow, callback)\nexport default function waitForAccess(fullPath: string, noFollow: boolean | NoParamCallback, callback?: NoParamCallback | number) {\n callback = typeof noFollow === 'function' ? noFollow : callback;\n noFollow = typeof noFollow === 'function' ? false : (noFollow as boolean);\n\n // Exponential backoff: 5, 10, 20, 40, 80, 160, 320, 640, 1280, 2560ms\n // Total max wait: ~5 seconds\n function waitSymlink(attempts, cb) {\n fs.lstat(fullPath, (err) => {\n if (err) {\n if (err.code === 'ENOENT' && attempts < 10) {\n const delay = Math.min(5 * 2 ** attempts, 2560);\n return setTimeout(() => waitSymlink(attempts + 1, cb), delay);\n }\n return cb(err);\n }\n cb();\n });\n }\n function waitOpen(attempts, cb) {\n fs.open(fullPath, 'r', (err, fd) => {\n if (err) {\n if (err.code === 'ENOENT' && attempts < 10) {\n const delay = Math.min(5 * 2 ** attempts, 2560);\n return setTimeout(() => waitOpen(attempts + 1, cb), delay);\n }\n return cb(err);\n }\n fs.close(fd, () => cb());\n });\n }\n\n // Windows: NTFS metadata may not be committed yet, verify accessibility\n // Node 0.10: the write stream's finish/close events may fire before the file is fully flushed to disk\n // For symlinks (noFollow=true), use lstat to check the link itself exists\n // For files/dirs/hardlinks, use open to verify the file is accessible\n noFollow ? waitSymlink(0, callback) : waitOpen(0, callback);\n}\n"],"names":["fs","waitForAccess","fullPath","noFollow","callback","waitSymlink","attempts","cb","lstat","err","code","delay","Math","min","setTimeout","waitOpen","open","fd","close"],"mappings":"AAAA,OAAOA,QAAQ,cAAc;AAI7B,gGAAgG;AAChG,eAAe,SAASC,cAAcC,QAAgB,EAAEC,QAAmC,EAAEC,QAAmC;IAC9HA,WAAW,OAAOD,aAAa,aAAaA,WAAWC;IACvDD,WAAW,OAAOA,aAAa,aAAa,QAASA;IAErD,sEAAsE;IACtE,6BAA6B;IAC7B,SAASE,YAAYC,QAAQ,EAAEC,EAAE;QAC/BP,GAAGQ,KAAK,CAACN,UAAU,CAACO;YAClB,IAAIA,KAAK;gBACP,IAAIA,IAAIC,IAAI,KAAK,YAAYJ,WAAW,IAAI;oBAC1C,MAAMK,QAAQC,KAAKC,GAAG,CAAC,IAAI,KAAKP,UAAU;oBAC1C,OAAOQ,WAAW,IAAMT,YAAYC,WAAW,GAAGC,KAAKI;gBACzD;gBACA,OAAOJ,GAAGE;YACZ;YACAF;QACF;IACF;IACA,SAASQ,SAAST,QAAQ,EAAEC,EAAE;QAC5BP,GAAGgB,IAAI,CAACd,UAAU,KAAK,CAACO,KAAKQ;YAC3B,IAAIR,KAAK;gBACP,IAAIA,IAAIC,IAAI,KAAK,YAAYJ,WAAW,IAAI;oBAC1C,MAAMK,QAAQC,KAAKC,GAAG,CAAC,IAAI,KAAKP,UAAU;oBAC1C,OAAOQ,WAAW,IAAMC,SAAST,WAAW,GAAGC,KAAKI;gBACtD;gBACA,OAAOJ,GAAGE;YACZ;YACAT,GAAGkB,KAAK,CAACD,IAAI,IAAMV;QACrB;IACF;IAEA,wEAAwE;IACxE,sGAAsG;IACtG,0EAA0E;IAC1E,sEAAsE;IACtEJ,WAAWE,YAAY,GAAGD,YAAYW,SAAS,GAAGX;AACpD"}
|