wiki-graph-core 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/data/editor/clue_reviewer.jinja +410 -0
- package/data/editor/clue_reviewer_generator.jinja +428 -0
- package/data/editor/revision_feedback.jinja +5 -0
- package/data/editor/text_compressor.jinja +127 -0
- package/data/guaranteed/response_intent_classifier.jinja +8 -0
- package/data/help/commands/archive/next.jinja +29 -0
- package/data/help/commands/gc.jinja +38 -0
- package/data/help/commands/legacy/migrate.jinja +20 -0
- package/data/help/commands/legacy.jinja +19 -0
- package/data/help/commands/maintenance/chapter/add.jinja +41 -0
- package/data/help/commands/maintenance/chapter/list.jinja +33 -0
- package/data/help/commands/maintenance/chapter/move.jinja +36 -0
- package/data/help/commands/maintenance/chapter/remove.jinja +26 -0
- package/data/help/commands/maintenance/chapter/reset.jinja +29 -0
- package/data/help/commands/maintenance/chapter/set-source.jinja +34 -0
- package/data/help/commands/maintenance/chapter/set-summary.jinja +31 -0
- package/data/help/commands/maintenance/chapter/set-title.jinja +29 -0
- package/data/help/commands/maintenance/chapter/tree.jinja +58 -0
- package/data/help/commands/maintenance/chapter.jinja +59 -0
- package/data/help/commands/maintenance/cover.jinja +28 -0
- package/data/help/commands/maintenance/meta.jinja +55 -0
- package/data/help/commands/predicate.jinja +460 -0
- package/data/help/commands/root.jinja +83 -0
- package/data/help/commands/transform.jinja +34 -0
- package/data/help/commands/uri.jinja +274 -0
- package/data/help/topics/config.jinja +88 -0
- package/data/help/topics/format.jinja +72 -0
- package/data/help/topics/readiness.jinja +99 -0
- package/data/help/topics/recipe.jinja +151 -0
- package/data/help/topics/runtime.jinja +62 -0
- package/data/help/topics/uri.jinja +178 -0
- package/data/output/epub/cover.xhtml.jinja +13 -0
- package/data/output/epub/nav.xhtml.jinja +12 -0
- package/data/output/epub/package.opf.xml.jinja +39 -0
- package/data/output/epub/section.xhtml.jinja +12 -0
- package/data/topologization/book_coherence_extraction.jinja +223 -0
- package/data/topologization/chunk_extraction.jinja +233 -0
- package/data/topologization/evidence_choice.jinja +38 -0
- package/data/topologization/translate_chunks.jinja +138 -0
- package/data/topologization/user_focused_extraction.jinja +378 -0
- package/dist/archive/query/archive-view.d.ts +26 -0
- package/dist/archive/query/archive-view.js +4540 -0
- package/dist/archive/query/archive-view.js.map +1 -0
- package/dist/archive/query/continuation-cursor.d.ts +61 -0
- package/dist/archive/query/continuation-cursor.js +363 -0
- package/dist/archive/query/continuation-cursor.js.map +1 -0
- package/dist/archive/query/index.d.ts +29 -0
- package/dist/archive/query/index.js +63 -0
- package/dist/archive/query/index.js.map +1 -0
- package/dist/archive/query/lexical-search.d.ts +22 -0
- package/dist/archive/query/lexical-search.js +137 -0
- package/dist/archive/query/lexical-search.js.map +1 -0
- package/dist/archive/query/search-cache.d.ts +192 -0
- package/dist/archive/query/search-cache.js +1248 -0
- package/dist/archive/query/search-cache.js.map +1 -0
- package/dist/archive/search-index/index.d.ts +26 -0
- package/dist/archive/search-index/index.js +29 -0
- package/dist/archive/search-index/index.js.map +1 -0
- package/dist/archive/search-index/search-index.d.ts +26 -0
- package/dist/archive/search-index/search-index.js +555 -0
- package/dist/archive/search-index/search-index.js.map +1 -0
- package/dist/archive/search-index/search-tokenizer.d.ts +16 -0
- package/dist/archive/search-index/search-tokenizer.js +225 -0
- package/dist/archive/search-index/search-tokenizer.js.map +1 -0
- package/dist/common/cli-command.d.ts +4 -0
- package/dist/common/cli-command.js +7 -0
- package/dist/common/cli-command.js.map +1 -0
- package/dist/common/data-dir.d.ts +3 -0
- package/dist/common/data-dir.js +48 -0
- package/dist/common/data-dir.js.map +1 -0
- package/dist/common/language.d.ts +55 -0
- package/dist/common/language.js +208 -0
- package/dist/common/language.js.map +1 -0
- package/dist/common/llm-scope.d.ts +19 -0
- package/dist/common/llm-scope.js +31 -0
- package/dist/common/llm-scope.js.map +1 -0
- package/dist/common/logging.d.ts +22 -0
- package/dist/common/logging.js +141 -0
- package/dist/common/logging.js.map +1 -0
- package/dist/common/template.d.ts +8 -0
- package/dist/common/template.js +54 -0
- package/dist/common/template.js.map +1 -0
- package/dist/common/tinyld-language.d.ts +6 -0
- package/dist/common/tinyld-language.js +34 -0
- package/dist/common/tinyld-language.js.map +1 -0
- package/dist/common/wiki-graph-dir.d.ts +10 -0
- package/dist/common/wiki-graph-dir.js +41 -0
- package/dist/common/wiki-graph-dir.js.map +1 -0
- package/dist/common/wiki-graph-temp.d.ts +6 -0
- package/dist/common/wiki-graph-temp.js +21 -0
- package/dist/common/wiki-graph-temp.js.map +1 -0
- package/dist/common/wiki-graph-uri.d.ts +28 -0
- package/dist/common/wiki-graph-uri.js +171 -0
- package/dist/common/wiki-graph-uri.js.map +1 -0
- package/dist/context/index.d.ts +1 -0
- package/dist/context/index.js +13 -0
- package/dist/context/index.js.map +1 -0
- package/dist/context/task-context.d.ts +41 -0
- package/dist/context/task-context.js +111 -0
- package/dist/context/task-context.js.map +1 -0
- package/dist/document/database.d.ts +30 -0
- package/dist/document/database.js +273 -0
- package/dist/document/database.js.map +1 -0
- package/dist/document/document.d.ts +153 -0
- package/dist/document/document.js +615 -0
- package/dist/document/document.js.map +1 -0
- package/dist/document/fragments.d.ts +63 -0
- package/dist/document/fragments.js +371 -0
- package/dist/document/fragments.js.map +1 -0
- package/dist/document/index.d.ts +13 -0
- package/dist/document/index.js +62 -0
- package/dist/document/index.js.map +1 -0
- package/dist/document/schema.d.ts +8 -0
- package/dist/document/schema.js +472 -0
- package/dist/document/schema.js.map +1 -0
- package/dist/document/shared-state-database.d.ts +9 -0
- package/dist/document/shared-state-database.js +193 -0
- package/dist/document/shared-state-database.js.map +1 -0
- package/dist/document/stores.d.ts +203 -0
- package/dist/document/stores.js +1678 -0
- package/dist/document/stores.js.map +1 -0
- package/dist/document/text-streams.d.ts +86 -0
- package/dist/document/text-streams.js +515 -0
- package/dist/document/text-streams.js.map +1 -0
- package/dist/document/types.d.ts +148 -0
- package/dist/document/types.js +69 -0
- package/dist/document/types.js.map +1 -0
- package/dist/editor/clue.d.ts +27 -0
- package/dist/editor/clue.js +158 -0
- package/dist/editor/clue.js.map +1 -0
- package/dist/editor/compressor.d.ts +18 -0
- package/dist/editor/compressor.js +68 -0
- package/dist/editor/compressor.js.map +1 -0
- package/dist/editor/editor.d.ts +39 -0
- package/dist/editor/editor.js +253 -0
- package/dist/editor/editor.js.map +1 -0
- package/dist/editor/feedback.d.ts +16 -0
- package/dist/editor/feedback.js +104 -0
- package/dist/editor/feedback.js.map +1 -0
- package/dist/editor/index.d.ts +17 -0
- package/dist/editor/index.js +5 -0
- package/dist/editor/index.js.map +1 -0
- package/dist/editor/language-review.d.ts +14 -0
- package/dist/editor/language-review.js +35 -0
- package/dist/editor/language-review.js.map +1 -0
- package/dist/editor/log.d.ts +37 -0
- package/dist/editor/log.js +202 -0
- package/dist/editor/log.js.map +1 -0
- package/dist/editor/markup.d.ts +20 -0
- package/dist/editor/markup.js +294 -0
- package/dist/editor/markup.js.map +1 -0
- package/dist/editor/prompt-templates.d.ts +6 -0
- package/dist/editor/prompt-templates.js +11 -0
- package/dist/editor/prompt-templates.js.map +1 -0
- package/dist/editor/response.d.ts +5 -0
- package/dist/editor/response.js +31 -0
- package/dist/editor/response.js.map +1 -0
- package/dist/editor/review.d.ts +34 -0
- package/dist/editor/review.js +189 -0
- package/dist/editor/review.js.map +1 -0
- package/dist/editor/types.d.ts +31 -0
- package/dist/editor/types.js +21 -0
- package/dist/editor/types.js.map +1 -0
- package/dist/evidence-selection/anchor-resolver.d.ts +43 -0
- package/dist/evidence-selection/anchor-resolver.js +783 -0
- package/dist/evidence-selection/anchor-resolver.js.map +1 -0
- package/dist/evidence-selection/anchor-types.d.ts +27 -0
- package/dist/evidence-selection/anchor-types.js +1 -0
- package/dist/evidence-selection/anchor-types.js.map +1 -0
- package/dist/evidence-selection/index.d.ts +8 -0
- package/dist/evidence-selection/index.js +32 -0
- package/dist/evidence-selection/index.js.map +1 -0
- package/dist/evidence-selection/prompt.d.ts +18 -0
- package/dist/evidence-selection/prompt.js +54 -0
- package/dist/evidence-selection/prompt.js.map +1 -0
- package/dist/evidence-selection/quote-score.d.ts +29 -0
- package/dist/evidence-selection/quote-score.js +331 -0
- package/dist/evidence-selection/quote-score.js.map +1 -0
- package/dist/evidence-selection/selection-resolver.d.ts +19 -0
- package/dist/evidence-selection/selection-resolver.js +303 -0
- package/dist/evidence-selection/selection-resolver.js.map +1 -0
- package/dist/evidence-selection/text.d.ts +4 -0
- package/dist/evidence-selection/text.js +66 -0
- package/dist/evidence-selection/text.js.map +1 -0
- package/dist/evidence-selection/types.d.ts +36 -0
- package/dist/evidence-selection/types.js +1 -0
- package/dist/evidence-selection/types.js.map +1 -0
- package/dist/facade/app.d.ts +75 -0
- package/dist/facade/app.js +141 -0
- package/dist/facade/app.js.map +1 -0
- package/dist/facade/build-queue.d.ts +181 -0
- package/dist/facade/build-queue.js +1442 -0
- package/dist/facade/build-queue.js.map +1 -0
- package/dist/facade/chapter-build.d.ts +60 -0
- package/dist/facade/chapter-build.js +1020 -0
- package/dist/facade/chapter-build.js.map +1 -0
- package/dist/facade/chapter.d.ts +168 -0
- package/dist/facade/chapter.js +944 -0
- package/dist/facade/chapter.js.map +1 -0
- package/dist/facade/digest.d.ts +55 -0
- package/dist/facade/digest.js +168 -0
- package/dist/facade/digest.js.map +1 -0
- package/dist/facade/graph.d.ts +60 -0
- package/dist/facade/graph.js +203 -0
- package/dist/facade/graph.js.map +1 -0
- package/dist/facade/import.d.ts +49 -0
- package/dist/facade/import.js +262 -0
- package/dist/facade/import.js.map +1 -0
- package/dist/facade/index.d.ts +39 -0
- package/dist/facade/index.js +171 -0
- package/dist/facade/index.js.map +1 -0
- package/dist/facade/knowledge-graph-build.d.ts +75 -0
- package/dist/facade/knowledge-graph-build.js +897 -0
- package/dist/facade/knowledge-graph-build.js.map +1 -0
- package/dist/facade/llm-sampling.d.ts +11 -0
- package/dist/facade/llm-sampling.js +58 -0
- package/dist/facade/llm-sampling.js.map +1 -0
- package/dist/facade/types.d.ts +8 -0
- package/dist/facade/types.js +1 -0
- package/dist/facade/types.js.map +1 -0
- package/dist/facade/wiki-graph-archive.d.ts +41 -0
- package/dist/facade/wiki-graph-archive.js +130 -0
- package/dist/facade/wiki-graph-archive.js.map +1 -0
- package/dist/gc/files.d.ts +15 -0
- package/dist/gc/files.js +141 -0
- package/dist/gc/files.js.map +1 -0
- package/dist/gc/index.d.ts +2 -0
- package/dist/gc/index.js +5 -0
- package/dist/gc/index.js.map +1 -0
- package/dist/gc/lock.d.ts +3 -0
- package/dist/gc/lock.js +137 -0
- package/dist/gc/lock.js.map +1 -0
- package/dist/gc/runner.d.ts +9 -0
- package/dist/gc/runner.js +129 -0
- package/dist/gc/runner.js.map +1 -0
- package/dist/gc/tmp-gc.d.ts +5 -0
- package/dist/gc/tmp-gc.js +57 -0
- package/dist/gc/tmp-gc.js.map +1 -0
- package/dist/gc/types.d.ts +24 -0
- package/dist/gc/types.js +1 -0
- package/dist/gc/types.js.map +1 -0
- package/dist/gc.cjs +10041 -0
- package/dist/gc.cjs.map +1 -0
- package/dist/gc.d.cts +10 -0
- package/dist/gc.d.ts +2 -0
- package/dist/gc.js +5 -0
- package/dist/gc.js.map +1 -0
- package/dist/guaranteed/classifier.d.ts +10 -0
- package/dist/guaranteed/classifier.js +88 -0
- package/dist/guaranteed/classifier.js.map +1 -0
- package/dist/guaranteed/errors.d.ts +38 -0
- package/dist/guaranteed/errors.js +73 -0
- package/dist/guaranteed/errors.js.map +1 -0
- package/dist/guaranteed/index.d.ts +7 -0
- package/dist/guaranteed/index.js +21 -0
- package/dist/guaranteed/index.js.map +1 -0
- package/dist/guaranteed/request.d.ts +8 -0
- package/dist/guaranteed/request.js +206 -0
- package/dist/guaranteed/request.js.map +1 -0
- package/dist/guaranteed/response.d.ts +12 -0
- package/dist/guaranteed/response.js +98 -0
- package/dist/guaranteed/response.js.map +1 -0
- package/dist/guaranteed/types.d.ts +20 -0
- package/dist/guaranteed/types.js +1 -0
- package/dist/guaranteed/types.js.map +1 -0
- package/dist/index-B8NNnQ8P.d.ts +424 -0
- package/dist/index.cjs +34774 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +2462 -0
- package/dist/index.d.ts +79 -0
- package/dist/index.js +168 -0
- package/dist/index.js.map +1 -0
- package/dist/legacy-sdpub/upgrade.d.ts +7 -0
- package/dist/legacy-sdpub/upgrade.js +795 -0
- package/dist/legacy-sdpub/upgrade.js.map +1 -0
- package/dist/llm/cache.d.ts +13 -0
- package/dist/llm/cache.js +35 -0
- package/dist/llm/cache.js.map +1 -0
- package/dist/llm/client.d.ts +26 -0
- package/dist/llm/client.js +572 -0
- package/dist/llm/client.js.map +1 -0
- package/dist/llm/context.d.ts +22 -0
- package/dist/llm/context.js +78 -0
- package/dist/llm/context.js.map +1 -0
- package/dist/llm/errors.d.ts +7 -0
- package/dist/llm/errors.js +12 -0
- package/dist/llm/errors.js.map +1 -0
- package/dist/llm/index.d.ts +7 -0
- package/dist/llm/index.js +17 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/llm/request-log.d.ts +9 -0
- package/dist/llm/request-log.js +35 -0
- package/dist/llm/request-log.js.map +1 -0
- package/dist/llm/sampling.d.ts +11 -0
- package/dist/llm/sampling.js +67 -0
- package/dist/llm/sampling.js.map +1 -0
- package/dist/llm/types.d.ts +50 -0
- package/dist/llm/types.js +1 -0
- package/dist/llm/types.js.map +1 -0
- package/dist/output/epub/archive.d.ts +9 -0
- package/dist/output/epub/archive.js +81 -0
- package/dist/output/epub/archive.js.map +1 -0
- package/dist/output/epub/book.d.ts +15 -0
- package/dist/output/epub/book.js +76 -0
- package/dist/output/epub/book.js.map +1 -0
- package/dist/output/epub/content.d.ts +9 -0
- package/dist/output/epub/content.js +35 -0
- package/dist/output/epub/content.js.map +1 -0
- package/dist/output/epub/index.d.ts +20 -0
- package/dist/output/epub/index.js +14 -0
- package/dist/output/epub/index.js.map +1 -0
- package/dist/output/epub/model.d.ts +24 -0
- package/dist/output/epub/model.js +1 -0
- package/dist/output/epub/model.js.map +1 -0
- package/dist/output/epub/navigation.d.ts +10 -0
- package/dist/output/epub/navigation.js +39 -0
- package/dist/output/epub/navigation.js.map +1 -0
- package/dist/output/epub/package.d.ts +17 -0
- package/dist/output/epub/package.js +29 -0
- package/dist/output/epub/package.js.map +1 -0
- package/dist/output/epub/shared.d.ts +4 -0
- package/dist/output/epub/shared.js +12 -0
- package/dist/output/epub/shared.js.map +1 -0
- package/dist/output/epub/templates.d.ts +35 -0
- package/dist/output/epub/templates.js +26 -0
- package/dist/output/epub/templates.js.map +1 -0
- package/dist/output/index.d.ts +14 -0
- package/dist/output/index.js +11 -0
- package/dist/output/index.js.map +1 -0
- package/dist/output/plain-text.d.ts +18 -0
- package/dist/output/plain-text.js +56 -0
- package/dist/output/plain-text.js.map +1 -0
- package/dist/progress/index.d.ts +3 -0
- package/dist/progress/index.js +14 -0
- package/dist/progress/index.js.map +1 -0
- package/dist/progress/reporter.d.ts +10 -0
- package/dist/progress/reporter.js +79 -0
- package/dist/progress/reporter.js.map +1 -0
- package/dist/progress/tracker.d.ts +37 -0
- package/dist/progress/tracker.js +119 -0
- package/dist/progress/tracker.js.map +1 -0
- package/dist/progress/types.d.ts +28 -0
- package/dist/progress/types.js +1 -0
- package/dist/progress/types.js.map +1 -0
- package/dist/reader/attention/attention.d.ts +39 -0
- package/dist/reader/attention/attention.js +123 -0
- package/dist/reader/attention/attention.js.map +1 -0
- package/dist/reader/attention/index.d.ts +9 -0
- package/dist/reader/attention/index.js +5 -0
- package/dist/reader/attention/index.js.map +1 -0
- package/dist/reader/attention/wave-reflection.d.ts +21 -0
- package/dist/reader/attention/wave-reflection.js +153 -0
- package/dist/reader/attention/wave-reflection.js.map +1 -0
- package/dist/reader/attention/working-memory.d.ts +28 -0
- package/dist/reader/attention/working-memory.js +62 -0
- package/dist/reader/attention/working-memory.js.map +1 -0
- package/dist/reader/chunk-batch/extract.d.ts +13 -0
- package/dist/reader/chunk-batch/extract.js +14 -0
- package/dist/reader/chunk-batch/extract.js.map +1 -0
- package/dist/reader/chunk-batch/extractor.d.ts +17 -0
- package/dist/reader/chunk-batch/extractor.js +337 -0
- package/dist/reader/chunk-batch/extractor.js.map +1 -0
- package/dist/reader/chunk-batch/fragment-projection.d.ts +34 -0
- package/dist/reader/chunk-batch/fragment-projection.js +94 -0
- package/dist/reader/chunk-batch/fragment-projection.js.map +1 -0
- package/dist/reader/chunk-batch/index.d.ts +12 -0
- package/dist/reader/chunk-batch/index.js +13 -0
- package/dist/reader/chunk-batch/index.js.map +1 -0
- package/dist/reader/chunk-batch/language.d.ts +9 -0
- package/dist/reader/chunk-batch/language.js +23 -0
- package/dist/reader/chunk-batch/language.js.map +1 -0
- package/dist/reader/chunk-batch/parser.d.ts +94 -0
- package/dist/reader/chunk-batch/parser.js +640 -0
- package/dist/reader/chunk-batch/parser.js.map +1 -0
- package/dist/reader/chunk-batch/prompt-templates.d.ts +6 -0
- package/dist/reader/chunk-batch/prompt-templates.js +11 -0
- package/dist/reader/chunk-batch/prompt-templates.js.map +1 -0
- package/dist/reader/chunk-batch/types.d.ts +85 -0
- package/dist/reader/chunk-batch/types.js +1 -0
- package/dist/reader/chunk-batch/types.js.map +1 -0
- package/dist/reader/index.d.ts +13 -0
- package/dist/reader/index.js +7 -0
- package/dist/reader/index.js.map +1 -0
- package/dist/reader/reader.d.ts +37 -0
- package/dist/reader/reader.js +82 -0
- package/dist/reader/reader.js.map +1 -0
- package/dist/reader/segment/index.d.ts +2 -0
- package/dist/reader/segment/index.js +5 -0
- package/dist/reader/segment/index.js.map +1 -0
- package/dist/reader/segment/intl-segmenter.d.ts +5 -0
- package/dist/reader/segment/intl-segmenter.js +102 -0
- package/dist/reader/segment/intl-segmenter.js.map +1 -0
- package/dist/reader/segment/segment.d.ts +5 -0
- package/dist/reader/segment/segment.js +9 -0
- package/dist/reader/segment/segment.js.map +1 -0
- package/dist/reader/segment/types.d.ts +14 -0
- package/dist/reader/segment/types.js +1 -0
- package/dist/reader/segment/types.js.map +1 -0
- package/dist/reader/types.d.ts +29 -0
- package/dist/reader/types.js +1 -0
- package/dist/reader/types.js.map +1 -0
- package/dist/serial.d.ts +89 -0
- package/dist/serial.js +476 -0
- package/dist/serial.js.map +1 -0
- package/dist/source/adapter.d.ts +15 -0
- package/dist/source/adapter.js +1 -0
- package/dist/source/adapter.js.map +1 -0
- package/dist/source/epub/archive.d.ts +27 -0
- package/dist/source/epub/archive.js +189 -0
- package/dist/source/epub/archive.js.map +1 -0
- package/dist/source/epub/content.d.ts +22 -0
- package/dist/source/epub/content.js +183 -0
- package/dist/source/epub/content.js.map +1 -0
- package/dist/source/epub/document.d.ts +55 -0
- package/dist/source/epub/document.js +179 -0
- package/dist/source/epub/document.js.map +1 -0
- package/dist/source/epub/index.d.ts +10 -0
- package/dist/source/epub/index.js +6 -0
- package/dist/source/epub/index.js.map +1 -0
- package/dist/source/epub/navigation.d.ts +16 -0
- package/dist/source/epub/navigation.js +215 -0
- package/dist/source/epub/navigation.js.map +1 -0
- package/dist/source/epub/package.d.ts +33 -0
- package/dist/source/epub/package.js +237 -0
- package/dist/source/epub/package.js.map +1 -0
- package/dist/source/epub/xml.d.ts +16 -0
- package/dist/source/epub/xml.js +111 -0
- package/dist/source/epub/xml.js.map +1 -0
- package/dist/source/index.d.ts +12 -0
- package/dist/source/index.js +32 -0
- package/dist/source/index.js.map +1 -0
- package/dist/source/meta.d.ts +30 -0
- package/dist/source/meta.js +22 -0
- package/dist/source/meta.js.map +1 -0
- package/dist/source/plain-text.d.ts +16 -0
- package/dist/source/plain-text.js +86 -0
- package/dist/source/plain-text.js.map +1 -0
- package/dist/source/toc.d.ts +16 -0
- package/dist/source/toc.js +17 -0
- package/dist/source/toc.js.map +1 -0
- package/dist/source/types.d.ts +16 -0
- package/dist/source/types.js +1 -0
- package/dist/source/types.js.map +1 -0
- package/dist/topology/grouping.d.ts +15 -0
- package/dist/topology/grouping.js +18 -0
- package/dist/topology/grouping.js.map +1 -0
- package/dist/topology/index.d.ts +21 -0
- package/dist/topology/index.js +5 -0
- package/dist/topology/index.js.map +1 -0
- package/dist/topology/resource-segmentation.d.ts +13 -0
- package/dist/topology/resource-segmentation.js +111 -0
- package/dist/topology/resource-segmentation.js.map +1 -0
- package/dist/topology/segment-incision.d.ts +18 -0
- package/dist/topology/segment-incision.js +197 -0
- package/dist/topology/segment-incision.js.map +1 -0
- package/dist/topology/snake-detector.d.ts +13 -0
- package/dist/topology/snake-detector.js +520 -0
- package/dist/topology/snake-detector.js.map +1 -0
- package/dist/topology/snake-graph-builder.d.ts +14 -0
- package/dist/topology/snake-graph-builder.js +76 -0
- package/dist/topology/snake-graph-builder.js.map +1 -0
- package/dist/topology/topology.d.ts +29 -0
- package/dist/topology/topology.js +348 -0
- package/dist/topology/topology.js.map +1 -0
- package/dist/topology/weights.d.ts +10 -0
- package/dist/topology/weights.js +84 -0
- package/dist/topology/weights.js.map +1 -0
- package/dist/types-FVIqiLC9.d.cts +24 -0
- package/dist/utils/async-semaphore.d.ts +7 -0
- package/dist/utils/async-semaphore.js +40 -0
- package/dist/utils/async-semaphore.js.map +1 -0
- package/dist/utils/enum.d.ts +5 -0
- package/dist/utils/enum.js +18 -0
- package/dist/utils/enum.js.map +1 -0
- package/dist/utils/hash.d.ts +3 -0
- package/dist/utils/hash.js +132 -0
- package/dist/utils/hash.js.map +1 -0
- package/dist/utils/node-error.d.ts +4 -0
- package/dist/utils/node-error.js +59 -0
- package/dist/utils/node-error.js.map +1 -0
- package/dist/wikg/archive-uri.d.ts +1 -0
- package/dist/wikg/archive-uri.js +37 -0
- package/dist/wikg/archive-uri.js.map +1 -0
- package/dist/wikg/archive.d.ts +28 -0
- package/dist/wikg/archive.js +496 -0
- package/dist/wikg/archive.js.map +1 -0
- package/dist/wikg/index.d.ts +31 -0
- package/dist/wikg/index.js +60 -0
- package/dist/wikg/index.js.map +1 -0
- package/dist/wikg/wikg-coordinator.d.ts +45 -0
- package/dist/wikg/wikg-coordinator.js +1687 -0
- package/dist/wikg/wikg-coordinator.js.map +1 -0
- package/dist/wikg/wiki-graph-archive-file.d.ts +42 -0
- package/dist/wikg/wiki-graph-archive-file.js +78 -0
- package/dist/wikg/wiki-graph-archive-file.js.map +1 -0
- package/dist/wikilink/index.d.ts +10 -0
- package/dist/wikilink/index.js +7 -0
- package/dist/wikilink/index.js.map +1 -0
- package/dist/wikilink/relation-discovery.d.ts +31 -0
- package/dist/wikilink/relation-discovery.js +477 -0
- package/dist/wikilink/relation-discovery.js.map +1 -0
- package/dist/wikilink/types.d.ts +23 -0
- package/dist/wikilink/types.js +1 -0
- package/dist/wikilink/types.js.map +1 -0
- package/dist/wikilink/window.d.ts +7 -0
- package/dist/wikilink/window.js +53 -0
- package/dist/wikilink/window.js.map +1 -0
- package/dist/wikimatch/enrichment.d.ts +10 -0
- package/dist/wikimatch/enrichment.js +55 -0
- package/dist/wikimatch/enrichment.js.map +1 -0
- package/dist/wikimatch/index.d.ts +16 -0
- package/dist/wikimatch/index.js +66 -0
- package/dist/wikimatch/index.js.map +1 -0
- package/dist/wikimatch/option-narrowing.d.ts +17 -0
- package/dist/wikimatch/option-narrowing.js +208 -0
- package/dist/wikimatch/option-narrowing.js.map +1 -0
- package/dist/wikimatch/options.d.ts +14 -0
- package/dist/wikimatch/options.js +155 -0
- package/dist/wikimatch/options.js.map +1 -0
- package/dist/wikimatch/policy-judge.d.ts +17 -0
- package/dist/wikimatch/policy-judge.js +430 -0
- package/dist/wikimatch/policy-judge.js.map +1 -0
- package/dist/wikimatch/range-suppression.d.ts +9 -0
- package/dist/wikimatch/range-suppression.js +27 -0
- package/dist/wikimatch/range-suppression.js.map +1 -0
- package/dist/wikimatch/surface-screening.d.ts +16 -0
- package/dist/wikimatch/surface-screening.js +168 -0
- package/dist/wikimatch/surface-screening.js.map +1 -0
- package/dist/wikimatch/surface-window.d.ts +6 -0
- package/dist/wikimatch/surface-window.js +44 -0
- package/dist/wikimatch/surface-window.js.map +1 -0
- package/dist/wikimatch/types.d.ts +151 -0
- package/dist/wikimatch/types.js +1 -0
- package/dist/wikimatch/types.js.map +1 -0
- package/dist/wikimatch/wikispine.d.ts +43 -0
- package/dist/wikimatch/wikispine.js +399 -0
- package/dist/wikimatch/wikispine.js.map +1 -0
- package/dist/wikimatch/window.d.ts +6 -0
- package/dist/wikimatch/window.js +83 -0
- package/dist/wikimatch/window.js.map +1 -0
- package/dist/wikimatch/words.d.ts +16 -0
- package/dist/wikimatch/words.js +66 -0
- package/dist/wikimatch/words.js.map +1 -0
- package/dist/wikipage/cache.d.ts +18 -0
- package/dist/wikipage/cache.js +404 -0
- package/dist/wikipage/cache.js.map +1 -0
- package/dist/wikipage/fetch-log.d.ts +17 -0
- package/dist/wikipage/fetch-log.js +143 -0
- package/dist/wikipage/fetch-log.js.map +1 -0
- package/dist/wikipage/index.d.ts +14 -0
- package/dist/wikipage/index.js +17 -0
- package/dist/wikipage/index.js.map +1 -0
- package/dist/wikipage/normalizer.d.ts +14 -0
- package/dist/wikipage/normalizer.js +147 -0
- package/dist/wikipage/normalizer.js.map +1 -0
- package/dist/wikipage/rate-limiter.d.ts +13 -0
- package/dist/wikipage/rate-limiter.js +84 -0
- package/dist/wikipage/rate-limiter.js.map +1 -0
- package/dist/wikipage/resolver.d.ts +26 -0
- package/dist/wikipage/resolver.js +325 -0
- package/dist/wikipage/resolver.js.map +1 -0
- package/dist/wikipage/types.d.ts +96 -0
- package/dist/wikipage/types.js +1 -0
- package/dist/wikipage/types.js.map +1 -0
- package/dist/wikipage/wikimedia-client.d.ts +48 -0
- package/dist/wikipage/wikimedia-client.js +397 -0
- package/dist/wikipage/wikimedia-client.js.map +1 -0
- package/dist/worker-BgQ0Xl8T.d.cts +181 -0
- package/dist/worker.cjs +5259 -0
- package/dist/worker.cjs.map +1 -0
- package/dist/worker.d.cts +2 -0
- package/dist/worker.d.ts +2 -0
- package/dist/worker.js +5 -0
- package/dist/worker.js.map +1 -0
- package/package.json +78 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/common/wiki-graph-uri.ts"],"sourcesContent":["import { isAbsolute, relative, resolve } from \"path\";\nimport { homedir } from \"os\";\n\nexport const WIKI_GRAPH_URI_PREFIX = \"wikg://\";\nexport const WIKI_GRAPH_JOB_URI_PREFIX = \"wikg://local/job\";\nexport const WIKI_GRAPH_ARCHIVE_EXTENSION = \".wikg\";\n\nexport interface LocatedWikiGraphUri {\n readonly archivePath?: string;\n readonly objectUri?: string;\n}\n\nexport function isWikiGraphUri(value: string | undefined): value is string {\n return isWikiGraphUriPrefix(value);\n}\n\nexport function isWikiGraphJobUri(value: string | undefined): value is string {\n return isWikiGraphLocalJobUri(value);\n}\n\nexport function parseLocatedWikiGraphUri(uri: string): LocatedWikiGraphUri {\n const prefix = getWikiGraphUriPrefix(uri);\n\n if (prefix === undefined) {\n throw new Error(formatWikiGraphUriExpectedError(uri));\n }\n\n const body = uri.slice(prefix.length);\n const split = body.split(\"#\", 2);\n const path = split[0] ?? \"\";\n const hash = split[1] ?? \"\";\n const parts = path.split(\"/\");\n const archiveIndex = parts.findIndex((part) =>\n part.endsWith(WIKI_GRAPH_ARCHIVE_EXTENSION),\n );\n\n if (archiveIndex < 0) {\n return { objectUri: uri };\n }\n\n const archivePath = parts.slice(0, archiveIndex + 1).join(\"/\");\n const objectPath = parts.slice(archiveIndex + 1).join(\"/\");\n\n if (archivePath === \"\") {\n throw new Error(`Invalid Wiki Graph archive URI: ${uri}`);\n }\n\n return {\n archivePath: resolveArchivePath(archivePath),\n ...(objectPath === \"\"\n ? {}\n : {\n objectUri: formatWikiGraphObjectUri(\n objectPath,\n hash === \"\" ? undefined : hash,\n ),\n }),\n };\n}\n\nfunction resolveArchivePath(archivePath: string): string {\n if (archivePath.startsWith(\"~/\")) {\n return resolve(homedir(), archivePath.slice(2));\n }\n\n return resolve(archivePath);\n}\n\nexport function formatLocatedWikiGraphUri(\n archivePath: string,\n objectUri?: string,\n): string {\n const uriArchivePath = archivePath.replace(/\\\\/gu, \"/\");\n\n if (objectUri === undefined || objectUri === WIKI_GRAPH_URI_PREFIX) {\n return `${WIKI_GRAPH_URI_PREFIX}${uriArchivePath}`;\n }\n\n return `${WIKI_GRAPH_URI_PREFIX}${uriArchivePath}/${stripWikiGraphUriPrefix(\n objectUri,\n )}`;\n}\n\nexport function formatWikiGraphCommandUri(\n archivePath: string,\n objectUri?: string,\n cwd = process.cwd(),\n): string {\n return formatLocatedWikiGraphUri(\n formatCommandArchivePath(archivePath, cwd),\n objectUri,\n );\n}\n\nfunction formatCommandArchivePath(archivePath: string, cwd: string): string {\n const resolvedCwd = resolve(cwd);\n const resolvedArchivePath = isAbsolute(archivePath)\n ? resolve(archivePath)\n : resolve(resolvedCwd, archivePath);\n const relativeArchivePath = relative(resolvedCwd, resolvedArchivePath);\n\n if (\n relativeArchivePath !== \"\" &&\n !relativeArchivePath.startsWith(\"..\") &&\n !isAbsolute(relativeArchivePath)\n ) {\n return relativeArchivePath;\n }\n\n return resolvedArchivePath;\n}\n\nexport function formatLocatedChapterUri(\n archivePath: string,\n chapterId: number,\n): string {\n return formatLocatedWikiGraphUri(\n archivePath,\n formatWikiGraphObjectUri(`chapter/${chapterId}`),\n );\n}\n\nexport function formatLocatedChapterResourceUri(\n archivePath: string,\n chapterId: number,\n resource: \"source\" | \"summary\" | \"title\",\n): string {\n return formatLocatedWikiGraphUri(\n archivePath,\n formatWikiGraphObjectUri(`chapter/${chapterId}/${resource}`),\n );\n}\n\nexport function formatLocatedChapterSourceCollectionUri(\n archivePath: string,\n chapterId: number,\n): string {\n return formatLocatedWikiGraphUri(\n archivePath,\n formatWikiGraphObjectUri(`chapter/${chapterId}/source`),\n );\n}\n\nexport function formatWikiGraphObjectUri(path: string, hash?: string): string {\n const normalizedPath = path.replace(/^\\/+/u, \"\").replace(/\\/+$/u, \"\");\n\n return `${WIKI_GRAPH_URI_PREFIX}${normalizedPath}${\n hash === undefined ? \"\" : `#${hash}`\n }`;\n}\n\nexport function requireArchiveUri(uri: string): string {\n const parsed = parseLocatedWikiGraphUri(uri);\n\n if (parsed.archivePath === undefined || parsed.objectUri !== undefined) {\n throw new Error(\n `${formatWikiGraphUriExpectedError(uri)} Expected a .wikg archive locator.`,\n );\n }\n\n return parsed.archivePath;\n}\n\nexport function requireLocatedObjectUri(uri: string): {\n readonly archivePath: string;\n readonly objectUri: string;\n} {\n const parsed = parseLocatedWikiGraphUri(uri);\n\n if (parsed.archivePath === undefined || parsed.objectUri === undefined) {\n throw new Error(\n `${formatWikiGraphUriExpectedError(uri)} Expected an object URI with a .wikg archive locator.`,\n );\n }\n\n return {\n archivePath: parsed.archivePath,\n objectUri: parsed.objectUri,\n };\n}\n\nexport function requireLocatedObjectOrArchiveUri(uri: string): {\n readonly archivePath: string;\n readonly objectUri?: string;\n} {\n const parsed = parseLocatedWikiGraphUri(uri);\n\n if (parsed.archivePath === undefined) {\n throw new Error(formatWikiGraphUriExpectedError(uri));\n }\n\n return {\n archivePath: parsed.archivePath,\n ...(parsed.objectUri === undefined ? {} : { objectUri: parsed.objectUri }),\n };\n}\n\nexport function formatWikiGraphUriExpectedError(value: string): string {\n const example =\n value.endsWith(WIKI_GRAPH_ARCHIVE_EXTENSION) && value.startsWith(\"/\")\n ? `${WIKI_GRAPH_URI_PREFIX}${value}`\n : \"wikg:///absolute/path/book.wikg\";\n\n return [\n `Expected a Wiki Graph URI with a .wikg archive locator: ${value}`,\n `Example: ${example}`,\n \"See: wg help uri\",\n ].join(\"\\n\");\n}\n\nfunction stripWikiGraphUriPrefix(uri: string): string {\n const prefix = getWikiGraphUriPrefix(uri);\n\n if (prefix === undefined) {\n throw new Error(`Expected a Wiki Graph object URI: ${uri}`);\n }\n\n return uri.slice(prefix.length).replace(/^\\/+/u, \"\");\n}\n\nfunction getWikiGraphUriPrefix(uri: string): string | undefined {\n if (uri.startsWith(WIKI_GRAPH_URI_PREFIX)) {\n return WIKI_GRAPH_URI_PREFIX;\n }\n\n return undefined;\n}\n\nfunction isWikiGraphUriPrefix(value: string | undefined): value is string {\n return value?.startsWith(WIKI_GRAPH_URI_PREFIX) === true;\n}\n\nfunction isWikiGraphLocalJobUri(value: string | undefined): boolean {\n return (\n value === WIKI_GRAPH_JOB_URI_PREFIX ||\n value?.startsWith(`${WIKI_GRAPH_JOB_URI_PREFIX}/`) === true\n );\n}\n"],"mappings":"AAAA,SAAS,YAAY,UAAU,eAAe;AAC9C,SAAS,eAAe;AAEjB,MAAM,wBAAwB;AAC9B,MAAM,4BAA4B;AAClC,MAAM,+BAA+B;AAOrC,SAAS,eAAe,OAA4C;AACzE,SAAO,qBAAqB,KAAK;AACnC;AAEO,SAAS,kBAAkB,OAA4C;AAC5E,SAAO,uBAAuB,KAAK;AACrC;AAEO,SAAS,yBAAyB,KAAkC;AACzE,QAAM,SAAS,sBAAsB,GAAG;AAExC,MAAI,WAAW,QAAW;AACxB,UAAM,IAAI,MAAM,gCAAgC,GAAG,CAAC;AAAA,EACtD;AAEA,QAAM,OAAO,IAAI,MAAM,OAAO,MAAM;AACpC,QAAM,QAAQ,KAAK,MAAM,KAAK,CAAC;AAC/B,QAAM,OAAO,MAAM,CAAC,KAAK;AACzB,QAAM,OAAO,MAAM,CAAC,KAAK;AACzB,QAAM,QAAQ,KAAK,MAAM,GAAG;AAC5B,QAAM,eAAe,MAAM;AAAA,IAAU,CAAC,SACpC,KAAK,SAAS,4BAA4B;AAAA,EAC5C;AAEA,MAAI,eAAe,GAAG;AACpB,WAAO,EAAE,WAAW,IAAI;AAAA,EAC1B;AAEA,QAAM,cAAc,MAAM,MAAM,GAAG,eAAe,CAAC,EAAE,KAAK,GAAG;AAC7D,QAAM,aAAa,MAAM,MAAM,eAAe,CAAC,EAAE,KAAK,GAAG;AAEzD,MAAI,gBAAgB,IAAI;AACtB,UAAM,IAAI,MAAM,mCAAmC,GAAG,EAAE;AAAA,EAC1D;AAEA,SAAO;AAAA,IACL,aAAa,mBAAmB,WAAW;AAAA,IAC3C,GAAI,eAAe,KACf,CAAC,IACD;AAAA,MACE,WAAW;AAAA,QACT;AAAA,QACA,SAAS,KAAK,SAAY;AAAA,MAC5B;AAAA,IACF;AAAA,EACN;AACF;AAEA,SAAS,mBAAmB,aAA6B;AACvD,MAAI,YAAY,WAAW,IAAI,GAAG;AAChC,WAAO,QAAQ,QAAQ,GAAG,YAAY,MAAM,CAAC,CAAC;AAAA,EAChD;AAEA,SAAO,QAAQ,WAAW;AAC5B;AAEO,SAAS,0BACd,aACA,WACQ;AACR,QAAM,iBAAiB,YAAY,QAAQ,QAAQ,GAAG;AAEtD,MAAI,cAAc,UAAa,cAAc,uBAAuB;AAClE,WAAO,GAAG,qBAAqB,GAAG,cAAc;AAAA,EAClD;AAEA,SAAO,GAAG,qBAAqB,GAAG,cAAc,IAAI;AAAA,IAClD;AAAA,EACF,CAAC;AACH;AAEO,SAAS,0BACd,aACA,WACA,MAAM,QAAQ,IAAI,GACV;AACR,SAAO;AAAA,IACL,yBAAyB,aAAa,GAAG;AAAA,IACzC;AAAA,EACF;AACF;AAEA,SAAS,yBAAyB,aAAqB,KAAqB;AAC1E,QAAM,cAAc,QAAQ,GAAG;AAC/B,QAAM,sBAAsB,WAAW,WAAW,IAC9C,QAAQ,WAAW,IACnB,QAAQ,aAAa,WAAW;AACpC,QAAM,sBAAsB,SAAS,aAAa,mBAAmB;AAErE,MACE,wBAAwB,MACxB,CAAC,oBAAoB,WAAW,IAAI,KACpC,CAAC,WAAW,mBAAmB,GAC/B;AACA,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEO,SAAS,wBACd,aACA,WACQ;AACR,SAAO;AAAA,IACL;AAAA,IACA,yBAAyB,WAAW,SAAS,EAAE;AAAA,EACjD;AACF;AAEO,SAAS,gCACd,aACA,WACA,UACQ;AACR,SAAO;AAAA,IACL;AAAA,IACA,yBAAyB,WAAW,SAAS,IAAI,QAAQ,EAAE;AAAA,EAC7D;AACF;AAEO,SAAS,wCACd,aACA,WACQ;AACR,SAAO;AAAA,IACL;AAAA,IACA,yBAAyB,WAAW,SAAS,SAAS;AAAA,EACxD;AACF;AAEO,SAAS,yBAAyB,MAAc,MAAuB;AAC5E,QAAM,iBAAiB,KAAK,QAAQ,SAAS,EAAE,EAAE,QAAQ,SAAS,EAAE;AAEpE,SAAO,GAAG,qBAAqB,GAAG,cAAc,GAC9C,SAAS,SAAY,KAAK,IAAI,IAAI,EACpC;AACF;AAEO,SAAS,kBAAkB,KAAqB;AACrD,QAAM,SAAS,yBAAyB,GAAG;AAE3C,MAAI,OAAO,gBAAgB,UAAa,OAAO,cAAc,QAAW;AACtE,UAAM,IAAI;AAAA,MACR,GAAG,gCAAgC,GAAG,CAAC;AAAA,IACzC;AAAA,EACF;AAEA,SAAO,OAAO;AAChB;AAEO,SAAS,wBAAwB,KAGtC;AACA,QAAM,SAAS,yBAAyB,GAAG;AAE3C,MAAI,OAAO,gBAAgB,UAAa,OAAO,cAAc,QAAW;AACtE,UAAM,IAAI;AAAA,MACR,GAAG,gCAAgC,GAAG,CAAC;AAAA,IACzC;AAAA,EACF;AAEA,SAAO;AAAA,IACL,aAAa,OAAO;AAAA,IACpB,WAAW,OAAO;AAAA,EACpB;AACF;AAEO,SAAS,iCAAiC,KAG/C;AACA,QAAM,SAAS,yBAAyB,GAAG;AAE3C,MAAI,OAAO,gBAAgB,QAAW;AACpC,UAAM,IAAI,MAAM,gCAAgC,GAAG,CAAC;AAAA,EACtD;AAEA,SAAO;AAAA,IACL,aAAa,OAAO;AAAA,IACpB,GAAI,OAAO,cAAc,SAAY,CAAC,IAAI,EAAE,WAAW,OAAO,UAAU;AAAA,EAC1E;AACF;AAEO,SAAS,gCAAgC,OAAuB;AACrE,QAAM,UACJ,MAAM,SAAS,4BAA4B,KAAK,MAAM,WAAW,GAAG,IAChE,GAAG,qBAAqB,GAAG,KAAK,KAChC;AAEN,SAAO;AAAA,IACL,2DAA2D,KAAK;AAAA,IAChE,YAAY,OAAO;AAAA,IACnB;AAAA,EACF,EAAE,KAAK,IAAI;AACb;AAEA,SAAS,wBAAwB,KAAqB;AACpD,QAAM,SAAS,sBAAsB,GAAG;AAExC,MAAI,WAAW,QAAW;AACxB,UAAM,IAAI,MAAM,qCAAqC,GAAG,EAAE;AAAA,EAC5D;AAEA,SAAO,IAAI,MAAM,OAAO,MAAM,EAAE,QAAQ,SAAS,EAAE;AACrD;AAEA,SAAS,sBAAsB,KAAiC;AAC9D,MAAI,IAAI,WAAW,qBAAqB,GAAG;AACzC,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEA,SAAS,qBAAqB,OAA4C;AACxE,SAAO,OAAO,WAAW,qBAAqB,MAAM;AACtD;AAEA,SAAS,uBAAuB,OAAoC;AAClE,SACE,UAAU,6BACV,OAAO,WAAW,GAAG,yBAAyB,GAAG,MAAM;AAE3D;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { WIKI_GRAPH_CONTEXT_VERSION, WikiGraphTask, WikiGraphTaskContext, WikiGraphTaskContextOptions, WikiGraphTaskIdentity, WikiGraphTaskType, createWikiGraphTaskId } from './task-context.js';
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createWikiGraphTaskId,
|
|
3
|
+
WikiGraphTask,
|
|
4
|
+
WikiGraphTaskContext,
|
|
5
|
+
WIKI_GRAPH_CONTEXT_VERSION
|
|
6
|
+
} from "./task-context.js";
|
|
7
|
+
export {
|
|
8
|
+
WIKI_GRAPH_CONTEXT_VERSION,
|
|
9
|
+
WikiGraphTask,
|
|
10
|
+
WikiGraphTaskContext,
|
|
11
|
+
createWikiGraphTaskId
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/context/index.ts"],"sourcesContent":["export {\n createWikiGraphTaskId,\n WikiGraphTask,\n WikiGraphTaskContext,\n WIKI_GRAPH_CONTEXT_VERSION,\n} from \"./task-context.js\";\nexport type {\n WikiGraphTaskContextOptions,\n WikiGraphTaskIdentity,\n WikiGraphTaskType,\n} from \"./task-context.js\";\n"],"mappings":"AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;","names":[]}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
declare const WIKI_GRAPH_CONTEXT_VERSION = 1;
|
|
2
|
+
declare const TASK_STATUS_VERSION = 1;
|
|
3
|
+
type WikiGraphTaskType = "source-to-graph" | "source-graph-to-summary";
|
|
4
|
+
interface WikiGraphTaskIdentity {
|
|
5
|
+
readonly normalizedSource: string;
|
|
6
|
+
readonly parameters: unknown;
|
|
7
|
+
readonly taskType: WikiGraphTaskType;
|
|
8
|
+
readonly version?: number;
|
|
9
|
+
}
|
|
10
|
+
interface WikiGraphTaskContextOptions {
|
|
11
|
+
readonly rootDirPath: string;
|
|
12
|
+
}
|
|
13
|
+
interface WikiGraphTaskRun<T> {
|
|
14
|
+
readonly task: WikiGraphTask;
|
|
15
|
+
run(operation: (task: WikiGraphTask) => Promise<T> | T): Promise<T>;
|
|
16
|
+
}
|
|
17
|
+
interface TaskStatus {
|
|
18
|
+
readonly completedAt?: string | undefined;
|
|
19
|
+
readonly startedAt: string;
|
|
20
|
+
readonly status: "running" | "succeeded";
|
|
21
|
+
readonly version: typeof TASK_STATUS_VERSION;
|
|
22
|
+
}
|
|
23
|
+
declare class WikiGraphTaskContext {
|
|
24
|
+
#private;
|
|
25
|
+
constructor(options: WikiGraphTaskContextOptions);
|
|
26
|
+
createTask(identity: WikiGraphTaskIdentity): WikiGraphTask;
|
|
27
|
+
runTask<T>(identity: WikiGraphTaskIdentity, operation: (task: WikiGraphTask) => Promise<T> | T): Promise<T>;
|
|
28
|
+
}
|
|
29
|
+
declare class WikiGraphTask {
|
|
30
|
+
#private;
|
|
31
|
+
constructor(id: string, path: string);
|
|
32
|
+
get artifactDirPath(): string;
|
|
33
|
+
get id(): string;
|
|
34
|
+
get path(): string;
|
|
35
|
+
readStatus(): Promise<TaskStatus | undefined>;
|
|
36
|
+
run<T>(operation: (task: WikiGraphTask) => Promise<T> | T): Promise<T>;
|
|
37
|
+
remove(): Promise<void>;
|
|
38
|
+
}
|
|
39
|
+
declare function createWikiGraphTaskId(identity: WikiGraphTaskIdentity): string;
|
|
40
|
+
|
|
41
|
+
export { WIKI_GRAPH_CONTEXT_VERSION, WikiGraphTask, WikiGraphTaskContext, type WikiGraphTaskContextOptions, type WikiGraphTaskIdentity, type WikiGraphTaskRun, type WikiGraphTaskType, createWikiGraphTaskId };
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { mkdir, readFile, rm, writeFile } from "fs/promises";
|
|
2
|
+
import { join, resolve } from "path";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
import { createHash } from "../utils/hash.js";
|
|
5
|
+
import { isNodeError } from "../utils/node-error.js";
|
|
6
|
+
const WIKI_GRAPH_CONTEXT_VERSION = 1;
|
|
7
|
+
const TASK_STATUS_VERSION = 1;
|
|
8
|
+
const taskStatusSchema = z.object({
|
|
9
|
+
completedAt: z.string().optional(),
|
|
10
|
+
startedAt: z.string(),
|
|
11
|
+
status: z.enum(["running", "succeeded"]),
|
|
12
|
+
version: z.literal(TASK_STATUS_VERSION)
|
|
13
|
+
});
|
|
14
|
+
class WikiGraphTaskContext {
|
|
15
|
+
#rootDirPath;
|
|
16
|
+
constructor(options) {
|
|
17
|
+
this.#rootDirPath = resolve(options.rootDirPath);
|
|
18
|
+
}
|
|
19
|
+
createTask(identity) {
|
|
20
|
+
const taskId = createWikiGraphTaskId(identity);
|
|
21
|
+
return new WikiGraphTask(taskId, join(this.#rootDirPath, taskId));
|
|
22
|
+
}
|
|
23
|
+
async runTask(identity, operation) {
|
|
24
|
+
const task = this.createTask(identity);
|
|
25
|
+
return await task.run(operation);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
class WikiGraphTask {
|
|
29
|
+
#id;
|
|
30
|
+
#path;
|
|
31
|
+
constructor(id, path) {
|
|
32
|
+
this.#id = id;
|
|
33
|
+
this.#path = resolve(path);
|
|
34
|
+
}
|
|
35
|
+
get artifactDirPath() {
|
|
36
|
+
return join(this.#path, "artifacts");
|
|
37
|
+
}
|
|
38
|
+
get id() {
|
|
39
|
+
return this.#id;
|
|
40
|
+
}
|
|
41
|
+
get path() {
|
|
42
|
+
return this.#path;
|
|
43
|
+
}
|
|
44
|
+
async readStatus() {
|
|
45
|
+
try {
|
|
46
|
+
const status = JSON.parse(
|
|
47
|
+
await readFile(this.#getStatusPath(), "utf8")
|
|
48
|
+
);
|
|
49
|
+
return taskStatusSchema.parse(status);
|
|
50
|
+
} catch (error) {
|
|
51
|
+
if (isNodeError(error) && error.code === "ENOENT") {
|
|
52
|
+
return void 0;
|
|
53
|
+
}
|
|
54
|
+
throw error;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
async run(operation) {
|
|
58
|
+
await this.#begin();
|
|
59
|
+
const result = await operation(this);
|
|
60
|
+
await this.#complete();
|
|
61
|
+
await this.remove();
|
|
62
|
+
return result;
|
|
63
|
+
}
|
|
64
|
+
async remove() {
|
|
65
|
+
await rm(this.#path, { force: true, recursive: true });
|
|
66
|
+
}
|
|
67
|
+
async #begin() {
|
|
68
|
+
await mkdir(this.artifactDirPath, { recursive: true });
|
|
69
|
+
await this.#writeStatus({
|
|
70
|
+
startedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
71
|
+
status: "running",
|
|
72
|
+
version: TASK_STATUS_VERSION
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
async #complete() {
|
|
76
|
+
const existingStatus = await this.readStatus();
|
|
77
|
+
await this.#writeStatus({
|
|
78
|
+
completedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
79
|
+
startedAt: existingStatus?.startedAt ?? (/* @__PURE__ */ new Date()).toISOString(),
|
|
80
|
+
status: "succeeded",
|
|
81
|
+
version: TASK_STATUS_VERSION
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
async #writeStatus(status) {
|
|
85
|
+
await mkdir(this.#path, { recursive: true });
|
|
86
|
+
await writeFile(
|
|
87
|
+
this.#getStatusPath(),
|
|
88
|
+
`${JSON.stringify(status, null, 2)}
|
|
89
|
+
`,
|
|
90
|
+
"utf8"
|
|
91
|
+
);
|
|
92
|
+
}
|
|
93
|
+
#getStatusPath() {
|
|
94
|
+
return join(this.#path, "status.json");
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
function createWikiGraphTaskId(identity) {
|
|
98
|
+
return createHash({
|
|
99
|
+
normalizedSource: identity.normalizedSource,
|
|
100
|
+
parameters: identity.parameters,
|
|
101
|
+
taskType: identity.taskType,
|
|
102
|
+
version: identity.version ?? WIKI_GRAPH_CONTEXT_VERSION
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
export {
|
|
106
|
+
WIKI_GRAPH_CONTEXT_VERSION,
|
|
107
|
+
WikiGraphTask,
|
|
108
|
+
WikiGraphTaskContext,
|
|
109
|
+
createWikiGraphTaskId
|
|
110
|
+
};
|
|
111
|
+
//# sourceMappingURL=task-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/context/task-context.ts"],"sourcesContent":["import { mkdir, readFile, rm, writeFile } from \"fs/promises\";\nimport { join, resolve } from \"path\";\nimport { z } from \"zod\";\n\nimport { createHash } from \"../utils/hash.js\";\nimport { isNodeError } from \"../utils/node-error.js\";\n\nexport const WIKI_GRAPH_CONTEXT_VERSION = 1;\n\nconst TASK_STATUS_VERSION = 1;\n\nconst taskStatusSchema = z.object({\n completedAt: z.string().optional(),\n startedAt: z.string(),\n status: z.enum([\"running\", \"succeeded\"]),\n version: z.literal(TASK_STATUS_VERSION),\n});\n\nexport type WikiGraphTaskType = \"source-to-graph\" | \"source-graph-to-summary\";\n\nexport interface WikiGraphTaskIdentity {\n readonly normalizedSource: string;\n readonly parameters: unknown;\n readonly taskType: WikiGraphTaskType;\n readonly version?: number;\n}\n\nexport interface WikiGraphTaskContextOptions {\n readonly rootDirPath: string;\n}\n\nexport interface WikiGraphTaskRun<T> {\n readonly task: WikiGraphTask;\n run(operation: (task: WikiGraphTask) => Promise<T> | T): Promise<T>;\n}\n\ninterface TaskStatus {\n readonly completedAt?: string | undefined;\n readonly startedAt: string;\n readonly status: \"running\" | \"succeeded\";\n readonly version: typeof TASK_STATUS_VERSION;\n}\n\nexport class WikiGraphTaskContext {\n readonly #rootDirPath: string;\n\n public constructor(options: WikiGraphTaskContextOptions) {\n this.#rootDirPath = resolve(options.rootDirPath);\n }\n\n public createTask(identity: WikiGraphTaskIdentity): WikiGraphTask {\n const taskId = createWikiGraphTaskId(identity);\n\n return new WikiGraphTask(taskId, join(this.#rootDirPath, taskId));\n }\n\n public async runTask<T>(\n identity: WikiGraphTaskIdentity,\n operation: (task: WikiGraphTask) => Promise<T> | T,\n ): Promise<T> {\n const task = this.createTask(identity);\n\n return await task.run(operation);\n }\n}\n\nexport class WikiGraphTask {\n readonly #id: string;\n readonly #path: string;\n\n public constructor(id: string, path: string) {\n this.#id = id;\n this.#path = resolve(path);\n }\n\n public get artifactDirPath(): string {\n return join(this.#path, \"artifacts\");\n }\n\n public get id(): string {\n return this.#id;\n }\n\n public get path(): string {\n return this.#path;\n }\n\n public async readStatus(): Promise<TaskStatus | undefined> {\n try {\n const status = JSON.parse(\n await readFile(this.#getStatusPath(), \"utf8\"),\n ) as unknown;\n\n return taskStatusSchema.parse(status);\n } catch (error) {\n if (isNodeError(error) && error.code === \"ENOENT\") {\n return undefined;\n }\n\n throw error;\n }\n }\n\n public async run<T>(\n operation: (task: WikiGraphTask) => Promise<T> | T,\n ): Promise<T> {\n await this.#begin();\n\n const result = await operation(this);\n\n await this.#complete();\n await this.remove();\n return result;\n }\n\n public async remove(): Promise<void> {\n await rm(this.#path, { force: true, recursive: true });\n }\n\n async #begin(): Promise<void> {\n await mkdir(this.artifactDirPath, { recursive: true });\n await this.#writeStatus({\n startedAt: new Date().toISOString(),\n status: \"running\",\n version: TASK_STATUS_VERSION,\n });\n }\n\n async #complete(): Promise<void> {\n const existingStatus = await this.readStatus();\n\n await this.#writeStatus({\n completedAt: new Date().toISOString(),\n startedAt: existingStatus?.startedAt ?? new Date().toISOString(),\n status: \"succeeded\",\n version: TASK_STATUS_VERSION,\n });\n }\n\n async #writeStatus(status: TaskStatus): Promise<void> {\n await mkdir(this.#path, { recursive: true });\n await writeFile(\n this.#getStatusPath(),\n `${JSON.stringify(status, null, 2)}\\n`,\n \"utf8\",\n );\n }\n\n #getStatusPath(): string {\n return join(this.#path, \"status.json\");\n }\n}\n\nexport function createWikiGraphTaskId(identity: WikiGraphTaskIdentity): string {\n return createHash({\n normalizedSource: identity.normalizedSource,\n parameters: identity.parameters,\n taskType: identity.taskType,\n version: identity.version ?? WIKI_GRAPH_CONTEXT_VERSION,\n });\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import * as Sqlite3Namespace from 'sqlite3';
|
|
2
|
+
|
|
3
|
+
type SqliteDatabase = Sqlite3Namespace.Database;
|
|
4
|
+
type SqlBindValue = Buffer | Uint8Array | number | string | null;
|
|
5
|
+
type SqlBindParams = readonly SqlBindValue[];
|
|
6
|
+
type SqlRowValue = SqlBindValue;
|
|
7
|
+
type SqlRow = Record<string, SqlRowValue>;
|
|
8
|
+
declare class Database {
|
|
9
|
+
#private;
|
|
10
|
+
constructor(database: SqliteDatabase, options?: {
|
|
11
|
+
readonly onWrite?: () => void;
|
|
12
|
+
});
|
|
13
|
+
static open(databasePath: string, schemaSql?: string, options?: {
|
|
14
|
+
readonly onWrite?: () => void;
|
|
15
|
+
readonly readonly?: boolean;
|
|
16
|
+
}): Promise<Database>;
|
|
17
|
+
static initialize(databasePath: string, schemaSql: string): Promise<void>;
|
|
18
|
+
queryAll<T>(sql: string, params: SqlBindParams | undefined, mapRow: (row: SqlRow) => T): Promise<T[]>;
|
|
19
|
+
queryOne<T>(sql: string, params: SqlBindParams | undefined, mapRow: (row: SqlRow) => T): Promise<T | undefined>;
|
|
20
|
+
run(sql: string, params?: SqlBindParams): Promise<void>;
|
|
21
|
+
transaction<T>(operation: () => Promise<T> | T): Promise<T>;
|
|
22
|
+
flush(): Promise<void>;
|
|
23
|
+
close(): Promise<void>;
|
|
24
|
+
getLastInsertRowId(): Promise<number>;
|
|
25
|
+
}
|
|
26
|
+
declare function getNumber(row: SqlRow, key: string): number;
|
|
27
|
+
declare function getString(row: SqlRow, key: string): string;
|
|
28
|
+
declare function getOptionalString(row: SqlRow, key: string): string | undefined;
|
|
29
|
+
|
|
30
|
+
export { Database, type SqlBindValue, type SqlRow, getNumber, getOptionalString, getString };
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from "async_hooks";
|
|
2
|
+
import { stat } from "fs/promises";
|
|
3
|
+
import { resolve } from "path";
|
|
4
|
+
const SQLITE_BUSY_TIMEOUT_MS = 15 * 60 * 1e3;
|
|
5
|
+
async function isMissingOrEmptyFile(path) {
|
|
6
|
+
const stats = await stat(path).catch((error) => {
|
|
7
|
+
if (typeof error === "object" && error !== null && "code" in error && error.code === "ENOENT") {
|
|
8
|
+
return void 0;
|
|
9
|
+
}
|
|
10
|
+
throw error;
|
|
11
|
+
});
|
|
12
|
+
return stats === void 0 || stats.size === 0;
|
|
13
|
+
}
|
|
14
|
+
class Database {
|
|
15
|
+
#database;
|
|
16
|
+
#onWrite;
|
|
17
|
+
#operationScope = new AsyncLocalStorage();
|
|
18
|
+
#activeTransactionScope;
|
|
19
|
+
#closed = false;
|
|
20
|
+
#operationChain = Promise.resolve();
|
|
21
|
+
#transactionDepth = 0;
|
|
22
|
+
constructor(database, options = {}) {
|
|
23
|
+
this.#database = database;
|
|
24
|
+
this.#onWrite = options.onWrite;
|
|
25
|
+
}
|
|
26
|
+
static async open(databasePath, schemaSql = "", options = {}) {
|
|
27
|
+
const resolvedDatabasePath = resolve(databasePath);
|
|
28
|
+
const shouldMarkSchemaWritten = options.readonly !== true && schemaSql.trim() !== "" && await isMissingOrEmptyFile(resolvedDatabasePath);
|
|
29
|
+
const database = await openSqliteDatabase(resolvedDatabasePath, options);
|
|
30
|
+
const openedDatabase = new Database(database, options);
|
|
31
|
+
await openedDatabase.#executeSql(
|
|
32
|
+
`PRAGMA busy_timeout = ${SQLITE_BUSY_TIMEOUT_MS}`
|
|
33
|
+
);
|
|
34
|
+
if (options.readonly !== true && schemaSql.trim() !== "") {
|
|
35
|
+
await openedDatabase.#executeSql(schemaSql);
|
|
36
|
+
if (shouldMarkSchemaWritten) {
|
|
37
|
+
openedDatabase.#markWritten();
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return openedDatabase;
|
|
41
|
+
}
|
|
42
|
+
static async initialize(databasePath, schemaSql) {
|
|
43
|
+
const database = await Database.open(databasePath);
|
|
44
|
+
try {
|
|
45
|
+
if (schemaSql.trim() !== "") {
|
|
46
|
+
await database.#executeSql(schemaSql);
|
|
47
|
+
}
|
|
48
|
+
} finally {
|
|
49
|
+
await database.close();
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
async queryAll(sql, params, mapRow) {
|
|
53
|
+
return await this.#runSerialized(async () => {
|
|
54
|
+
this.#assertOpen();
|
|
55
|
+
const rows = await this.#queryAllRows(sql, params);
|
|
56
|
+
return rows.map(mapRow);
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
async queryOne(sql, params, mapRow) {
|
|
60
|
+
return await this.#runSerialized(async () => {
|
|
61
|
+
this.#assertOpen();
|
|
62
|
+
const row = await this.#queryOneRow(sql, params);
|
|
63
|
+
return row === void 0 ? void 0 : mapRow(row);
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
async run(sql, params) {
|
|
67
|
+
await this.#runSerialized(async () => {
|
|
68
|
+
this.#assertOpen();
|
|
69
|
+
await this.#runStatement(sql, params);
|
|
70
|
+
this.#markWritten();
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
async transaction(operation) {
|
|
74
|
+
return await this.#runSerialized(async () => {
|
|
75
|
+
this.#assertOpen();
|
|
76
|
+
const isRootTransaction = this.#transactionDepth === 0;
|
|
77
|
+
const transactionScope = this.#activeTransactionScope ?? /* @__PURE__ */ Symbol("database transaction scope");
|
|
78
|
+
if (isRootTransaction) {
|
|
79
|
+
await this.#executeSql("BEGIN IMMEDIATE");
|
|
80
|
+
this.#activeTransactionScope = transactionScope;
|
|
81
|
+
}
|
|
82
|
+
this.#transactionDepth += 1;
|
|
83
|
+
try {
|
|
84
|
+
const result = await this.#operationScope.run(
|
|
85
|
+
transactionScope,
|
|
86
|
+
operation
|
|
87
|
+
);
|
|
88
|
+
if (isRootTransaction) {
|
|
89
|
+
await this.#executeSql("COMMIT");
|
|
90
|
+
}
|
|
91
|
+
return result;
|
|
92
|
+
} catch (error) {
|
|
93
|
+
if (isRootTransaction) {
|
|
94
|
+
await this.#executeSql("ROLLBACK");
|
|
95
|
+
}
|
|
96
|
+
throw error;
|
|
97
|
+
} finally {
|
|
98
|
+
this.#transactionDepth -= 1;
|
|
99
|
+
if (isRootTransaction) {
|
|
100
|
+
this.#activeTransactionScope = void 0;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
async flush() {
|
|
106
|
+
await this.#runSerialized(() => {
|
|
107
|
+
this.#assertOpen();
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
async close() {
|
|
111
|
+
await this.#runSerialized(async () => {
|
|
112
|
+
if (this.#closed) {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
await this.#closeDatabase();
|
|
116
|
+
this.#closed = true;
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
async getLastInsertRowId() {
|
|
120
|
+
const row = await this.queryOne(
|
|
121
|
+
"SELECT last_insert_rowid() AS row_id",
|
|
122
|
+
void 0,
|
|
123
|
+
(value) => getNumber(value, "row_id")
|
|
124
|
+
);
|
|
125
|
+
if (row === void 0) {
|
|
126
|
+
throw new Error("Could not read last_insert_rowid()");
|
|
127
|
+
}
|
|
128
|
+
return row;
|
|
129
|
+
}
|
|
130
|
+
#assertOpen() {
|
|
131
|
+
if (this.#closed) {
|
|
132
|
+
throw new Error("Database is already closed");
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
async #runSerialized(operation) {
|
|
136
|
+
const operationScope = this.#operationScope.getStore();
|
|
137
|
+
if (operationScope !== void 0 && operationScope === this.#activeTransactionScope) {
|
|
138
|
+
return await operation();
|
|
139
|
+
}
|
|
140
|
+
const queuedOperation = this.#operationChain.then(operation);
|
|
141
|
+
this.#operationChain = queuedOperation.then(
|
|
142
|
+
() => void 0,
|
|
143
|
+
() => void 0
|
|
144
|
+
);
|
|
145
|
+
return await queuedOperation;
|
|
146
|
+
}
|
|
147
|
+
#markWritten() {
|
|
148
|
+
this.#onWrite?.();
|
|
149
|
+
}
|
|
150
|
+
async #closeDatabase() {
|
|
151
|
+
await new Promise((resolveClose, rejectClose) => {
|
|
152
|
+
this.#database.close((error) => {
|
|
153
|
+
if (error !== null) {
|
|
154
|
+
rejectClose(error);
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
resolveClose();
|
|
158
|
+
});
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
async #executeSql(sql) {
|
|
162
|
+
await new Promise((resolveExec, rejectExec) => {
|
|
163
|
+
this.#database.exec(sql, (error) => {
|
|
164
|
+
if (error !== null) {
|
|
165
|
+
rejectExec(error);
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
resolveExec();
|
|
169
|
+
});
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
async #queryAllRows(sql, params) {
|
|
173
|
+
return await new Promise((resolveAll, rejectAll) => {
|
|
174
|
+
this.#database.all(
|
|
175
|
+
sql,
|
|
176
|
+
normalizeSqlBindParams(params),
|
|
177
|
+
(error, rows) => {
|
|
178
|
+
if (error !== null) {
|
|
179
|
+
rejectAll(error);
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
resolveAll(rows);
|
|
183
|
+
}
|
|
184
|
+
);
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
async #queryOneRow(sql, params) {
|
|
188
|
+
return await new Promise((resolveGet, rejectGet) => {
|
|
189
|
+
this.#database.get(
|
|
190
|
+
sql,
|
|
191
|
+
normalizeSqlBindParams(params),
|
|
192
|
+
(error, row) => {
|
|
193
|
+
if (error !== null) {
|
|
194
|
+
rejectGet(error);
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
resolveGet(row);
|
|
198
|
+
}
|
|
199
|
+
);
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
async #runStatement(sql, params) {
|
|
203
|
+
await new Promise((resolveRun, rejectRun) => {
|
|
204
|
+
this.#database.run(sql, normalizeSqlBindParams(params), (error) => {
|
|
205
|
+
if (error !== null) {
|
|
206
|
+
rejectRun(error);
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
resolveRun();
|
|
210
|
+
});
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
function getNumber(row, key) {
|
|
215
|
+
const value = row[key];
|
|
216
|
+
if (typeof value !== "number") {
|
|
217
|
+
throw new TypeError(`Expected ${key} to be a number`);
|
|
218
|
+
}
|
|
219
|
+
return value;
|
|
220
|
+
}
|
|
221
|
+
function getString(row, key) {
|
|
222
|
+
const value = row[key];
|
|
223
|
+
if (typeof value !== "string") {
|
|
224
|
+
throw new TypeError(`Expected ${key} to be a string`);
|
|
225
|
+
}
|
|
226
|
+
return value;
|
|
227
|
+
}
|
|
228
|
+
function getOptionalString(row, key) {
|
|
229
|
+
const value = row[key];
|
|
230
|
+
if (value === null || value === void 0) {
|
|
231
|
+
return void 0;
|
|
232
|
+
}
|
|
233
|
+
if (typeof value !== "string") {
|
|
234
|
+
throw new TypeError(`Expected ${key} to be a string`);
|
|
235
|
+
}
|
|
236
|
+
return value;
|
|
237
|
+
}
|
|
238
|
+
async function openSqliteDatabase(databasePath, options = {}) {
|
|
239
|
+
const sqlite3 = await loadSqlite3();
|
|
240
|
+
const flags = (options.readonly === true ? sqlite3.OPEN_READONLY : sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE) | sqlite3.OPEN_FULLMUTEX;
|
|
241
|
+
return await new Promise((resolveOpen, rejectOpen) => {
|
|
242
|
+
const database = new sqlite3.Database(databasePath, flags, (error) => {
|
|
243
|
+
if (error !== null) {
|
|
244
|
+
rejectOpen(error);
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
resolveOpen(database);
|
|
248
|
+
});
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
async function loadSqlite3() {
|
|
252
|
+
const module = await import("sqlite3");
|
|
253
|
+
return resolveSqlite3Module(module);
|
|
254
|
+
}
|
|
255
|
+
function resolveSqlite3Module(module) {
|
|
256
|
+
if (typeof module === "object" && module !== null && "default" in module && typeof module.default === "object" && module.default !== null && "Database" in module.default) {
|
|
257
|
+
return module.default;
|
|
258
|
+
}
|
|
259
|
+
if (typeof module === "object" && module !== null && "Database" in module) {
|
|
260
|
+
return module;
|
|
261
|
+
}
|
|
262
|
+
throw new TypeError("Could not load sqlite3");
|
|
263
|
+
}
|
|
264
|
+
function normalizeSqlBindParams(params) {
|
|
265
|
+
return params ?? [];
|
|
266
|
+
}
|
|
267
|
+
export {
|
|
268
|
+
Database,
|
|
269
|
+
getNumber,
|
|
270
|
+
getOptionalString,
|
|
271
|
+
getString
|
|
272
|
+
};
|
|
273
|
+
//# sourceMappingURL=database.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/document/database.ts"],"sourcesContent":["import { AsyncLocalStorage } from \"async_hooks\";\nimport { stat } from \"fs/promises\";\nimport { resolve } from \"path\";\n\nimport type * as Sqlite3Namespace from \"sqlite3\";\n\ntype Sqlite3Module = typeof Sqlite3Namespace;\ntype SqliteDatabase = Sqlite3Namespace.Database;\nexport type SqlBindValue = Buffer | Uint8Array | number | string | null;\ntype SqlBindParams = readonly SqlBindValue[];\ntype SqlRowValue = SqlBindValue;\n\nexport type SqlRow = Record<string, SqlRowValue>;\n\nconst SQLITE_BUSY_TIMEOUT_MS = 15 * 60 * 1000;\n\ntype DatabaseOperationScope = symbol;\n\nasync function isMissingOrEmptyFile(path: string): Promise<boolean> {\n const stats = await stat(path).catch((error: unknown) => {\n if (\n typeof error === \"object\" &&\n error !== null &&\n \"code\" in error &&\n error.code === \"ENOENT\"\n ) {\n return undefined;\n }\n\n throw error;\n });\n\n return stats === undefined || stats.size === 0;\n}\n\nexport class Database {\n readonly #database: SqliteDatabase;\n readonly #onWrite: (() => void) | undefined;\n readonly #operationScope = new AsyncLocalStorage<DatabaseOperationScope>();\n #activeTransactionScope: DatabaseOperationScope | undefined;\n #closed = false;\n #operationChain: Promise<void> = Promise.resolve();\n #transactionDepth = 0;\n\n public constructor(\n database: SqliteDatabase,\n options: { readonly onWrite?: () => void } = {},\n ) {\n this.#database = database;\n this.#onWrite = options.onWrite;\n }\n\n public static async open(\n databasePath: string,\n schemaSql = \"\",\n options: {\n readonly onWrite?: () => void;\n readonly readonly?: boolean;\n } = {},\n ): Promise<Database> {\n const resolvedDatabasePath = resolve(databasePath);\n const shouldMarkSchemaWritten =\n options.readonly !== true &&\n schemaSql.trim() !== \"\" &&\n (await isMissingOrEmptyFile(resolvedDatabasePath));\n const database = await openSqliteDatabase(resolvedDatabasePath, options);\n const openedDatabase = new Database(database, options);\n\n await openedDatabase.#executeSql(\n `PRAGMA busy_timeout = ${SQLITE_BUSY_TIMEOUT_MS}`,\n );\n if (options.readonly !== true && schemaSql.trim() !== \"\") {\n await openedDatabase.#executeSql(schemaSql);\n if (shouldMarkSchemaWritten) {\n openedDatabase.#markWritten();\n }\n }\n\n return openedDatabase;\n }\n\n public static async initialize(\n databasePath: string,\n schemaSql: string,\n ): Promise<void> {\n const database = await Database.open(databasePath);\n\n try {\n if (schemaSql.trim() !== \"\") {\n await database.#executeSql(schemaSql);\n }\n } finally {\n await database.close();\n }\n }\n\n public async queryAll<T>(\n sql: string,\n params: SqlBindParams | undefined,\n mapRow: (row: SqlRow) => T,\n ): Promise<T[]> {\n return await this.#runSerialized(async () => {\n this.#assertOpen();\n const rows = await this.#queryAllRows(sql, params);\n\n return rows.map(mapRow);\n });\n }\n\n public async queryOne<T>(\n sql: string,\n params: SqlBindParams | undefined,\n mapRow: (row: SqlRow) => T,\n ): Promise<T | undefined> {\n return await this.#runSerialized(async () => {\n this.#assertOpen();\n const row = await this.#queryOneRow(sql, params);\n\n return row === undefined ? undefined : mapRow(row);\n });\n }\n\n public async run(sql: string, params?: SqlBindParams): Promise<void> {\n await this.#runSerialized(async () => {\n this.#assertOpen();\n await this.#runStatement(sql, params);\n this.#markWritten();\n });\n }\n\n public async transaction<T>(operation: () => Promise<T> | T): Promise<T> {\n return await this.#runSerialized(async () => {\n this.#assertOpen();\n const isRootTransaction = this.#transactionDepth === 0;\n const transactionScope =\n this.#activeTransactionScope ?? Symbol(\"database transaction scope\");\n\n if (isRootTransaction) {\n await this.#executeSql(\"BEGIN IMMEDIATE\");\n this.#activeTransactionScope = transactionScope;\n }\n\n this.#transactionDepth += 1;\n\n try {\n const result = await this.#operationScope.run(\n transactionScope,\n operation,\n );\n\n if (isRootTransaction) {\n await this.#executeSql(\"COMMIT\");\n }\n\n return result;\n } catch (error) {\n if (isRootTransaction) {\n await this.#executeSql(\"ROLLBACK\");\n }\n\n throw error;\n } finally {\n this.#transactionDepth -= 1;\n if (isRootTransaction) {\n this.#activeTransactionScope = undefined;\n }\n }\n });\n }\n\n public async flush(): Promise<void> {\n await this.#runSerialized(() => {\n this.#assertOpen();\n });\n }\n\n public async close(): Promise<void> {\n await this.#runSerialized(async () => {\n if (this.#closed) {\n return;\n }\n\n await this.#closeDatabase();\n this.#closed = true;\n });\n }\n\n public async getLastInsertRowId(): Promise<number> {\n const row = await this.queryOne(\n \"SELECT last_insert_rowid() AS row_id\",\n undefined,\n (value) => getNumber(value, \"row_id\"),\n );\n\n if (row === undefined) {\n throw new Error(\"Could not read last_insert_rowid()\");\n }\n\n return row;\n }\n\n #assertOpen(): void {\n if (this.#closed) {\n throw new Error(\"Database is already closed\");\n }\n }\n\n async #runSerialized<T>(operation: () => Promise<T> | T): Promise<T> {\n const operationScope = this.#operationScope.getStore();\n\n if (\n operationScope !== undefined &&\n operationScope === this.#activeTransactionScope\n ) {\n return await operation();\n }\n\n const queuedOperation = this.#operationChain.then(operation);\n\n this.#operationChain = queuedOperation.then(\n () => undefined,\n () => undefined,\n );\n\n return await queuedOperation;\n }\n\n #markWritten(): void {\n this.#onWrite?.();\n }\n\n async #closeDatabase(): Promise<void> {\n await new Promise<void>((resolveClose, rejectClose) => {\n this.#database.close((error) => {\n if (error !== null) {\n rejectClose(error);\n return;\n }\n\n resolveClose();\n });\n });\n }\n\n async #executeSql(sql: string): Promise<void> {\n await new Promise<void>((resolveExec, rejectExec) => {\n this.#database.exec(sql, (error) => {\n if (error !== null) {\n rejectExec(error);\n return;\n }\n\n resolveExec();\n });\n });\n }\n\n async #queryAllRows(\n sql: string,\n params: SqlBindParams | undefined,\n ): Promise<SqlRow[]> {\n return await new Promise<SqlRow[]>((resolveAll, rejectAll) => {\n this.#database.all<SqlRow>(\n sql,\n normalizeSqlBindParams(params),\n (error, rows) => {\n if (error !== null) {\n rejectAll(error);\n return;\n }\n\n resolveAll(rows);\n },\n );\n });\n }\n\n async #queryOneRow(\n sql: string,\n params: SqlBindParams | undefined,\n ): Promise<SqlRow | undefined> {\n return await new Promise<SqlRow | undefined>((resolveGet, rejectGet) => {\n this.#database.get<SqlRow>(\n sql,\n normalizeSqlBindParams(params),\n (error, row) => {\n if (error !== null) {\n rejectGet(error);\n return;\n }\n\n resolveGet(row);\n },\n );\n });\n }\n\n async #runStatement(\n sql: string,\n params: SqlBindParams | undefined,\n ): Promise<void> {\n await new Promise<void>((resolveRun, rejectRun) => {\n this.#database.run(sql, normalizeSqlBindParams(params), (error) => {\n if (error !== null) {\n rejectRun(error);\n return;\n }\n\n resolveRun();\n });\n });\n }\n}\n\nexport function getNumber(row: SqlRow, key: string): number {\n const value = row[key];\n\n if (typeof value !== \"number\") {\n throw new TypeError(`Expected ${key} to be a number`);\n }\n\n return value;\n}\n\nexport function getString(row: SqlRow, key: string): string {\n const value = row[key];\n\n if (typeof value !== \"string\") {\n throw new TypeError(`Expected ${key} to be a string`);\n }\n\n return value;\n}\n\nexport function getOptionalString(\n row: SqlRow,\n key: string,\n): string | undefined {\n const value = row[key];\n\n if (value === null || value === undefined) {\n return undefined;\n }\n\n if (typeof value !== \"string\") {\n throw new TypeError(`Expected ${key} to be a string`);\n }\n\n return value;\n}\n\nasync function openSqliteDatabase(\n databasePath: string,\n options: { readonly readonly?: boolean } = {},\n): Promise<SqliteDatabase> {\n const sqlite3 = await loadSqlite3();\n const flags =\n (options.readonly === true\n ? sqlite3.OPEN_READONLY\n : sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE) | sqlite3.OPEN_FULLMUTEX;\n\n return await new Promise<SqliteDatabase>((resolveOpen, rejectOpen) => {\n const database = new sqlite3.Database(databasePath, flags, (error) => {\n if (error !== null) {\n rejectOpen(error);\n return;\n }\n\n resolveOpen(database);\n });\n });\n}\n\nasync function loadSqlite3(): Promise<Sqlite3Module> {\n const module = await import(\"sqlite3\");\n\n return resolveSqlite3Module(module as unknown);\n}\n\nfunction resolveSqlite3Module(module: unknown): Sqlite3Module {\n if (\n typeof module === \"object\" &&\n module !== null &&\n \"default\" in module &&\n typeof module.default === \"object\" &&\n module.default !== null &&\n \"Database\" in module.default\n ) {\n return module.default as Sqlite3Module;\n }\n\n if (typeof module === \"object\" && module !== null && \"Database\" in module) {\n return module as Sqlite3Module;\n }\n\n throw new TypeError(\"Could not load sqlite3\");\n}\n\nfunction normalizeSqlBindParams(\n params: SqlBindParams | undefined,\n): SqlBindParams {\n return params ?? [];\n}\n"],"mappings":"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","names":[]}
|