-
Notifications
You must be signed in to change notification settings - Fork 3
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
ReScriptify Server and implement asset loading #51
Commits on Jun 28, 2022
-
Partially Revert "Merge pull request #48 from zth/preloading"
Configuration menu - View commit details
-
Copy full SHA for c79b097 - Browse repository at this point
Copy the full SHA c79b097View commit details -
Configuration menu - View commit details
-
Copy full SHA for e56d8ca - Browse repository at this point
Copy the full SHA e56d8caView commit details -
WIP Make EntryServer a request handler
This is the start of converting the server.mjs to ReScript which requires the addition of some bindings for server side code. The main goal of these changes is to enable moving the React rendering side and its effects (emission of assets) entirely into the EntryServer. This should make it possible to create a pattern around renderTo*Stream where utilities (e.g. the `PreloadInsertingStream` and others) can be wired up to work regardless of the server environment. Typing the original asset to script conversion code was too difficult to complete in a day, so to ensure this commit brings code into a buildable state that can be shared and interated upon. There are two important TODO's that have significant changes from the working code in another project: 1. Vite scripts are rewritten to script tags, in the other project these are passed in as `head` in development mode (and head is empty in production) but this makes EntryServer's default export bigger and requires propagating this development snippet through the tree, which feels wrong. 2. We write HTML to the stream manually. My suggestion is to make the entire document part of the HTML tree. See the explanation and motivation on line 73-100 in EntryServer.res.
Configuration menu - View commit details
-
Copy full SHA for bd7573d - Browse repository at this point
Copy the full SHA bd7573dView commit details -
Allow Vite plugin to transform arbitrary @rescriptModule references
Vite already helps us transform dynamic imports for our ReScript modules (for which we don't know the name of the .mjs or .bs.js or .cjs file when writing the ReScript code) to imports of the proper JS files. However, in some places we also want to reference the file directly, for example to be able to generate a `<script>` tag ourselves without use of `import`. Up to now this relied on a runtime inspection of the ReScript build artifacts. This commit introduces a special non-existent function in ReScript which serves as a marker for a newly introduced Vite plugin code transform. This allows the code transform to replace the function invokation with the literal string pointing to the absolute path of the source file. This allows runtime code to use the ssrManifest generated by Vite to turn this file-path into an asset chunk during production or to transform it into a path relative to the Vite dev-server working directory during development.
Configuration menu - View commit details
-
Copy full SHA for adc667a - Browse repository at this point
Copy the full SHA adc667aView commit details -
Implement asset-preloading for all scenarios
This moves from the marker function to a very specific object property name. This follows what was done in: - zth/rescript-relay#369 - #47 - #48 This reimplements the changes of those last two R3 PRs on top of the work done to turn server.mjs into ReScript code. A few changes are made with respect to the original PRs. *Vite Plugin* - I did not alter the user’s config. The rollup option not working with the `SSR` option is not caused by our plugin, so it shouldn’t be fixed in our plugin. It’s a user configuration error. Altering the config without the user knowing may confuse them. - Removed `production` check in `transform` this allows using the Vite generated `ssr-manifest.json` - Removed the `Rescript` check in `transform`, our regex should be fast enough that this doesn’t matter and it ensures our plugin works in codebases or pipelines that strip this header. - Removed tracking of `didReplace` since `magic-string` does this for us. *EntryServer.res* - Omitted asset emitting change for RelayRouter since the function has a different shape than RelaySSRUtils.AssetRegisterer. This was because `eagerPreloadFn` was not available in the function the router got. Ideally when we bring this back we only require the consuming developer to create a single preload handler on top of our transformation stream. *package.json* - It looks like the introduction of SSR in production mode has also exposed the bug in Relay’s faulty exports (or ReScript/Vite’s handling of them) here. - Upgrade `history` to 5.3.0 which is required for ESM support.
Configuration menu - View commit details
-
Copy full SHA for 3c31f7f - Browse repository at this point
Copy the full SHA 3c31f7fView commit details -
This was used for some ReScript file loading during dev SSR but that functionality is now entirely contained within the Vite plugin.
Configuration menu - View commit details
-
Copy full SHA for bd6d138 - Browse repository at this point
Copy the full SHA bd6d138View commit details -
Re-enable code preloading via proper tags
Re-introduces the change from 1de74d8 which works now that we have a way to reliably write asset names of our chunks into the compiled code.
Configuration menu - View commit details
-
Copy full SHA for 0c63953 - Browse repository at this point
Copy the full SHA 0c63953View commit details -
Remove awaitAllRouteRenderers functionality
There's no reason to await the route renderers of our initial routes now that suspense and preloading works properly.
Configuration menu - View commit details
-
Copy full SHA for 4adc80b - Browse repository at this point
Copy the full SHA 4adc80bView commit details
Commits on Jun 29, 2022
-
Move Vite manualChunks SSR workaround into Plugin
We use the plugin to work around a bug in Vite 2 which has been fixed in Vite 3 that breaks the SSR build if the manualChunks Rollup config is used. See vitejs/vite#8836
Configuration menu - View commit details
-
Copy full SHA for f7bfa9d - Browse repository at this point
Copy the full SHA f7bfa9dView commit details -
Do not run asset path transform for non-ReScript code
The __$rescriptChunkName__ is a non-public identifier used to bridge the gap between the ReScript and JavaScript world. It's public API is `chunk` within ReScript and it's not intended to be used from a non-ReScript codebase.
Configuration menu - View commit details
-
Copy full SHA for 31c5079 - Browse repository at this point
Copy the full SHA 31c5079View commit details