bify-module-groups
Advanced tools
Comparing version 1.0.0 to 2.0.0
{ | ||
"name": "bify-module-groups", | ||
"version": "1.0.0", | ||
"version": "2.0.0", | ||
"main": "src/index.js", | ||
@@ -11,9 +11,11 @@ "exports": { | ||
"license": "MIT", | ||
"engines": { | ||
"node": ">=12.0.0" | ||
}, | ||
"scripts": { | ||
"test": "node test", | ||
"lint": "eslint 'src/*.js' 'test/*.js'", | ||
"lint": "eslint 'src/*.js' 'test/*.js' && depcheck", | ||
"lint:fix": "eslint --fix 'src/*.js' 'test/*.js'" | ||
}, | ||
"dependencies": { | ||
"bify-packagedata-stream": "1.0.0", | ||
"pump": "^3.0.0", | ||
@@ -25,3 +27,3 @@ "through2": "^3.0.1" | ||
"clone": "^2.1.2", | ||
"concat-stream": "^2.0.0", | ||
"depcheck": "^1.4.3", | ||
"eslint": "^7.24.0", | ||
@@ -33,6 +35,8 @@ "eslint-config-standard": "^16.0.2", | ||
"pify": "^5.0.0", | ||
"tape": "^4.13.2", | ||
"vinyl": "^2.2.1" | ||
"tape": "^4.13.2" | ||
}, | ||
"repository": "git@github.com:LavaMoat/bify-package-factor.git" | ||
"repository": { | ||
"type": "git", | ||
"url": "https://github.com/MetaMask/bify-module-groups.git" | ||
} | ||
} |
@@ -8,9 +8,8 @@ const pump = require('pump') | ||
function factor (groups, modules, factorByPackage = false) { | ||
function factor (groupIds, modules) { | ||
const moduleOwners = new Map() | ||
const packageOwners = new Map() | ||
const result = { moduleOwners } | ||
// walk the graph and claim/common each module | ||
groups.forEach((groupId) => { | ||
groupIds.forEach((groupId) => { | ||
walkFrom(groupId, (...args) => factorModule(groupId, ...args)) | ||
@@ -20,15 +19,2 @@ }) | ||
// determine package owners | ||
if (factorByPackage) { | ||
Array.from(moduleOwners.entries()).forEach(factorPackage) | ||
result.packageOwners = packageOwners | ||
} | ||
// console.log('factor packages', packageOwners) | ||
// walk graph and adjust modules by package ownership | ||
groups.forEach((groupId) => { | ||
walkFrom(groupId, updateModuleForCommonPackages) | ||
}) | ||
// console.log('update modules', moduleOwners) | ||
return result | ||
@@ -54,50 +40,2 @@ | ||
function factorPackage ([moduleId, groupId]) { | ||
const { packageName } = modules[moduleId] | ||
// root package: skip | ||
if (packageName === '<root>') { | ||
// console.log(`factorPackage/root ${moduleId} ${packageName} ${groupId}`) | ||
return | ||
} | ||
// module already common: make package common | ||
if (isCommon(moduleOwners, moduleId)) { | ||
packageOwners.set(packageName, COMMON) | ||
// console.log(`factorPackage/modCommon ${moduleId} ${packageName} ${groupId}`) | ||
return | ||
} | ||
// already common: skip | ||
if (isCommon(packageOwners, packageName)) { | ||
// console.log(`factorPackage/isCommon ${moduleId} ${packageName} ${groupId}`) | ||
return | ||
} | ||
// already claimed: make common | ||
if (isClaimedByOtherGroup(packageOwners, packageName, groupId)) { | ||
packageOwners.set(packageName, COMMON) | ||
// console.log(`factorPackage/isClaimed ${moduleId} ${packageName} ${groupId}`) | ||
return | ||
} | ||
// available: claim for self | ||
packageOwners.set(packageName, groupId) | ||
// console.log(`factorPackage/claim ${moduleId} ${packageName} ${groupId}`) | ||
} | ||
function updateModuleForCommonPackages (moduleId, moduleData) { | ||
const { packageName } = moduleData | ||
// root package: continue to children | ||
if (packageName === '<root>') { | ||
return true | ||
} | ||
// module already common: skip children | ||
if (isCommon(moduleOwners, moduleId)) { | ||
return false | ||
} | ||
// package is common: make common recursively, skip children | ||
if (isCommon(packageOwners, packageName)) { | ||
makeModuleCommonRecursively(moduleId) | ||
return false | ||
} | ||
// continue to children | ||
return true | ||
} | ||
function isCommon (registry, id) { | ||
@@ -151,3 +89,5 @@ return registry.get(id) === COMMON | ||
const modules = {} | ||
const entryPoints = [] | ||
// "groupId" is the entry module's moduleId. this set doesn't include the COMMON group | ||
const groupIds = [] | ||
// "moduleGroups" is the set of groups, including the COMMON group | ||
const moduleGroups = {} | ||
@@ -182,3 +122,3 @@ | ||
// console.log(`entry point found ${groupId} ${file}`) | ||
entryPoints.push(groupId) | ||
groupIds.push(groupId) | ||
createModuleGroup({ groupId, file, parent: parentGroup }) | ||
@@ -192,11 +132,16 @@ } | ||
// factor module into owners | ||
const { moduleOwners } = factor(entryPoints, modules) | ||
const { moduleOwners } = factor(groupIds, modules) | ||
// re-order modules by owner group and iterate groups | ||
// pipe modules into their owner group's stream | ||
for (const [moduleId, groupId] of moduleOwners.entries()) { | ||
for (const [groupId, moduleIds] of groupMapKeysByValue(moduleOwners).entries()) { | ||
// console.log(`flush ${moduleId} to ${groupId}`) | ||
const groupStream = moduleGroups[groupId].stream | ||
const moduleData = modules[moduleId] | ||
groupStream.push(moduleData) | ||
// sort for determinism | ||
moduleIds.sort().forEach(moduleId => { | ||
const moduleData = modules[moduleId] | ||
groupStream.push(moduleData) | ||
}) | ||
} | ||
// end all group streams (common stream will self-end) | ||
// ending the streams inside of the first loop causes an issue in mm somehow | ||
Object.values(moduleGroups).forEach(moduleGroup => { | ||
@@ -214,1 +159,14 @@ moduleGroup.stream.end() | ||
} | ||
function groupMapKeysByValue (inputMap) { | ||
const outputMap = new Map() | ||
for (const [key, value] of inputMap.entries()) { | ||
const collection = outputMap.get(value) | ||
if (!collection) { | ||
outputMap.set(value, [key]) | ||
} else { | ||
collection.push(key) | ||
} | ||
} | ||
return outputMap | ||
} |
@@ -73,3 +73,3 @@ const path = require('path') | ||
t.deepEqual(factoringSummary, { common: ['./node_modules/b/index.js', './src/12.js'], './src/entry-one.js': ['./src/entry-one.js', './node_modules/a/index.js', './src/10.js'], './src/entry-two.js': ['./src/entry-two.js', './node_modules/c/index.js', './src/11.js'] } | ||
t.deepEqual(factoringSummary, { common: ['./src/12.js', './node_modules/b/index.js'], './src/entry-one.js': ['./src/10.js', './node_modules/a/index.js', './src/entry-one.js'], './src/entry-two.js': ['./src/11.js', './node_modules/c/index.js', './src/entry-two.js'] } | ||
, 'groups claimed expected modules') | ||
@@ -140,3 +140,3 @@ | ||
t.deepEqual(factoringSummary, { 'common-0': ['./node_modules/b/index.js', './src/12.js'], 'entry-one-0': ['./node_modules/a/index.js', './src/10.js'], 'entry-two-0': ['./node_modules/c/index.js', './src/11.js'], 'entry-one-1': ['./src/entry-one.js'], 'entry-two-1': ['./src/entry-two.js'] }, 'groups claimed expected modules') | ||
t.deepEqual(factoringSummary, { 'common-0': ['./src/12.js', './node_modules/b/index.js'], 'entry-one-0': ['./src/10.js', './node_modules/a/index.js'], 'entry-two-0': ['./src/11.js', './node_modules/c/index.js'], 'entry-one-1': ['./src/entry-one.js'], 'entry-two-1': ['./src/entry-two.js'] }, 'groups claimed expected modules') | ||
t.end() | ||
@@ -143,0 +143,0 @@ }) |
2
10
14
22840
559
- Removedbify-packagedata-stream@1.0.0
- Removedbify-packagedata-stream@1.0.0(transitive)
- Removedfunction-bind@1.1.2(transitive)
- Removedhasown@2.0.2(transitive)
- Removedis-core-module@2.13.1(transitive)
- Removedpath-parse@1.0.7(transitive)
- Removedpath-root@0.1.1(transitive)
- Removedpath-root-regex@0.1.2(transitive)
- Removedresolve@1.22.8(transitive)
- Removedresolve-package-path@1.2.7(transitive)
- Removedsupports-preserve-symlinks-flag@1.0.0(transitive)