Skip to content

Commit c676a77

Browse files
authored
(chore) Add mappings generation to svelte2tsx repl (#972)
1 parent 7ddd029 commit c676a77

File tree

2 files changed

+59
-10
lines changed

2 files changed

+59
-10
lines changed

packages/svelte2tsx/repl/index.svelte

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<script>
2+
export let value;
3+
</script>
4+
5+
{#if value}
6+
<input bind:value on:change />
7+
{/if}

packages/svelte2tsx/rollup.config.js

+52-10
Original file line numberDiff line numberDiff line change
@@ -5,26 +5,66 @@ import typescript from '@rollup/plugin-typescript';
55
import builtins from 'builtin-modules';
66
import fs from 'fs';
77
import path from 'path';
8+
import { decode } from 'sourcemap-codec';
9+
10+
const DEV = !!process.env.ROLLUP_WATCH;
811

912
function repl() {
13+
require('ts-node').register({
14+
project: 'test/tsconfig.json',
15+
transpileOnly: true
16+
});
17+
const OUTDIR = path.resolve(__dirname, 'repl', 'output');
18+
19+
const INPUT = path.resolve(__dirname, 'repl', 'index.svelte');
20+
const OUTPUT = path.resolve(__dirname, 'repl', 'output', 'code.tsx');
21+
const MAP = path.resolve(__dirname, 'repl', 'output', 'code.tsx.map');
22+
const MAPPINGS = path.resolve(__dirname, 'repl', 'output', 'mappings.jsx');
23+
1024
return {
1125
name: 'dev-repl',
1226
buildStart() {
13-
this.addWatchFile('./repl/index.svelte');
27+
this.addWatchFile(INPUT);
1428
},
1529
writeBundle() {
16-
if (!this.meta.watchMode) return;
30+
const BUILD = require.resolve('./index.js');
31+
const BUILD_TEST = require.resolve('./test/build.ts');
1732

18-
const repl = `${__dirname}/repl/`;
19-
const output = `${__dirname}/repl/output/`;
20-
21-
delete require.cache[path.resolve(__dirname, 'index.js')];
33+
delete require.cache[BUILD];
2234
const svelte2tsx = require('./index.js');
2335

24-
const tsx = svelte2tsx(fs.readFileSync(`${repl}/index.svelte`, 'utf-8'));
36+
delete require.cache[BUILD_TEST];
37+
require.cache[BUILD_TEST] = require.cache[BUILD];
38+
const { process_transformed_text } = require('./test/sourcemaps/process');
39+
40+
const input_content = fs.readFileSync(INPUT, 'utf-8');
2541

26-
if (!fs.existsSync(output)) fs.mkdirSync(output);
27-
fs.writeFileSync(`${repl}/output/code.tsx`, tsx.code);
42+
try {
43+
const { code, map } = svelte2tsx(input_content);
44+
45+
map.file = 'code.tsx';
46+
map.sources = ['index.svelte'];
47+
map.sourcesContent = [input_content];
48+
49+
if (!fs.existsSync(OUTDIR)) fs.mkdirSync(OUTDIR);
50+
fs.writeFileSync(OUTPUT, code);
51+
fs.writeFileSync(MAP, map.toString());
52+
53+
try {
54+
const mappings = process_transformed_text(
55+
input_content,
56+
code, // @ts-expect-error
57+
decode(map.mappings)
58+
).print_mappings();
59+
60+
fs.writeFileSync(MAPPINGS, mappings);
61+
} catch (e) {
62+
fs.writeFileSync(MAPPINGS, e.toString());
63+
}
64+
} catch (e) {
65+
fs.writeFileSync(OUTPUT, e.toString());
66+
fs.writeFileSync(MAPPINGS, e.toString());
67+
}
2868
}
2969
};
3070
}
@@ -33,11 +73,13 @@ export default [
3373
input: 'src/index.ts',
3474
output: [
3575
{
76+
exports: 'auto',
3677
sourcemap: true,
3778
format: 'commonjs',
3879
file: 'index.js'
3980
},
4081
{
82+
exports: 'auto',
4183
file: 'index.mjs',
4284
format: 'esm'
4385
}
@@ -47,7 +89,7 @@ export default [
4789
commonjs(),
4890
json(),
4991
typescript({ include: ['src/**/*'] }),
50-
repl()
92+
DEV && repl()
5193
],
5294
watch: {
5395
clearScreen: false

0 commit comments

Comments
 (0)