Socket
Socket
Sign inDemoInstall

bify-module-groups

Package Overview
Dependencies
10
Maintainers
7
Versions
2
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 1.0.0 to 2.0.0

.editorconfig

18

package.json
{
"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 @@ })

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc