@nocobase/plugin-action-import 2.3.0-beta.11 → 2.3.0-beta.13

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.
Files changed (68) hide show
  1. package/dist/externalVersion.js +9 -9
  2. package/dist/node_modules/exceljs/excel.js +14 -14
  3. package/dist/node_modules/exceljs/node_modules/tmp/lib/tmp.js +222 -134
  4. package/dist/node_modules/exceljs/node_modules/tmp/package.json +5 -17
  5. package/dist/node_modules/exceljs/package.json +1 -1
  6. package/dist/node_modules/xlsx/package.json +1 -1
  7. package/package.json +2 -2
  8. package/dist/node_modules/exceljs/node_modules/uuid/dist/bin/uuid +0 -2
  9. package/dist/node_modules/exceljs/node_modules/uuid/dist/esm-browser/index.js +0 -9
  10. package/dist/node_modules/exceljs/node_modules/uuid/dist/esm-browser/md5.js +0 -215
  11. package/dist/node_modules/exceljs/node_modules/uuid/dist/esm-browser/nil.js +0 -1
  12. package/dist/node_modules/exceljs/node_modules/uuid/dist/esm-browser/parse.js +0 -35
  13. package/dist/node_modules/exceljs/node_modules/uuid/dist/esm-browser/regex.js +0 -1
  14. package/dist/node_modules/exceljs/node_modules/uuid/dist/esm-browser/rng.js +0 -19
  15. package/dist/node_modules/exceljs/node_modules/uuid/dist/esm-browser/sha1.js +0 -96
  16. package/dist/node_modules/exceljs/node_modules/uuid/dist/esm-browser/stringify.js +0 -30
  17. package/dist/node_modules/exceljs/node_modules/uuid/dist/esm-browser/v1.js +0 -95
  18. package/dist/node_modules/exceljs/node_modules/uuid/dist/esm-browser/v3.js +0 -4
  19. package/dist/node_modules/exceljs/node_modules/uuid/dist/esm-browser/v35.js +0 -64
  20. package/dist/node_modules/exceljs/node_modules/uuid/dist/esm-browser/v4.js +0 -24
  21. package/dist/node_modules/exceljs/node_modules/uuid/dist/esm-browser/v5.js +0 -4
  22. package/dist/node_modules/exceljs/node_modules/uuid/dist/esm-browser/validate.js +0 -7
  23. package/dist/node_modules/exceljs/node_modules/uuid/dist/esm-browser/version.js +0 -11
  24. package/dist/node_modules/exceljs/node_modules/uuid/dist/esm-node/index.js +0 -9
  25. package/dist/node_modules/exceljs/node_modules/uuid/dist/esm-node/md5.js +0 -13
  26. package/dist/node_modules/exceljs/node_modules/uuid/dist/esm-node/nil.js +0 -1
  27. package/dist/node_modules/exceljs/node_modules/uuid/dist/esm-node/parse.js +0 -35
  28. package/dist/node_modules/exceljs/node_modules/uuid/dist/esm-node/regex.js +0 -1
  29. package/dist/node_modules/exceljs/node_modules/uuid/dist/esm-node/rng.js +0 -12
  30. package/dist/node_modules/exceljs/node_modules/uuid/dist/esm-node/sha1.js +0 -13
  31. package/dist/node_modules/exceljs/node_modules/uuid/dist/esm-node/stringify.js +0 -29
  32. package/dist/node_modules/exceljs/node_modules/uuid/dist/esm-node/v1.js +0 -95
  33. package/dist/node_modules/exceljs/node_modules/uuid/dist/esm-node/v3.js +0 -4
  34. package/dist/node_modules/exceljs/node_modules/uuid/dist/esm-node/v35.js +0 -64
  35. package/dist/node_modules/exceljs/node_modules/uuid/dist/esm-node/v4.js +0 -24
  36. package/dist/node_modules/exceljs/node_modules/uuid/dist/esm-node/v5.js +0 -4
  37. package/dist/node_modules/exceljs/node_modules/uuid/dist/esm-node/validate.js +0 -7
  38. package/dist/node_modules/exceljs/node_modules/uuid/dist/esm-node/version.js +0 -11
  39. package/dist/node_modules/exceljs/node_modules/uuid/dist/index.js +0 -79
  40. package/dist/node_modules/exceljs/node_modules/uuid/dist/md5-browser.js +0 -223
  41. package/dist/node_modules/exceljs/node_modules/uuid/dist/md5.js +0 -23
  42. package/dist/node_modules/exceljs/node_modules/uuid/dist/nil.js +0 -8
  43. package/dist/node_modules/exceljs/node_modules/uuid/dist/parse.js +0 -45
  44. package/dist/node_modules/exceljs/node_modules/uuid/dist/regex.js +0 -8
  45. package/dist/node_modules/exceljs/node_modules/uuid/dist/rng-browser.js +0 -26
  46. package/dist/node_modules/exceljs/node_modules/uuid/dist/rng.js +0 -24
  47. package/dist/node_modules/exceljs/node_modules/uuid/dist/sha1-browser.js +0 -104
  48. package/dist/node_modules/exceljs/node_modules/uuid/dist/sha1.js +0 -23
  49. package/dist/node_modules/exceljs/node_modules/uuid/dist/stringify.js +0 -39
  50. package/dist/node_modules/exceljs/node_modules/uuid/dist/umd/uuid.min.js +0 -1
  51. package/dist/node_modules/exceljs/node_modules/uuid/dist/umd/uuidNIL.min.js +0 -1
  52. package/dist/node_modules/exceljs/node_modules/uuid/dist/umd/uuidParse.min.js +0 -1
  53. package/dist/node_modules/exceljs/node_modules/uuid/dist/umd/uuidStringify.min.js +0 -1
  54. package/dist/node_modules/exceljs/node_modules/uuid/dist/umd/uuidValidate.min.js +0 -1
  55. package/dist/node_modules/exceljs/node_modules/uuid/dist/umd/uuidVersion.min.js +0 -1
  56. package/dist/node_modules/exceljs/node_modules/uuid/dist/umd/uuidv1.min.js +0 -1
  57. package/dist/node_modules/exceljs/node_modules/uuid/dist/umd/uuidv3.min.js +0 -1
  58. package/dist/node_modules/exceljs/node_modules/uuid/dist/umd/uuidv4.min.js +0 -1
  59. package/dist/node_modules/exceljs/node_modules/uuid/dist/umd/uuidv5.min.js +0 -1
  60. package/dist/node_modules/exceljs/node_modules/uuid/dist/uuid-bin.js +0 -85
  61. package/dist/node_modules/exceljs/node_modules/uuid/dist/v1.js +0 -107
  62. package/dist/node_modules/exceljs/node_modules/uuid/dist/v3.js +0 -16
  63. package/dist/node_modules/exceljs/node_modules/uuid/dist/v35.js +0 -78
  64. package/dist/node_modules/exceljs/node_modules/uuid/dist/v4.js +0 -37
  65. package/dist/node_modules/exceljs/node_modules/uuid/dist/v5.js +0 -16
  66. package/dist/node_modules/exceljs/node_modules/uuid/dist/validate.js +0 -17
  67. package/dist/node_modules/exceljs/node_modules/uuid/dist/version.js +0 -21
  68. package/dist/node_modules/exceljs/node_modules/uuid/package.json +0 -135
