Add commentary and dictionary resources

This commit is contained in:
2026-07-12 10:25:16 -05:00
parent a6ee513e02
commit 652e27b2b9
16 changed files with 11171 additions and 7 deletions
+2
View File
@@ -6,5 +6,7 @@ This file is generated from source manifests and package catalogs. Edit `sources
| Resource | Type | Language | Date / Edition | Source | License | Features | Attachments | Counts | Detail |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| [Easton's and Smith's Bible Dictionaries](docs/resources/easton-smith-dictionaries-neuu.md) | dictionary | English (eng) | n/a | NEUU Bible Dictionary Dataset | CC BY 4.0 dataset; original dictionaries public domain (redistributable) | English Bible dictionary entries, Dictionary scripture references | English term definitions, future: maps, future: timeline, future: person_place_index | 5998 dictionary entries | [Details](docs/resources/easton-smith-dictionaries-neuu.md) |
| [King James (Authorized) Version](docs/resources/kjv-eng-kjv2006.md) | translation | English (eng) - archaic British | 1611; 1769 edition | eBible.org | Public Domain (redistributable) | Bible text, Strong's-linked words, USFM source, Strong's dictionary lookup, Translator footnotes | Strong's links, Strong's dictionary lookup, Translator footnotes, future: study_notes, future: commentary, future: cross_references, future: morphology, future: lemma_links, future: lexicon, future: dictionary, future: maps, future: timeline, future: media | 66 books, 31102 verses, 348884 Strong's links, 6959 footnotes | [Details](docs/resources/kjv-eng-kjv2006.md) |
| [Matthew Henry's Concise Commentary on the Bible](docs/resources/matthew-henry-concise-ccel.md) | commentary | English (eng) | n/a | Christian Classics Ethereal Library | Public Domain (redistributable) | Verse-range commentary | Matthew Henry concise commentary, future: study_notes, future: cross_references | 66 books, 3930 commentary entries | [Details](docs/resources/matthew-henry-concise-ccel.md) |
| [Strong's Hebrew and Greek Dictionaries](docs/resources/strongs-open-scriptures.md) | lexicon | English (eng) | n/a | Open Scriptures | CC-BY-SA digital edition; original Strong's dictionaries public domain (redistributable) | Strong's dictionary entries, Hebrew and Aramaic entries, Greek entries | Strong's number definitions, future: morphology, future: lemma_links | 14197 dictionary entries | [Details](docs/resources/strongs-open-scriptures.md) |
@@ -0,0 +1,86 @@
# Easton's and Smith's Bible Dictionaries
Merged Easton's and Smith's Bible dictionary entries normalized by English term for margin lookup and study references.
## Identity
- Resource ID: `easton-smith-dictionaries-neuu`
- Type: dictionary
- Abbreviation: EAS/SMI
- Short title: Easton / Smith Bible Dictionaries
- Alternate IDs: neuu-org/bible-dictionary-dataset
- Language: English (eng)
- Canon: reference
## Translation
- Base title: n/a
- Translation year: n/a
- Edition: n/a
- Edition year: n/a
- Source text basis: n/a
- Tradition: n/a
## Source
- Provider: NEUU Bible Dictionary Dataset
- Upstream ID: neuu-org/bible-dictionary-dataset
- Upstream page: https://github.com/neuu-org/bible-dictionary-dataset
- Download URL: https://raw.githubusercontent.com/neuu-org/bible-dictionary-dataset/main/data/01_parsed/_index.json
- Source format: github-raw-json-index
- Upstream last updated: 2026-07-12
- Available upstream formats: json
## License
- Name: CC BY 4.0 dataset; original dictionaries public domain
- Redistribution allowed: Yes
- License/source URL: https://github.com/neuu-org/bible-dictionary-dataset
- Attribution: Parsed dataset by NEUU. Original public-domain sources include Easton's Bible Dictionary and Smith's Bible Dictionary.
- Jurisdiction notes: n/a
- Restrictions: Preserve NEUU dataset attribution and CC BY 4.0 notice.
## Contributors
- M. G. Easton: Easton's Bible Dictionary original author
- William Smith: Smith's Bible Dictionary original editor
- NEUU: parsed dataset maintainer
## Features
- English Bible dictionary entries: dictionary; languages: eng; embedded; package: packages/json/easton-smith-dictionaries-neuu/entries.jsonl
- Dictionary scripture references: cross_references; languages: eng; embedded; package: packages/json/easton-smith-dictionaries-neuu/entries.jsonl
## Attachments
Included:
- English term definitions: dictionary; english-term-to-dictionary-entry; anchors: word, term, scripture_reference; languages: eng; package: packages/json/easton-smith-dictionaries-neuu/entries.jsonl
Supported future attachment types:
- maps
- timeline
- person_place_index
## Generated Package
- Package catalog: packages/json/easton-smith-dictionaries-neuu/catalog.json
- Verses JSONL: n/a
- Strong's links JSONL: n/a
- Footnotes JSONL: n/a
- Entries JSONL: packages/json/easton-smith-dictionaries-neuu/entries.jsonl
- Source SHA-256: 0105d59e4376ed21d34e04195636f752388d2ce9f62babf8a552b8ef1a917666
- Last checked: 2026-07-12T15:58:00Z
## Counts
- Books: n/a
- Verses: n/a
- Strong's links: n/a
- Footnotes: n/a
- Entries: 5998
- Commentary entries: n/a
- Dictionary entries: 5998
## Package Checksums
- entries_jsonl: `entries.jsonl` (e0530558dd643296d1e44127762b86d4a663b00326727215ec96ba301a90e759)
@@ -0,0 +1,83 @@
# Matthew Henry's Concise Commentary on the Bible
Public-domain concise whole-Bible commentary by Matthew Henry, normalized into book/chapter/verse-range entries.
## Identity
- Resource ID: `matthew-henry-concise-ccel`
- Type: commentary
- Abbreviation: MHCC
- Short title: Matthew Henry Concise Commentary
- Alternate IDs: ccel/henry/mhcc
- Language: English (eng)
- Canon: whole-bible
## Translation
- Base title: n/a
- Translation year: n/a
- Edition: n/a
- Edition year: n/a
- Source text basis: n/a
- Tradition: n/a
## Source
- Provider: Christian Classics Ethereal Library
- Upstream ID: henry/mhcc
- Upstream page: https://www.ccel.org/ccel/henry/mhcc.html
- Download URL: https://www.ccel.org/ccel/h/henry/mhcc/cache/mhcc.txt
- Source format: plain-text
- Upstream last updated: 2001-06-20
- Available upstream formats: html, xml, text, pdf, epub
## License
- Name: Public Domain
- Redistribution allowed: Yes
- License/source URL: https://www.ccel.org/ccel/h/henry/mhcc/cache/mhcc.txt
- Attribution: Matthew Henry's Concise Commentary on the Bible, digital text from Christian Classics Ethereal Library.
- Jurisdiction notes: n/a
- Restrictions: Preserve CCEL attribution for the digital source.
## Contributors
- Matthew Henry: original author
- Christian Classics Ethereal Library: digital text provider
## Features
- Verse-range commentary: commentary; languages: eng; embedded; package: packages/json/matthew-henry-concise-ccel/commentary.jsonl
## Attachments
Included:
- Matthew Henry concise commentary: commentary; verse-range-to-commentary; anchors: book, chapter, verse_range; languages: eng; package: packages/json/matthew-henry-concise-ccel/commentary.jsonl
Supported future attachment types:
- study_notes
- cross_references
## Generated Package
- Package catalog: packages/json/matthew-henry-concise-ccel/catalog.json
- Verses JSONL: n/a
- Strong's links JSONL: n/a
- Footnotes JSONL: n/a
- Entries JSONL: n/a
- Source SHA-256: 7af7f0feef2a8522263d48825a170125f4c421d14250212d83db6aef6d4f5269
- Last checked: 2026-07-12T15:58:00Z
## Counts
- Books: 66
- Verses: n/a
- Strong's links: n/a
- Footnotes: n/a
- Entries: 3930
- Commentary entries: 3930
- Dictionary entries: n/a
## Package Checksums
- commentary_jsonl: `commentary.jsonl` (897845ce215601932381d981592ac5e1eb1d3adfb753af1b1e695cb318401119)
+2 -2
View File
@@ -1,12 +1,12 @@
{
"name": "libre-bible-data",
"version": "0.1.7",
"version": "0.1.8",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "libre-bible-data",
"version": "0.1.7",
"version": "0.1.8",
"dependencies": {
"adm-zip": "^0.5.16"
}
+4 -2
View File
@@ -1,6 +1,6 @@
{
"name": "libre-bible-data",
"version": "0.1.7",
"version": "0.1.8",
"private": true,
"type": "module",
"scripts": {
@@ -9,7 +9,9 @@
"catalog": "node scripts/generate-catalog.js",
"import:kjv": "node scripts/import-usfm.js sources/kjv-eng-kjv2006.json",
"import:strongs": "node scripts/import-strongs.js sources/strongs-open-scriptures.json",
"build": "npm run check && npm run import:kjv && npm run import:strongs && npm run catalog && npm run docs"
"import:mhcc": "node scripts/import-mhcc.js sources/matthew-henry-concise-ccel.json",
"import:dictionaries": "node scripts/import-neuu-dictionaries.js sources/easton-smith-dictionaries-neuu.json",
"build": "npm run check && npm run import:kjv && npm run import:strongs && npm run import:mhcc && npm run import:dictionaries && npm run catalog && npm run docs"
},
"dependencies": {
"adm-zip": "^0.5.16"
+241 -1
View File
@@ -1,8 +1,136 @@
{
"schema_version": "librebible.index-catalog.v1",
"project": "LibreBible",
"generated_at": "2026-07-12T14:08:30.649Z",
"generated_at": "2026-07-12T15:24:50.122Z",
"resources": [
{
"id": "easton-smith-dictionaries-neuu",
"resource_type": "dictionary",
"title": "Easton's and Smith's Bible Dictionaries",
"short_title": "Easton / Smith Bible Dictionaries",
"abbreviation": "EAS/SMI",
"alternate_ids": [
"neuu-org/bible-dictionary-dataset"
],
"language": {
"code": "eng",
"name": "English"
},
"script": "Latn",
"canon": {
"scope": "reference",
"notes": "Bible dictionary entries keyed by English term, with scripture references where present."
},
"contributors": [
{
"name": "M. G. Easton",
"role": "Easton's Bible Dictionary original author"
},
{
"name": "William Smith",
"role": "Smith's Bible Dictionary original editor"
},
{
"name": "NEUU",
"role": "parsed dataset maintainer"
}
],
"features": [
{
"id": "english-bible-dictionary",
"type": "dictionary",
"label": "English Bible dictionary entries",
"languages": [
"eng"
],
"embedded": true,
"package": "packages/json/easton-smith-dictionaries-neuu/entries.jsonl"
},
{
"id": "dictionary-scripture-references",
"type": "cross_references",
"label": "Dictionary scripture references",
"languages": [
"eng"
],
"embedded": true,
"package": "packages/json/easton-smith-dictionaries-neuu/entries.jsonl"
}
],
"attachments": {
"included": [
{
"id": "easton-smith-term-definitions",
"resource_type": "dictionary",
"label": "English term definitions",
"relationship": "english-term-to-dictionary-entry",
"anchor_types": [
"word",
"term",
"scripture_reference"
],
"languages": [
"eng"
],
"source": "NEUU parsed dataset built from public-domain Easton's and Smith's Bible dictionaries.",
"package": "packages/json/easton-smith-dictionaries-neuu/entries.jsonl"
}
],
"supported_future_types": [
"maps",
"timeline",
"person_place_index"
]
},
"source": {
"provider": "NEUU Bible Dictionary Dataset",
"url": "https://github.com/neuu-org/bible-dictionary-dataset",
"download_url": "https://raw.githubusercontent.com/neuu-org/bible-dictionary-dataset/main/data/01_parsed/_index.json",
"format": "github-raw-json-index",
"upstream_id": "neuu-org/bible-dictionary-dataset",
"upstream_last_updated": "2026-07-12",
"available_formats": [
"json"
]
},
"license": {
"name": "CC BY 4.0 dataset; original dictionaries public domain",
"redistribution": true,
"source_license_url": "https://github.com/neuu-org/bible-dictionary-dataset",
"attribution": "Parsed dataset by NEUU. Original public-domain sources include Easton's Bible Dictionary and Smith's Bible Dictionary.",
"restricted_notes": "Preserve NEUU dataset attribution and CC BY 4.0 notice."
},
"catalog_display": {
"primary_features": [
"English Bible dictionary entries",
"Dictionary scripture references"
],
"summary": "Merged Easton's and Smith's Bible dictionary entries normalized by English term for margin lookup and study references."
},
"package_path": "packages/json/easton-smith-dictionaries-neuu/catalog.json",
"source_manifest_path": "sources/easton-smith-dictionaries-neuu.json",
"detail_doc_path": "docs/resources/easton-smith-dictionaries-neuu.md",
"counts": {
"entries": 5998,
"dictionary_entries": 5998,
"scripture_refs": 35089,
"source_entries": {
"EAS": 3962,
"SMI": 4561
}
},
"files": {
"entries_jsonl": {
"path": "entries.jsonl",
"bytes": 7641121,
"sha256": "e0530558dd643296d1e44127762b86d4a663b00326727215ec96ba301a90e759"
}
},
"checks": {
"expected_sha256": "0105d59e4376ed21d34e04195636f752388d2ce9f62babf8a552b8ef1a917666",
"last_checked_at": "2026-07-12T15:58:00Z"
}
},
{
"id": "kjv-eng-kjv2006",
"resource_type": "translation",
@@ -244,6 +372,118 @@
"last_checked_at": "2026-07-12T02:18:30Z"
}
},
{
"id": "matthew-henry-concise-ccel",
"resource_type": "commentary",
"title": "Matthew Henry's Concise Commentary on the Bible",
"short_title": "Matthew Henry Concise Commentary",
"abbreviation": "MHCC",
"alternate_ids": [
"ccel/henry/mhcc"
],
"language": {
"code": "eng",
"name": "English"
},
"script": "Latn",
"canon": {
"scope": "whole-bible",
"notes": "Concise commentary covering Old and New Testament books."
},
"contributors": [
{
"name": "Matthew Henry",
"role": "original author"
},
{
"name": "Christian Classics Ethereal Library",
"role": "digital text provider"
}
],
"features": [
{
"id": "verse-range-commentary",
"type": "commentary",
"label": "Verse-range commentary",
"languages": [
"eng"
],
"embedded": true,
"package": "packages/json/matthew-henry-concise-ccel/commentary.jsonl"
}
],
"attachments": {
"included": [
{
"id": "mhcc-verse-range-commentary",
"resource_type": "commentary",
"label": "Matthew Henry concise commentary",
"relationship": "verse-range-to-commentary",
"anchor_types": [
"book",
"chapter",
"verse_range"
],
"languages": [
"eng"
],
"source": "CCEL text edition of Matthew Henry's Concise Commentary.",
"package": "packages/json/matthew-henry-concise-ccel/commentary.jsonl"
}
],
"supported_future_types": [
"study_notes",
"cross_references"
]
},
"source": {
"provider": "Christian Classics Ethereal Library",
"url": "https://www.ccel.org/ccel/henry/mhcc.html",
"download_url": "https://www.ccel.org/ccel/h/henry/mhcc/cache/mhcc.txt",
"format": "plain-text",
"upstream_id": "henry/mhcc",
"upstream_last_updated": "2001-06-20",
"available_formats": [
"html",
"xml",
"text",
"pdf",
"epub"
]
},
"license": {
"name": "Public Domain",
"redistribution": true,
"source_license_url": "https://www.ccel.org/ccel/h/henry/mhcc/cache/mhcc.txt",
"attribution": "Matthew Henry's Concise Commentary on the Bible, digital text from Christian Classics Ethereal Library.",
"restricted_notes": "Preserve CCEL attribution for the digital source."
},
"catalog_display": {
"primary_features": [
"Verse-range commentary"
],
"summary": "Public-domain concise whole-Bible commentary by Matthew Henry, normalized into book/chapter/verse-range entries."
},
"package_path": "packages/json/matthew-henry-concise-ccel/catalog.json",
"source_manifest_path": "sources/matthew-henry-concise-ccel.json",
"detail_doc_path": "docs/resources/matthew-henry-concise-ccel.md",
"counts": {
"entries": 3930,
"commentary_entries": 3930,
"books": 66
},
"files": {
"commentary_jsonl": {
"path": "commentary.jsonl",
"bytes": 4462245,
"sha256": "897845ce215601932381d981592ac5e1eb1d3adfb753af1b1e695cb318401119"
}
},
"checks": {
"expected_sha256": "7af7f0feef2a8522263d48825a170125f4c421d14250212d83db6aef6d4f5269",
"last_checked_at": "2026-07-12T15:58:00Z"
}
},
{
"id": "strongs-open-scriptures",
"resource_type": "lexicon",
@@ -0,0 +1,135 @@
{
"schema_version": "librebible.resource-catalog.v1",
"project": "LibreBible",
"id": "easton-smith-dictionaries-neuu",
"resource_type": "dictionary",
"title": "Easton's and Smith's Bible Dictionaries",
"short_title": "Easton / Smith Bible Dictionaries",
"abbreviation": "EAS/SMI",
"alternate_ids": [
"neuu-org/bible-dictionary-dataset"
],
"language": {
"code": "eng",
"name": "English"
},
"script": "Latn",
"canon": {
"scope": "reference",
"notes": "Bible dictionary entries keyed by English term, with scripture references where present."
},
"contributors": [
{
"name": "M. G. Easton",
"role": "Easton's Bible Dictionary original author"
},
{
"name": "William Smith",
"role": "Smith's Bible Dictionary original editor"
},
{
"name": "NEUU",
"role": "parsed dataset maintainer"
}
],
"features": [
{
"id": "english-bible-dictionary",
"type": "dictionary",
"label": "English Bible dictionary entries",
"languages": [
"eng"
],
"embedded": true,
"package": "packages/json/easton-smith-dictionaries-neuu/entries.jsonl"
},
{
"id": "dictionary-scripture-references",
"type": "cross_references",
"label": "Dictionary scripture references",
"languages": [
"eng"
],
"embedded": true,
"package": "packages/json/easton-smith-dictionaries-neuu/entries.jsonl"
}
],
"attachments": {
"included": [
{
"id": "easton-smith-term-definitions",
"resource_type": "dictionary",
"label": "English term definitions",
"relationship": "english-term-to-dictionary-entry",
"anchor_types": [
"word",
"term",
"scripture_reference"
],
"languages": [
"eng"
],
"source": "NEUU parsed dataset built from public-domain Easton's and Smith's Bible dictionaries.",
"package": "packages/json/easton-smith-dictionaries-neuu/entries.jsonl"
}
],
"supported_future_types": [
"maps",
"timeline",
"person_place_index"
]
},
"source": {
"provider": "NEUU Bible Dictionary Dataset",
"url": "https://github.com/neuu-org/bible-dictionary-dataset",
"download_url": "https://raw.githubusercontent.com/neuu-org/bible-dictionary-dataset/main/data/01_parsed/_index.json",
"format": "github-raw-json-index",
"upstream_id": "neuu-org/bible-dictionary-dataset",
"upstream_last_updated": "2026-07-12",
"available_formats": [
"json"
]
},
"license": {
"name": "CC BY 4.0 dataset; original dictionaries public domain",
"redistribution": true,
"source_license_url": "https://github.com/neuu-org/bible-dictionary-dataset",
"attribution": "Parsed dataset by NEUU. Original public-domain sources include Easton's Bible Dictionary and Smith's Bible Dictionary.",
"restricted_notes": "Preserve NEUU dataset attribution and CC BY 4.0 notice."
},
"catalog_display": {
"primary_features": [
"English Bible dictionary entries",
"Dictionary scripture references"
],
"summary": "Merged Easton's and Smith's Bible dictionary entries normalized by English term for margin lookup and study references."
},
"importer": {
"name": "scripts/import-neuu-dictionaries.js",
"version": "0.1.0"
},
"source_manifest_file": "easton-smith-dictionaries-neuu.json",
"generated_at": "2026-07-12T15:24:50.122Z",
"source_sha256": "0105d59e4376ed21d34e04195636f752388d2ce9f62babf8a552b8ef1a917666",
"combined_source_sha256": "cf963f673d11af66d379a854d7f439b82fd4fbd377936750c6f214e70392c917",
"checks": {
"expected_sha256": "0105d59e4376ed21d34e04195636f752388d2ce9f62babf8a552b8ef1a917666",
"last_checked_at": "2026-07-12T15:58:00Z"
},
"counts": {
"entries": 5998,
"dictionary_entries": 5998,
"scripture_refs": 35089,
"source_entries": {
"EAS": 3962,
"SMI": 4561
}
},
"files": {
"entries_jsonl": {
"path": "entries.jsonl",
"bytes": 7641121,
"sha256": "e0530558dd643296d1e44127762b86d4a663b00326727215ec96ba301a90e759"
}
}
}
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -214,7 +214,7 @@
"name": "scripts/import-usfm.js",
"version": "0.1.0"
},
"generated_at": "2026-07-12T14:08:28.582Z",
"generated_at": "2026-07-12T15:24:45.357Z",
"source_sha256": "4ea6952590d070bfa22985aded48a49581e31b568a60aa09e25f73462e700e7d",
"checks": {
"expected_sha256": "4ea6952590d070bfa22985aded48a49581e31b568a60aa09e25f73462e700e7d",
@@ -0,0 +1,118 @@
{
"schema_version": "librebible.resource-catalog.v1",
"project": "LibreBible",
"id": "matthew-henry-concise-ccel",
"resource_type": "commentary",
"title": "Matthew Henry's Concise Commentary on the Bible",
"short_title": "Matthew Henry Concise Commentary",
"abbreviation": "MHCC",
"alternate_ids": [
"ccel/henry/mhcc"
],
"language": {
"code": "eng",
"name": "English"
},
"script": "Latn",
"canon": {
"scope": "whole-bible",
"notes": "Concise commentary covering Old and New Testament books."
},
"contributors": [
{
"name": "Matthew Henry",
"role": "original author"
},
{
"name": "Christian Classics Ethereal Library",
"role": "digital text provider"
}
],
"features": [
{
"id": "verse-range-commentary",
"type": "commentary",
"label": "Verse-range commentary",
"languages": [
"eng"
],
"embedded": true,
"package": "packages/json/matthew-henry-concise-ccel/commentary.jsonl"
}
],
"attachments": {
"included": [
{
"id": "mhcc-verse-range-commentary",
"resource_type": "commentary",
"label": "Matthew Henry concise commentary",
"relationship": "verse-range-to-commentary",
"anchor_types": [
"book",
"chapter",
"verse_range"
],
"languages": [
"eng"
],
"source": "CCEL text edition of Matthew Henry's Concise Commentary.",
"package": "packages/json/matthew-henry-concise-ccel/commentary.jsonl"
}
],
"supported_future_types": [
"study_notes",
"cross_references"
]
},
"source": {
"provider": "Christian Classics Ethereal Library",
"url": "https://www.ccel.org/ccel/henry/mhcc.html",
"download_url": "https://www.ccel.org/ccel/h/henry/mhcc/cache/mhcc.txt",
"format": "plain-text",
"upstream_id": "henry/mhcc",
"upstream_last_updated": "2001-06-20",
"available_formats": [
"html",
"xml",
"text",
"pdf",
"epub"
]
},
"license": {
"name": "Public Domain",
"redistribution": true,
"source_license_url": "https://www.ccel.org/ccel/h/henry/mhcc/cache/mhcc.txt",
"attribution": "Matthew Henry's Concise Commentary on the Bible, digital text from Christian Classics Ethereal Library.",
"restricted_notes": "Preserve CCEL attribution for the digital source."
},
"catalog_display": {
"primary_features": [
"Verse-range commentary"
],
"summary": "Public-domain concise whole-Bible commentary by Matthew Henry, normalized into book/chapter/verse-range entries."
},
"importer": {
"name": "scripts/import-mhcc.js",
"version": "0.1.0"
},
"source_manifest_file": "matthew-henry-concise-ccel.json",
"generated_at": "2026-07-12T15:24:47.876Z",
"source_sha256": "7af7f0feef2a8522263d48825a170125f4c421d14250212d83db6aef6d4f5269",
"checks": {
"expected_sha256": "7af7f0feef2a8522263d48825a170125f4c421d14250212d83db6aef6d4f5269",
"last_checked_at": "2026-07-12T15:58:00Z"
},
"counts": {
"entries": 3930,
"commentary_entries": 3930,
"books": 66
},
"files": {
"commentary_jsonl": {
"path": "commentary.jsonl",
"bytes": 4462245,
"sha256": "897845ce215601932381d981592ac5e1eb1d3adfb753af1b1e695cb318401119"
}
}
}
File diff suppressed because one or more lines are too long
@@ -135,7 +135,7 @@
"version": "0.1.0"
},
"source_manifest_file": "strongs-open-scriptures.json",
"generated_at": "2026-07-12T14:08:30.649Z",
"generated_at": "2026-07-12T15:24:46.709Z",
"source_sha256": "04a2d6d0a13d75f17e562998bba7491beeed5a149909f904d12dd80aa1e47037",
"checks": {
"expected_sha256": "04a2d6d0a13d75f17e562998bba7491beeed5a149909f904d12dd80aa1e47037",
+254
View File
@@ -0,0 +1,254 @@
import { mkdir, readFile, writeFile } from 'node:fs/promises'
import path from 'node:path'
import { downloadFile, readJson, sha256File, writeJson } from './lib.js'
const manifestPath = process.argv[2]
if (!manifestPath) {
console.error('Usage: node scripts/import-mhcc.js sources/<manifest>.json')
process.exit(1)
}
const root = process.cwd()
const manifest = await readJson(path.resolve(root, manifestPath))
const sourcePath = path.join(root, 'cache', manifest.id, path.basename(manifest.source.download_url))
const packageDir = path.join(root, 'packages', 'json', manifest.id)
const bibleBooks = [
'Genesis',
'Exodus',
'Leviticus',
'Numbers',
'Deuteronomy',
'Joshua',
'Judges',
'Ruth',
'1 Samuel',
'2 Samuel',
'1 Kings',
'2 Kings',
'1 Chronicles',
'2 Chronicles',
'Ezra',
'Nehemiah',
'Esther',
'Job',
'Psalms',
'Proverbs',
'Ecclesiastes',
'Song of Solomon',
'Isaiah',
'Jeremiah',
'Lamentations',
'Ezekiel',
'Daniel',
'Hosea',
'Joel',
'Amos',
'Obadiah',
'Jonah',
'Micah',
'Nahum',
'Habakkuk',
'Zephaniah',
'Haggai',
'Zechariah',
'Malachi',
'Matthew',
'Mark',
'Luke',
'John',
'Acts',
'Romans',
'1 Corinthians',
'2 Corinthians',
'Galatians',
'Ephesians',
'Philippians',
'Colossians',
'1 Thessalonians',
'2 Thessalonians',
'1 Timothy',
'2 Timothy',
'Titus',
'Philemon',
'Hebrews',
'James',
'1 Peter',
'2 Peter',
'1 John',
'2 John',
'3 John',
'Jude',
'Revelation',
]
const bibleBookSet = new Set(bibleBooks)
await downloadFile(manifest.source.download_url, sourcePath)
const sourceSha = await sha256File(sourcePath)
if (sourceSha !== manifest.checks.expected_sha256.toLowerCase()) {
throw new Error(`${manifest.id}: source checksum mismatch. Expected ${manifest.checks.expected_sha256}, got ${sourceSha}`)
}
const source = await readFile(sourcePath, 'utf8')
const entries = parseCommentary(source)
await mkdir(packageDir, { recursive: true })
await writeJsonl(path.join(packageDir, 'commentary.jsonl'), entries)
const files = {
commentary_jsonl: await fileInfo(path.join(packageDir, 'commentary.jsonl')),
}
await writeJson(path.join(packageDir, 'catalog.json'), {
schema_version: 'librebible.resource-catalog.v1',
project: manifest.project_name ?? 'LibreBible',
id: manifest.id,
resource_type: manifest.resource_type,
title: manifest.title,
short_title: manifest.short_title,
abbreviation: manifest.abbreviation,
alternate_ids: manifest.alternate_ids ?? [],
language: manifest.language,
script: manifest.script,
canon: manifest.canon,
contributors: manifest.contributors ?? [],
features: manifest.features ?? [],
attachments: manifest.attachments ?? {},
source: manifest.source,
license: manifest.license,
catalog_display: manifest.catalog_display,
importer: manifest.importer,
source_manifest_file: path.basename(manifestPath),
generated_at: new Date().toISOString(),
source_sha256: sourceSha,
checks: manifest.checks,
counts: {
entries: entries.length,
commentary_entries: entries.length,
books: new Set(entries.map((entry) => entry.book)).size,
},
files,
})
console.log(`${manifest.id}: imported ${entries.length} commentary entries`)
function parseCommentary(source) {
const lines = source.replace(/\r\n/g, '\n').split('\n')
const entries = []
let currentBook = null
let currentChapter = null
let currentRange = null
let buffer = []
function flush() {
if (!currentBook || !currentChapter || !currentRange || buffer.length === 0) return
const text = cleanParagraph(buffer.join(' '))
if (!text) return
entries.push({
id: `mhcc:${slug(currentBook)}:${currentChapter}:${currentRange.start}-${currentRange.end}`,
resource_id: 'matthew-henry-concise-ccel',
source: 'Matthew Henry Concise Commentary',
book: currentBook,
chapter: currentChapter,
verse_start: currentRange.start,
verse_end: currentRange.end,
reference: `${currentBook} ${currentChapter}:${currentRange.start}${currentRange.end !== currentRange.start ? `-${currentRange.end}` : ''}`,
title: `${currentBook} ${currentChapter}:${currentRange.start}${currentRange.end !== currentRange.start ? `-${currentRange.end}` : ''}`,
text,
})
}
for (const rawLine of lines) {
const line = rawLine.trim()
if (!line || /^_+$/.test(line) || line === 'Chapter Outline') continue
if (bibleBookSet.has(line)) {
flush()
currentBook = line
currentChapter = null
currentRange = null
buffer = []
continue
}
const chapterMatch = /^Chapter\s+(\d+)$/i.exec(line)
if (chapterMatch && currentBook) {
flush()
currentChapter = Number(chapterMatch[1])
currentRange = null
buffer = []
continue
}
const range = parseVerseRange(line)
if (range && currentBook && currentChapter) {
flush()
currentRange = range
buffer = []
continue
}
const inlineRange = parseInlineReferenceRange(line, currentChapter)
if (inlineRange && currentBook && currentChapter) {
flush()
currentRange = inlineRange.range
buffer = inlineRange.text ? [inlineRange.text] : []
continue
}
if (currentBook && currentChapter && currentRange) {
buffer.push(line)
}
}
flush()
return entries
}
function parseVerseRange(line) {
const match = /^Verses?\s+(.+)$/i.exec(line)
if (!match) return null
const numbers = [...match[1].matchAll(/\d+/g)].map((item) => Number(item[0]))
if (!numbers.length) return null
return {
start: numbers[0],
end: numbers[numbers.length - 1],
}
}
function parseInlineReferenceRange(line, currentChapter) {
const match = /^(?:[1-3]\s*)?[A-Z][A-Za-z.]+\s+(\d+):(\d+)(?:-(\d+))?\s*(.*)$/.exec(line)
if (!match) return null
const chapter = Number(match[1])
if (chapter !== currentChapter) return null
const start = Number(match[2])
const end = match[3] ? Number(match[3]) : start
return {
range: { start, end },
text: match[4]?.trim() ?? '',
}
}
function cleanParagraph(value) {
return value
.replace(/\s+/g, ' ')
.replace(/\s+([,.;:?!])/g, '$1')
.trim()
}
function slug(value) {
return value.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '')
}
async function writeJsonl(filePath, rows) {
await writeFile(filePath, `${rows.map((row) => JSON.stringify(row)).join('\n')}\n`, 'utf8')
}
async function fileInfo(filePath) {
const data = await readFile(filePath)
return {
path: path.basename(filePath),
bytes: data.length,
sha256: await sha256File(filePath),
}
}
+134
View File
@@ -0,0 +1,134 @@
import { createHash } from 'node:crypto'
import { mkdir, readFile, writeFile } from 'node:fs/promises'
import path from 'node:path'
import { downloadFile, readJson, sha256File, writeJson } from './lib.js'
const manifestPath = process.argv[2]
if (!manifestPath) {
console.error('Usage: node scripts/import-neuu-dictionaries.js sources/<manifest>.json')
process.exit(1)
}
const root = process.cwd()
const manifest = await readJson(path.resolve(root, manifestPath))
const indexPath = path.join(root, 'cache', manifest.id, path.basename(manifest.source.download_url))
const packageDir = path.join(root, 'packages', 'json', manifest.id)
await downloadFile(manifest.source.download_url, indexPath)
const indexSha = await sha256File(indexPath)
if (indexSha !== manifest.checks.expected_sha256.toLowerCase()) {
throw new Error(`${manifest.id}: source checksum mismatch. Expected ${manifest.checks.expected_sha256}, got ${indexSha}`)
}
const index = await readJson(indexPath)
const entries = []
const combinedHash = createHash('sha256')
for (const file of index.files) {
const url = new URL(file, manifest.source.download_url).toString()
const data = await fetchJson(url)
combinedHash.update(JSON.stringify(data))
for (const [key, entry] of Object.entries(data)) {
entries.push({
id: `easton-smith:${entry.slug ?? slug(key)}`,
resource_id: manifest.id,
term: entry.name ?? key,
slug: entry.slug ?? slug(key),
definitions: (entry.definitions ?? []).map((definition) => ({
source: definition.source,
source_name: index.source_names?.[definition.source] ?? definition.source,
text: cleanText(definition.text),
})),
scripture_refs: entry.scripture_refs ?? [],
sources: entry.sources ?? [],
})
}
}
entries.sort((a, b) => a.term.localeCompare(b.term))
await mkdir(packageDir, { recursive: true })
await writeJsonl(path.join(packageDir, 'entries.jsonl'), entries)
const sourceCounts = {}
for (const entry of entries) {
for (const source of entry.sources) {
sourceCounts[source] = (sourceCounts[source] ?? 0) + 1
}
}
const files = {
entries_jsonl: await fileInfo(path.join(packageDir, 'entries.jsonl')),
}
await writeJson(path.join(packageDir, 'catalog.json'), {
schema_version: 'librebible.resource-catalog.v1',
project: manifest.project_name ?? 'LibreBible',
id: manifest.id,
resource_type: manifest.resource_type,
title: manifest.title,
short_title: manifest.short_title,
abbreviation: manifest.abbreviation,
alternate_ids: manifest.alternate_ids ?? [],
language: manifest.language,
script: manifest.script,
canon: manifest.canon,
contributors: manifest.contributors ?? [],
features: manifest.features ?? [],
attachments: manifest.attachments ?? {},
source: manifest.source,
license: manifest.license,
catalog_display: manifest.catalog_display,
importer: manifest.importer,
source_manifest_file: path.basename(manifestPath),
generated_at: new Date().toISOString(),
source_sha256: indexSha,
combined_source_sha256: combinedHash.digest('hex'),
checks: manifest.checks,
counts: {
entries: entries.length,
dictionary_entries: entries.length,
scripture_refs: entries.reduce((total, entry) => total + entry.scripture_refs.length, 0),
source_entries: sourceCounts,
},
files,
})
console.log(`${manifest.id}: imported ${entries.length} dictionary entries`)
async function fetchJson(url) {
const response = await fetch(url)
if (!response.ok) throw new Error(`Unable to load ${url}: ${response.status} ${response.statusText}`)
return response.json()
}
function cleanText(value) {
return String(value ?? '')
.replace(/“/g, '"')
.replace(/”/g, '"')
.replace(/’/g, "'")
.replace(/‘/g, "'")
.replace(/—/g, '-')
.replace(/–/g, '-')
.replace(/…/g, '...')
.replace(/\s+/g, ' ')
.trim()
}
function slug(value) {
return String(value).toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '')
}
async function writeJsonl(filePath, rows) {
await writeFile(filePath, `${rows.map((row) => JSON.stringify(row)).join('\n')}\n`, 'utf8')
}
async function fileInfo(filePath) {
const data = await readFile(filePath)
return {
path: path.basename(filePath),
bytes: data.length,
sha256: await sha256File(filePath),
}
}
@@ -0,0 +1,97 @@
{
"id": "easton-smith-dictionaries-neuu",
"resource_type": "dictionary",
"project_name": "LibreBible",
"title": "Easton's and Smith's Bible Dictionaries",
"short_title": "Easton / Smith Bible Dictionaries",
"abbreviation": "EAS/SMI",
"alternate_ids": ["neuu-org/bible-dictionary-dataset"],
"language": {
"code": "eng",
"name": "English"
},
"script": "Latn",
"canon": {
"scope": "reference",
"notes": "Bible dictionary entries keyed by English term, with scripture references where present."
},
"contributors": [
{
"name": "M. G. Easton",
"role": "Easton's Bible Dictionary original author"
},
{
"name": "William Smith",
"role": "Smith's Bible Dictionary original editor"
},
{
"name": "NEUU",
"role": "parsed dataset maintainer"
}
],
"features": [
{
"id": "english-bible-dictionary",
"type": "dictionary",
"label": "English Bible dictionary entries",
"languages": ["eng"],
"embedded": true,
"package": "packages/json/easton-smith-dictionaries-neuu/entries.jsonl"
},
{
"id": "dictionary-scripture-references",
"type": "cross_references",
"label": "Dictionary scripture references",
"languages": ["eng"],
"embedded": true,
"package": "packages/json/easton-smith-dictionaries-neuu/entries.jsonl"
}
],
"attachments": {
"included": [
{
"id": "easton-smith-term-definitions",
"resource_type": "dictionary",
"label": "English term definitions",
"relationship": "english-term-to-dictionary-entry",
"anchor_types": ["word", "term", "scripture_reference"],
"languages": ["eng"],
"source": "NEUU parsed dataset built from public-domain Easton's and Smith's Bible dictionaries.",
"package": "packages/json/easton-smith-dictionaries-neuu/entries.jsonl"
}
],
"supported_future_types": ["maps", "timeline", "person_place_index"]
},
"source": {
"provider": "NEUU Bible Dictionary Dataset",
"url": "https://github.com/neuu-org/bible-dictionary-dataset",
"download_url": "https://raw.githubusercontent.com/neuu-org/bible-dictionary-dataset/main/data/01_parsed/_index.json",
"format": "github-raw-json-index",
"upstream_id": "neuu-org/bible-dictionary-dataset",
"upstream_last_updated": "2026-07-12",
"available_formats": ["json"]
},
"license": {
"name": "CC BY 4.0 dataset; original dictionaries public domain",
"redistribution": true,
"source_license_url": "https://github.com/neuu-org/bible-dictionary-dataset",
"attribution": "Parsed dataset by NEUU. Original public-domain sources include Easton's Bible Dictionary and Smith's Bible Dictionary.",
"restricted_notes": "Preserve NEUU dataset attribution and CC BY 4.0 notice."
},
"checks": {
"expected_sha256": "0105d59e4376ed21d34e04195636f752388d2ce9f62babf8a552b8ef1a917666",
"last_checked_at": "2026-07-12T15:58:00Z"
},
"importer": {
"name": "scripts/import-neuu-dictionaries.js",
"version": "0.1.0"
},
"packages": {
"json_catalog": "packages/json/easton-smith-dictionaries-neuu/catalog.json",
"entries_jsonl": "packages/json/easton-smith-dictionaries-neuu/entries.jsonl"
},
"catalog_display": {
"primary_features": ["English Bible dictionary entries", "Dictionary scripture references"],
"summary": "Merged Easton's and Smith's Bible dictionary entries normalized by English term for margin lookup and study references."
}
}
+85
View File
@@ -0,0 +1,85 @@
{
"id": "matthew-henry-concise-ccel",
"resource_type": "commentary",
"project_name": "LibreBible",
"title": "Matthew Henry's Concise Commentary on the Bible",
"short_title": "Matthew Henry Concise Commentary",
"abbreviation": "MHCC",
"alternate_ids": ["ccel/henry/mhcc"],
"language": {
"code": "eng",
"name": "English"
},
"script": "Latn",
"canon": {
"scope": "whole-bible",
"notes": "Concise commentary covering Old and New Testament books."
},
"contributors": [
{
"name": "Matthew Henry",
"role": "original author"
},
{
"name": "Christian Classics Ethereal Library",
"role": "digital text provider"
}
],
"features": [
{
"id": "verse-range-commentary",
"type": "commentary",
"label": "Verse-range commentary",
"languages": ["eng"],
"embedded": true,
"package": "packages/json/matthew-henry-concise-ccel/commentary.jsonl"
}
],
"attachments": {
"included": [
{
"id": "mhcc-verse-range-commentary",
"resource_type": "commentary",
"label": "Matthew Henry concise commentary",
"relationship": "verse-range-to-commentary",
"anchor_types": ["book", "chapter", "verse_range"],
"languages": ["eng"],
"source": "CCEL text edition of Matthew Henry's Concise Commentary.",
"package": "packages/json/matthew-henry-concise-ccel/commentary.jsonl"
}
],
"supported_future_types": ["study_notes", "cross_references"]
},
"source": {
"provider": "Christian Classics Ethereal Library",
"url": "https://www.ccel.org/ccel/henry/mhcc.html",
"download_url": "https://www.ccel.org/ccel/h/henry/mhcc/cache/mhcc.txt",
"format": "plain-text",
"upstream_id": "henry/mhcc",
"upstream_last_updated": "2001-06-20",
"available_formats": ["html", "xml", "text", "pdf", "epub"]
},
"license": {
"name": "Public Domain",
"redistribution": true,
"source_license_url": "https://www.ccel.org/ccel/h/henry/mhcc/cache/mhcc.txt",
"attribution": "Matthew Henry's Concise Commentary on the Bible, digital text from Christian Classics Ethereal Library.",
"restricted_notes": "Preserve CCEL attribution for the digital source."
},
"checks": {
"expected_sha256": "7af7f0feef2a8522263d48825a170125f4c421d14250212d83db6aef6d4f5269",
"last_checked_at": "2026-07-12T15:58:00Z"
},
"importer": {
"name": "scripts/import-mhcc.js",
"version": "0.1.0"
},
"packages": {
"json_catalog": "packages/json/matthew-henry-concise-ccel/catalog.json",
"commentary_jsonl": "packages/json/matthew-henry-concise-ccel/commentary.jsonl"
},
"catalog_display": {
"primary_features": ["Verse-range commentary"],
"summary": "Public-domain concise whole-Bible commentary by Matthew Henry, normalized into book/chapter/verse-range entries."
}
}