mkgs-parcel
Version:
mkg's default parcel configuration
68 lines (56 loc) • 2 kB
JavaScript
const assert = require('assert').strict
const config = require('..')
const packageJson = require('../package.json')
/* eslint-env mocha */
describe('mkgs-parcel', () => {
let packageJsonDependencyNames
let configPackageReferences
before(async () => {
packageJsonDependencyNames = new Set(
Object.keys(packageJson.dependencies || {}),
)
configPackageReferences = collectConfigPackageReferences(config, new Set())
})
describe('package.json', () => {
it('includes every package referenced in the config', async () => {
const missingReferences = []
for (const reference of configPackageReferences) {
if (!packageJsonDependencyNames.has(reference)) {
missingReferences.push(reference)
}
}
// Assert with deepEqual rather than e.g. missingReferences.size as the
// assertion message with deepEqual enumerates the differences nicely
assert.deepEqual(missingReferences, [])
})
it('does not include packages not referenced in the config', async () => {
const unnecessaryDependencies = []
for (const dependency of packageJsonDependencyNames) {
if (!configPackageReferences.has(dependency)) {
unnecessaryDependencies.push(dependency)
}
}
assert.deepEqual(unnecessaryDependencies, [])
})
})
})
function collectConfigPackageReferences(
configSection,
references,
) {
if (configSection == null || typeof configSection !== 'object') {
throw new TypeError('Expected config section to be an object or an array')
}
for (const value of Object.values(configSection)) {
if (typeof value === 'string') {
references.add(value)
} else if (configSection != null && typeof configSection === 'object') {
collectConfigPackageReferences(value, references)
} else {
throw new Error(
'Parcel configs must contain only strings, arrays, or objects in value positions',
)
}
}
return references
}