Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
leonelsanchesdasilva committed Nov 8, 2024
2 parents 2e86959 + 3e8bafd commit ade3242
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 50 deletions.
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,8 @@ const outXmlString = xslt.xsltProcess( // Not async.

Version 3 received `<xsl:include>` which relies on Fetch API, which is asynchronous. Version 2 doesn't support `<xsl:include>`.

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:
Expand Down
12 changes: 2 additions & 10 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand All @@ -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": [
{
Expand Down
14 changes: 12 additions & 2 deletions src/xslt/xslt.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@
//
// Original author: Steffen Meschkat <mesch@google.com>

import fetch, { Headers, Request, Response } from 'node-fetch';

import {
XDocument,
XNode,
Expand Down Expand Up @@ -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 `<xsl:import>`. If possible, please update your Node.js version to at least version 17.5.0.');
}

if (this.firstTemplateRan) {
throw new Error('<xsl:import> should be the first child node of <xsl:stylesheet> or <xsl:transform>.');
}
Expand All @@ -665,6 +668,7 @@ export class Xslt {
if (hrefAttributeFind.length <= 0) {
throw new Error('<xsl:import> with no href attribute defined.');
}

const hrefAttribute = hrefAttributeFind[0];

const fetchTest = await global.globalThis.fetch(hrefAttribute.nodeValue);
Expand All @@ -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 `<xsl:include>`. 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'.
Expand All @@ -694,6 +703,7 @@ export class Xslt {
if (hrefAttributeFind.length <= 0) {
throw new Error('<xsl:include> with no href attribute defined.');
}

const hrefAttribute = hrefAttributeFind[0];

const fetchTest = await global.globalThis.fetch(hrefAttribute.nodeValue);
Expand Down
49 changes: 11 additions & 38 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -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==
Expand Down Expand Up @@ -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"
Expand Down Expand Up @@ -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"
Expand Down Expand Up @@ -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"
Expand Down Expand Up @@ -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"
Expand Down Expand Up @@ -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==
Expand Down Expand Up @@ -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"
Expand Down Expand Up @@ -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"
Expand Down

0 comments on commit ade3242

Please sign in to comment.