@module-federation/dts-plugin 0.1.21 → 0.2.0

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/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # @module-federation/dts-plugin
2
2
 
3
+ ## 0.2.0
4
+
5
+ ### Patch Changes
6
+
7
+ - 804cc3b: fix: check pid is undefined before kill it
8
+ - 52bb94c: fix(dts-plugin): ensure kill fork child process when the task is finished
9
+ - f7a6d3f: fix: download api types when types refresh
10
+ - @module-federation/sdk@0.2.0
11
+ - @module-federation/managers@0.2.0
12
+ - @module-federation/third-party-dts-extractor@0.2.0
13
+
3
14
  ## 0.1.21
4
15
 
5
16
  ### Patch Changes
package/dist/core.js CHANGED
@@ -1505,6 +1505,10 @@ var DTSManager = (_a = class {
1505
1505
  }
1506
1506
  const { hostOptions, mapRemotesToDownload } = retrieveHostConfig(this.options.host);
1507
1507
  const loadedRemoteInfo = Object.values(remoteAliasMap).find((i) => i.name === remoteName);
1508
+ const consumeTypes2 = /* @__PURE__ */ __name((requiredRemoteInfo) => __async(this, null, function* () {
1509
+ const [_alias, destinationPath] = yield this.consumeTargetRemotes(hostOptions, requiredRemoteInfo);
1510
+ yield this.downloadAPITypes(requiredRemoteInfo, destinationPath);
1511
+ }), "consumeTypes");
1508
1512
  if (!loadedRemoteInfo) {
1509
1513
  const remoteInfo = Object.values(mapRemotesToDownload).find((item) => {
1510
1514
  return item.name === remoteName;
@@ -1514,11 +1518,10 @@ var DTSManager = (_a = class {
1514
1518
  const requiredRemoteInfo = yield this.requestRemoteManifest(remoteInfo);
1515
1519
  this.remoteAliasMap[remoteInfo.alias] = requiredRemoteInfo;
1516
1520
  }
1517
- yield this.consumeTargetRemotes(hostOptions, this.remoteAliasMap[remoteInfo.alias]);
1521
+ yield consumeTypes2(this.remoteAliasMap[remoteInfo.alias]);
1518
1522
  } else if (updatedRemoteInfo) {
1519
1523
  const consumeDynamicRemoteTypes = /* @__PURE__ */ __name(() => __async(this, null, function* () {
1520
- const [_destinationFolder, destinationPath] = yield this.consumeTargetRemotes(hostOptions, this.updatedRemoteInfos[updatedRemoteInfo.name]);
1521
- yield this.downloadAPITypes(this.updatedRemoteInfos[updatedRemoteInfo.name], destinationPath);
1524
+ yield consumeTypes2(this.updatedRemoteInfos[updatedRemoteInfo.name]);
1522
1525
  this.consumeAPITypes(hostOptions);
1523
1526
  }), "consumeDynamicRemoteTypes");
1524
1527
  if (!this.updatedRemoteInfos[updatedRemoteInfo.name]) {
@@ -1537,7 +1540,7 @@ var DTSManager = (_a = class {
1537
1540
  }
1538
1541
  }
1539
1542
  } else {
1540
- yield this.consumeTargetRemotes(hostOptions, loadedRemoteInfo);
1543
+ yield consumeTypes2(loadedRemoteInfo);
1541
1544
  }
1542
1545
  }
1543
1546
  } catch (err) {
@@ -1597,7 +1600,7 @@ function retrieveTypesAssetsInfo(options) {
1597
1600
  }
1598
1601
  __name(retrieveTypesAssetsInfo, "retrieveTypesAssetsInfo");
1599
1602
  function isDebugMode() {
1600
- return Boolean(process.env["FEDERATION_DEBUG"]);
1603
+ return Boolean(process.env["FEDERATION_DEBUG"]) || process.env["NODE_ENV"] === "test";
1601
1604
  }
1602
1605
  __name(isDebugMode, "isDebugMode");
1603
1606
  var isTSProject = /* @__PURE__ */ __name((dtsOptions, context = process.cwd()) => {
@@ -1985,8 +1988,28 @@ var _DtsWorker = class _DtsWorker {
1985
1988
  }
1986
1989
  }
1987
1990
  get controlledPromise() {
1991
+ const ensureChildProcessExit = /* @__PURE__ */ __name(() => {
1992
+ var _a3;
1993
+ try {
1994
+ const pid = (_a3 = this.rpcWorker.process) == null ? void 0 : _a3.pid;
1995
+ const rootPid = process.pid;
1996
+ if (pid && rootPid !== pid) {
1997
+ process.kill(pid, 0);
1998
+ }
1999
+ } catch (error2) {
2000
+ if (isDebugMode()) {
2001
+ console.error(error2);
2002
+ }
2003
+ }
2004
+ }, "ensureChildProcessExit");
1988
2005
  return Promise.resolve(this._res).then(() => {
1989
2006
  this.exit();
2007
+ ensureChildProcessExit();
2008
+ }).catch((err) => {
2009
+ if (isDebugMode()) {
2010
+ console.error(err);
2011
+ }
2012
+ ensureChildProcessExit();
1990
2013
  });
1991
2014
  }
1992
2015
  exit() {
@@ -1834,6 +1834,10 @@ var DTSManager = (_a = class {
1834
1834
  }
1835
1835
  const { hostOptions, mapRemotesToDownload } = retrieveHostConfig(this.options.host);
1836
1836
  const loadedRemoteInfo = Object.values(remoteAliasMap).find((i) => i.name === remoteName);
1837
+ const consumeTypes2 = /* @__PURE__ */ __name((requiredRemoteInfo) => __async(this, null, function* () {
1838
+ const [_alias, destinationPath] = yield this.consumeTargetRemotes(hostOptions, requiredRemoteInfo);
1839
+ yield this.downloadAPITypes(requiredRemoteInfo, destinationPath);
1840
+ }), "consumeTypes");
1837
1841
  if (!loadedRemoteInfo) {
1838
1842
  const remoteInfo = Object.values(mapRemotesToDownload).find((item) => {
1839
1843
  return item.name === remoteName;
@@ -1843,11 +1847,10 @@ var DTSManager = (_a = class {
1843
1847
  const requiredRemoteInfo = yield this.requestRemoteManifest(remoteInfo);
1844
1848
  this.remoteAliasMap[remoteInfo.alias] = requiredRemoteInfo;
1845
1849
  }
1846
- yield this.consumeTargetRemotes(hostOptions, this.remoteAliasMap[remoteInfo.alias]);
1850
+ yield consumeTypes2(this.remoteAliasMap[remoteInfo.alias]);
1847
1851
  } else if (updatedRemoteInfo) {
1848
1852
  const consumeDynamicRemoteTypes = /* @__PURE__ */ __name(() => __async(this, null, function* () {
1849
- const [_destinationFolder, destinationPath] = yield this.consumeTargetRemotes(hostOptions, this.updatedRemoteInfos[updatedRemoteInfo.name]);
1850
- yield this.downloadAPITypes(this.updatedRemoteInfos[updatedRemoteInfo.name], destinationPath);
1853
+ yield consumeTypes2(this.updatedRemoteInfos[updatedRemoteInfo.name]);
1851
1854
  this.consumeAPITypes(hostOptions);
1852
1855
  }), "consumeDynamicRemoteTypes");
1853
1856
  if (!this.updatedRemoteInfos[updatedRemoteInfo.name]) {
@@ -1866,7 +1869,7 @@ var DTSManager = (_a = class {
1866
1869
  }
1867
1870
  }
1868
1871
  } else {
1869
- yield this.consumeTargetRemotes(hostOptions, loadedRemoteInfo);
1872
+ yield consumeTypes2(loadedRemoteInfo);
1870
1873
  }
1871
1874
  }
1872
1875
  } catch (err) {
@@ -1926,7 +1929,7 @@ function retrieveTypesAssetsInfo(options) {
1926
1929
  }
1927
1930
  __name(retrieveTypesAssetsInfo, "retrieveTypesAssetsInfo");
1928
1931
  function isDebugMode() {
1929
- return Boolean(process.env["FEDERATION_DEBUG"]);
1932
+ return Boolean(process.env["FEDERATION_DEBUG"]) || process.env["NODE_ENV"] === "test";
1930
1933
  }
1931
1934
  __name(isDebugMode, "isDebugMode");
1932
1935
  var isTSProject = /* @__PURE__ */ __name((dtsOptions, context = process.cwd()) => {
@@ -2314,8 +2317,28 @@ var _DtsWorker = class _DtsWorker {
2314
2317
  }
2315
2318
  }
2316
2319
  get controlledPromise() {
2320
+ const ensureChildProcessExit = /* @__PURE__ */ __name(() => {
2321
+ var _a3;
2322
+ try {
2323
+ const pid = (_a3 = this.rpcWorker.process) == null ? void 0 : _a3.pid;
2324
+ const rootPid = process.pid;
2325
+ if (pid && rootPid !== pid) {
2326
+ process.kill(pid, 0);
2327
+ }
2328
+ } catch (error2) {
2329
+ if (isDebugMode()) {
2330
+ console.error(error2);
2331
+ }
2332
+ }
2333
+ }, "ensureChildProcessExit");
2317
2334
  return Promise.resolve(this._res).then(() => {
2318
2335
  this.exit();
2336
+ ensureChildProcessExit();
2337
+ }).catch((err) => {
2338
+ if (isDebugMode()) {
2339
+ console.error(err);
2340
+ }
2341
+ ensureChildProcessExit();
2319
2342
  });
2320
2343
  }
2321
2344
  exit() {
package/dist/esm/core.js CHANGED
@@ -14,7 +14,7 @@ import {
14
14
  retrieveTypesZipPath,
15
15
  rpc_exports,
16
16
  validateOptions
17
- } from "./chunk-55BKSNZ4.js";
17
+ } from "./chunk-DQ2CDTSN.js";
18
18
  import {
19
19
  HOST_API_TYPES_FILE_NAME,
20
20
  REMOTE_ALIAS_IDENTIFIER,
@@ -9,7 +9,7 @@ import {
9
9
  retrieveRemoteConfig,
10
10
  retrieveTypesZipPath,
11
11
  rpc_exports
12
- } from "./chunk-55BKSNZ4.js";
12
+ } from "./chunk-DQ2CDTSN.js";
13
13
  import {
14
14
  getIpFromEntry
15
15
  } from "./chunk-G7ONFBMA.js";
@@ -2,7 +2,7 @@ import {
2
2
  RpcGMCallTypes,
3
3
  exposeRpc,
4
4
  generateTypes
5
- } from "./chunk-55BKSNZ4.js";
5
+ } from "./chunk-DQ2CDTSN.js";
6
6
  import {
7
7
  __async,
8
8
  __name
package/dist/esm/index.js CHANGED
@@ -7,7 +7,7 @@ import {
7
7
  retrieveTypesAssetsInfo,
8
8
  rpc_exports,
9
9
  validateOptions
10
- } from "./chunk-55BKSNZ4.js";
10
+ } from "./chunk-DQ2CDTSN.js";
11
11
  import {
12
12
  WEB_CLIENT_OPTIONS_IDENTIFIER,
13
13
  __async,
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  Broker,
3
3
  fileLog
4
- } from "./chunk-55BKSNZ4.js";
4
+ } from "./chunk-DQ2CDTSN.js";
5
5
  import {
6
6
  __async,
7
7
  __name
@@ -2014,6 +2014,10 @@ var DTSManager = (_a = class {
2014
2014
  }
2015
2015
  const { hostOptions, mapRemotesToDownload } = retrieveHostConfig(this.options.host);
2016
2016
  const loadedRemoteInfo = Object.values(remoteAliasMap).find((i) => i.name === remoteName);
2017
+ const consumeTypes2 = /* @__PURE__ */ __name((requiredRemoteInfo) => __async(this, null, function* () {
2018
+ const [_alias, destinationPath] = yield this.consumeTargetRemotes(hostOptions, requiredRemoteInfo);
2019
+ yield this.downloadAPITypes(requiredRemoteInfo, destinationPath);
2020
+ }), "consumeTypes");
2017
2021
  if (!loadedRemoteInfo) {
2018
2022
  const remoteInfo = Object.values(mapRemotesToDownload).find((item) => {
2019
2023
  return item.name === remoteName;
@@ -2023,11 +2027,10 @@ var DTSManager = (_a = class {
2023
2027
  const requiredRemoteInfo = yield this.requestRemoteManifest(remoteInfo);
2024
2028
  this.remoteAliasMap[remoteInfo.alias] = requiredRemoteInfo;
2025
2029
  }
2026
- yield this.consumeTargetRemotes(hostOptions, this.remoteAliasMap[remoteInfo.alias]);
2030
+ yield consumeTypes2(this.remoteAliasMap[remoteInfo.alias]);
2027
2031
  } else if (updatedRemoteInfo) {
2028
2032
  const consumeDynamicRemoteTypes = /* @__PURE__ */ __name(() => __async(this, null, function* () {
2029
- const [_destinationFolder, destinationPath] = yield this.consumeTargetRemotes(hostOptions, this.updatedRemoteInfos[updatedRemoteInfo.name]);
2030
- yield this.downloadAPITypes(this.updatedRemoteInfos[updatedRemoteInfo.name], destinationPath);
2033
+ yield consumeTypes2(this.updatedRemoteInfos[updatedRemoteInfo.name]);
2031
2034
  this.consumeAPITypes(hostOptions);
2032
2035
  }), "consumeDynamicRemoteTypes");
2033
2036
  if (!this.updatedRemoteInfos[updatedRemoteInfo.name]) {
@@ -2046,7 +2049,7 @@ var DTSManager = (_a = class {
2046
2049
  }
2047
2050
  }
2048
2051
  } else {
2049
- yield this.consumeTargetRemotes(hostOptions, loadedRemoteInfo);
2052
+ yield consumeTypes2(loadedRemoteInfo);
2050
2053
  }
2051
2054
  }
2052
2055
  } catch (err) {
@@ -2071,7 +2074,7 @@ var validateOptions = /* @__PURE__ */ __name((options) => {
2071
2074
  }
2072
2075
  }, "validateOptions");
2073
2076
  function isDebugMode() {
2074
- return Boolean(process.env["FEDERATION_DEBUG"]);
2077
+ return Boolean(process.env["FEDERATION_DEBUG"]) || process.env["NODE_ENV"] === "test";
2075
2078
  }
2076
2079
  __name(isDebugMode, "isDebugMode");
2077
2080
  function axiosGet(url, config) {
@@ -1796,6 +1796,10 @@ var DTSManager = (_a2 = class {
1796
1796
  }
1797
1797
  const { hostOptions, mapRemotesToDownload } = retrieveHostConfig(this.options.host);
1798
1798
  const loadedRemoteInfo = Object.values(remoteAliasMap).find((i) => i.name === remoteName);
1799
+ const consumeTypes2 = /* @__PURE__ */ __name((requiredRemoteInfo) => __async(this, null, function* () {
1800
+ const [_alias, destinationPath] = yield this.consumeTargetRemotes(hostOptions, requiredRemoteInfo);
1801
+ yield this.downloadAPITypes(requiredRemoteInfo, destinationPath);
1802
+ }), "consumeTypes");
1799
1803
  if (!loadedRemoteInfo) {
1800
1804
  const remoteInfo = Object.values(mapRemotesToDownload).find((item) => {
1801
1805
  return item.name === remoteName;
@@ -1805,11 +1809,10 @@ var DTSManager = (_a2 = class {
1805
1809
  const requiredRemoteInfo = yield this.requestRemoteManifest(remoteInfo);
1806
1810
  this.remoteAliasMap[remoteInfo.alias] = requiredRemoteInfo;
1807
1811
  }
1808
- yield this.consumeTargetRemotes(hostOptions, this.remoteAliasMap[remoteInfo.alias]);
1812
+ yield consumeTypes2(this.remoteAliasMap[remoteInfo.alias]);
1809
1813
  } else if (updatedRemoteInfo) {
1810
1814
  const consumeDynamicRemoteTypes = /* @__PURE__ */ __name(() => __async(this, null, function* () {
1811
- const [_destinationFolder, destinationPath] = yield this.consumeTargetRemotes(hostOptions, this.updatedRemoteInfos[updatedRemoteInfo.name]);
1812
- yield this.downloadAPITypes(this.updatedRemoteInfos[updatedRemoteInfo.name], destinationPath);
1815
+ yield consumeTypes2(this.updatedRemoteInfos[updatedRemoteInfo.name]);
1813
1816
  this.consumeAPITypes(hostOptions);
1814
1817
  }), "consumeDynamicRemoteTypes");
1815
1818
  if (!this.updatedRemoteInfos[updatedRemoteInfo.name]) {
@@ -1828,7 +1831,7 @@ var DTSManager = (_a2 = class {
1828
1831
  }
1829
1832
  }
1830
1833
  } else {
1831
- yield this.consumeTargetRemotes(hostOptions, loadedRemoteInfo);
1834
+ yield consumeTypes2(loadedRemoteInfo);
1832
1835
  }
1833
1836
  }
1834
1837
  } catch (err) {
@@ -1853,7 +1856,7 @@ var validateOptions = /* @__PURE__ */ __name((options) => {
1853
1856
  }
1854
1857
  }, "validateOptions");
1855
1858
  function isDebugMode() {
1856
- return Boolean(process.env["FEDERATION_DEBUG"]);
1859
+ return Boolean(process.env["FEDERATION_DEBUG"]) || process.env["NODE_ENV"] === "test";
1857
1860
  }
1858
1861
  __name(isDebugMode, "isDebugMode");
1859
1862
  function axiosGet(url, config) {
@@ -83,7 +83,7 @@
83
83
  APIKind2["FETCH_TYPES"] = "FETCH_TYPES";
84
84
  })(APIKind || (APIKind = {}));
85
85
 
86
- // node_modules/.pnpm/isomorphic-ws@5.0.0_ws@8.17.0/node_modules/isomorphic-ws/browser.js
86
+ // node_modules/.pnpm/isomorphic-ws@5.0.0_ws@8.17.1/node_modules/isomorphic-ws/browser.js
87
87
  var ws = null;
88
88
  if (typeof WebSocket !== "undefined") {
89
89
  ws = WebSocket;
package/dist/index.js CHANGED
@@ -1528,6 +1528,10 @@ var DTSManager = (_a = class {
1528
1528
  }
1529
1529
  const { hostOptions, mapRemotesToDownload } = retrieveHostConfig(this.options.host);
1530
1530
  const loadedRemoteInfo = Object.values(remoteAliasMap).find((i) => i.name === remoteName);
1531
+ const consumeTypes2 = /* @__PURE__ */ __name((requiredRemoteInfo) => __async(this, null, function* () {
1532
+ const [_alias, destinationPath] = yield this.consumeTargetRemotes(hostOptions, requiredRemoteInfo);
1533
+ yield this.downloadAPITypes(requiredRemoteInfo, destinationPath);
1534
+ }), "consumeTypes");
1531
1535
  if (!loadedRemoteInfo) {
1532
1536
  const remoteInfo = Object.values(mapRemotesToDownload).find((item) => {
1533
1537
  return item.name === remoteName;
@@ -1537,11 +1541,10 @@ var DTSManager = (_a = class {
1537
1541
  const requiredRemoteInfo = yield this.requestRemoteManifest(remoteInfo);
1538
1542
  this.remoteAliasMap[remoteInfo.alias] = requiredRemoteInfo;
1539
1543
  }
1540
- yield this.consumeTargetRemotes(hostOptions, this.remoteAliasMap[remoteInfo.alias]);
1544
+ yield consumeTypes2(this.remoteAliasMap[remoteInfo.alias]);
1541
1545
  } else if (updatedRemoteInfo) {
1542
1546
  const consumeDynamicRemoteTypes = /* @__PURE__ */ __name(() => __async(this, null, function* () {
1543
- const [_destinationFolder, destinationPath] = yield this.consumeTargetRemotes(hostOptions, this.updatedRemoteInfos[updatedRemoteInfo.name]);
1544
- yield this.downloadAPITypes(this.updatedRemoteInfos[updatedRemoteInfo.name], destinationPath);
1547
+ yield consumeTypes2(this.updatedRemoteInfos[updatedRemoteInfo.name]);
1545
1548
  this.consumeAPITypes(hostOptions);
1546
1549
  }), "consumeDynamicRemoteTypes");
1547
1550
  if (!this.updatedRemoteInfos[updatedRemoteInfo.name]) {
@@ -1560,7 +1563,7 @@ var DTSManager = (_a = class {
1560
1563
  }
1561
1564
  }
1562
1565
  } else {
1563
- yield this.consumeTargetRemotes(hostOptions, loadedRemoteInfo);
1566
+ yield consumeTypes2(loadedRemoteInfo);
1564
1567
  }
1565
1568
  }
1566
1569
  } catch (err) {
@@ -1620,7 +1623,7 @@ function retrieveTypesAssetsInfo(options) {
1620
1623
  }
1621
1624
  __name(retrieveTypesAssetsInfo, "retrieveTypesAssetsInfo");
1622
1625
  function isDebugMode() {
1623
- return Boolean(process.env["FEDERATION_DEBUG"]);
1626
+ return Boolean(process.env["FEDERATION_DEBUG"]) || process.env["NODE_ENV"] === "test";
1624
1627
  }
1625
1628
  __name(isDebugMode, "isDebugMode");
1626
1629
  var isTSProject = /* @__PURE__ */ __name((dtsOptions, context = process.cwd()) => {
@@ -2008,8 +2011,28 @@ var _DtsWorker = class _DtsWorker {
2008
2011
  }
2009
2012
  }
2010
2013
  get controlledPromise() {
2014
+ const ensureChildProcessExit = /* @__PURE__ */ __name(() => {
2015
+ var _a4;
2016
+ try {
2017
+ const pid = (_a4 = this.rpcWorker.process) == null ? void 0 : _a4.pid;
2018
+ const rootPid = process.pid;
2019
+ if (pid && rootPid !== pid) {
2020
+ process.kill(pid, 0);
2021
+ }
2022
+ } catch (error2) {
2023
+ if (isDebugMode()) {
2024
+ console.error(error2);
2025
+ }
2026
+ }
2027
+ }, "ensureChildProcessExit");
2011
2028
  return Promise.resolve(this._res).then(() => {
2012
2029
  this.exit();
2030
+ ensureChildProcessExit();
2031
+ }).catch((err) => {
2032
+ if (isDebugMode()) {
2033
+ console.error(err);
2034
+ }
2035
+ ensureChildProcessExit();
2013
2036
  });
2014
2037
  }
2015
2038
  exit() {
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@module-federation/dts-plugin",
3
- "version": "0.1.21",
3
+ "version": "0.2.0",
4
4
  "author": "hanric <hanric.zhang@gmail.com>",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",
@@ -57,7 +57,7 @@
57
57
  "koa": "2.11.0",
58
58
  "log4js": "6.9.1",
59
59
  "node-schedule": "2.1.1",
60
- "ws": "8.17.0"
60
+ "ws": "8.17.1"
61
61
  },
62
62
  "devDependencies": {
63
63
  "@types/ws": "8.5.10",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@module-federation/dts-plugin",
3
- "version": "0.1.21",
3
+ "version": "0.2.0",
4
4
  "author": "hanric <hanric.zhang@gmail.com>",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",
@@ -54,16 +54,16 @@
54
54
  "koa": "2.11.0",
55
55
  "log4js": "6.9.1",
56
56
  "node-schedule": "2.1.1",
57
- "ws": "8.17.0",
58
- "@module-federation/sdk": "0.1.21",
59
- "@module-federation/managers": "0.1.21",
60
- "@module-federation/third-party-dts-extractor": "0.1.21"
57
+ "ws": "8.17.1",
58
+ "@module-federation/sdk": "0.2.0",
59
+ "@module-federation/managers": "0.2.0",
60
+ "@module-federation/third-party-dts-extractor": "0.2.0"
61
61
  },
62
62
  "devDependencies": {
63
63
  "@types/ws": "8.5.10",
64
64
  "@types/koa": "2.11.2",
65
65
  "@types/node-schedule": "2.1.7",
66
- "@module-federation/runtime": "0.1.21"
66
+ "@module-federation/runtime": "0.2.0"
67
67
  },
68
68
  "peerDependencies": {
69
69
  "typescript": "^4.9.0 || ^5.0.0",