mirror of
https://github.com/moodle/moodle.git
synced 2025-01-17 13:38:32 +01:00
MDL-71882 grunt: Replace module names
When a third-party AMD module is provided with an included name we must replace it with a name that we are able to use. The structure of an AMD module define function is: [name], [dependencies], [callback] String, Array, Function Each of these is (strangely) optional. We know that the name is the only String and will always be the first, and we can use AST to remove a provided name before adding the Moodle-specific name. This should be a safe change and not lead to any changes in built code, but will make it easier to include third-party code. An additional logging line is also included to inform developers that a change was made.
This commit is contained in:
parent
c69c33b14d
commit
c1e639c41a
@ -111,8 +111,22 @@ module.exports = ({template, types}) => {
|
||||
if (!this.seenDefine && path.get('callee').isIdentifier({name: 'define'})) {
|
||||
// We only want to modify the first instance of define that we find.
|
||||
this.seenDefine = true;
|
||||
|
||||
// Get the Moodle component for the file being processed.
|
||||
var moduleName = getModuleNameFromFileName(this.file.opts.filename);
|
||||
|
||||
// The function signature of `define()` is:
|
||||
// define = function (name, deps, callback) {...}
|
||||
// Ensure that if the moduel supplied its own name that it is replaced.
|
||||
if (path.node.arguments.length > 0) {
|
||||
// Ensure that there is only one name.
|
||||
if (path.node.arguments[0].type === 'StringLiteral') {
|
||||
// eslint-disable-next-line
|
||||
console.log(`Replacing module name '${path.node.arguments[0].extra.rawValue}' with ${moduleName}`);
|
||||
path.node.arguments.shift();
|
||||
}
|
||||
}
|
||||
|
||||
// Add the module name as the first argument to the define function.
|
||||
path.node.arguments.unshift(types.stringLiteral(moduleName));
|
||||
// Add a space after the define function in the built file so that previous versions
|
||||
|
Loading…
x
Reference in New Issue
Block a user