Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: patch __spreadArray helper to work around tslib bug (#4481) #4575

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down Expand Up @@ -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",
Copy link
Member

@benelan benelan May 18, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can you add && npm run util:patch-es5-helpers to the end of these NPM scripts:

  • release:prepare
  • util:prep-next
  • util:clean-tested-build

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I added it to build since all of the above reference it.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Lol I literally looked for all the scripts that ran build to make that suggestion. Long day yesterday

"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",
Expand Down
27 changes: 27 additions & 0 deletions support/patchES5Helpers.ts
Original file line number Diff line number Diff line change
@@ -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);
}
})();