@apimatic/cli 1.1.0-beta.17 → 1.1.0-beta.18

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.
@@ -1,6 +1,6 @@
1
1
  import fs from 'fs';
2
2
  import yazl from 'yazl';
3
- import extract from 'extract-zip';
3
+ import AdmZip from 'adm-zip';
4
4
  export class ZipService {
5
5
  async archive(sourceDir, outputZipPath) {
6
6
  return new Promise((resolve, reject) => {
@@ -34,24 +34,27 @@ export class ZipService {
34
34
  async unArchive(sourceFile, destinationDirectory) {
35
35
  const MAX_FILES = 100000;
36
36
  const MAX_SIZE = 1000000000; // 1 GB
37
- let fileCount = 0;
37
+ // adm-zip extracts synchronously, with no per-entry read streams. This
38
+ // avoids a hang on Node 22+ where yauzl/fd-slicer (used by extract-zip)
39
+ // builds STORED-entry read streams that deliver every byte but never emit
40
+ // `end`, leaving the extraction promise pending forever — even though all
41
+ // files have already been written to disk — which crashes the CLI with
42
+ // "unsettled top-level await" / exit code 13.
43
+ const zip = new AdmZip(sourceFile.toString());
44
+ const entries = zip.getEntries();
45
+ if (entries.length > MAX_FILES) {
46
+ throw new Error('Reached max. file count');
47
+ }
48
+ // header.size is the uncompressed size declared in the zip headers, so it
49
+ // might not be trustworthy — kept as a cheap guard against zip bombs.
38
50
  let totalSize = 0;
39
- await extract(sourceFile.toString(), {
40
- dir: destinationDirectory.toString(),
41
- onEntry: function (entry) {
42
- fileCount++;
43
- if (fileCount > MAX_FILES) {
44
- throw new Error('Reached max. file count');
45
- }
46
- // The uncompressedSize comes from the zip headers, so it might not be trustworthy.
47
- // Alternatively, calculate the size from the readStream.
48
- let entrySize = entry.uncompressedSize;
49
- totalSize += entrySize;
50
- if (totalSize > MAX_SIZE) {
51
- throw new Error('Reached max. size');
52
- }
51
+ for (const entry of entries) {
52
+ totalSize += entry.header.size;
53
+ if (totalSize > MAX_SIZE) {
54
+ throw new Error('Reached max. size');
53
55
  }
54
- });
56
+ }
57
+ zip.extractAllTo(destinationDirectory.toString(), /* overwrite */ true);
55
58
  }
56
59
  }
57
60
  //# sourceMappingURL=zip-service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"zip-service.js","sourceRoot":"","sources":["../../src/infrastructure/zip-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,OAAO,MAAM,aAAa,CAAC;AAIlC,MAAM,OAAO,UAAU;IACd,KAAK,CAAC,OAAO,CAAC,SAAwB,EAAE,aAAuB;QACpE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAEnC,MAAM,YAAY,GAAG,CAAC,GAAkB,EAAE,cAAsB,EAAE,EAAE;gBAClE,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;oBAC5E,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBACtC,sEAAsE;oBACtE,MAAM,YAAY,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG,cAAc,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;oBACrF,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;wBACxB,YAAY,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;oBACvC,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,YAAY,CAAC,CAAC;oBACrD,CAAC;gBACH,CAAC;YACH,CAAC,CAAC;YAEF,IAAI,CAAC;gBACH,YAAY,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YAC9B,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;YACrB,CAAC;YAED,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,MAAM,MAAM,GAAG,EAAE,CAAC,iBAAiB,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC9D,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAClC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC5B,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,SAAS,CAAC,UAAoB,EAAE,oBAAmC;QAC9E,MAAM,SAAS,GAAG,MAAO,CAAC;QAC1B,MAAM,QAAQ,GAAG,UAAa,CAAC,CAAC,OAAO;QACvC,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,SAAS,GAAG,CAAC,CAAC;QAElB,MAAM,OAAO,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE;YACnC,GAAG,EAAE,oBAAoB,CAAC,QAAQ,EAAE;YACpC,OAAO,EAAE,UAAU,KAAK;gBACtB,SAAS,EAAE,CAAC;gBACZ,IAAI,SAAS,GAAG,SAAS,EAAE,CAAC;oBAC1B,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;gBAC7C,CAAC;gBACD,mFAAmF;gBACnF,yDAAyD;gBACzD,IAAI,SAAS,GAAG,KAAK,CAAC,gBAAgB,CAAC;gBACvC,SAAS,IAAI,SAAS,CAAC;gBACvB,IAAI,SAAS,GAAG,QAAQ,EAAE,CAAC;oBACzB,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;gBACvC,CAAC;YACH,CAAC;SACF,CAAC,CAAC;IACL,CAAC;CACF"}
1
+ {"version":3,"file":"zip-service.js","sourceRoot":"","sources":["../../src/infrastructure/zip-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,MAAM,MAAM,SAAS,CAAC;AAI7B,MAAM,OAAO,UAAU;IACd,KAAK,CAAC,OAAO,CAAC,SAAwB,EAAE,aAAuB;QACpE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAEnC,MAAM,YAAY,GAAG,CAAC,GAAkB,EAAE,cAAsB,EAAE,EAAE;gBAClE,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;oBAC5E,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBACtC,sEAAsE;oBACtE,MAAM,YAAY,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG,cAAc,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;oBACrF,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;wBACxB,YAAY,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;oBACvC,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,YAAY,CAAC,CAAC;oBACrD,CAAC;gBACH,CAAC;YACH,CAAC,CAAC;YAEF,IAAI,CAAC;gBACH,YAAY,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YAC9B,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;YACrB,CAAC;YAED,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,MAAM,MAAM,GAAG,EAAE,CAAC,iBAAiB,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC9D,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAClC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC5B,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,SAAS,CAAC,UAAoB,EAAE,oBAAmC;QAC9E,MAAM,SAAS,GAAG,MAAO,CAAC;QAC1B,MAAM,QAAQ,GAAG,UAAa,CAAC,CAAC,OAAO;QAEvC,uEAAuE;QACvE,wEAAwE;QACxE,0EAA0E;QAC1E,0EAA0E;QAC1E,uEAAuE;QACvE,8CAA8C;QAC9C,MAAM,GAAG,GAAG,IAAI,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC;QAEjC,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC7C,CAAC;QACD,0EAA0E;QAC1E,sEAAsE;QACtE,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,SAAS,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;YAC/B,IAAI,SAAS,GAAG,QAAQ,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;QAED,GAAG,CAAC,YAAY,CAAC,oBAAoB,CAAC,QAAQ,EAAE,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC;IAC1E,CAAC;CACF"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@apimatic/cli",
3
3
  "description": "The official CLI for APIMatic.",
4
- "version": "1.1.0-beta.17",
4
+ "version": "1.1.0-beta.18",
5
5
  "author": "APIMatic",
6
6
  "bin": {
7
7
  "apimatic": "./bin/run.js"
@@ -53,6 +53,7 @@
53
53
  "@oclif/core": "^4.2.8",
54
54
  "@oclif/plugin-autocomplete": "^3.2.24",
55
55
  "@oclif/plugin-help": "^6.2.26",
56
+ "adm-zip": "^0.5.17",
56
57
  "ansis": "^3.17.0",
57
58
  "async-mutex": "^0.5.0",
58
59
  "axios": "^1.8.1",
@@ -60,7 +61,6 @@
60
61
  "connect-livereload": "^0.6.1",
61
62
  "execa": "^9.6.0",
62
63
  "express": "^4.17.1",
63
- "extract-zip": "^2.0.1",
64
64
  "fast-levenshtein": "^3.0.0",
65
65
  "form-data": "^4.0.2",
66
66
  "fs-extra": "^11.3.0",
@@ -86,6 +86,7 @@
86
86
  "@oclif/test": "^4.1.13",
87
87
  "@semantic-release/changelog": "^6.0.3",
88
88
  "@semantic-release/git": "^10.0.1",
89
+ "@types/adm-zip": "^0.5.8",
89
90
  "@types/base-64": "^1.0.0",
90
91
  "@types/chai": "^4.3.20",
91
92
  "@types/connect-livereload": "^0.5.32",
@@ -115,7 +116,7 @@
115
116
  "nyc": "^17.1.0",
116
117
  "oclif": "^4.17.34",
117
118
  "rimraf": "^6.0.1",
118
- "semantic-release": "^23.1.1",
119
+ "semantic-release": "^25.0.3",
119
120
  "simple-git": "^3.36.0",
120
121
  "sinon": "^21.0.0",
121
122
  "string-argv": "^0.3.1",