From 756437ba550e69140e06cc450f20af5e8f03242e Mon Sep 17 00:00:00 2001 From: JC Franco Date: Wed, 18 May 2022 08:47:35 -0700 Subject: [PATCH] fix: patch __spreadArray helper to work around tslib bug (#4481) (#4575) --- package.json | 3 ++- support/patchES5Helpers.ts | 27 +++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 support/patchES5Helpers.ts diff --git a/package.json b/package.json index ce4b105172d..89e1f15c93a 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "hydrate/" ], "scripts": { - "build": "npm run util:copy-icons && stencil build", + "build": "npm run util:copy-icons && stencil build && npm run util:patch-es5-helpers", "build:watch": "npm run util:copy-icons && stencil build --watch", "build:watch-dev": "npm run util:copy-icons && stencil build --dev --watch", "build-storybook": "npm run util:copy-icons && stencil build --config stencil.config.ts && build-storybook --static-dir ./www --output-dir ./docs", @@ -48,6 +48,7 @@ "util:copy-icons": "cpy \"./node_modules/@esri/calcite-ui-icons/js/*.json\" \"./src/components/icon/assets/icon/\" --flat", "util:deploy-next": "npm run util:prep-next && npm run util:push-tags && npm run util:publish-next", "util:deploy-next-from-ci": "ts-node --project ./tsconfig-node-scripts.json support/deployNextFromCI.ts", + "util:patch-es5-helpers": "ts-node support/patchES5Helpers.ts", "util:prep-next": "ts-node --project ./tsconfig-node-scripts.json support/prepReleaseCommit.ts --next && npm run build", "util:publish-next": "npm publish --tag next", "util:check-squash-mergeable-branch": "ts-node --project ./tsconfig-node-scripts.json support/checkSquashMergeableBranch.ts", diff --git a/support/patchES5Helpers.ts b/support/patchES5Helpers.ts new file mode 100644 index 00000000000..a428b91e251 --- /dev/null +++ b/support/patchES5Helpers.ts @@ -0,0 +1,27 @@ +const { + promises: { readFile, readdir, writeFile } +} = require("fs"); +const { normalize } = require("path"); +const { quote } = require("shell-quote"); + +(async function () { + const esmEs5Output = quote([normalize(`${__dirname}/../dist/esm-es5/`)]); + + // we patch __spreadArray to work around https://github.com/microsoft/tslib/issues/175 + // see https://github.com/Esri/calcite-components/issues/4481#issuecomment-1128336510 for more info + const spreadArrayHelperToken = + /(var __spreadArray\=this\&\&this\.__spreadArray\|\|function\(\w\,)(\w)(\,\w\)\{)(if\((?:\w)\|\|arguments\.length\=\=\=2\))/; + const patchedSpreadArrayReplacement = '$1$2$3if(typeof $2 === "string"){$2=Array.prototype.slice.call($2)}$4'; + const files = await readdir(esmEs5Output); + + try { + for (const file of files) { + const filePath = quote([normalize(`${esmEs5Output}/${file}`)]); + const contents = await readFile(filePath, { encoding: "utf8" }); + await writeFile(filePath, contents.replace(spreadArrayHelperToken, patchedSpreadArrayReplacement)); + } + } catch (err) { + console.error(err); + process.exit(1); + } +})();