diff --git a/package.json b/package.json index 4d69962f7c8..66764465a86 100644 --- a/package.json +++ b/package.json @@ -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); + } +})();