From db076eb2b07e104ef460d7e2bd99769b5653e1a5 Mon Sep 17 00:00:00 2001 From: skirtle <65301168+skirtles-code@users.noreply.github.com> Date: Wed, 14 Jun 2023 08:40:06 +0100 Subject: [PATCH] feat: local JSON files (#82) Co-authored-by: Evan You --- src/editor/Editor.vue | 1 - src/editor/FileSelector.vue | 4 ++-- src/transform.ts | 14 ++++++++++++++ 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/editor/Editor.vue b/src/editor/Editor.vue index 8c3ea7d0..8308e5d5 100644 --- a/src/editor/Editor.vue +++ b/src/editor/Editor.vue @@ -31,7 +31,6 @@ const onChange = debounce((code: string) => { const activeMode = computed(() => { const { filename } = store.state.activeFile - const mode = modes[filename.split('.').pop()!] return filename.lastIndexOf('.') !== -1 && mode diff --git a/src/editor/FileSelector.vue b/src/editor/FileSelector.vue index e8782506..242e1ae5 100644 --- a/src/editor/FileSelector.vue +++ b/src/editor/FileSelector.vue @@ -48,9 +48,9 @@ function doneAddFile() { if (!pending.value) return const filename = pendingFilename.value - if (!/\.(vue|js|ts|css)$/.test(filename)) { + if (!/\.(vue|js|ts|css|json)$/.test(filename)) { store.state.errors = [ - `Playground only supports *.vue, *.js, *.ts, *.css files.` + `Playground only supports *.vue, *.js, *.ts, *.css, *.json files.` ] return } diff --git a/src/transform.ts b/src/transform.ts index caf9a3e2..0062321f 100644 --- a/src/transform.ts +++ b/src/transform.ts @@ -40,6 +40,20 @@ export async function compileFile( return } + if (filename.endsWith('.json')) { + let parsed + try { + parsed = JSON.parse(code) + } catch (err: any) { + console.error(`Error parsing ${filename}`, err.message) + store.state.errors = [err.message] + return + } + compiled.js = compiled.ssr = `export default ${JSON.stringify(parsed)}` + store.state.errors = [] + return + } + if (!filename.endsWith('.vue')) { store.state.errors = [] return