@@ -18,34 +18,24 @@ const _c = { fs: fs.constants, os: os.constants };
18
18
  /*
19
19
  * The working inner variables.
20
20
  */
21
- const
22
- // the random characters to choose from
21
+ const // the random characters to choose from
23
22
  RANDOM_CHARS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',
24
-
25
23
  TEMPLATE_PATTERN = /XXXXXX/,
26
-
27
24
  DEFAULT_TRIES = 3,
28
-
29
25
  CREATE_FLAGS = (_c.O_CREAT || _c.fs.O_CREAT) | (_c.O_EXCL || _c.fs.O_EXCL) | (_c.O_RDWR || _c.fs.O_RDWR),
30
-
31
26
  // constants are off on the windows platform and will not match the actual errno codes
32
27
  IS_WIN32 = os.platform() === 'win32',
33
28
  EBADF = _c.EBADF || _c.os.errno.EBADF,
34
29
  ENOENT = _c.ENOENT || _c.os.errno.ENOENT,
35
-
36
30
  DIR_MODE = 0o700 /* 448 */,
37
31
  FILE_MODE = 0o600 /* 384 */,
38
-
39
32
  EXIT = 'exit',
40
-
41
33
  // this will hold the objects need to be removed on exit
42
34
  _removeObjects = [],
43
-
44
35
  // API change in fs.rmdirSync leads to error when passing in a second parameter, e.g. the callback
45
36
  FN_RMDIR_SYNC = fs.rmdirSync.bind(fs);
46
37
 
47
- let
48
- _gracefulCleanup = false;
38
+ let _gracefulCleanup = false;
49
39
 
50
40
  /**
51
41
  * Recursively remove a directory and its contents.
@@ -75,38 +65,35 @@ function FN_RIMRAF_SYNC(dirPath) {
75
65
  * @param {?tmpNameCallback} callback the callback function
76
66
  */
77
67
  function tmpName(options, callback) {
78
- const
79
- args = _parseArguments(options, callback),
68
+ const args = _parseArguments(options, callback),
80
69
  opts = args[0],
81
70
  cb = args[1];
82
71
 
83
- try {
84
- _assertAndSanitizeOptions(opts);
85
- } catch (err) {
86
- return cb(err);
87
- }
72
+ _assertAndSanitizeOptions(opts, function (err, sanitizedOptions) {
73
+ if (err) return cb(err);
88
74
 
89
- let tries = opts.tries;
90
- (function _getUniqueName() {
91
- try {
92
- const name = _generateTmpName(opts);
75
+ let tries = sanitizedOptions.tries;
76
+ (function _getUniqueName() {
77
+ try {
78
+ const name = _generateTmpName(sanitizedOptions);
93
79
 
94
- // check whether the path exists then retry if needed
95
- fs.stat(name, function (err) {
96
- /* istanbul ignore else */
97
- if (!err) {
80
+ // check whether the path exists then retry if needed
81
+ fs.stat(name, function (err) {
98
82
  /* istanbul ignore else */
99
- if (tries-- > 0) return _getUniqueName();
83
+ if (!err) {
84
+ /* istanbul ignore else */
85
+ if (tries-- > 0) return _getUniqueName();
100
86
 
101
- return cb(new Error('Could not get a unique tmp filename, max tries reached ' + name));
102
- }
87
+ return cb(new Error('Could not get a unique tmp filename, max tries reached ' + name));
88
+ }
103
89
 
104
- cb(null, name);
105
- });
106
- } catch (err) {
107
- cb(err);
108
- }
109
- }());
90
+ cb(null, name);
91
+ });
92
+ } catch (err) {
93
+ cb(err);
94
+ }
95
+ })();
96
+ });
110
97
  }
111
98
 
112
99
  /**
@@ -117,15 +104,14 @@ function tmpName(options, callback) {
117
104
  * @throws {Error} if the options are invalid or could not generate a filename
118
105
  */
