Skip to content

Commit ec2856c

Browse files
committed
workflow: support ssr repros in sfc playground
1 parent 90308e8 commit ec2856c

File tree

6 files changed

+66
-17
lines changed

6 files changed

+66
-17
lines changed

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,12 @@
2020
"changelog": "conventional-changelog -p angular -i CHANGELOG.md -s",
2121
"dev-esm": "node scripts/dev.js -if esm-bundler-runtime",
2222
"dev-compiler": "run-p \"dev template-explorer\" serve",
23-
"dev-sfc": "run-p \"dev compiler-sfc -f esm-browser\" \"dev vue -if esm-bundler-runtime \" serve-sfc-playground",
23+
"dev-sfc": "run-p \"dev compiler-sfc -f esm-browser\" \"dev vue -if esm-bundler-runtime\" \"dev server-renderer -if esm-bundler\" serve-sfc-playground",
2424
"serve-sfc-playground": "vite packages/sfc-playground --host",
2525
"serve": "serve",
2626
"open": "open http://localhost:5000/packages/template-explorer/local.html",
2727
"preinstall": "node ./scripts/preinstall.js",
28-
"prebuild-sfc-playground": "node scripts/build.js compiler reactivity-transform shared -af cjs && node scripts/build.js runtime reactivity shared -af esm-bundler && node scripts/build.js vue -f esm-bundler-runtime && node scripts/build.js vue -f esm-browser-runtime && node scripts/build.js compiler-sfc -f esm-browser",
28+
"prebuild-sfc-playground": "node scripts/build.js compiler reactivity-transform shared -af cjs && node scripts/build.js runtime reactivity shared -af esm-bundler && node scripts/build.js vue -f esm-bundler-runtime && node scripts/build.js vue -f esm-browser-runtime && node scripts/build.js compiler-sfc server-renderer -f esm-browser",
2929
"build-sfc-playground": "cd packages/sfc-playground && npm run build"
3030
},
3131
"types": "test-dts/index.d.ts",

packages/sfc-playground/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
},
1414
"dependencies": {
1515
"vue": "3.2.36",
16-
"@vue/repl": "^1.1.2",
16+
"@vue/repl": "^1.2.4",
1717
"file-saver": "^2.0.5",
1818
"jszip": "^3.6.0"
1919
}

packages/sfc-playground/src/App.vue

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,27 @@ const setVH = () => {
99
window.addEventListener('resize', setVH)
1010
setVH()
1111
12-
const hash = location.hash.slice(1)
13-
const useDevMode = ref(hash.startsWith('__DEV__'))
12+
const useDevMode = ref(false)
13+
const useSSRMode = ref(false)
14+
15+
let hash = location.hash.slice(1)
16+
if (hash.startsWith('__DEV__')) {
17+
hash = hash.slice(7)
18+
useDevMode.value = true
19+
}
20+
if (hash.startsWith('__SSR__')) {
21+
hash = hash.slice(7)
22+
useSSRMode.value = true
23+
}
1424
1525
const store = new ReplStore({
16-
serializedState: useDevMode.value ? hash.slice(7) : hash,
26+
serializedState: hash,
1727
defaultVueRuntimeURL: import.meta.env.PROD
1828
? `${location.origin}/vue.runtime.esm-browser.js`
19-
: `${location.origin}/src/vue-dev-proxy`
29+
: `${location.origin}/src/vue-dev-proxy`,
30+
defaultVueServerRendererURL: import.meta.env.PROD
31+
? `${location.origin}/server-renderer.esm-browser.js`
32+
: `${location.origin}/src/vue-server-renderer-dev-proxy`
2033
})
2134
2235
// enable experimental features
@@ -31,6 +44,7 @@ const sfcOptions = {
3144
watchEffect(() => {
3245
const newHash = store
3346
.serialize()
47+
.replace(/^#/, useSSRMode.value ? `#__SSR__` : `#`)
3448
.replace(/^#/, useDevMode.value ? `#__DEV__` : `#`)
3549
history.replaceState({}, '', newHash)
3650
})
@@ -40,13 +54,25 @@ function toggleDevMode() {
4054
sfcOptions.script.inlineTemplate = !dev
4155
store.setFiles(store.getFiles())
4256
}
57+
58+
function toggleSSR() {
59+
useSSRMode.value = !useSSRMode.value
60+
store.setFiles(store.getFiles())
61+
}
4362
</script>
4463

4564
<template>
46-
<Header :store="store" :dev="useDevMode" @toggle-dev="toggleDevMode" />
65+
<Header
66+
:store="store"
67+
:dev="useDevMode"
68+
:ssr="useSSRMode"
69+
@toggle-dev="toggleDevMode"
70+
@toggle-ssr="toggleSSR"
71+
/>
4772
<Repl
4873
@keydown.ctrl.s.prevent
4974
@keydown.meta.s.prevent
75+
:ssr="useSSRMode"
5076
:store="store"
5177
:showCompileOutput="true"
5278
:autoResize="true"

packages/sfc-playground/src/Header.vue

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import Download from './icons/Download.vue'
88
import GitHub from './icons/GitHub.vue'
99
1010
// @ts-ignore
11-
const props = defineProps(['store', 'dev'])
11+
const props = defineProps(['store', 'dev', 'ssr'])
1212
const { store } = props
1313
1414
const currentCommit = __COMMIT__
@@ -122,6 +122,14 @@ async function fetchVersions(): Promise<string[]> {
122122
>
123123
<span>{{ dev ? 'DEV' : 'PROD' }}</span>
124124
</button>
125+
<button
126+
title="Toggle server rendering mode"
127+
class="toggle-ssr"
128+
:class="{ enabled: ssr }"
129+
@click="$emit('toggle-ssr')"
130+
>
131+
<span>{{ ssr ? 'SSR ON' : 'SSR OFF' }}</span>
132+
</button>
125133
<button title="Toggle dark mode" class="toggle-dark" @click="toggleDark">
126134
<Sun class="light" />
127135
<Moon class="dark" />
@@ -156,7 +164,7 @@ nav {
156164
--btn: #666;
157165
--highlight: #333;
158166
--green: #3ca877;
159-
--red: #f07178;
167+
--purple: #904cbc;
160168
161169
color: var(--base);
162170
height: var(--nav-height);
@@ -235,18 +243,31 @@ h1 img {
235243
margin-left: 8px;
236244
}
237245
238-
.toggle-dev span {
246+
.toggle-dev span,
247+
.toggle-ssr span {
239248
font-size: 12px;
240-
background: var(--red);
241-
color: #fff;
242249
border-radius: 4px;
243250
padding: 4px 6px;
244251
}
245252
253+
.toggle-dev span {
254+
background: var(--purple);
255+
color: #fff;
256+
}
257+
246258
.toggle-dev.dev span {
247259
background: var(--green);
248260
}
249261
262+
.toggle-ssr span {
263+
background-color: #333;
264+
}
265+
266+
.toggle-ssr.enabled span {
267+
color: #fff;
268+
background-color: var(--green);
269+
}
270+
250271
.toggle-dark svg {
251272
width: 18px;
252273
height: 18px;
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
// serve vue/server-renderer to the iframe sandbox during dev.
2+
export * from 'vue/server-renderer'

pnpm-lock.yaml

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)