feat(sfc-playground): support lang=ts
This commit is contained in:
parent
691d354af9
commit
be0f614ac0
@ -22,6 +22,7 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"file-saver": "^2.0.5",
|
"file-saver": "^2.0.5",
|
||||||
"jszip": "^3.6.0"
|
"jszip": "^3.6.0",
|
||||||
|
"sucrase": "^3.19.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -59,17 +59,24 @@ export async function compileFile({ filename, code, compiled }: File) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (
|
if (
|
||||||
(descriptor.script && descriptor.script.lang) ||
|
|
||||||
(descriptor.scriptSetup && descriptor.scriptSetup.lang) ||
|
|
||||||
descriptor.styles.some(s => s.lang) ||
|
descriptor.styles.some(s => s.lang) ||
|
||||||
(descriptor.template && descriptor.template.lang)
|
(descriptor.template && descriptor.template.lang)
|
||||||
) {
|
) {
|
||||||
store.errors = [
|
store.errors = [
|
||||||
'lang="x" pre-processors are not supported in the in-browser playground.'
|
`lang="x" pre-processors for <template> or <style> are currently not ` +
|
||||||
|
`supported.`
|
||||||
]
|
]
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const scriptLang =
|
||||||
|
(descriptor.script && descriptor.script.lang) ||
|
||||||
|
(descriptor.scriptSetup && descriptor.scriptSetup.lang)
|
||||||
|
if (scriptLang && scriptLang !== 'ts') {
|
||||||
|
store.errors = [`Only lang="ts" is supported for <script> blocks.`]
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
const hasScoped = descriptor.styles.some(s => s.scoped)
|
const hasScoped = descriptor.styles.some(s => s.scoped)
|
||||||
let clientCode = ''
|
let clientCode = ''
|
||||||
let ssrCode = ''
|
let ssrCode = ''
|
||||||
@ -79,7 +86,7 @@ export async function compileFile({ filename, code, compiled }: File) {
|
|||||||
ssrCode += code
|
ssrCode += code
|
||||||
}
|
}
|
||||||
|
|
||||||
const clientScriptResult = doCompileScript(descriptor, id, false)
|
const clientScriptResult = await doCompileScript(descriptor, id, false)
|
||||||
if (!clientScriptResult) {
|
if (!clientScriptResult) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -89,7 +96,7 @@ export async function compileFile({ filename, code, compiled }: File) {
|
|||||||
// script ssr only needs to be performed if using <script setup> where
|
// script ssr only needs to be performed if using <script setup> where
|
||||||
// the render fn is inlined.
|
// the render fn is inlined.
|
||||||
if (descriptor.scriptSetup) {
|
if (descriptor.scriptSetup) {
|
||||||
const ssrScriptResult = doCompileScript(descriptor, id, true)
|
const ssrScriptResult = await doCompileScript(descriptor, id, true)
|
||||||
if (!ssrScriptResult) {
|
if (!ssrScriptResult) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -171,11 +178,11 @@ export async function compileFile({ filename, code, compiled }: File) {
|
|||||||
store.errors = []
|
store.errors = []
|
||||||
}
|
}
|
||||||
|
|
||||||
function doCompileScript(
|
async function doCompileScript(
|
||||||
descriptor: SFCDescriptor,
|
descriptor: SFCDescriptor,
|
||||||
id: string,
|
id: string,
|
||||||
ssr: boolean
|
ssr: boolean
|
||||||
): [string, BindingMetadata | undefined] | undefined {
|
): Promise<[string, BindingMetadata | undefined] | undefined> {
|
||||||
if (descriptor.script || descriptor.scriptSetup) {
|
if (descriptor.script || descriptor.scriptSetup) {
|
||||||
try {
|
try {
|
||||||
const compiledScript = SFCCompiler.compileScript(descriptor, {
|
const compiledScript = SFCCompiler.compileScript(descriptor, {
|
||||||
@ -198,6 +205,13 @@ function doCompileScript(
|
|||||||
code +=
|
code +=
|
||||||
`\n` +
|
`\n` +
|
||||||
SFCCompiler.rewriteDefault(compiledScript.content, COMP_IDENTIFIER)
|
SFCCompiler.rewriteDefault(compiledScript.content, COMP_IDENTIFIER)
|
||||||
|
|
||||||
|
if ((descriptor.script || descriptor.scriptSetup)!.lang === 'ts') {
|
||||||
|
code = (await import('sucrase')).transform(code, {
|
||||||
|
transforms: ['typescript']
|
||||||
|
}).code
|
||||||
|
}
|
||||||
|
|
||||||
return [code, compiledScript.bindings]
|
return [code, compiledScript.bindings]
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
store.errors = [e]
|
store.errors = [e]
|
||||||
|
52
yarn.lock
52
yarn.lock
@ -1066,6 +1066,11 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
color-convert "^2.0.1"
|
color-convert "^2.0.1"
|
||||||
|
|
||||||
|
any-promise@^1.0.0:
|
||||||
|
version "1.3.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
|
||||||
|
integrity sha1-q8av7tzqUugJzcA3au0845Y10X8=
|
||||||
|
|
||||||
anymatch@^2.0.0:
|
anymatch@^2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
|
resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
|
||||||
@ -1804,6 +1809,11 @@ commander@^2.20.0, commander@^2.7.1:
|
|||||||
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
|
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
|
||||||
integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
|
integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
|
||||||
|
|
||||||
|
commander@^4.0.0:
|
||||||
|
version "4.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068"
|
||||||
|
integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==
|
||||||
|
|
||||||
commander@^6.2.0:
|
commander@^6.2.0:
|
||||||
version "6.2.1"
|
version "6.2.1"
|
||||||
resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c"
|
resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c"
|
||||||
@ -3133,7 +3143,7 @@ glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@~5.1.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
is-glob "^4.0.1"
|
is-glob "^4.0.1"
|
||||||
|
|
||||||
glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:
|
glob@7.1.6, glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:
|
||||||
version "7.1.6"
|
version "7.1.6"
|
||||||
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
|
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
|
||||||
integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
|
integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
|
||||||
@ -4962,6 +4972,15 @@ ms@2.1.2:
|
|||||||
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
|
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
|
||||||
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
|
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
|
||||||
|
|
||||||
|
mz@^2.7.0:
|
||||||
|
version "2.7.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32"
|
||||||
|
integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==
|
||||||
|
dependencies:
|
||||||
|
any-promise "^1.0.0"
|
||||||
|
object-assign "^4.0.1"
|
||||||
|
thenify-all "^1.0.0"
|
||||||
|
|
||||||
nanoid@^3.1.23:
|
nanoid@^3.1.23:
|
||||||
version "3.1.23"
|
version "3.1.23"
|
||||||
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.23.tgz#f744086ce7c2bc47ee0a8472574d5c78e4183a81"
|
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.23.tgz#f744086ce7c2bc47ee0a8472574d5c78e4183a81"
|
||||||
@ -6784,6 +6803,18 @@ strip-json-comments@~2.0.1:
|
|||||||
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
|
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
|
||||||
integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
|
integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
|
||||||
|
|
||||||
|
sucrase@^3.19.0:
|
||||||
|
version "3.19.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.19.0.tgz#cc9a60f731e7497766a7b710d3362260a8f9ced5"
|
||||||
|
integrity sha512-FeMelydANPRMiOo/lxbf7NxN8bQmMVBQmKOa69BifwVhteMJzRoJNHaVBoCYmE/kpnx6VPg9ckaLumwtuAzmEA==
|
||||||
|
dependencies:
|
||||||
|
commander "^4.0.0"
|
||||||
|
glob "7.1.6"
|
||||||
|
lines-and-columns "^1.1.6"
|
||||||
|
mz "^2.7.0"
|
||||||
|
pirates "^4.0.1"
|
||||||
|
ts-interface-checker "^0.1.9"
|
||||||
|
|
||||||
supports-color@^5.3.0:
|
supports-color@^5.3.0:
|
||||||
version "5.5.0"
|
version "5.5.0"
|
||||||
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
|
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
|
||||||
@ -6877,6 +6908,20 @@ text-table@^0.2.0:
|
|||||||
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
|
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
|
||||||
integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
|
integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
|
||||||
|
|
||||||
|
thenify-all@^1.0.0:
|
||||||
|
version "1.6.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726"
|
||||||
|
integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=
|
||||||
|
dependencies:
|
||||||
|
thenify ">= 3.1.0 < 4"
|
||||||
|
|
||||||
|
"thenify@>= 3.1.0 < 4":
|
||||||
|
version "3.3.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f"
|
||||||
|
integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==
|
||||||
|
dependencies:
|
||||||
|
any-promise "^1.0.0"
|
||||||
|
|
||||||
throat@^5.0.0:
|
throat@^5.0.0:
|
||||||
version "5.0.0"
|
version "5.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b"
|
resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b"
|
||||||
@ -6998,6 +7043,11 @@ trim-off-newlines@^1.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3"
|
resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3"
|
||||||
integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM=
|
integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM=
|
||||||
|
|
||||||
|
ts-interface-checker@^0.1.9:
|
||||||
|
version "0.1.13"
|
||||||
|
resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699"
|
||||||
|
integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==
|
||||||
|
|
||||||
ts-jest@^26.2.0:
|
ts-jest@^26.2.0:
|
||||||
version "26.5.5"
|
version "26.5.5"
|
||||||
resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.5.5.tgz#e40481b6ee4dd162626ba481a2be05fa57160ea5"
|
resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.5.5.tgz#e40481b6ee4dd162626ba481a2be05fa57160ea5"
|
||||||
|
Loading…
Reference in New Issue
Block a user