fix: reimplement treeshaking non-dynamic prerendered remote functions#15447
Conversation
🦋 Changeset detectedLatest commit: dbc2cea The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
Co-authored-by: vercel[bot] <35613825+vercel[bot]@users.noreply.github.com>
… into treeshake-prerendered
|
We probably need to fix up any sourcemaps too after the treeshaking |
|
Did you investigate whether it's possible to accomplish this by creating a facade that only re-exports the non-statically-prerendered functions and bundles that? If it worked it would allow us to skip all the acorn/magic-string stuff and just lean on Rolldown instead, though if you told me that it doesn't work for some reason then I would certainly believe you |
Mm that's what I tried at first with a naive reimplementation of the previous PR. It's tricky because the current output exports an object that contains all the exports including the statically-prerendered ones const m = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
__proto__: null,
get prerendered() {
return prerendered;
},
get prerendered_entries() {
return prerendered_entries;
},
get with_read() {
return with_read;
}
}, Symbol.toStringTag, { value: "Module" }));I think because that's exported, Rollup's not treeshaking the static ones. And the remote functions themselves are exported individually but aliased with a letter so we can't access them directly |
|
Ah yeah that makes total sense! |
This PR fixes a regression where prerendered remote functions were no longer treeshaken. It was accidentally removed in https://github.com/sveltejs/kit/pull/14293/changes#diff-6997ee961e0605b37d712e389f6a938a4ae080038f0ed9b9643894b287985feaL51 while we were trying to figure out how to make remote functions in node_modules work correctly.
It also ensures that these prerendered functions can't be called in production with arbitrary inputs. cc: @GauBen
EDIT: In retrospect, this doesn't help remove certain files if they aren’t in use by anyone after the treeshaking occurred.
Please don't delete this checklist! Before submitting the PR, please make sure you do the following:
Tests
pnpm testand lint the project withpnpm lintandpnpm checkChangesets
pnpm changesetand following the prompts. Changesets that add features should beminorand those that fix bugs should bepatch. Please prefix changeset messages withfeat:,fix:, orchore:.Edits