119
106
  function tmpNameSync(options) {
120
- const
121
- args = _parseArguments(options),
107
+ const args = _parseArguments(options),
122
108
  opts = args[0];
123
109
 
124
- _assertAndSanitizeOptions(opts);
110
+ const sanitizedOptions = _assertAndSanitizeOptionsSync(opts);
125
111
 
126
- let tries = opts.tries;
112
+ let tries = sanitizedOptions.tries;
127
113
  do {
128
- const name = _generateTmpName(opts);
114
+ const name = _generateTmpName(sanitizedOptions);
129
115
  try {
130
116
  fs.statSync(name);
131
117
  } catch (e) {
@@ -143,8 +129,7 @@ function tmpNameSync(options) {
143
129
  * @param {?fileCallback} callback
144
130
  */
145
131
  function file(options, callback) {
146
- const
147
- args = _parseArguments(options, callback),
132
+ const args = _parseArguments(options, callback),
148
133
  opts = args[0],
149
134
  cb = args[1];
150
135
 
@@ -181,13 +166,12 @@ function file(options, callback) {
181
166
  * @throws {Error} if cannot create a file
182
167
  */
183
168
  function fileSync(options) {
184
- const
185
- args = _parseArguments(options),
169
+ const args = _parseArguments(options),
186
170
  opts = args[0];
187
171
 
188
172
  const discardOrDetachDescriptor = opts.discardDescriptor || opts.detachDescriptor;
189
173
  const name = tmpNameSync(opts);
190
- var fd = fs.openSync(name, CREATE_FLAGS, opts.mode || FILE_MODE);
174
+ let fd = fs.openSync(name, CREATE_FLAGS, opts.mode || FILE_MODE);
191
175
  /* istanbul ignore else */
192
176
  if (opts.discardDescriptor) {
193
177
  fs.closeSync(fd);
@@ -208,8 +192,7 @@ function fileSync(options) {
208
192
  * @param {?dirCallback} callback
209
193
  */
210
194
  function dir(options, callback) {
211
- const
212
- args = _parseArguments(options, callback),
195
+ const args = _parseArguments(options, callback),
213
196
  opts = args[0],
214
197
  cb = args[1];
215
198
 
@@ -236,8 +219,7 @@ function dir(options, callback) {
236
219
  * @throws {Error} if it cannot create a directory
237
220
  */
238
221
  function dirSync(options) {
239
- const
240
- args = _parseArguments(options),
222
+ const args = _parseArguments(options),
241
223
  opts = args[0];
242
224
 
243
225
  const name = tmpNameSync(opts);
@@ -288,8 +270,7 @@ function _removeFileSync(fdPath) {
288
270
  } finally {
289
271
  try {
290
272
  fs.unlinkSync(fdPath[1]);
291
- }
292
- catch (e) {
273
+ } catch (e) {
293
274
  // reraise any unanticipated error
294
275
  if (!_isENOENT(e)) rethrownException = e;
295
276
  }
@@ -361,7 +342,6 @@ function _prepareRemoveCallback(removeFunction, fileOrDirName, sync, cleanupCall
361
342
 
362
343
  // if sync is true, the next parameter will be ignored
363
344
  return function _cleanupCallback(next) {
364
-
365
345
  /* istanbul ignore else */
366
346
  if (!called) {
367
347
  // remove cleanupCallback from cache
@@ -374,7 +354,7 @@ function _prepareRemoveCallback(removeFunction, fileOrDirName, sync, cleanupCall
374
354
  if (sync || removeFunction === FN_RMDIR_SYNC || removeFunction === FN_RIMRAF_SYNC) {
375
355
  return removeFunction(fileOrDirName);
376
356
  } else {
377
- return removeFunction(fileOrDirName, next || function() {});
357
+ return removeFunction(fileOrDirName, next || function () {});
378
358
  }
379
359
  }
380
360
  };
@@ -409,8 +389,7 @@ function _garbageCollector() {
409
389
  * @private
410
390
  */
411
391
  function _randomChars(howMany) {
412
- let
413
- value = [],
392
+ let value = [],
414
393
  rnd = null;
415
394
 
416
395
  // make sure that we do not fail because we ran out of entropy
@@ -420,24 +399,13 @@ function _randomChars(howMany) {
420
399
  rnd = crypto.pseudoRandomBytes(howMany);
421
400
  }
422
401
 
423
- for (var i = 0; i < howMany; i++) {
402
+ for (let i = 0; i < howMany; i++) {
424
403
  value.push(RANDOM_CHARS[rnd[i] % RANDOM_CHARS.length]);
425
404
  }
426
405
 
427
406
  return value.join('');
428
407
  }
429
408
 
430
- /**
431
- * Helper which determines whether a string s is blank, that is undefined, or empty or null.
432
- *
433
- * @private
434
- * @param {string} s
435
- * @returns {Boolean} true whether the string s is blank, false otherwise
436
- */
437
- function _isBlank(s) {
438
- return s === null || _isUndefined(s) || !s.trim();
439
- }
440
-
441
409
  /**
442
410
  * Checks whether the `obj` parameter is defined or not.
443
411
  *
@@ -479,6 +447,51 @@ function _parseArguments(options, callback) {
479
447
  return [actualOptions, callback];
480
448
  }
481
449
 
450
+ /**
451
+ * Resolve the specified path name in respect to tmpDir.
452
+ *
453
+ * The specified name might include relative path components, e.g. ../
454
+ * so we need to resolve in order to be sure that is is located inside tmpDir
455
+ *
456
+ * @private
457
+ */
458
+ function _resolvePath(name, tmpDir, cb) {
459
+ const pathToResolve = path.isAbsolute(name) ? name : path.join(tmpDir, name);
460
+
461
+ fs.stat(pathToResolve, function (err) {
462
+ if (err) {
463
+ fs.realpath(path.dirname(pathToResolve), function (err, parentDir) {
464
+ if (err) return cb(err);
465
+
466
+ cb(null, path.join(parentDir, path.basename(pathToResolve)));
467
+ });
468
+ } else {
469
+ fs.realpath(pathToResolve, cb);
470
+ }
471
+ });
472
+ }
473
+
474
+ /**
475
+ * Resolve the specified path name in respect to tmpDir.
476
+ *
477
+ * The specified name might include relative path components, e.g. ../
478
+ * so we need to resolve in order to be sure that is is located inside tmpDir
479
+ *
480
+ * @private
481
+ */
482
+ function _resolvePathSync(name, tmpDir) {
483
+ const pathToResolve = path.isAbsolute(name) ? name : path.join(tmpDir, name);
484
+
485
+ try {
486
+ fs.statSync(pathToResolve);
487
+ return fs.realpathSync(pathToResolve);
488
+ } catch (_err) {
489
+ const parentDir = fs.realpathSync(path.dirname(pathToResolve));
490
+
491
+ return path.join(parentDir, path.basename(pathToResolve));
492
+ }
493
+ }
494
+
482
495
  /**
483
496
  * Generates a new temporary name.
484
497
  *
@@ -487,16 +500,17 @@ function _parseArguments(options, callback) {
487
500
  * @private
488
501
  */
489
502
  function _generateTmpName(opts) {
490
-
491
503
  const tmpDir = opts.tmpdir;
492
504
 
493
505
  /* istanbul ignore else */
494
- if (!_isUndefined(opts.name))
506
+ if (!_isUndefined(opts.name)) {
495
507
  return path.join(tmpDir, opts.dir, opts.name);
508
+ }
496
509
 
497
510
  /* istanbul ignore else */
498
- if (!_isUndefined(opts.template))
511
+ if (!_isUndefined(opts.template)) {
499
512
  return path.join(tmpDir, opts.dir, opts.template).replace(TEMPLATE_PATTERN, _randomChars(6));
513
+ }
500
514
 
501
515
  // prefix and postfix
502
516
  const name = [
@@ -512,33 +526,61 @@ function _generateTmpName(opts) {
512
526
  }
513
527
 
514
528
  /**
515
- * Asserts whether the specified options are valid, also sanitizes options and provides sane defaults for missing
516
- * options.
529
+ * Check the prefix, postfix, and template options.
530
+ *
531
+ * Rejects non-string inputs so that a non-string `.includes('..')` cannot evade
532
+ * the substring check (e.g. an Array whose `.includes('..')` is element-wise,
533
+ * or a duck-typed object with a custom `.includes`), and so that the value is
534
+ * not later coerced to a string with traversal sequences via `Array.prototype.join`
535
+ * or `path.join`.
517
536
  *
518
- * @param {Options} options
519
537
  * @private
520
538
  */
521
- function _assertAndSanitizeOptions(options) {
539
+ function _assertPath(option, value) {
540
+ if (typeof value !== 'string') {
541
+ throw new Error(`${option} option must be a string, got "${typeof value}".`);
542
+ }
522
543
 
523
- options.tmpdir = _getTmpDir(options);
544
+ if (value.includes("..")) {
545
+ throw new Error("Relative value not allowed");
546
+ }
524
547
 
525
- const tmpDir = options.tmpdir;
548
+ return value;
549
+ }
550
+
551
+ /**
552
+ * Asserts and sanitizes the basic options.
553
+ *
554
+ * @private
555
+ */
556
+ function _assertOptionsBase(options) {
557
+ if (!_isUndefined(options.name)) {
558
+ const name = options.name;
559
+
560
+ // assert that name is not absolute and does not contain a path
561
+ if (path.isAbsolute(name)) throw new Error(`name option must not contain an absolute path, found "${name}".`);
562
+
563
+ // must not fail on valid .<name> or ..<name> or similar such constructs
564
+ const basename = path.basename(name);
565
+ if (basename === '..' || basename === '.' || basename !== name) {
566
+ throw new Error(`name option must not contain a path, found "${name}".`);
567
+ }
568
+ }
526
569
 
527
- /* istanbul ignore else */
528
- if (!_isUndefined(options.name))
529
- _assertIsRelative(options.name, 'name', tmpDir);
530
- /* istanbul ignore else */
531
- if (!_isUndefined(options.dir))
532
- _assertIsRelative(options.dir, 'dir', tmpDir);
533
570
  /* istanbul ignore else */
534
571
  if (!_isUndefined(options.template)) {
535
- _assertIsRelative(options.template, 'template', tmpDir);
536
- if (!options.template.match(TEMPLATE_PATTERN))
572
+ if (typeof options.template !== 'string') {
573
+ throw new Error(`template option must be a string, got "${typeof options.template}".`);
574
+ }
575
+ if (!options.template.match(TEMPLATE_PATTERN)) {
537
576
  throw new Error(`Invalid template, found "${options.template}".`);
577
+ }
538
578
  }
579
+
539
580
  /* istanbul ignore else */
540
- if (!_isUndefined(options.tries) && isNaN(options.tries) || options.tries < 0)
581
+ if ((!_isUndefined(options.tries) && isNaN(options.tries)) || options.tries < 0) {
541
582
  throw new Error(`Invalid tries, found "${options.tries}".`);
583
+ }
542
584
 
543
585
  // if a name was specified we will try once
544
586
  options.tries = _isUndefined(options.name) ? options.tries || DEFAULT_TRIES : 1;
@@ -547,65 +589,104 @@ function _assertAndSanitizeOptions(options) {
547
589
  options.discardDescriptor = !!options.discardDescriptor;
548
590
  options.unsafeCleanup = !!options.unsafeCleanup;
549
591
 
550
- // sanitize dir, also keep (multiple) blanks if the user, purportedly sane, requests us to
551
- options.dir = _isUndefined(options.dir) ? '' : path.relative(tmpDir, _resolvePath(options.dir, tmpDir));
552
- options.template = _isUndefined(options.template) ? undefined : path.relative(tmpDir, _resolvePath(options.template, tmpDir));
553
- // sanitize further if template is relative to options.dir
554
- options.template = _isBlank(options.template) ? undefined : path.relative(options.dir, options.template);
555
-
556
592
  // for completeness' sake only, also keep (multiple) blanks if the user, purportedly sane, requests us to
557
- options.name = _isUndefined(options.name) ? undefined : options.name;
558
- options.prefix = _isUndefined(options.prefix) ? '' : options.prefix;
559
- options.postfix = _isUndefined(options.postfix) ? '' : options.postfix;
593
+ options.prefix = _isUndefined(options.prefix) ? '' : _assertPath('prefix', options.prefix);
594
+ options.postfix = _isUndefined(options.postfix) ? '' : _assertPath('postfix', options.postfix);
595
+ options.template = _isUndefined(options.template) ? undefined : _assertPath('template', options.template);
560
596
  }
561
597
 
562
598
  /**
563
- * Resolve the specified path name in respect to tmpDir.
599
+ * Gets the relative directory to tmpDir.
564
600
  *
565
- * The specified name might include relative path components, e.g. ../
566
- * so we need to resolve in order to be sure that is is located inside tmpDir
601
+ * @private
602
+ */
603
+ function _getRelativePath(option, name, tmpDir, cb) {
604
+ if (_isUndefined(name)) return cb(null);
605
+
606
+ _resolvePath(name, tmpDir, function (err, resolvedPath) {
607
+ if (err) return cb(err);
608
+
609
+ const relativePath = path.relative(tmpDir, resolvedPath);
610
+
611
+ if (relativePath.startsWith('..') || path.isAbsolute(relativePath)) {
612
+ return cb(new Error(`${option} option must be relative to "${tmpDir}", found "${relativePath}".`));
613
+ }
614
+
615
+ cb(null, relativePath);
616
+ });
617
+ }
618
+
619
+ /**
620
+ * Gets the relative path to tmpDir.
567
621
  *
568
- * @param name
569
- * @param tmpDir
570
- * @returns {string}
571
622
  * @private
572
623
  */
573
- function _resolvePath(name, tmpDir) {
574
- if (name.startsWith(tmpDir)) {
575
- return path.resolve(name);
576
- } else {
577
- return path.resolve(path.join(tmpDir, name));
624
+ function _getRelativePathSync(option, name, tmpDir) {
625
+ if (_isUndefined(name)) return;
626
+
627
+ const resolvedPath = _resolvePathSync(name, tmpDir);
628
+ const relativePath = path.relative(tmpDir, resolvedPath);
629
+
630
+ if (relativePath.startsWith('..') || path.isAbsolute(relativePath)) {
631
+ throw new Error(`${option} option must be relative to "${tmpDir}", found "${relativePath}".`);
578
632
  }
633
+
634
+ return relativePath;
579
635
  }
580
636
 
581
637
  /**
582
- * Asserts whether specified name is relative to the specified tmpDir.
638
+ * Asserts whether the specified options are valid, also sanitizes options and provides sane defaults for missing
639
+ * options.
583
640
  *
584
- * @param {string} name
585
- * @param {string} option
586
- * @param {string} tmpDir
587
- * @throws {Error}
588
641
  * @private
589
642
  */
590
- function _assertIsRelative(name, option, tmpDir) {
591
- if (option === 'name') {
592
- // assert that name is not absolute and does not contain a path
593
- if (path.isAbsolute(name))
594
- throw new Error(`${option} option must not contain an absolute path, found "${name}".`);
595
- // must not fail on valid .<name> or ..<name> or similar such constructs
596
- let basename = path.basename(name);
597
- if (basename === '..' || basename === '.' || basename !== name)
598
- throw new Error(`${option} option must not contain a path, found "${name}".`);
599
- }
600
- else { // if (option === 'dir' || option === 'template') {
601
- // assert that dir or template are relative to tmpDir
602
- if (path.isAbsolute(name) && !name.startsWith(tmpDir)) {
603
- throw new Error(`${option} option must be relative to "${tmpDir}", found "${name}".`);
643
+ function _assertAndSanitizeOptions(options, cb) {
644
+ _getTmpDir(options, function (err, tmpDir) {
645
+ if (err) return cb(err);
646
+
647
+ options.tmpdir = tmpDir;
648
+
649
+ try {
650
+ _assertOptionsBase(options, tmpDir);
651
+ } catch (err) {
652
+ return cb(err);
604
653
  }
605
- let resolvedPath = _resolvePath(name, tmpDir);
606
- if (!resolvedPath.startsWith(tmpDir))
607
- throw new Error(`${option} option must be relative to "${tmpDir}", found "${resolvedPath}".`);
608
- }
654
+
655
+ // sanitize dir, also keep (multiple) blanks if the user, purportedly sane, requests us to
656
+ _getRelativePath('dir', options.dir, tmpDir, function (err, dir) {
657
+ if (err) return cb(err);
658
+
659
+ options.dir = _isUndefined(dir) ? '' : dir;
660
+
661
+ // sanitize further if template is relative to options.dir
662
+ _getRelativePath('template', options.template, tmpDir, function (err, template) {
663
+ if (err) return cb(err);
664
+
665
+ options.template = template;
666
+
667
+ cb(null, options);
668
+ });
669
+ });
670
+ });
671
+ }
672
+
673
+ /**
674
+ * Asserts whether the specified options are valid, also sanitizes options and provides sane defaults for missing
675
+ * options.
676
+ *
677
+ * @private
678
+ */
679
+ function _assertAndSanitizeOptionsSync(options) {
680
+ const tmpDir = (options.tmpdir = _getTmpDirSync(options));
681
+
682
+ _assertOptionsBase(options, tmpDir);
683
+
684
+ const dir = _getRelativePathSync('dir', options.dir, tmpDir);
685
+ options.dir = _isUndefined(dir) ? '' : dir;
686
+
687
+ options.template = _getRelativePathSync('template', options.template, tmpDir);
688
+
689
+ return options;
609
690
  }
610
691
 
611
692
  /**
@@ -663,11 +744,18 @@ function setGracefulCleanup() {
663
744
  * Returns the currently configured tmp dir from os.tmpdir().
664
745
  *
665
746
  * @private
666
- * @param {?Options} options
667
- * @returns {string} the currently configured tmp dir
668
747
  */
669
- function _getTmpDir(options) {
670
- return path.resolve(options && options.tmpdir || os.tmpdir());
748
+ function _getTmpDir(options, cb) {
749
+ return fs.realpath((options && options.tmpdir) || os.tmpdir(), cb);
750
+ }
751
+
752
+ /**
753
+ * Returns the currently configured tmp dir from os.tmpdir().
754
+ *
755
+ * @private
756
+ */
757
+ function _getTmpDirSync(options) {
758
+ return fs.realpathSync((options && options.tmpdir) || os.tmpdir());
671
759
  }
672
760
 
673
761
  // Install process exit listener
@@ -768,7 +856,7 @@ Object.defineProperty(module.exports, 'tmpdir', {
768
856
  enumerable: true,
769
857
  configurable: false,
770
858
  get: function () {
771
- return _getTmpDir();
859
+ return _getTmpDirSync();
772
860
  }
773
861
  });
774
862
 
@@ -1,20 +1,10 @@
1
1
  {
2
2
  "name": "tmp",
3
- "version": "0.2.3",
3
+ "version": "0.2.7",
4
4
  "description": "Temporary file and directory creator",
5
- "author": "KARASZI István <github@spam.raszi.hu> (http://raszi.hu/)",
6
- "contributors": [
7
- "Carsten Klein <trancesilken@gmail.com> (https://github.com/silkentrance)"
8
- ],
9
- "keywords": [
10
- "temporary",
11
- "tmp",
12
- "temp",
13
- "tempdir",
14
- "tempfile",
15
- "tmpdir",
16
- "tmpfile"
17
- ],
5
+ "author": "KARASZI István <github@spam.raszi.hu>",
6
+ "contributors": ["Carsten Klein <trancesilken@gmail.com> (https://github.com/silkentrance)"],
7
+ "keywords": ["temporary", "tmp", "temp", "tempdir", "tempfile", "tmpdir", "tmpfile"],
18
8
  "license": "MIT",
19
9
  "repository": "https://github.com/raszi/node-tmp.git",
20
10
  "homepage": "http://github.com/raszi/node-tmp",
@@ -33,9 +23,7 @@
33
23
  "mocha": "^10.2.0"
34
24
  },
35
25
  "main": "lib/tmp.js",
36
- "files": [
37
- "lib/"
38
- ],
26
+ "files": ["lib/"],
39
27
  "changelog": {
40
28
  "labels": {
41
29
  "breaking": ":boom: Breaking Change",
@@ -1 +1 @@
1
- {"name":"exceljs","version":"4.4.0","description":"Excel Workbook Manager - Read and Write xlsx and csv Files.","private":false,"license":"MIT","author":{"name":"Guyon Roche","email":"guyon@live.com"},"repository":{"type":"git","url":"https://github.com/exceljs/exceljs.git"},"engines":{"node":">=8.3.0"},"main":"./excel.js","browser":"./dist/exceljs.min.js","types":"./index.d.ts","files":["dist","lib","excel.js","LICENSE","README.md","README_zh.md","index.ts","index.d.ts"],"scripts":{"test":"npm run test:full","test:es5":"export EXCEL_BUILD=es5 && npm run test:full","test:full":"npm run build && npm run test:unit && npm run test:integration && npm run test:end-to-end && npm run test:jasmine","test:version":"npm run build && npm run test:unit && npm run test:integration && npm run test:end-to-end && npm run test:browser && npm run test:dist","test:all":"npm run test:native && npm run test:es5","test:native":"npm run test:full","test:unit":"mocha --require spec/config/setup --require spec/config/setup-unit spec/unit --recursive","test:integration":"mocha --require spec/config/setup spec/integration --recursive","test:end-to-end":"mocha --require spec/config/setup spec/end-to-end --recursive","test:browser":"if [ ! -f .disable-test-browser ]; then npm run build && npm run test:jasmine; fi","test:jasmine":"grunt jasmine","test:unit:es5":"export EXCEL_BUILD=es5 && npm run test:unit","test:integration:es5":"export EXCEL_BUILD=es5 && npm run test:integration","test:end-to-end:es5":"export EXCEL_BUILD=es5 && npm run test:end-to-end","test:dist":"mocha --require spec/config/setup spec/dist --recursive","test:manual":"node spec/manual/app.js","test:typescript":"mocha -r ts-node/register spec/typescript/**/*.spec.ts","clean-build":"npm run clean && npm run build","lint":"eslint --format node_modules/eslint-friendly-formatter .","lint:fix":"prettier-eslint --write $(pwd)'/**/*.js'","lint:staged":"lint-staged","clean":"rm -rf build/ && rm -rf dist","benchmark":"node --expose-gc benchmark","benchmark:debug":"node --expose-gc --inspect-brk --trace-deopt benchmark","build":"grunt build","install-build":"npm install && grunt build","preversion":"npm run clean && npm run build && npm run test:version","postversion":"git push --no-verify && git push --tags --no-verify"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.js":["prettier-eslint --write","eslint --format node_modules/eslint-friendly-formatter","git add"]},"keywords":["xlsx","json","csv","excel","font","border","fill","number","format","number format","alignment","office","spreadsheet","workbook","defined names","data validations","rich text","in-cell format","outlineLevel","views","frozen","split","pageSetup"],"dependencies":{"archiver":"^5.0.0","dayjs":"^1.8.34","fast-csv":"^4.3.1","jszip":"^3.10.1","readable-stream":"^3.6.0","saxes":"^5.0.1","tmp":"^0.2.0","unzipper":"^0.10.11","uuid":"^8.3.0"},"devDependencies":{"@babel/cli":"^7.10.5","@babel/core":"^7.11.4","@babel/preset-env":"^7.11.0","@types/chai":"^4.2.12","@types/mocha":"^8.0.3","@types/node":"^14.11.2","babelify":"^10.0.0","browserify":"^16.5.2","chai":"^4.2.0","chai-datetime":"^1.7.0","chai-xml":"^0.3.2","core-js":"^3.6.5","dirty-chai":"^2.0.1","eslint":"^6.5.1","eslint-config-airbnb-base":"^14.2.0","eslint-config-prettier":"^6.12.0","eslint-friendly-formatter":"^4.0.1","eslint-plugin-import":"^2.22.0","eslint-plugin-node":"^11.1.0","express":"^4.16.4","got":"^9.0.0","grunt":"^1.3.0","grunt-babel":"^8.0.0","grunt-browserify":"^5.3.0","grunt-contrib-copy":"^1.0.0","grunt-contrib-jasmine":"^2.2.0","grunt-contrib-watch":"^1.1.0","grunt-exorcise":"^2.1.1","grunt-terser":"^1.0.0","husky":"^4.3.0","lint-staged":"^10.2.13","mocha":"^7.2.0","prettier-eslint":"^11.0.0","prettier-eslint-cli":"^5.0.0","regenerator-runtime":"^0.13.7","sax":"^1.2.4","ts-node":"^8.10.2","typescript":"^3.9.7"},"_lastModified":"2026-09-20T06:17:53.968Z"}
1
+ {"name":"exceljs","version":"4.4.0","description":"Excel Workbook Manager - Read and Write xlsx and csv Files.","private":false,"license":"MIT","author":{"name":"Guyon Roche","email":"guyon@live.com"},"repository":{"type":"git","url":"https://github.com/exceljs/exceljs.git"},"engines":{"node":">=8.3.0"},"main":"./excel.js","browser":"./dist/exceljs.min.js","types":"./index.d.ts","files":["dist","lib","excel.js","LICENSE","README.md","README_zh.md","index.ts","index.d.ts"],"scripts":{"test":"npm run test:full","test:es5":"export EXCEL_BUILD=es5 && npm run test:full","test:full":"npm run build && npm run test:unit && npm run test:integration && npm run test:end-to-end && npm run test:jasmine","test:version":"npm run build && npm run test:unit && npm run test:integration && npm run test:end-to-end && npm run test:browser && npm run test:dist","test:all":"npm run test:native && npm run test:es5","test:native":"npm run test:full","test:unit":"mocha --require spec/config/setup --require spec/config/setup-unit spec/unit --recursive","test:integration":"mocha --require spec/config/setup spec/integration --recursive","test:end-to-end":"mocha --require spec/config/setup spec/end-to-end --recursive","test:browser":"if [ ! -f .disable-test-browser ]; then npm run build && npm run test:jasmine; fi","test:jasmine":"grunt jasmine","test:unit:es5":"export EXCEL_BUILD=es5 && npm run test:unit","test:integration:es5":"export EXCEL_BUILD=es5 && npm run test:integration","test:end-to-end:es5":"export EXCEL_BUILD=es5 && npm run test:end-to-end","test:dist":"mocha --require spec/config/setup spec/dist --recursive","test:manual":"node spec/manual/app.js","test:typescript":"mocha -r ts-node/register spec/typescript/**/*.spec.ts","clean-build":"npm run clean && npm run build","lint":"eslint --format node_modules/eslint-friendly-formatter .","lint:fix":"prettier-eslint --write $(pwd)'/**/*.js'","lint:staged":"lint-staged","clean":"rm -rf build/ && rm -rf dist","benchmark":"node --expose-gc benchmark","benchmark:debug":"node --expose-gc --inspect-brk --trace-deopt benchmark","build":"grunt build","install-build":"npm install && grunt build","preversion":"npm run clean && npm run build && npm run test:version","postversion":"git push --no-verify && git push --tags --no-verify"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.js":["prettier-eslint --write","eslint --format node_modules/eslint-friendly-formatter","git add"]},"keywords":["xlsx","json","csv","excel","font","border","fill","number","format","number format","alignment","office","spreadsheet","workbook","defined names","data validations","rich text","in-cell format","outlineLevel","views","frozen","split","pageSetup"],"dependencies":{"archiver":"^5.0.0","dayjs":"^1.8.34","fast-csv":"^4.3.1","jszip":"^3.10.1","readable-stream":"^3.6.0","saxes":"^5.0.1","tmp":"^0.2.0","unzipper":"^0.10.11","uuid":"^8.3.0"},"devDependencies":{"@babel/cli":"^7.10.5","@babel/core":"^7.11.4","@babel/preset-env":"^7.11.0","@types/chai":"^4.2.12","@types/mocha":"^8.0.3","@types/node":"^14.11.2","babelify":"^10.0.0","browserify":"^16.5.2","chai":"^4.2.0","chai-datetime":"^1.7.0","chai-xml":"^0.3.2","core-js":"^3.6.5","dirty-chai":"^2.0.1","eslint":"^6.5.1","eslint-config-airbnb-base":"^14.2.0","eslint-config-prettier":"^6.12.0","eslint-friendly-formatter":"^4.0.1","eslint-plugin-import":"^2.22.0","eslint-plugin-node":"^11.1.0","express":"^4.16.4","got":"^9.0.0","grunt":"^1.3.0","grunt-babel":"^8.0.0","grunt-browserify":"^5.3.0","grunt-contrib-copy":"^1.0.0","grunt-contrib-jasmine":"^2.2.0","grunt-contrib-watch":"^1.1.0","grunt-exorcise":"^2.1.1","grunt-terser":"^1.0.0","husky":"^4.3.0","lint-staged":"^10.2.13","mocha":"^7.2.0","prettier-eslint":"^11.0.0","prettier-eslint-cli":"^5.0.0","regenerator-runtime":"^0.13.7","sax":"^1.2.4","ts-node":"^8.10.2","typescript":"^3.9.7"},"_lastModified":"2026-09-30T00:51:44.606Z"}
@@ -1 +1 @@
1
- {"name":"xlsx","version":"0.20.3","author":"sheetjs","description":"SheetJS Spreadsheet data parser and writer","keywords":["excel","xls","xlsx","xlsb","xlsm","ods","csv","dbf","dif","sylk","office","spreadsheet"],"bin":{"xlsx":"./bin/xlsx.njs"},"main":"xlsx.js","module":"xlsx.mjs","unpkg":"dist/xlsx.full.min.js","jsdelivr":"dist/xlsx.full.min.js","types":"types/index.d.ts","exports":{".":{"import":"./xlsx.mjs","require":"./xlsx.js","types":"./types/index.d.ts"},"./xlsx.mjs":{"import":"./xlsx.mjs","types":"./types/index.d.ts"},"./xlsx.js":{"require":"./xlsx.js","types":"./types/index.d.ts"},"./dist/xlsx.core.min":{"import":"./dist/xlsx.core.min.js","require":"./dist/xlsx.core.min.js","types":"./types/index.d.ts"},"./dist/xlsx.core.min.js":{"import":"./dist/xlsx.core.min.js","require":"./dist/xlsx.core.min.js","types":"./types/index.d.ts"},"./dist/xlsx.full.min":{"import":"./dist/xlsx.full.min.js","require":"./dist/xlsx.full.min.js","types":"./types/index.d.ts"},"./dist/xlsx.full.min.js":{"import":"./dist/xlsx.full.min.js","require":"./dist/xlsx.full.min.js","types":"./types/index.d.ts"},"./dist/xlsx.mini.min":{"import":"./dist/xlsx.mini.min.js","require":"./dist/xlsx.mini.min.js","types":"./types/index.d.ts"},"./dist/xlsx.mini.min.js":{"import":"./dist/xlsx.mini.min.js","require":"./dist/xlsx.mini.min.js","types":"./types/index.d.ts"},"./dist/xlsx.zahl":{"import":"./dist/xlsx.zahl.mjs","require":"./dist/xlsx.zahl.js","types":"./dist/zahl.d.ts"},"./dist/xlsx.zahl.mjs":{"import":"./dist/xlsx.zahl.mjs","types":"./dist/zahl.d.ts"},"./dist/xlsx.zahl.js":{"require":"./dist/xlsx.zahl.js","types":"./dist/zahl.d.ts"},"./dist/cpexcel":{"import":"./dist/cpexcel.full.mjs","require":"./dist/cpexcel.js","types":"./dist/cpexcel.d.ts"},"./dist/cpexcel.js":{"require":"./dist/cpexcel.js","types":"./dist/cpexcel.d.ts"},"./dist/cpexcel.full":{"import":"./dist/cpexcel.full.mjs","require":"./dist/cpexcel.js","types":"./dist/cpexcel.d.ts"},"./dist/cpexcel.full.mjs":{"import":"./dist/cpexcel.full.mjs","types":"./dist/cpexcel.d.ts"}},"browser":{"buffer":false,"crypto":false,"stream":false,"process":false,"fs":false},"sideEffects":false,"dependencies":{},"devDependencies":{"@sheetjs/uglify-js":"~2.7.3","@types/node":"^8.5.9","acorn":"7.4.1","adler-32":"~1.3.1","alex":"8.1.1","blanket":"~1.2.3","cfb":"~1.2.2","codepage":"~1.15.0","commander":"~2.17.1","crc-32":"~1.2.2","dtslint":"^0.1.2","eslint":"7.23.0","eslint-plugin-html":"^6.1.2","eslint-plugin-json":"^2.1.2","exit-on-epipe":"~1.0.1","fflate":"^0.7.1","jsdom":"~11.1.0","markdown-spellcheck":"^1.3.1","mocha":"~2.5.3","sinon":"^1.17.7","ssf":"~0.11.2","typescript":"2.2.0","wmf":"~1.0.1","word":"~0.3.0"},"repository":{"type":"git","url":"https://git.sheetjs.com/SheetJS/sheetjs"},"scripts":{"pretest":"npm run lint","test":"npm run tests-only","pretest-only":"git submodule init && git submodule update","tests-only":"make travis","build":"make","lint":"make fullint","dtslint":"dtslint types"},"config":{"blanket":{"pattern":"xlsx.js"}},"alex":{"allow":["chinese","special","simple","just","crash","wtf","holes"]},"homepage":"https://sheetjs.com/","files":["CHANGELOG.md","LICENSE","README.md","bower.json","package.json","xlsx.js","xlsx.mjs","xlsxworker.js","bin/xlsx.njs","dist/LICENSE","dist/*.mjs","dist/*.js","dist/*.map","dist/*.d.ts","types/index.d.ts","types/tsconfig.json"],"bugs":{"url":"https://git.sheetjs.com/SheetJS/sheetjs/issues"},"license":"Apache-2.0","engines":{"node":">=0.8"},"_lastModified":"2026-09-20T06:17:56.785Z"}
1
+ {"name":"xlsx","version":"0.20.3","author":"sheetjs","description":"SheetJS Spreadsheet data parser and writer","keywords":["excel","xls","xlsx","xlsb","xlsm","ods","csv","dbf","dif","sylk","office","spreadsheet"],"bin":{"xlsx":"./bin/xlsx.njs"},"main":"xlsx.js","module":"xlsx.mjs","unpkg":"dist/xlsx.full.min.js","jsdelivr":"dist/xlsx.full.min.js","types":"types/index.d.ts","exports":{".":{"import":"./xlsx.mjs","require":"./xlsx.js","types":"./types/index.d.ts"},"./xlsx.mjs":{"import":"./xlsx.mjs","types":"./types/index.d.ts"},"./xlsx.js":{"require":"./xlsx.js","types":"./types/index.d.ts"},"./dist/xlsx.core.min":{"import":"./dist/xlsx.core.min.js","require":"./dist/xlsx.core.min.js","types":"./types/index.d.ts"},"./dist/xlsx.core.min.js":{"import":"./dist/xlsx.core.min.js","require":"./dist/xlsx.core.min.js","types":"./types/index.d.ts"},"./dist/xlsx.full.min":{"import":"./dist/xlsx.full.min.js","require":"./dist/xlsx.full.min.js","types":"./types/index.d.ts"},"./dist/xlsx.full.min.js":{"import":"./dist/xlsx.full.min.js","require":"./dist/xlsx.full.min.js","types":"./types/index.d.ts"},"./dist/xlsx.mini.min":{"import":"./dist/xlsx.mini.min.js","require":"./dist/xlsx.mini.min.js","types":"./types/index.d.ts"},"./dist/xlsx.mini.min.js":{"import":"./dist/xlsx.mini.min.js","require":"./dist/xlsx.mini.min.js","types":"./types/index.d.ts"},"./dist/xlsx.zahl":{"import":"./dist/xlsx.zahl.mjs","require":"./dist/xlsx.zahl.js","types":"./dist/zahl.d.ts"},"./dist/xlsx.zahl.mjs":{"import":"./dist/xlsx.zahl.mjs","types":"./dist/zahl.d.ts"},"./dist/xlsx.zahl.js":{"require":"./dist/xlsx.zahl.js","types":"./dist/zahl.d.ts"},"./dist/cpexcel":{"import":"./dist/cpexcel.full.mjs","require":"./dist/cpexcel.js","types":"./dist/cpexcel.d.ts"},"./dist/cpexcel.js":{"require":"./dist/cpexcel.js","types":"./dist/cpexcel.d.ts"},"./dist/cpexcel.full":{"import":"./dist/cpexcel.full.mjs","require":"./dist/cpexcel.js","types":"./dist/cpexcel.d.ts"},"./dist/cpexcel.full.mjs":{"import":"./dist/cpexcel.full.mjs","types":"./dist/cpexcel.d.ts"}},"browser":{"buffer":false,"crypto":false,"stream":false,"process":false,"fs":false},"sideEffects":false,"dependencies":{},"devDependencies":{"@sheetjs/uglify-js":"~2.7.3","@types/node":"^8.5.9","acorn":"7.4.1","adler-32":"~1.3.1","alex":"8.1.1","blanket":"~1.2.3","cfb":"~1.2.2","codepage":"~1.15.0","commander":"~2.17.1","crc-32":"~1.2.2","dtslint":"^0.1.2","eslint":"7.23.0","eslint-plugin-html":"^6.1.2","eslint-plugin-json":"^2.1.2","exit-on-epipe":"~1.0.1","fflate":"^0.7.1","jsdom":"~11.1.0","markdown-spellcheck":"^1.3.1","mocha":"~2.5.3","sinon":"^1.17.7","ssf":"~0.11.2","typescript":"2.2.0","wmf":"~1.0.1","word":"~0.3.0"},"repository":{"type":"git","url":"https://git.sheetjs.com/SheetJS/sheetjs"},"scripts":{"pretest":"npm run lint","test":"npm run tests-only","pretest-only":"git submodule init && git submodule update","tests-only":"make travis","build":"make","lint":"make fullint","dtslint":"dtslint types"},"config":{"blanket":{"pattern":"xlsx.js"}},"alex":{"allow":["chinese","special","simple","just","crash","wtf","holes"]},"homepage":"https://sheetjs.com/","files":["CHANGELOG.md","LICENSE","README.md","bower.json","package.json","xlsx.js","xlsx.mjs","xlsxworker.js","bin/xlsx.njs","dist/LICENSE","dist/*.mjs","dist/*.js","dist/*.map","dist/*.d.ts","types/index.d.ts","types/tsconfig.json"],"bugs":{"url":"https://git.sheetjs.com/SheetJS/sheetjs/issues"},"license":"Apache-2.0","engines":{"node":">=0.8"},"_lastModified":"2026-09-30T00:51:47.162Z"}
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "description": "Import records using excel templates. You can configure which fields to import and templates will be generated automatically.",
7
7
  "description.ru-RU": "Импорт записей с помощью шаблонов Excel: можно настроить, какие поля импортировать, шаблоны будут генерироваться автоматически.",
8
8
  "description.zh-CN": "使用 Excel 模板导入数据,可以配置导入哪些字段,自动生成模板。",
9
- "version": "2.3.0-beta.11",
9
+ "version": "2.3.0-beta.13",
10
10
  "license": "Apache-2.0",
11
11
  "main": "./dist/server/index.js",
12
12
  "homepage": "https://docs.nocobase.com/handbook/action-import",
@@ -47,7 +47,7 @@
47
47
  "@nocobase/test": "2.x",
48
48
  "@nocobase/utils": "2.x"
49
49
  },
50
- "gitHead": "e81c2c69d55f13e4d237c420a51ebad1e9dae515",
50
+ "gitHead": "b453f04b0bc3bad1df905ab65f483baa4aa22d43",
51
51
  "keywords": [
52
52
  "Actions"
53
53
  ]
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env node
2
- require('../uuid-bin');