ts-swc-transform 2.7.10 → 2.8.1

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 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/typescript/ts-swc-transform/src/resolveFileSync.ts"],"sourcesContent":["import fs from 'fs';\nimport find from 'lodash.find';\nimport path from 'path';\nimport { extensions, moduleRegEx, typeFileRegEx } from './constants.ts';\nimport toPath from './toPath.ts';\nimport type { Context } from './types.ts';\n\nconst indexExtensions = extensions.map((x) => `index${x}`);\n\nexport default function resolveFileSync(specifier: string, context?: Context): string {\n const filePath = toPath(specifier, context);\n let stat: fs.Stats;\n try {\n stat = fs.statSync(filePath);\n } catch (_err) {}\n try {\n if ((stat && stat.isDirectory()) || specifier[specifier.length - 1] === '/') {\n const items = fs.readdirSync(filePath);\n const item = find(indexExtensions, (x) => items.indexOf(x) !== -1);\n if (item) return path.join(filePath, item);\n } else if (!stat && !moduleRegEx.test(specifier)) {\n const ext = path.extname(filePath);\n const basename = ext ? path.basename(filePath).slice(0, -ext.length) : path.basename(filePath);\n const items = fs.readdirSync(path.dirname(filePath));\n const item = find(items, (x) => {\n if (typeFileRegEx.test(x)) return false;\n const extTest = path.extname(x);\n const basenameTest = extTest ? path.basename(x).slice(0, -extTest.length) : path.basename(x);\n return basename === basenameTest;\n });\n if (item) return path.join(path.dirname(filePath), item);\n }\n // return what was found\n return stat ? filePath : null;\n } catch (_err) {\n return null;\n }\n}\n"],"names":["fs","find","path","extensions","moduleRegEx","typeFileRegEx","toPath","indexExtensions","map","x","resolveFileSync","specifier","context","filePath","stat","statSync","_err","isDirectory","length","items","readdirSync","item","indexOf","join","test","ext","extname","basename","slice","dirname","extTest","basenameTest"],"mappings":"AAAA,OAAOA,QAAQ,KAAK;AACpB,OAAOC,UAAU,cAAc;AAC/B,OAAOC,UAAU,OAAO;AACxB,SAASC,UAAU,EAAEC,WAAW,EAAEC,aAAa,QAAQ,iBAAiB;AACxE,OAAOC,YAAY,cAAc;AAGjC,MAAMC,kBAAkBJ,WAAWK,GAAG,CAAC,CAACC,IAAM,CAAC,KAAK,EAAEA,GAAG;AAEzD,eAAe,SAASC,gBAAgBC,SAAiB,EAAEC,OAAiB;IAC1E,MAAMC,WAAWP,OAAOK,WAAWC;IACnC,IAAIE;IACJ,IAAI;QACFA,OAAOd,GAAGe,QAAQ,CAACF;IACrB,EAAE,OAAOG,MAAM,CAAC;IAChB,IAAI;QACF,IAAI,AAACF,QAAQA,KAAKG,WAAW,MAAON,SAAS,CAACA,UAAUO,MAAM,GAAG,EAAE,KAAK,KAAK;YAC3E,MAAMC,QAAQnB,GAAGoB,WAAW,CAACP;YAC7B,MAAMQ,OAAOpB,KAAKM,iBAAiB,CAACE,IAAMU,MAAMG,OAAO,CAACb,OAAO,CAAC;YAChE,IAAIY,MAAM,OAAOnB,KAAKqB,IAAI,CAACV,UAAUQ;QACvC,OAAO,IAAI,CAACP,QAAQ,CAACV,YAAYoB,IAAI,CAACb,YAAY;YAChD,MAAMc,MAAMvB,KAAKwB,OAAO,CAACb;YACzB,MAAMc,WAAWF,MAAMvB,KAAKyB,QAAQ,CAACd,UAAUe,KAAK,CAAC,GAAG,CAACH,IAAIP,MAAM,IAAIhB,KAAKyB,QAAQ,CAACd;YACrF,MAAMM,QAAQnB,GAAGoB,WAAW,CAAClB,KAAK2B,OAAO,CAAChB;YAC1C,MAAMQ,OAAOpB,KAAKkB,OAAO,CAACV;gBACxB,IAAIJ,cAAcmB,IAAI,CAACf,IAAI,OAAO;gBAClC,MAAMqB,UAAU5B,KAAKwB,OAAO,CAACjB;gBAC7B,MAAMsB,eAAeD,UAAU5B,KAAKyB,QAAQ,CAAClB,GAAGmB,KAAK,CAAC,GAAG,CAACE,QAAQZ,MAAM,IAAIhB,KAAKyB,QAAQ,CAAClB;gBAC1F,OAAOkB,aAAaI;YACtB;YACA,IAAIV,MAAM,OAAOnB,KAAKqB,IAAI,CAACrB,KAAK2B,OAAO,CAAChB,WAAWQ;QACrD;QACA,wBAAwB;QACxB,OAAOP,OAAOD,WAAW;IAC3B,EAAE,OAAOG,MAAM;QACb,OAAO;IACT;AACF"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/typescript/ts-swc-transform/src/resolveFileSync.ts"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport { arrayFind } from './compat.ts';\nimport { extensions, moduleRegEx, typeFileRegEx } from './constants.ts';\nimport toPath from './toPath.ts';\nimport type { Context } from './types.ts';\n\nconst indexExtensions = extensions.map((x) => `index${x}`);\n\nexport default function resolveFileSync(specifier: string, context?: Context): string {\n const filePath = toPath(specifier, context);\n let stat: fs.Stats;\n try {\n stat = fs.statSync(filePath);\n } catch (_err) {}\n try {\n if ((stat && stat.isDirectory()) || specifier[specifier.length - 1] === '/') {\n const items = fs.readdirSync(filePath);\n const item = arrayFind(indexExtensions, (x) => items.indexOf(x) !== -1);\n if (item) return path.join(filePath, item);\n } else if (!stat && !moduleRegEx.test(specifier)) {\n const ext = path.extname(filePath);\n const basename = ext ? path.basename(filePath).slice(0, -ext.length) : path.basename(filePath);\n const items = fs.readdirSync(path.dirname(filePath));\n const item = arrayFind(items, (x) => {\n if (typeFileRegEx.test(x)) return false;\n const extTest = path.extname(x);\n const basenameTest = extTest ? path.basename(x).slice(0, -extTest.length) : path.basename(x);\n return basename === basenameTest;\n });\n if (item) return path.join(path.dirname(filePath), item);\n }\n // return what was found\n return stat ? filePath : null;\n } catch (_err) {\n return null;\n }\n}\n"],"names":["fs","path","arrayFind","extensions","moduleRegEx","typeFileRegEx","toPath","indexExtensions","map","x","resolveFileSync","specifier","context","filePath","stat","statSync","_err","isDirectory","length","items","readdirSync","item","indexOf","join","test","ext","extname","basename","slice","dirname","extTest","basenameTest"],"mappings":"AAAA,OAAOA,QAAQ,KAAK;AACpB,OAAOC,UAAU,OAAO;AACxB,SAASC,SAAS,QAAQ,cAAc;AACxC,SAASC,UAAU,EAAEC,WAAW,EAAEC,aAAa,QAAQ,iBAAiB;AACxE,OAAOC,YAAY,cAAc;AAGjC,MAAMC,kBAAkBJ,WAAWK,GAAG,CAAC,CAACC,IAAM,CAAC,KAAK,EAAEA,GAAG;AAEzD,eAAe,SAASC,gBAAgBC,SAAiB,EAAEC,OAAiB;IAC1E,MAAMC,WAAWP,OAAOK,WAAWC;IACnC,IAAIE;IACJ,IAAI;QACFA,OAAOd,GAAGe,QAAQ,CAACF;IACrB,EAAE,OAAOG,MAAM,CAAC;IAChB,IAAI;QACF,IAAI,AAACF,QAAQA,KAAKG,WAAW,MAAON,SAAS,CAACA,UAAUO,MAAM,GAAG,EAAE,KAAK,KAAK;YAC3E,MAAMC,QAAQnB,GAAGoB,WAAW,CAACP;YAC7B,MAAMQ,OAAOnB,UAAUK,iBAAiB,CAACE,IAAMU,MAAMG,OAAO,CAACb,OAAO,CAAC;YACrE,IAAIY,MAAM,OAAOpB,KAAKsB,IAAI,CAACV,UAAUQ;QACvC,OAAO,IAAI,CAACP,QAAQ,CAACV,YAAYoB,IAAI,CAACb,YAAY;YAChD,MAAMc,MAAMxB,KAAKyB,OAAO,CAACb;YACzB,MAAMc,WAAWF,MAAMxB,KAAK0B,QAAQ,CAACd,UAAUe,KAAK,CAAC,GAAG,CAACH,IAAIP,MAAM,IAAIjB,KAAK0B,QAAQ,CAACd;YACrF,MAAMM,QAAQnB,GAAGoB,WAAW,CAACnB,KAAK4B,OAAO,CAAChB;YAC1C,MAAMQ,OAAOnB,UAAUiB,OAAO,CAACV;gBAC7B,IAAIJ,cAAcmB,IAAI,CAACf,IAAI,OAAO;gBAClC,MAAMqB,UAAU7B,KAAKyB,OAAO,CAACjB;gBAC7B,MAAMsB,eAAeD,UAAU7B,KAAK0B,QAAQ,CAAClB,GAAGmB,KAAK,CAAC,GAAG,CAACE,QAAQZ,MAAM,IAAIjB,KAAK0B,QAAQ,CAAClB;gBAC1F,OAAOkB,aAAaI;YACtB;YACA,IAAIV,MAAM,OAAOpB,KAAKsB,IAAI,CAACtB,KAAK4B,OAAO,CAAChB,WAAWQ;QACrD;QACA,wBAAwB;QACxB,OAAOP,OAAOD,WAAW;IAC3B,EAAE,OAAOG,MAAM;QACb,OAAO;IACT;AACF"}
@@ -5,13 +5,12 @@ import * as resolve from 'resolve';
5
5
  import url from 'url';
6
6
  import { stringStartsWith } from './compat.js';
7
7
  import { moduleRegEx } from './constants.js';
8
- import importMetaResolve from './lib/import-meta-resolve.js';
8
+ import resolveWithExports from './lib/resolve-with-exports.js';
9
9
  import * as urlPolyfills from './lib/urlFileUrl.js';
10
10
  var _resolve_default;
11
11
  const resolveSync = ((_resolve_default = resolve.default) !== null && _resolve_default !== void 0 ? _resolve_default : resolve).sync;
12
12
  const useCJS = !module.createRequire;
13
13
  const fileURLToPath = url.fileURLToPath || urlPolyfills.fileURLToPath;
14
- const pathToFileURL = url.pathToFileURL || urlPolyfills.pathToFileURL;
15
14
  function getParentPath(context) {
16
15
  if (context.parentPath) return path.dirname(context.parentPath);
17
16
  return context.parentURL ? path.dirname(toPath(context.parentURL)) : process.cwd();
@@ -27,8 +26,8 @@ export default function toPath(specifier, context) {
27
26
  const parentPath = context ? getParentPath(context) : process.cwd();
28
27
  if (!useCJS) {
29
28
  try {
30
- const entryURL = importMetaResolve(specifier, pathToFileURL(parentPath));
31
- if (entryURL) return fileURLToPath(entryURL);
29
+ const entryPath = resolveWithExports(specifier, parentPath);
30
+ if (entryPath) return entryPath;
32
31
  } catch (_) {
33
32
  /* it may fail due to commonjs edge cases */ }
34
33
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/typescript/ts-swc-transform/src/toPath.ts"],"sourcesContent":["import isAbsolute from 'is-absolute';\nimport module from 'module';\nimport path from 'path';\nimport * as resolve from 'resolve';\nimport url from 'url';\n\nimport { stringStartsWith } from './compat.ts';\nimport { moduleRegEx } from './constants.ts';\nimport importMetaResolve from './lib/import-meta-resolve.ts';\nimport * as urlPolyfills from './lib/urlFileUrl.ts';\nimport type { Context } from './types.ts';\n\nconst resolveSync = (resolve.default ?? resolve).sync;\n\nconst useCJS = !module.createRequire;\nconst fileURLToPath = url.fileURLToPath || urlPolyfills.fileURLToPath;\nconst pathToFileURL = url.pathToFileURL || urlPolyfills.pathToFileURL;\n\nfunction getParentPath(context: Context): string {\n if (context.parentPath) return path.dirname(context.parentPath);\n return context.parentURL ? path.dirname(toPath(context.parentURL)) : process.cwd();\n}\n\nexport default function toPath(specifier: string, context?: Context): string {\n if (stringStartsWith(specifier, 'file:')) return fileURLToPath(specifier);\n if (isAbsolute(specifier)) return specifier;\n if (specifier[0] === '.') {\n const parentPath = context ? getParentPath(context) : process.cwd();\n return path.join(parentPath, specifier);\n }\n if (moduleRegEx.test(specifier)) {\n const parentPath = context ? getParentPath(context) : process.cwd();\n if (!useCJS) {\n try {\n const entryURL = importMetaResolve(specifier, pathToFileURL(parentPath));\n if (entryURL) return fileURLToPath(entryURL);\n } catch (_) {\n /* it may fail due to commonjs edge cases */\n }\n }\n const entryPath = resolveSync(specifier, {\n basedir: parentPath,\n extensions: ['.js', '.json', '.node', '.mjs'],\n });\n if (entryPath) return entryPath;\n }\n\n return specifier;\n}\n"],"names":["isAbsolute","module","path","resolve","url","stringStartsWith","moduleRegEx","importMetaResolve","urlPolyfills","resolveSync","default","sync","useCJS","createRequire","fileURLToPath","pathToFileURL","getParentPath","context","parentPath","dirname","parentURL","toPath","process","cwd","specifier","join","test","entryURL","_","entryPath","basedir","extensions"],"mappings":"AAAA,OAAOA,gBAAgB,cAAc;AACrC,OAAOC,YAAY,SAAS;AAC5B,OAAOC,UAAU,OAAO;AACxB,YAAYC,aAAa,UAAU;AACnC,OAAOC,SAAS,MAAM;AAEtB,SAASC,gBAAgB,QAAQ,cAAc;AAC/C,SAASC,WAAW,QAAQ,iBAAiB;AAC7C,OAAOC,uBAAuB,+BAA+B;AAC7D,YAAYC,kBAAkB,sBAAsB;IAG/BL;AAArB,MAAMM,cAAc,AAACN,CAAAA,CAAAA,mBAAAA,QAAQO,OAAO,cAAfP,8BAAAA,mBAAmBA,OAAM,EAAGQ,IAAI;AAErD,MAAMC,SAAS,CAACX,OAAOY,aAAa;AACpC,MAAMC,gBAAgBV,IAAIU,aAAa,IAAIN,aAAaM,aAAa;AACrE,MAAMC,gBAAgBX,IAAIW,aAAa,IAAIP,aAAaO,aAAa;AAErE,SAASC,cAAcC,OAAgB;IACrC,IAAIA,QAAQC,UAAU,EAAE,OAAOhB,KAAKiB,OAAO,CAACF,QAAQC,UAAU;IAC9D,OAAOD,QAAQG,SAAS,GAAGlB,KAAKiB,OAAO,CAACE,OAAOJ,QAAQG,SAAS,KAAKE,QAAQC,GAAG;AAClF;AAEA,eAAe,SAASF,OAAOG,SAAiB,EAAEP,OAAiB;IACjE,IAAIZ,iBAAiBmB,WAAW,UAAU,OAAOV,cAAcU;IAC/D,IAAIxB,WAAWwB,YAAY,OAAOA;IAClC,IAAIA,SAAS,CAAC,EAAE,KAAK,KAAK;QACxB,MAAMN,aAAaD,UAAUD,cAAcC,WAAWK,QAAQC,GAAG;QACjE,OAAOrB,KAAKuB,IAAI,CAACP,YAAYM;IAC/B;IACA,IAAIlB,YAAYoB,IAAI,CAACF,YAAY;QAC/B,MAAMN,aAAaD,UAAUD,cAAcC,WAAWK,QAAQC,GAAG;QACjE,IAAI,CAACX,QAAQ;YACX,IAAI;gBACF,MAAMe,WAAWpB,kBAAkBiB,WAAWT,cAAcG;gBAC5D,IAAIS,UAAU,OAAOb,cAAca;YACrC,EAAE,OAAOC,GAAG;YACV,0CAA0C,GAC5C;QACF;QACA,MAAMC,YAAYpB,YAAYe,WAAW;YACvCM,SAASZ;YACTa,YAAY;gBAAC;gBAAO;gBAAS;gBAAS;aAAO;QAC/C;QACA,IAAIF,WAAW,OAAOA;IACxB;IAEA,OAAOL;AACT"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/typescript/ts-swc-transform/src/toPath.ts"],"sourcesContent":["import isAbsolute from 'is-absolute';\nimport module from 'module';\nimport path from 'path';\nimport * as resolve from 'resolve';\nimport url from 'url';\n\nimport { stringStartsWith } from './compat.ts';\nimport { moduleRegEx } from './constants.ts';\nimport resolveWithExports from './lib/resolve-with-exports.ts';\nimport * as urlPolyfills from './lib/urlFileUrl.ts';\nimport type { Context } from './types.ts';\n\nconst resolveSync = (resolve.default ?? resolve).sync;\n\nconst useCJS = !module.createRequire;\nconst fileURLToPath = url.fileURLToPath || urlPolyfills.fileURLToPath;\n\nfunction getParentPath(context: Context): string {\n if (context.parentPath) return path.dirname(context.parentPath);\n return context.parentURL ? path.dirname(toPath(context.parentURL)) : process.cwd();\n}\n\nexport default function toPath(specifier: string, context?: Context): string {\n if (stringStartsWith(specifier, 'file:')) return fileURLToPath(specifier);\n if (isAbsolute(specifier)) return specifier;\n if (specifier[0] === '.') {\n const parentPath = context ? getParentPath(context) : process.cwd();\n return path.join(parentPath, specifier);\n }\n if (moduleRegEx.test(specifier)) {\n const parentPath = context ? getParentPath(context) : process.cwd();\n if (!useCJS) {\n try {\n const entryPath = resolveWithExports(specifier, parentPath);\n if (entryPath) return entryPath;\n } catch (_) {\n /* it may fail due to commonjs edge cases */\n }\n }\n const entryPath = resolveSync(specifier, {\n basedir: parentPath,\n extensions: ['.js', '.json', '.node', '.mjs'],\n });\n if (entryPath) return entryPath;\n }\n\n return specifier;\n}\n"],"names":["isAbsolute","module","path","resolve","url","stringStartsWith","moduleRegEx","resolveWithExports","urlPolyfills","resolveSync","default","sync","useCJS","createRequire","fileURLToPath","getParentPath","context","parentPath","dirname","parentURL","toPath","process","cwd","specifier","join","test","entryPath","_","basedir","extensions"],"mappings":"AAAA,OAAOA,gBAAgB,cAAc;AACrC,OAAOC,YAAY,SAAS;AAC5B,OAAOC,UAAU,OAAO;AACxB,YAAYC,aAAa,UAAU;AACnC,OAAOC,SAAS,MAAM;AAEtB,SAASC,gBAAgB,QAAQ,cAAc;AAC/C,SAASC,WAAW,QAAQ,iBAAiB;AAC7C,OAAOC,wBAAwB,gCAAgC;AAC/D,YAAYC,kBAAkB,sBAAsB;IAG/BL;AAArB,MAAMM,cAAc,EAACN,mBAAAA,QAAQO,OAAO,cAAfP,8BAAAA,mBAAmBA,SAASQ,IAAI;AAErD,MAAMC,SAAS,CAACX,OAAOY,aAAa;AACpC,MAAMC,gBAAgBV,IAAIU,aAAa,IAAIN,aAAaM,aAAa;AAErE,SAASC,cAAcC,OAAgB;IACrC,IAAIA,QAAQC,UAAU,EAAE,OAAOf,KAAKgB,OAAO,CAACF,QAAQC,UAAU;IAC9D,OAAOD,QAAQG,SAAS,GAAGjB,KAAKgB,OAAO,CAACE,OAAOJ,QAAQG,SAAS,KAAKE,QAAQC,GAAG;AAClF;AAEA,eAAe,SAASF,OAAOG,SAAiB,EAAEP,OAAiB;IACjE,IAAIX,iBAAiBkB,WAAW,UAAU,OAAOT,cAAcS;IAC/D,IAAIvB,WAAWuB,YAAY,OAAOA;IAClC,IAAIA,SAAS,CAAC,EAAE,KAAK,KAAK;QACxB,MAAMN,aAAaD,UAAUD,cAAcC,WAAWK,QAAQC,GAAG;QACjE,OAAOpB,KAAKsB,IAAI,CAACP,YAAYM;IAC/B;IACA,IAAIjB,YAAYmB,IAAI,CAACF,YAAY;QAC/B,MAAMN,aAAaD,UAAUD,cAAcC,WAAWK,QAAQC,GAAG;QACjE,IAAI,CAACV,QAAQ;YACX,IAAI;gBACF,MAAMc,YAAYnB,mBAAmBgB,WAAWN;gBAChD,IAAIS,WAAW,OAAOA;YACxB,EAAE,OAAOC,GAAG;YACV,0CAA0C,GAC5C;QACF;QACA,MAAMD,YAAYjB,YAAYc,WAAW;YACvCK,SAASX;YACTY,YAAY;gBAAC;gBAAO;gBAAS;gBAAS;aAAO;QAC/C;QACA,IAAIH,WAAW,OAAOA;IACxB;IAEA,OAAOH;AACT"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ts-swc-transform",
3
- "version": "2.7.10",
3
+ "version": "2.8.1",
4
4
  "description": "Typescript transformers for swc. Supports Node >= 0.8",
5
5
  "keywords": [
6
6
  "matcher",
@@ -44,35 +44,35 @@
44
44
  "version": "tsds version"
45
45
  },
46
46
  "dependencies": {
47
- "@swc/core": "^1.15.3",
48
- "core-js-pure": "^3.47.0",
49
- "exit-compat": "^1.0.3",
47
+ "@swc/core": "^1.15.5",
48
+ "core-js-pure": "^3.20.0",
49
+ "exit-compat": "^1.0.0",
50
50
  "fs-iterator": "^6.1.12",
51
51
  "install-optional": "^1.0.20",
52
52
  "is-absolute": "^1.0.0",
53
53
  "lodash.debounce": "^4.0.8",
54
- "lodash.find": "^4.6.0",
55
- "mkdirp-classic": "^0.5.3",
54
+ "mkdirp-classic": "^0.5.2",
56
55
  "node-version-call": "^1.9.19",
57
- "queue-cb": "^1.6.3",
58
- "read-tsconfig-sync": "^1.1.9",
59
- "resolve": "^1.22.11",
56
+ "queue-cb": "^1.0.0",
57
+ "read-tsconfig-sync": "^1.0.3",
58
+ "resolve": "^1.3.1",
59
+ "resolve.exports": "^2.0.3",
60
60
  "test-match": "^1.1.4",
61
- "ts-node": "^10.9.2",
61
+ "ts-node": "^10.9.0",
62
62
  "typescript": "^5.9.3"
63
63
  },
64
64
  "devDependencies": {
65
- "@types/mocha": "^10.0.10",
66
- "@types/node": "^25.0.1",
67
- "core-js": "^3.47.0",
65
+ "@types/mocha": "*",
66
+ "@types/node": "*",
68
67
  "cr": "^0.1.0",
69
- "cross-spawn-cb": "^2.4.14",
70
- "fs-remove-compat": "^0.2.3",
71
- "node-version-use": "^2.1.6",
72
- "pinkie-promise": "^2.0.1",
68
+ "cross-spawn-cb": "^2.0.0",
69
+ "fs-remove-compat": "^1.0.0",
70
+ "mock-exports-only-pkg": "file:test/data/mock-exports-only-pkg",
71
+ "node-version-use": "*",
72
+ "pinkie-promise": "*",
73
73
  "react": "^19.2.3",
74
- "ts-dev-stack": "^1.21.3",
75
- "tsds-config": "^0.2.1"
74
+ "ts-dev-stack": "*",
75
+ "tsds-config": "*"
76
76
  },
77
77
  "engines": {
78
78
  "node": ">=0.8"