Skip to content

Commit 0f0fbf1

Browse files
committed
add svelte support to webpack encore
1 parent a7d76ee commit 0f0fbf1

File tree

8 files changed

+70
-3
lines changed

8 files changed

+70
-3
lines changed

index.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1609,6 +1609,20 @@ class Encore {
16091609
webpackConfig = null;
16101610
}
16111611

1612+
1613+
/**
1614+
* If enabled, the SvelteJs loader is enabled.
1615+
*
1616+
* https://github.com/sveltejs/svelte-loader
1617+
*
1618+
* Encore.enableSvelte()
1619+
*/
1620+
enableSvelte() {
1621+
webpackConfig.enableSvelte();
1622+
1623+
return this;
1624+
}
1625+
16121626
/**
16131627
* @deprecated
16141628
* @return {void}

lib/WebpackConfig.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ class WebpackConfig {
114114
this.useBabelTypeScriptPreset = false;
115115
this.useWebpackNotifier = false;
116116
this.useHandlebarsLoader = false;
117+
this.useSvelte = false;
117118

118119
// Features/Loaders options
119120
this.copyFilesConfigs = [];
@@ -696,6 +697,10 @@ class WebpackConfig {
696697
}
697698
}
698699

700+
enableSvelte() {
701+
this.useSvelte = true;
702+
}
703+
699704
enableTypeScriptLoader(callback = () => {}) {
700705
if (this.useBabelTypeScriptPreset) {
701706
throw new Error('Encore.enableTypeScriptLoader() can not be called when Encore.enableBabelTypeScriptPreset() has been called.');

lib/config-generator.js

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ class ConfigGenerator {
9797
config.stats = this.buildStatsConfig();
9898

9999
config.resolve = {
100-
extensions: ['.wasm', '.mjs', '.js', '.json', '.jsx', '.vue', '.ts', '.tsx'],
100+
extensions: ['.wasm', '.mjs', '.js', '.json', '.jsx', '.vue', '.ts', '.tsx', 'svelte'],
101101
alias: {}
102102
};
103103

@@ -399,6 +399,17 @@ class ConfigGenerator {
399399
}));
400400
}
401401

402+
if (this.webpackConfig.useSvelte) {
403+
rules.push(applyRuleConfigurationCallback('svelte', {
404+
resolve: {
405+
mainFields: ['svelte', 'browser', 'module', 'main'],
406+
extensions: ['.mjs', '.js', '.svelte'],
407+
},
408+
test: /\.svelte$/,
409+
loader: 'svelte-loader',
410+
}));
411+
}
412+
402413
if (this.webpackConfig.useVueLoader) {
403414
rules.push(applyRuleConfigurationCallback('vue', {
404415
test: /\.vue$/,

lib/features.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,14 @@ const features = {
147147
{ name: 'handlebars-loader', enforce_version: true }
148148
],
149149
description: 'load Handlebars files'
150+
},
151+
svelte: {
152+
method: 'enableSvelte()',
153+
packages: [
154+
{ name: 'svelte', enforce_version: true },
155+
{ name: 'svelte-loader', enforce_version: true }
156+
],
157+
description: 'process Svelte JS files'
150158
}
151159
};
152160

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,8 @@
9090
"strip-ansi": "^6.0.0",
9191
"stylus": "^0.54.5",
9292
"stylus-loader": "^3.0.2",
93+
"svelte": "^3.23.0",
94+
"svelte-loader": "^2.13.6",
9395
"ts-loader": "^5.3.0",
9496
"typescript": ">=2.9",
9597
"url-loader": "^4.0.0",

test/WebpackConfig.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1200,12 +1200,12 @@ describe('WebpackConfig object', () => {
12001200

12011201
expect(config.externals).to.deep.equals([]);
12021202

1203-
config.addExternals({ 'jquery': 'jQuery', 'react': 'react' });
1203+
config.addExternals({ 'jquery': 'jQuery', 'react': 'react', 'svelte': 'svelte' });
12041204
config.addExternals({ 'lodash': 'lodash' });
12051205
config.addExternals(/^(jquery|\$)$/i);
12061206

12071207
expect(config.externals).to.deep.equals([
1208-
{ 'jquery': 'jQuery', 'react': 'react' },
1208+
{ 'jquery': 'jQuery', 'react': 'react', 'svelte': 'svelte' },
12091209
{ 'lodash': 'lodash' },
12101210
/^(jquery|\$)$/i
12111211
]);

test/index.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,15 @@ describe('Public API', () => {
272272

273273
});
274274

275+
describe('enableSvelte', () => {
276+
277+
it('must return the API object', () => {
278+
const returnedValue = api.enableSvelte();
279+
expect(returnedValue).to.equal(api);
280+
});
281+
282+
});
283+
275284
describe('enablePreactPreset', () => {
276285

277286
it('must return the API object', () => {

yarn.lock

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8386,6 +8386,24 @@ supports-color@^7.1.0:
83868386
dependencies:
83878387
has-flag "^4.0.0"
83888388

8389+
svelte-dev-helper@^1.1.9:
8390+
version "1.1.9"
8391+
resolved "https://registry.yarnpkg.com/svelte-dev-helper/-/svelte-dev-helper-1.1.9.tgz#7d187db5c6cdbbd64d75a32f91b8998bde3273c3"
8392+
integrity sha1-fRh9tcbNu9ZNdaMvkbiZi94yc8M=
8393+
8394+
svelte-loader@^2.13.6:
8395+
version "2.13.6"
8396+
resolved "https://registry.yarnpkg.com/svelte-loader/-/svelte-loader-2.13.6.tgz#3d5efd5886c2bab034606d5af0cce659da3ee555"
8397+
integrity sha512-7uf7ZQdPAl+lwb1ldUYJFY/raZRUCuaNx7lMJ+F16jrVwN1+c35C2pBMGIY0mCqdKm5sm45jqELJJLGM3UG9Pw==
8398+
dependencies:
8399+
loader-utils "^1.1.0"
8400+
svelte-dev-helper "^1.1.9"
8401+
8402+
svelte@^3.23.0:
8403+
version "3.23.0"
8404+
resolved "https://registry.yarnpkg.com/svelte/-/svelte-3.23.0.tgz#bbcd6887cf588c24a975b14467455abfff9acd3f"
8405+
integrity sha512-cnyd96bK/Nw5DnYuB1hzm5cl6+I1fpmdKOteA7KLzU9KGLsLmvWsSkSKbcntzODCLmSySN3HjcgTHRo6/rJNTw==
8406+
83898407
svg-tags@^1.0.0:
83908408
version "1.0.0"
83918409
resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764"

0 commit comments

Comments
 (0)