UNPKG

webpack-dependency-suite

Version:

A set of Webpack plugins, loaders and utilities designed for advanced dependency resolution

58 lines (52 loc) 2.84 kB
import { concatPromiseResults, getResourcesFromList } from '../utils' import { addBundleLoader, expandAllRequiresForGlob, resolveLiteral } from '../utils/inject' import { PathWithLoaders, RequireData, RequireDataBaseResolved } from '../typings/definitions' import * as path from 'path' import * as debug from 'debug' const log = debug('aurelia') /** * 1. load MAIN package.json * 2. get the aurelia resources: packageJson.aurelia && packageJson.aurelia.build && packageJson.aurelia.build.resources * 3. glob all resources * 4. resolve each resource in the context of MAIN package.json * 5. foreach files, match with resolved resources and replace loaders or return what was there * * @param {Object} packageJson * @param {string} rootDir * @param {Array<RequireData>} files * @param {Webpack.Core.LoaderContext} loaderInstance * @returns {Promise<Array<PathWithLoaders>>} */ export async function addLoadersMethod(rootDir: string, files: Array<RequireData>, loaderInstance: Webpack.Core.LoaderContext): Promise<Array<PathWithLoaders>> { let resolvedResources = loaderInstance._compilation._aureliaResolvedResources as Array<RequireData> if (!resolvedResources) { // TODO: acquire packageJson via builtin FileSystem, not Node const packageJsonPath = path.join(rootDir, 'package.json') // loaderInstance.addDependency(packageJsonPath) const packageJson = require(packageJsonPath) const resources = getResourcesFromList(packageJson, 'aurelia.build.resources') const resourceData = await addBundleLoader(resources, 'loaders') const globbedResources = await expandAllRequiresForGlob(resourceData, loaderInstance, false) loaderInstance._compilation._aureliaResolvedResources = resolvedResources = (await concatPromiseResults<RequireData>( globbedResources.map(r => resolveLiteral(r, loaderInstance, rootDir) as any /* TODO: typings */) )).filter(rr => !!rr.resolve) } // resolvedResources.forEach(rr => log(rr.resolve.path)) // const hmm = files.filter(f => f.resolve.path.includes(`aurelia-templating-resources`)).map(f => f.resolve.path) // if (hmm.length) { // log(hmm.find(f => !!resolvedResources.find(rr => rr.resolve.path === f))) // const fss = resolvedResources.find(rr => rr.resolve.path === hmm.find(f => f.includes(`signal-binding`))) // if (fss) log(fss) // } return files // .filter(f => !!f.resolve) .map(f => { const resolvedFile = resolvedResources.find(rr => rr.resolve.path === f.resolve.path) return { path: f.resolve.path, loaders: (resolvedFile && resolvedFile.loaders) || undefined } // return (resolvedFile && resolvedFile.loaders) ? (Object.assign(f, { loaders: resolvedFile.loaders })) : f }) // return enforcedLoadersFiles.map(f => ({ // path: f.resolve.path, // loaders: f.loaders // })) }