8d27c9ba9965bb39b828e3464b0d0799b1008534529bd01cb673393553591501767f783f10b969367e9e304492d4b87dfb93be23443a63416f4268c44c6641 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. "use strict";
  2. var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
  3. if (k2 === undefined) k2 = k;
  4. var desc = Object.getOwnPropertyDescriptor(m, k);
  5. if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
  6. desc = { enumerable: true, get: function() { return m[k]; } };
  7. }
  8. Object.defineProperty(o, k2, desc);
  9. }) : (function(o, m, k, k2) {
  10. if (k2 === undefined) k2 = k;
  11. o[k2] = m[k];
  12. }));
  13. var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
  14. Object.defineProperty(o, "default", { enumerable: true, value: v });
  15. }) : function(o, v) {
  16. o["default"] = v;
  17. });
  18. var __importStar = (this && this.__importStar) || function (mod) {
  19. if (mod && mod.__esModule) return mod;
  20. var result = {};
  21. if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
  22. __setModuleDefault(result, mod);
  23. return result;
  24. };
  25. var __importDefault = (this && this.__importDefault) || function (mod) {
  26. return (mod && mod.__esModule) ? mod : { "default": mod };
  27. };
  28. Object.defineProperty(exports, "__esModule", { value: true });
  29. exports.list = exports.filesFilter = void 0;
  30. // tar -t
  31. const fsm = __importStar(require("@isaacs/fs-minipass"));
  32. const node_fs_1 = __importDefault(require("node:fs"));
  33. const path_1 = require("path");
  34. const make_command_js_1 = require("./make-command.js");
  35. const parse_js_1 = require("./parse.js");
  36. const strip_trailing_slashes_js_1 = require("./strip-trailing-slashes.js");
  37. const onReadEntryFunction = (opt) => {
  38. const onReadEntry = opt.onReadEntry;
  39. opt.onReadEntry =
  40. onReadEntry ?
  41. e => {
  42. onReadEntry(e);
  43. e.resume();
  44. }
  45. : e => e.resume();
  46. };
  47. // construct a filter that limits the file entries listed
  48. // include child entries if a dir is included
  49. const filesFilter = (opt, files) => {
  50. const map = new Map(files.map(f => [(0, strip_trailing_slashes_js_1.stripTrailingSlashes)(f), true]));
  51. const filter = opt.filter;
  52. const mapHas = (file, r = '') => {
  53. const root = r || (0, path_1.parse)(file).root || '.';
  54. let ret;
  55. if (file === root)
  56. ret = false;
  57. else {
  58. const m = map.get(file);
  59. if (m !== undefined) {
  60. ret = m;
  61. }
  62. else {
  63. ret = mapHas((0, path_1.dirname)(file), root);
  64. }
  65. }
  66. map.set(file, ret);
  67. return ret;
  68. };
  69. opt.filter =
  70. filter ?
  71. (file, entry) => filter(file, entry) && mapHas((0, strip_trailing_slashes_js_1.stripTrailingSlashes)(file))
  72. : file => mapHas((0, strip_trailing_slashes_js_1.stripTrailingSlashes)(file));
  73. };
  74. exports.filesFilter = filesFilter;
  75. const listFileSync = (opt) => {
  76. const p = new parse_js_1.Parser(opt);
  77. const file = opt.file;
  78. let fd;
  79. try {
  80. const stat = node_fs_1.default.statSync(file);
  81. const readSize = opt.maxReadSize || 16 * 1024 * 1024;
  82. if (stat.size < readSize) {
  83. p.end(node_fs_1.default.readFileSync(file));
  84. }
  85. else {
  86. let pos = 0;
  87. const buf = Buffer.allocUnsafe(readSize);
  88. fd = node_fs_1.default.openSync(file, 'r');
  89. while (pos < stat.size) {
  90. const bytesRead = node_fs_1.default.readSync(fd, buf, 0, readSize, pos);
  91. pos += bytesRead;
  92. p.write(buf.subarray(0, bytesRead));
  93. }
  94. p.end();
  95. }
  96. }
  97. finally {
  98. if (typeof fd === 'number') {
  99. try {
  100. node_fs_1.default.closeSync(fd);
  101. /* c8 ignore next */
  102. }
  103. catch (er) { }
  104. }
  105. }
  106. };
  107. const listFile = (opt, _files) => {
  108. const parse = new parse_js_1.Parser(opt);
  109. const readSize = opt.maxReadSize || 16 * 1024 * 1024;
  110. const file = opt.file;
  111. const p = new Promise((resolve, reject) => {
  112. parse.on('error', reject);
  113. parse.on('end', resolve);
  114. node_fs_1.default.stat(file, (er, stat) => {
  115. if (er) {
  116. reject(er);
  117. }
  118. else {
  119. const stream = new fsm.ReadStream(file, {
  120. readSize: readSize,
  121. size: stat.size,
  122. });
  123. stream.on('error', reject);
  124. stream.pipe(parse);
  125. }
  126. });
  127. });
  128. return p;
  129. };
  130. exports.list = (0, make_command_js_1.makeCommand)(listFileSync, listFile, opt => new parse_js_1.Parser(opt), opt => new parse_js_1.Parser(opt), (opt, files) => {
  131. if (files?.length)
  132. (0, exports.filesFilter)(opt, files);
  133. if (!opt.noResume)
  134. onReadEntryFunction(opt);
  135. });
  136. //# sourceMappingURL=list.js.map