Skip to content

Commit

Permalink
fix: modify widget.js requires
Browse files Browse the repository at this point in the history
  • Loading branch information
janvennemann committed Feb 20, 2020
1 parent 9f43ad6 commit e43c04c
Showing 1 changed file with 36 additions and 15 deletions.
51 changes: 36 additions & 15 deletions lib/index.js
Expand Up @@ -11,6 +11,9 @@ const {
modelRegex
} = require('./utils');

const appControllerRequestPattern = '\'/alloy/controllers/\' \\+ ';
const widgetControllerRequestPattern = '\'/alloy/widgets/\'.*?\'/controllers/\' \\+ ';

module.exports = function (content, map) {
const result = loader.call(this, content, map);
this.callback(null, ...result);
Expand Down Expand Up @@ -93,24 +96,42 @@ Alloy.createController('index');`;
* @return {Array} Array containing modified content.
*/
function internalsLoader(content) {
if (this.resourcePath.endsWith('template/lib/alloy.js')) {
const applyRequireFix = (requestFilter) => {
// eslint-disable-next-line security/detect-non-literal-regexp
const searchPattern = new RegExp(`(require\\(${requestFilter})(\\(?name(?: \\|\\| DEFAULT_WIDGET\\))?)(\\))`, 'g');
content = content.replace(searchPattern, '$1$2.replace(/^\\//, \'\')$3.default');
};

// requires for controllers need to use `.default`
applyRequireFix('\'/alloy/controllers/\' \\+ ');
applyRequireFix('\'/alloy/widgets/\'.*?\'/controllers/\' \\+ ');
// remove ucfirst in model requires
content = content.replace(/models\/'\s\+\sucfirst\(name\)/, 'models/\' + name');

if (this.resourcePath.endsWith('Alloy/template/lib/alloy.js')) {
content = fixRequires(content);
// replace version template variable with constant
content = content.replace('<%= version %>', 'ALLOY_VERSION');

return [ content ];
} else if (this.resourcePath.endsWith('Alloy/lib/alloy/widget.js')) {
content = fixRequires(content);
}

return [ content ];
}

/**
* Modifies various `require` statements in the given content to be compatible
* with Webpack.
*
* @param {string} content File content to modify
*/
function fixRequires(content) {
// requires for controllers need to use `.default`
content = requireDefaultExport(content, appControllerRequestPattern);
content = requireDefaultExport(content, widgetControllerRequestPattern);
// remove ucfirst in model/collection requires
content = content.replace(/models\/'\s\+\sucfirst\(name\)/g, 'models/\' + name');

return content;
}

/**
* Modifies require statements to use `.default`.
*
* @param {string} content Content string to search in.
* @param {string} requestFilter RegExp to filter for specific requires.
* @return {string}
*/
function requireDefaultExport (content, requestFilter) {
// eslint-disable-next-line security/detect-non-literal-regexp
const searchPattern = new RegExp(`(require\\(${requestFilter})(\\(?name(?: \\|\\| DEFAULT_WIDGET\\))?)(\\))`, 'g');
return content.replace(searchPattern, '$1$2.replace(/^\\//, \'\')$3.default');
}

0 comments on commit e43c04c

Please sign in to comment.