Skip to content

Commit 78dbd4d

Browse files
author
Ives van Hoorne
committed
Svelte v2
1 parent f03b7fa commit 78dbd4d

File tree

3 files changed

+113
-4
lines changed

3 files changed

+113
-4
lines changed

packages/app/src/sandbox/eval/transpilers/svelte/index.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
// @flow
22
import SvelteWorker from 'worker-loader?publicPath=/&name=svelte-transpiler.[hash:8].worker.js!./svelte-worker.js';
33

4+
import semver from 'semver';
5+
46
import WorkerTranspiler from '../worker-transpiler';
57
import { type LoaderContext } from '../../transpiled-module';
68

@@ -12,13 +14,22 @@ class SvelteTranspiler extends WorkerTranspiler {
1214
}
1315

1416
doTranspilation(code: string, loaderContext: LoaderContext) {
17+
const packageJSON = loaderContext.options.configurations.package;
18+
const isV2 =
19+
packageJSON &&
20+
packageJSON.parsed &&
21+
packageJSON.parsed.devDependencies &&
22+
packageJSON.parsed.devDependencies.svelte &&
23+
semver.satisfies(packageJSON.parsed.devDependencies.svelte, '^2.0.0');
24+
1525
return new Promise((resolve, reject) => {
1626
const path = loaderContext.path;
1727

1828
this.queueTask(
1929
{
2030
code,
2131
path,
32+
isV2,
2233
},
2334
loaderContext._module.getId(),
2435
loaderContext,

packages/app/src/sandbox/eval/transpilers/svelte/svelte-worker.js

Lines changed: 46 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,52 @@ import { buildWorkerWarning } from '../utils/worker-warning-handler';
44
// Allow svelte to use btoa
55
self.window = self;
66

7-
self.importScripts(['https://unpkg.com/svelte@^1.43.1/compiler/svelte.js']);
7+
self.importScripts(['https://unpkg.com/svelte@^2.0.0/compiler/svelte.js']);
88

99
self.postMessage('ready');
1010

1111
declare var svelte: {
1212
compile: (code: string, options: Object) => { code: string },
1313
};
1414

15-
self.addEventListener('message', event => {
16-
const { code, path } = event.data;
15+
function getV2Code(code, path) {
16+
const {
17+
js: { code: compiledCode, map },
18+
} = svelte.compile(code, {
19+
filename: path,
20+
dev: true,
21+
cascade: false,
22+
store: true,
23+
24+
onerror: e => {
25+
self.postMessage({
26+
type: 'error',
27+
error: buildWorkerError(e),
28+
});
29+
},
30+
31+
onwarn: w => {
32+
self.postMessage({
33+
type: 'warning',
34+
warning: buildWorkerWarning(
35+
{
36+
fileName: w.fileName,
37+
lineNumber: w.loc && w.loc.line,
38+
columnNumber: w.loc && w.loc.column,
39+
message: w.message,
40+
},
41+
'svelte'
42+
),
43+
});
44+
},
45+
});
1746

18-
const { code: compiledCode, map } = svelte.compile(code, {
47+
return { code: compiledCode, map };
48+
}
49+
50+
function getV1Code(code, path) {
51+
self.importScripts(['https://unpkg.com/svelte@^1.43.1/compiler/svelte.js']);
52+
return svelte.compile(code, {
1953
filename: path,
2054
dev: true,
2155
cascade: false,
@@ -43,6 +77,14 @@ self.addEventListener('message', event => {
4377
});
4478
},
4579
});
80+
}
81+
82+
self.addEventListener('message', event => {
83+
const { code, path, isV2 } = event.data;
84+
85+
const { code: compiledCode, map } = isV2
86+
? getV2Code(code, path)
87+
: getV1Code(code, path);
4688

4789
const withInlineSourcemap = `${compiledCode}
4890
//# sourceMappingURL=${map.toUrl()}`;
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import { buildWorkerError } from '../utils/worker-error-handler';
2+
import { buildWorkerWarning } from '../utils/worker-warning-handler';
3+
4+
// Allow svelte to use btoa
5+
self.window = self;
6+
7+
self.importScripts('https://unpkg.com/svelte@^2.0.0/compiler/svelte.js');
8+
9+
self.postMessage('ready');
10+
11+
declare var svelte: {
12+
compile: (code: string, options: Object) => { code: string },
13+
};
14+
15+
self.addEventListener('message', event => {
16+
const { code, path } = event.data;
17+
18+
const {
19+
js: { code: compiledCode, map },
20+
} = svelte.compile(code, {
21+
filename: path,
22+
dev: true,
23+
cascade: false,
24+
store: true,
25+
26+
onerror: e => {
27+
self.postMessage({
28+
type: 'error',
29+
error: buildWorkerError(e),
30+
});
31+
},
32+
33+
onwarn: w => {
34+
self.postMessage({
35+
type: 'warning',
36+
warning: buildWorkerWarning(
37+
{
38+
fileName: w.fileName,
39+
lineNumber: w.loc && w.loc.line,
40+
columnNumber: w.loc && w.loc.column,
41+
message: w.message,
42+
},
43+
'svelte'
44+
),
45+
});
46+
},
47+
});
48+
49+
const withInlineSourcemap = `${compiledCode}
50+
//# sourceMappingURL=${map.toUrl()}`;
51+
52+
self.postMessage({
53+
type: 'result',
54+
transpiledCode: withInlineSourcemap,
55+
});
56+
});

0 commit comments

Comments
 (0)