diff --git a/README.md b/README.md index b0852bd..7aa0c18 100644 --- a/README.md +++ b/README.md @@ -123,6 +123,8 @@ const outXmlString = xslt.xsltProcess( // Not async. Version 3 received `` which relies on Fetch API, which is asynchronous. Version 2 doesn't support ``. +If using Node.js older than version v17.5.0, please use version 3.2.3, that uses `node-fetch` package. Versions 3.3.0 onward require at least Node.js version v17.5.0, since they use native `fetch()` function. + #### Version 1 Until version 1.2.8, use like the example below: diff --git a/package.json b/package.json index 3a84ec4..e933f82 100644 --- a/package.json +++ b/package.json @@ -48,6 +48,7 @@ "@rollup/plugin-typescript": "^11.1.1", "@types/he": "^1.2.0", "@types/jest": "^29.5.12", + "@types/node": "^22.9.0", "@types/node-fetch": "^2.6.11", "@typescript-eslint/eslint-plugin": "^8.4.0", "@typescript-eslint/parser": "^8.4.0", @@ -70,16 +71,7 @@ "typescript": "^5.5.4" }, "dependencies": { - "he": "^1.2.0", - "node-fetch": "release-2.x" - }, - "overrides": { - "node-fetch@release-2.x": { - "whatwg-url": "14.x" - } - }, - "resolutions": { - "whatwg-url": "14.x" + "he": "^1.2.0" }, "copyFiles": [ { diff --git a/src/xslt/xslt.ts b/src/xslt/xslt.ts index 6ee3d60..579d634 100644 --- a/src/xslt/xslt.ts +++ b/src/xslt/xslt.ts @@ -5,8 +5,6 @@ // // Original author: Steffen Meschkat -import fetch, { Headers, Request, Response } from 'node-fetch'; - import { XDocument, XNode, @@ -647,6 +645,11 @@ export class Xslt { * @param output The output. */ protected async xsltImport(context: ExprContext, template: XNode, output?: XNode) { + const [major, minor, patch] = process.versions.node.split('.').map(Number); + if (major <= 17 && minor < 5) { + throw new Error('Your Node.js version does not support ``. If possible, please update your Node.js version to at least version 17.5.0.'); + } + if (this.firstTemplateRan) { throw new Error(' should be the first child node of or .'); } @@ -665,6 +668,7 @@ export class Xslt { if (hrefAttributeFind.length <= 0) { throw new Error(' with no href attribute defined.'); } + const hrefAttribute = hrefAttributeFind[0]; const fetchTest = await global.globalThis.fetch(hrefAttribute.nodeValue); @@ -680,6 +684,11 @@ export class Xslt { * @param output The output. */ protected async xsltInclude(context: ExprContext, template: XNode, output?: XNode) { + const [major, minor, patch] = process.versions.node.split('.').map(Number); + if (major <= 17 && minor < 5) { + throw new Error('Your Node.js version does not support ``. If possible, please update your Node.js version to at least version 17.5.0.'); + } + // We need to test here whether `window.fetch` is available or not. // If it is a browser environemnt, it should be. // Otherwise, we will need to import an equivalent library, like 'node-fetch'. @@ -694,6 +703,7 @@ export class Xslt { if (hrefAttributeFind.length <= 0) { throw new Error(' with no href attribute defined.'); } + const hrefAttribute = hrefAttributeFind[0]; const fetchTest = await global.globalThis.fetch(hrefAttribute.nodeValue); diff --git a/yarn.lock b/yarn.lock index 30c3a7c..e2b170e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1842,7 +1842,7 @@ "@types/node" "*" form-data "^4.0.0" -"@types/node@*": +"@types/node@*", "@types/node@^22.9.0": version "22.9.0" resolved "https://registry.yarnpkg.com/@types/node/-/node-22.9.0.tgz#b7f16e5c3384788542c72dc3d561a7ceae2c0365" integrity sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ== @@ -2456,9 +2456,9 @@ camelcase@^8.0.0: integrity sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA== caniuse-lite@^1.0.30001669: - version "1.0.30001677" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001677.tgz#27c2e2c637e007cfa864a16f7dfe7cde66b38b5f" - integrity sha512-fmfjsOlJUpMWu+mAAtZZZHz7UEwsUxIIvu1TJfO1HqFQvB/B+ii0xr9B5HpbZY/mC4XZ8SvjHJqtAY6pDPQEog== + version "1.0.30001678" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001678.tgz#b930b04cd0b295136405634aa32ad540d7eeb71e" + integrity sha512-RR+4U/05gNtps58PEBDZcPWTgEO2MBeoPZ96aQcjmfkBWRIDfN451fW2qyDA9/+HohLLIL5GqiMwA+IB1pWarw== chalk@5.3.0, chalk@^5.0.1, chalk@^5.2.0, chalk@^5.3.0: version "5.3.0" @@ -2764,9 +2764,9 @@ create-require@^1.1.0: integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + version "7.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.5.tgz#910aac880ff5243da96b728bc6521a5f6c2f2f82" + integrity sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug== dependencies: path-key "^3.1.0" shebang-command "^2.0.0" @@ -2926,9 +2926,9 @@ ejs@^3.1.10: jake "^10.8.5" electron-to-chromium@^1.5.41: - version "1.5.52" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.52.tgz#2bed832c95a56a195504f918150e548474687da8" - integrity sha512-xtoijJTZ+qeucLBDNztDOuQBE1ksqjvNjvqFoST3nGC7fSpqJ+X6BdTBaY5BHG+IhWWmpc6b/KfpeuEDupEPOQ== + version "1.5.54" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.54.tgz#1b8d2e012a7edfc8c0b778a0b86ece99c892cd24" + integrity sha512-TX6vHleisn5i/4pekTyy1sdoLXQNy8VFvBK/fJRXSyp7GUO27KioLTG0Qo5wFjM3ZF4ryKinDo4m+IJ+rwUWSw== emittery@^0.13.1: version "0.13.1" @@ -5022,13 +5022,6 @@ new-github-release-url@2.0.0: dependencies: type-fest "^2.5.1" -node-fetch@release-2.x: - version "2.7.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" - integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== - dependencies: - whatwg-url "^5.0.0" - node-gyp@^9.0.0: version "9.4.1" resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.4.1.tgz#8a1023e0d6766ecb52764cc3a734b36ff275e185" @@ -5634,7 +5627,7 @@ proxy-from-env@^1.1.0: resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== -punycode@^2.1.0, punycode@^2.3.1: +punycode@^2.1.0: version "2.3.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== @@ -6501,13 +6494,6 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -tr46@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-5.0.0.tgz#3b46d583613ec7283020d79019f1335723801cec" - integrity sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g== - dependencies: - punycode "^2.3.1" - ts-api-utils@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.4.0.tgz#709c6f2076e511a81557f3d07a0cbd566ae8195c" @@ -6797,19 +6783,6 @@ wcwidth@^1.0.1: dependencies: defaults "^1.0.3" -webidl-conversions@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" - integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== - -whatwg-url@14.x, whatwg-url@^5.0.0: - version "14.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-14.0.0.tgz#00baaa7fd198744910c4b1ef68378f2200e4ceb6" - integrity sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw== - dependencies: - tr46 "^5.0.0" - webidl-conversions "^7.0.0" - when-exit@^2.1.1: version "2.1.3" resolved "https://registry.yarnpkg.com/when-exit/-/when-exit-2.1.3.tgz#5831cdbed8ad4984645da98c4a00d4ee3a3757e7"