diff --git a/Gruntfile.js b/Gruntfile.js index 319fc47f073..3f7185a5352 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -197,7 +197,9 @@ module.exports = function(grunt) { files = grunt.option('files').split(','); } - const inAMD = path.basename(cwd) == 'amd'; + // If the cwd is the amd directory in the current component then it will be empty. + // If the cwd is a child of the component's AMD directory, the relative directory will not start with .. + const inAMD = !path.relative(`${componentDirectory}/amd`, cwd).startsWith('..'); // Globbing pattern for matching all AMD JS source files. let amdSrc = []; @@ -248,7 +250,7 @@ module.exports = function(grunt) { const nodes = xpath.select("/libraries/library/location/text()", doc); nodes.forEach(function(node) { - let lib = path.join(dirname, node.toString()); + let lib = path.posix.join(dirname, node.toString()); if (grunt.file.isDir(lib)) { // Ensure trailing slash on dirs. lib = lib.replace(/\/?$/, '/'); diff --git a/GruntfileComponents.js b/GruntfileComponents.js index 54a431cd8b2..74bd9de01e9 100644 --- a/GruntfileComponents.js +++ b/GruntfileComponents.js @@ -131,9 +131,11 @@ const getYuiSrcGlobList = relativeTo => { */ const getThirdPartyLibsList = relativeTo => { const fs = require('fs'); + const path = require('path'); return fetchComponentData().pathList - .map(componentPath => componentPath.replace(relativeTo, '') + '/thirdpartylibs.xml') + .map(componentPath => path.relative(relativeTo, componentPath) + '/thirdpartylibs.xml') + .map(componentPath => componentPath.replace(/\\/g, '/')) .filter(path => fs.existsSync(path)) .sort(); }; @@ -157,7 +159,7 @@ const getComponentFromPath = path => { /** * Check whether the supplied path, relative to the Gruntfile.js, is in a known component. * - * @param {String} checkPath The path to check + * @param {String} checkPath The path to check. This can be with either Windows, or Linux directory separators. * @returns {String|null} */ const getOwningComponentDirectory = checkPath => { @@ -167,10 +169,9 @@ const getOwningComponentDirectory = checkPath => { // This ensures that components which are within the directory of another component match first. const pathList = Object.keys(fetchComponentData().components).sort().reverse(); for (const componentPath of pathList) { - if (checkPath === componentPath) { - return componentPath; - } - if (checkPath.startsWith(componentPath + path.sep)) { + // If the componentPath is the directory being checked, it will be empty. + // If the componentPath is a parent of the directory being checked, the relative directory will not start with .. + if (!path.relative(componentPath, checkPath).startsWith('..')) { return componentPath; } }