Files
libre-bible-data/scripts/sword-audit.js
T

73 lines
2.4 KiB
JavaScript

import {
classifySwordModule,
fetchSwordConfCatalog,
loadLicenseApproval,
loadSwordPilotModules,
swordPackageUrl,
writeSwordAudit,
} from './sword-lib.js'
const pilot = await loadSwordPilotModules()
const licenseRegistry = await loadLicenseApproval()
const catalog = await fetchSwordConfCatalog(pilot.repository.mods_tarball_url)
const modules = []
for (const item of pilot.modules) {
const catalogEntry = catalog.modules.get(item.id.toLowerCase())
if (!catalogEntry) {
modules.push({
id: item.id,
intended_resource_type: item.intended_resource_type,
found: false,
license_status: 'missing',
review_notes: 'Module was not found in the CrossWire catalog.',
})
continue
}
const conf = catalogEntry.conf
const license = classifySwordModule(conf, licenseRegistry)
modules.push({
id: catalogEntry.module_id,
intended_resource_type: item.intended_resource_type,
found: true,
title: conf.Description ?? catalogEntry.module_id,
abbreviation: conf.Abbreviation ?? catalogEntry.module_id,
lang: conf.Lang ?? 'n/a',
mod_drv: conf.ModDrv,
source_type: conf.SourceType,
version: conf.Version,
sword_version_date: conf.SwordVersionDate,
distribution_license: conf.DistributionLicense ?? 'n/a',
text_source: conf.TextSource ?? 'n/a',
package_url: swordPackageUrl(catalogEntry.module_id, pilot.repository.package_base_url),
license_status: license.status,
license_rule: license.rule,
redistribution: license.redistribution ?? false,
commercial_use: license.commercial_use ?? null,
share_alike: license.share_alike ?? false,
import_enabled: item.import_enabled !== false,
import_status: item.import_status ?? (item.import_enabled === false ? 'deferred' : 'candidate'),
review_notes: license.notes,
reason: item.reason,
})
}
const audit = {
schema_version: 'librebible.sword-module-audit.v1',
generated_at: new Date().toISOString(),
repository: pilot.repository,
catalog_sha256: catalog.sha256,
modules,
}
await writeSwordAudit(audit)
const approved = modules.filter((module) => module.license_status.startsWith('approved')).length
const review = modules.filter((module) => module.license_status === 'review').length
const rejected = modules.filter((module) => module.license_status === 'rejected').length
console.log(`SWORD audit complete: ${modules.length} module(s), ${approved} approved, ${review} review, ${rejected} rejected.`)