Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion dist/webpack/loader.js
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,13 @@ function createControllersModule(config) {
}
for (const controllerName in config.controllers[packageName]) {
const controllerReference = packageName + '/' + controllerName;
const controllerNormalizedName = controllerReference.substr(1).replace(/_/g, '-').replace(/\//g, '--');
let controllerNormalizedName;
if (controllerName === 'default') {
controllerNormalizedName = packageName.substr(1).replace(/_/g, '-').replace(/\//g, '--');
}
else {
controllerNormalizedName = controllerReference.substr(1).replace(/_/g, '-').replace(/\//g, '--');
}
if ('undefined' === typeof packageConfig.symfony.controllers[controllerName]) {
throw new Error('Controller "' + controllerReference + '" does not exist in the package and cannot be compiled.');
}
Expand Down
11 changes: 9 additions & 2 deletions src/webpack/create-controllers-module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@

import generateLazyController from './generate-lazy-controller';

export default function createControllersModule(config) {
export default function createControllersModule(config: any) {
let controllerContents = 'export default {';
let autoImportContents = '';
let hasLazyControllers = false;
Expand Down Expand Up @@ -40,7 +40,14 @@ export default function createControllersModule(config) {
for (const controllerName in config.controllers[packageName]) {
const controllerReference = packageName + '/' + controllerName;
// Normalize the controller name: remove the initial @ and use Stimulus format
const controllerNormalizedName = controllerReference.substr(1).replace(/_/g, '-').replace(/\//g, '--');

let controllerNormalizedName: string;
// allow a "default" controller which takes on the package name
if (controllerName === 'default') {
controllerNormalizedName = packageName.substr(1).replace(/_/g, '-').replace(/\//g, '--');
} else {
controllerNormalizedName = controllerReference.substr(1).replace(/_/g, '-').replace(/\//g, '--');
}

// Find package config for the controller
if ('undefined' === typeof packageConfig.symfony.controllers[controllerName]) {
Expand Down
11 changes: 11 additions & 0 deletions test/fixtures/default-import-name.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"controllers": {
"@symfony/mock-module": {
"default": {
"fetch": "eager",
"enabled": true
}
}
},
"entrypoints": []
}
5 changes: 5 additions & 0 deletions test/fixtures/module/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,11 @@
"importedStyles": {
"@symfony/mock-module/dist/style.css": true
}
},
"default": {
"main": "dist/default_controller.js",
"webpackMode": "eager",
"enabled": true
}
}
}
Expand Down
10 changes: 10 additions & 0 deletions test/webpack/create-controllers-module.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -103,4 +103,14 @@ export default {
);
});
});

describe('default-import-name.json', () => {
it('must register a controller with no second part of the name', () => {
// eslint-disable-next-line @typescript-eslint/no-var-requires
const config = require('../fixtures/default-import-name.json');
expect(createControllersModule(config).finalSource).toEqual(
"export default {\n 'symfony--mock-module': import(/* webpackMode: \"eager\" */ '@symfony/mock-module/dist/default_controller.js'),\n};"
);
});
});
});