diff --git a/.changeset/sweet-pianos-sniff.md b/.changeset/sweet-pianos-sniff.md new file mode 100644 index 00000000..e8b0c8e2 --- /dev/null +++ b/.changeset/sweet-pianos-sniff.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/repl': patch +--- + +manage diagnostics asyncronously with linter diff --git a/packages/repl/package.json b/packages/repl/package.json index 8c8ec09b..25293d2d 100644 --- a/packages/repl/package.json +++ b/packages/repl/package.json @@ -73,7 +73,7 @@ "@codemirror/view": "^6.14.0", "@jridgewell/sourcemap-codec": "^1.4.15", "@lezer/highlight": "^1.1.6", - "@neocodemirror/svelte": "0.0.14", + "@neocodemirror/svelte": "0.0.15", "@replit/codemirror-lang-svelte": "^6.0.0", "@rich_harris/svelte-split-pane": "^1.1.1", "@rollup/browser": "^3.25.3", diff --git a/packages/repl/src/lib/CodeMirror.svelte b/packages/repl/src/lib/CodeMirror.svelte index 7dcfabd6..1976acde 100644 --- a/packages/repl/src/lib/CodeMirror.svelte +++ b/packages/repl/src/lib/CodeMirror.svelte @@ -4,7 +4,6 @@
diff --git a/packages/repl/src/lib/Repl.svelte b/packages/repl/src/lib/Repl.svelte index 80eacdfd..15a73b39 100644 --- a/packages/repl/src/lib/Repl.svelte +++ b/packages/repl/src/lib/Repl.svelte @@ -150,12 +150,16 @@ /** @type {ReplContext['bundler']} */ const bundler = writable(null); + /** @type {ReplContext['bundling']} */ + const bundling = writable(new Promise(() => {})); + set_repl_context({ files, selected_name, selected, bundle, bundler, + bundling, compile_options, cursor_pos, module_editor, @@ -175,8 +179,13 @@ let current_token; async function rebundle() { const token = (current_token = Symbol()); + let resolver = () => {}; + $bundling = new Promise((resolve) => { + resolver = resolve; + }); const result = await $bundler?.bundle($files); if (result && token === current_token) $bundle = result; + resolver(); } let is_select_changing = false; diff --git a/packages/repl/src/lib/types.d.ts b/packages/repl/src/lib/types.d.ts index 5ab3b933..e1a1ce01 100644 --- a/packages/repl/src/lib/types.d.ts +++ b/packages/repl/src/lib/types.d.ts @@ -54,6 +54,7 @@ export type ReplState = { selected_name: string; selected: File | null; bundle: Bundle | null; + bundling: Promise; bundler: import('./Bundler').default | null; compile_options: CompileOptions; cursor_pos: number; @@ -67,6 +68,7 @@ export type ReplContext = { selected_name: Writable; selected: Readable; bundle: Writable; + bundling: Writable; bundler: Writable; compile_options: Writable; cursor_pos: Writable; diff --git a/packages/repl/src/routes/+page.svelte b/packages/repl/src/routes/+page.svelte index 7cbf6f5e..bd260e2f 100644 --- a/packages/repl/src/routes/+page.svelte +++ b/packages/repl/src/routes/+page.svelte @@ -15,17 +15,20 @@ source: ` - import B from './B.svelte'; let name = 'world'; -

Hello {name}!

` +

Hello {name}!

+ + +` }, { name: 'B', type: 'svelte', - source: `B` + source: ` +` } ] }); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9744390f..e6008dfd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -51,8 +51,8 @@ importers: specifier: ^1.1.6 version: 1.1.6 '@neocodemirror/svelte': - specifier: 0.0.14 - version: 0.0.14(@codemirror/autocomplete@6.8.1)(@codemirror/commands@6.2.4)(@codemirror/language@6.8.0)(@codemirror/lint@6.3.0)(@codemirror/search@6.5.0)(@codemirror/state@6.2.1)(@codemirror/view@6.14.0) + specifier: 0.0.15 + version: 0.0.15(@codemirror/autocomplete@6.8.1)(@codemirror/commands@6.2.4)(@codemirror/language@6.8.0)(@codemirror/lint@6.3.0)(@codemirror/search@6.5.0)(@codemirror/state@6.2.1)(@codemirror/view@6.14.0) '@replit/codemirror-lang-svelte': specifier: ^6.0.0 version: 6.0.0(@codemirror/autocomplete@6.8.1)(@codemirror/lang-css@6.2.0)(@codemirror/lang-html@6.4.5)(@codemirror/lang-javascript@6.1.9)(@codemirror/language@6.8.0)(@codemirror/state@6.2.1)(@codemirror/view@6.14.0)(@lezer/common@1.0.3)(@lezer/highlight@1.1.6)(@lezer/javascript@1.4.3)(@lezer/lr@1.3.7) @@ -121,31 +121,6 @@ importers: specifier: ^4.3.9 version: 4.3.9 - packages/site-kit: - dependencies: - golden-fleece: - specifier: ^1.0.9 - version: 1.0.9 - devDependencies: - '@sveltejs/kit': - specifier: ^1.0.0 - version: 1.20.5(svelte@3.55.0)(vite@4.3.9) - '@sveltejs/package': - specifier: ^1.0.0 - version: 1.0.0(svelte@3.55.0)(typescript@4.5.5) - svelte: - specifier: ^3.55.0 - version: 3.55.0 - svelte2tsx: - specifier: ^0.4.14 - version: 0.4.14(svelte@3.55.0)(typescript@4.5.5) - typescript: - specifier: ^4.5.5 - version: 4.5.5 - vite: - specifier: ^4.0.1 - version: 4.3.9 - sites/hn.svelte.dev: devDependencies: '@sveltejs/adapter-auto': @@ -790,8 +765,8 @@ packages: read-yaml-file: 1.1.0 dev: true - /@neocodemirror/svelte@0.0.14(@codemirror/autocomplete@6.8.1)(@codemirror/commands@6.2.4)(@codemirror/language@6.8.0)(@codemirror/lint@6.3.0)(@codemirror/search@6.5.0)(@codemirror/state@6.2.1)(@codemirror/view@6.14.0): - resolution: {integrity: sha512-1kHm3IyBJJyRfItxodSbbLxBknYGKLahaiF6Vb/BcVfdwwFLLj4dvWKY78ep1YQIhDhklgBQztjRMuLn9tTTWg==} + /@neocodemirror/svelte@0.0.15(@codemirror/autocomplete@6.8.1)(@codemirror/commands@6.2.4)(@codemirror/language@6.8.0)(@codemirror/lint@6.3.0)(@codemirror/search@6.5.0)(@codemirror/state@6.2.1)(@codemirror/view@6.14.0): + resolution: {integrity: sha512-MCux+QCR40CboJu/TFwnqK7gYQ3fvtvHX8F/mk85DRH7vMoG3VDjJhqneAITX5IzohWKeP36hzcV+oHC2LYJqA==} peerDependencies: '@codemirror/autocomplete': ^6.7.1 '@codemirror/commands': ^6.2.4 @@ -938,22 +913,6 @@ packages: transitivePeerDependencies: - supports-color - /@sveltejs/package@1.0.0(svelte@3.55.0)(typescript@4.5.5): - resolution: {integrity: sha512-YTTzhbOtmyq342S3tTYRJ9QQntRlukWieP5gQmqTMxdn1Ztr93pzR9vLCZ0q/pV4sqmEllc70lHJX/iV5uEYEg==} - engines: {node: '>=16.14'} - hasBin: true - peerDependencies: - svelte: ^3.44.0 - dependencies: - chokidar: 3.5.3 - kleur: 4.1.5 - sade: 1.8.1 - svelte: 3.55.0 - svelte2tsx: 0.5.23(svelte@3.55.0)(typescript@4.5.5) - transitivePeerDependencies: - - typescript - dev: true - /@sveltejs/package@2.1.0(svelte@4.0.0)(typescript@5.1.3): resolution: {integrity: sha512-c6PLH9G2YLQ48kqrS2XX422BrLNABBstSiapamchVJaQnOTXyJmUR8KmoCCySnzVy3PiYL6jg12UnoPmjW3SwA==} engines: {node: ^16.14 || >=18} @@ -1816,10 +1775,6 @@ packages: slash: 3.0.0 dev: true - /golden-fleece@1.0.9: - resolution: {integrity: sha512-YSwLaGMOgSBx9roJlNLL12c+FRiw7VECphinc6mGucphc/ZxTHgdEz6gmJqH6NOzYEd/yr64hwjom5pZ+tJVpg==} - dev: false - /gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: @@ -3026,30 +2981,6 @@ packages: typescript: 5.1.3 dev: true - /svelte2tsx@0.4.14(svelte@3.55.0)(typescript@4.5.5): - resolution: {integrity: sha512-udF0Z/DA98OfjPFBU1GBJRpYHEvsxA8ozwYVN08AOWMnQyxoSyWWlYspiq2m9xAjLo/pWnhec9z1d6jc9umqjA==} - peerDependencies: - svelte: ^3.24 - typescript: ^4.1.2 - dependencies: - dedent-js: 1.0.1 - pascal-case: 3.1.2 - svelte: 3.55.0 - typescript: 4.5.5 - dev: true - - /svelte2tsx@0.5.23(svelte@3.55.0)(typescript@4.5.5): - resolution: {integrity: sha512-jYFnugTQRFmUpvLXPQrKzVYcW5ErT+0QCxg027Zx9BuvYefMZFuoBSTDYe7viPEFGrPPiLgT2m7f5n9khE7f7Q==} - peerDependencies: - svelte: ^3.24 - typescript: ^4.1.2 - dependencies: - dedent-js: 1.0.1 - pascal-case: 3.1.2 - svelte: 3.55.0 - typescript: 4.5.5 - dev: true - /svelte2tsx@0.6.16(svelte@4.0.0)(typescript@5.1.3): resolution: {integrity: sha512-AX2iYEvQdd4tq5BokRdOOA0N/nD37ZnhXAomrAG9EEGl2cjkvoQUwe1Aluo6FSzA684WJjhxW+1ZXmveCmvDrA==} peerDependencies: @@ -3154,12 +3085,6 @@ packages: is-typed-array: 1.1.10 dev: true - /typescript@4.5.5: - resolution: {integrity: sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==} - engines: {node: '>=4.2.0'} - hasBin: true - dev: true - /typescript@5.1.3: resolution: {integrity: sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==} engines: {node: '>=14.17'}