@nitpicker/archive 0.0.0-stage → 0.25.0

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.
Files changed (737) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +105 -2
  3. package/lib/apply-connection-pragmas.d.ts +18 -0
  4. package/lib/apply-connection-pragmas.js +40 -0
  5. package/lib/archive-accessor.d.ts +265 -0
  6. package/lib/archive-accessor.js +477 -0
  7. package/lib/archive-lock.d.ts +45 -0
  8. package/lib/archive-lock.js +154 -0
  9. package/lib/archive.d.ts +736 -0
  10. package/lib/archive.js +1056 -0
  11. package/lib/body-hash/compute-body-hash.d.ts +32 -0
  12. package/lib/body-hash/compute-body-hash.js +35 -0
  13. package/lib/cache/clear-archive-cache-entry.d.ts +18 -0
  14. package/lib/cache/clear-archive-cache-entry.js +24 -0
  15. package/lib/cache/clear-archive-cache-root.d.ts +26 -0
  16. package/lib/cache/clear-archive-cache-root.js +32 -0
  17. package/lib/cache/compute-archive-cache-key.d.ts +39 -0
  18. package/lib/cache/compute-archive-cache-key.js +95 -0
  19. package/lib/cache/extract-archive-to-cache.d.ts +57 -0
  20. package/lib/cache/extract-archive-to-cache.js +326 -0
  21. package/lib/cache/get-archive-cache-root.d.ts +20 -0
  22. package/lib/cache/get-archive-cache-root.js +53 -0
  23. package/lib/cache/is-archive-cache-disabled.d.ts +24 -0
  24. package/lib/cache/is-archive-cache-disabled.js +34 -0
  25. package/lib/cache/list-archive-cache-entries.d.ts +23 -0
  26. package/lib/cache/list-archive-cache-entries.js +130 -0
  27. package/lib/cache/path-exists.d.ts +9 -0
  28. package/lib/cache/path-exists.js +18 -0
  29. package/lib/cache/resolve-archive-cache-dir.d.ts +26 -0
  30. package/lib/cache/resolve-archive-cache-dir.js +32 -0
  31. package/lib/cache/types.d.ts +33 -0
  32. package/lib/cache/types.js +1 -0
  33. package/lib/content-type/is-html-content-type.d.ts +17 -0
  34. package/lib/content-type/is-html-content-type.js +19 -0
  35. package/lib/content-type/normalize-content-type.d.ts +14 -0
  36. package/lib/content-type/normalize-content-type.js +20 -0
  37. package/lib/create-adjunct-tables.d.ts +66 -0
  38. package/lib/create-adjunct-tables.js +510 -0
  39. package/lib/create-entity-tables.d.ts +191 -0
  40. package/lib/create-entity-tables.js +387 -0
  41. package/lib/create-progress-reporter.d.ts +30 -0
  42. package/lib/create-progress-reporter.js +38 -0
  43. package/lib/create-ref-tables.d.ts +35 -0
  44. package/lib/create-ref-tables.js +185 -0
  45. package/lib/create-template-tables.d.ts +28 -0
  46. package/lib/create-template-tables.js +92 -0
  47. package/lib/database.d.ts +549 -0
  48. package/lib/database.js +804 -0
  49. package/lib/db-ops/_shared/clear-write-ref-caches.d.ts +27 -0
  50. package/lib/db-ops/_shared/clear-write-ref-caches.js +35 -0
  51. package/lib/db-ops/_shared/compress-payload.d.ts +26 -0
  52. package/lib/db-ops/_shared/compress-payload.js +30 -0
  53. package/lib/db-ops/_shared/create-write-ref-caches.d.ts +17 -0
  54. package/lib/db-ops/_shared/create-write-ref-caches.js +27 -0
  55. package/lib/db-ops/_shared/decode-json-ref.d.ts +17 -0
  56. package/lib/db-ops/_shared/decode-json-ref.js +31 -0
  57. package/lib/db-ops/_shared/keyset-paginate-by-id.d.ts +49 -0
  58. package/lib/db-ops/_shared/keyset-paginate-by-id.js +69 -0
  59. package/lib/db-ops/_shared/load-response-headers-by-set-ids.d.ts +20 -0
  60. package/lib/db-ops/_shared/load-response-headers-by-set-ids.js +53 -0
  61. package/lib/db-ops/_shared/resolve-content-item-id.d.ts +62 -0
  62. package/lib/db-ops/_shared/resolve-content-item-id.js +143 -0
  63. package/lib/db-ops/_shared/resolve-url-or-blob.d.ts +23 -0
  64. package/lib/db-ops/_shared/resolve-url-or-blob.js +29 -0
  65. package/lib/db-ops/_shared/retry-setting.d.ts +16 -0
  66. package/lib/db-ops/_shared/retry-setting.js +18 -0
  67. package/lib/db-ops/_shared/safe-parse-json.d.ts +11 -0
  68. package/lib/db-ops/_shared/safe-parse-json.js +18 -0
  69. package/lib/db-ops/_shared/types.d.ts +94 -0
  70. package/lib/db-ops/_shared/types.js +1 -0
  71. package/lib/db-ops/_shared/upsert-blob-ref.d.ts +25 -0
  72. package/lib/db-ops/_shared/upsert-blob-ref.js +48 -0
  73. package/lib/db-ops/_shared/upsert-content-type-ref.d.ts +30 -0
  74. package/lib/db-ops/_shared/upsert-content-type-ref.js +45 -0
  75. package/lib/db-ops/_shared/upsert-json-ref.d.ts +22 -0
  76. package/lib/db-ops/_shared/upsert-json-ref.js +41 -0
  77. package/lib/db-ops/_shared/upsert-response-headers.d.ts +35 -0
  78. package/lib/db-ops/_shared/upsert-response-headers.js +49 -0
  79. package/lib/db-ops/_shared/upsert-url-ref.d.ts +39 -0
  80. package/lib/db-ops/_shared/upsert-url-ref.js +62 -0
  81. package/lib/db-ops/anchors/get-anchors-on-page.d.ts +10 -0
  82. package/lib/db-ops/anchors/get-anchors-on-page.js +21 -0
  83. package/lib/db-ops/config/get-base-url.d.ts +8 -0
  84. package/lib/db-ops/config/get-base-url.js +14 -0
  85. package/lib/db-ops/config/get-config.d.ts +10 -0
  86. package/lib/db-ops/config/get-config.js +29 -0
  87. package/lib/db-ops/config/get-created-cwd.d.ts +11 -0
  88. package/lib/db-ops/config/get-created-cwd.js +13 -0
  89. package/lib/db-ops/config/get-name.d.ts +8 -0
  90. package/lib/db-ops/config/get-name.js +14 -0
  91. package/lib/db-ops/config/info-column-allowlist.d.ts +7 -0
  92. package/lib/db-ops/config/info-column-allowlist.js +29 -0
  93. package/lib/db-ops/config/info-json-columns.d.ts +5 -0
  94. package/lib/db-ops/config/info-json-columns.js +11 -0
  95. package/lib/db-ops/config/set-config.d.ts +12 -0
  96. package/lib/db-ops/config/set-config.js +21 -0
  97. package/lib/db-ops/config/update-config.d.ts +17 -0
  98. package/lib/db-ops/config/update-config.js +36 -0
  99. package/lib/db-ops/console-logs/compute-console-log-hash.d.ts +19 -0
  100. package/lib/db-ops/console-logs/compute-console-log-hash.js +30 -0
  101. package/lib/db-ops/console-logs/replace-console-logs.d.ts +34 -0
  102. package/lib/db-ops/console-logs/replace-console-logs.js +123 -0
  103. package/lib/db-ops/console-logs/stringify-console-log-args.d.ts +16 -0
  104. package/lib/db-ops/console-logs/stringify-console-log-args.js +26 -0
  105. package/lib/db-ops/console-logs/types.d.ts +38 -0
  106. package/lib/db-ops/console-logs/types.js +1 -0
  107. package/lib/db-ops/console-logs/upsert-console-log-item.d.ts +29 -0
  108. package/lib/db-ops/console-logs/upsert-console-log-item.js +52 -0
  109. package/lib/db-ops/dedupe-cap/accumulate-dedupe-cap-rejected-count.d.ts +18 -0
  110. package/lib/db-ops/dedupe-cap/accumulate-dedupe-cap-rejected-count.js +23 -0
  111. package/lib/db-ops/dedupe-cap/finalize-dedupe-cap-event.d.ts +12 -0
  112. package/lib/db-ops/dedupe-cap/finalize-dedupe-cap-event.js +15 -0
  113. package/lib/db-ops/dedupe-cap/insert-dedupe-cap-event.d.ts +14 -0
  114. package/lib/db-ops/dedupe-cap/insert-dedupe-cap-event.js +30 -0
  115. package/lib/db-ops/dedupe-cap/list-dedupe-cap-observations.d.ts +57 -0
  116. package/lib/db-ops/dedupe-cap/list-dedupe-cap-observations.js +87 -0
  117. package/lib/db-ops/dedupe-cap/list-dedupe-cap-shape-keys.d.ts +21 -0
  118. package/lib/db-ops/dedupe-cap/list-dedupe-cap-shape-keys.js +27 -0
  119. package/lib/db-ops/errors/insert-crawl-error.d.ts +15 -0
  120. package/lib/db-ops/errors/insert-crawl-error.js +21 -0
  121. package/lib/db-ops/errors/insert-page-error.d.ts +21 -0
  122. package/lib/db-ops/errors/insert-page-error.js +30 -0
  123. package/lib/db-ops/errors/list-dns-burned-host-candidates.d.ts +33 -0
  124. package/lib/db-ops/errors/list-dns-burned-host-candidates.js +158 -0
  125. package/lib/db-ops/html/read-page-html-blob.d.ts +17 -0
  126. package/lib/db-ops/html/read-page-html-blob.js +20 -0
  127. package/lib/db-ops/lifecycle/checkpoint.d.ts +8 -0
  128. package/lib/db-ops/lifecycle/checkpoint.js +9 -0
  129. package/lib/db-ops/lifecycle/destroy.d.ts +6 -0
  130. package/lib/db-ops/lifecycle/destroy.js +7 -0
  131. package/lib/db-ops/lifecycle/init.d.ts +58 -0
  132. package/lib/db-ops/lifecycle/init.js +122 -0
  133. package/lib/db-ops/list-reconcile/record-list-reconcile-run.d.ts +22 -0
  134. package/lib/db-ops/list-reconcile/record-list-reconcile-run.js +41 -0
  135. package/lib/db-ops/meta/get-audios-of-page.d.ts +11 -0
  136. package/lib/db-ops/meta/get-audios-of-page.js +15 -0
  137. package/lib/db-ops/meta/get-buttons-of-page.d.ts +11 -0
  138. package/lib/db-ops/meta/get-buttons-of-page.js +15 -0
  139. package/lib/db-ops/meta/get-canvases-of-page.d.ts +11 -0
  140. package/lib/db-ops/meta/get-canvases-of-page.js +15 -0
  141. package/lib/db-ops/meta/get-custom-elements-of-page.d.ts +11 -0
  142. package/lib/db-ops/meta/get-custom-elements-of-page.js +15 -0
  143. package/lib/db-ops/meta/get-headings-of-page.d.ts +11 -0
  144. package/lib/db-ops/meta/get-headings-of-page.js +15 -0
  145. package/lib/db-ops/meta/get-iframes-of-page.d.ts +11 -0
  146. package/lib/db-ops/meta/get-iframes-of-page.js +15 -0
  147. package/lib/db-ops/meta/get-jsonld-of-page.d.ts +13 -0
  148. package/lib/db-ops/meta/get-jsonld-of-page.js +27 -0
  149. package/lib/db-ops/meta/get-main-content-images-of-page.d.ts +11 -0
  150. package/lib/db-ops/meta/get-main-content-images-of-page.js +15 -0
  151. package/lib/db-ops/meta/get-main-content-tables-of-page.d.ts +11 -0
  152. package/lib/db-ops/meta/get-main-content-tables-of-page.js +15 -0
  153. package/lib/db-ops/meta/get-page-technologies-of-page.d.ts +11 -0
  154. package/lib/db-ops/meta/get-page-technologies-of-page.js +15 -0
  155. package/lib/db-ops/meta/get-technology-signals-of-page.d.ts +11 -0
  156. package/lib/db-ops/meta/get-technology-signals-of-page.js +15 -0
  157. package/lib/db-ops/meta/get-videos-of-page.d.ts +11 -0
  158. package/lib/db-ops/meta/get-videos-of-page.js +15 -0
  159. package/lib/db-ops/outages/close-network-outage.d.ts +12 -0
  160. package/lib/db-ops/outages/close-network-outage.js +15 -0
  161. package/lib/db-ops/outages/close-stale-open-network-outages.d.ts +26 -0
  162. package/lib/db-ops/outages/close-stale-open-network-outages.js +42 -0
  163. package/lib/db-ops/outages/compute-outage-clamp-timestamp.d.ts +26 -0
  164. package/lib/db-ops/outages/compute-outage-clamp-timestamp.js +31 -0
  165. package/lib/db-ops/outages/insert-network-outage.d.ts +14 -0
  166. package/lib/db-ops/outages/insert-network-outage.js +29 -0
  167. package/lib/db-ops/outages/list-network-outages.d.ts +28 -0
  168. package/lib/db-ops/outages/list-network-outages.js +42 -0
  169. package/lib/db-ops/pages/order/set-url-order.d.ts +13 -0
  170. package/lib/db-ops/pages/order/set-url-order.js +38 -0
  171. package/lib/db-ops/pages/read/build-page-query.d.ts +18 -0
  172. package/lib/db-ops/pages/read/build-page-query.js +40 -0
  173. package/lib/db-ops/pages/read/get-crawling-state.d.ts +117 -0
  174. package/lib/db-ops/pages/read/get-crawling-state.js +161 -0
  175. package/lib/db-ops/pages/read/get-existing-page-urls.d.ts +15 -0
  176. package/lib/db-ops/pages/read/get-existing-page-urls.js +30 -0
  177. package/lib/db-ops/pages/read/get-page-count.d.ts +12 -0
  178. package/lib/db-ops/pages/read/get-page-count.js +21 -0
  179. package/lib/db-ops/pages/read/get-page-source-by-url.d.ts +24 -0
  180. package/lib/db-ops/pages/read/get-page-source-by-url.js +28 -0
  181. package/lib/db-ops/pages/read/get-pages-with-rels.d.ts +38 -0
  182. package/lib/db-ops/pages/read/get-pages-with-rels.js +107 -0
  183. package/lib/db-ops/pages/read/get-pages.d.ts +11 -0
  184. package/lib/db-ops/pages/read/get-pages.js +51 -0
  185. package/lib/db-ops/pages/read/get-scraped-html-page-count.d.ts +18 -0
  186. package/lib/db-ops/pages/read/get-scraped-html-page-count.js +25 -0
  187. package/lib/db-ops/pages/read/reconstruct-page-rows.d.ts +31 -0
  188. package/lib/db-ops/pages/read/reconstruct-page-rows.js +32 -0
  189. package/lib/db-ops/pages/reset/clear-page-derived-rows.d.ts +20 -0
  190. package/lib/db-ops/pages/reset/clear-page-derived-rows.js +37 -0
  191. package/lib/db-ops/pages/reset/repromote-external-pages.d.ts +30 -0
  192. package/lib/db-ops/pages/reset/repromote-external-pages.js +91 -0
  193. package/lib/db-ops/pages/reset/reset-failed-pages.d.ts +88 -0
  194. package/lib/db-ops/pages/reset/reset-failed-pages.js +216 -0
  195. package/lib/db-ops/pages/reset/reset-pages-by-urls.d.ts +80 -0
  196. package/lib/db-ops/pages/reset/reset-pages-by-urls.js +151 -0
  197. package/lib/db-ops/pages/reset/retryable-image-scan-codes.d.ts +24 -0
  198. package/lib/db-ops/pages/reset/retryable-image-scan-codes.js +24 -0
  199. package/lib/db-ops/pages/write/insert-audios.d.ts +14 -0
  200. package/lib/db-ops/pages/write/insert-audios.js +25 -0
  201. package/lib/db-ops/pages/write/insert-buttons.d.ts +14 -0
  202. package/lib/db-ops/pages/write/insert-buttons.js +29 -0
  203. package/lib/db-ops/pages/write/insert-canvases.d.ts +14 -0
  204. package/lib/db-ops/pages/write/insert-canvases.js +26 -0
  205. package/lib/db-ops/pages/write/insert-custom-elements.d.ts +27 -0
  206. package/lib/db-ops/pages/write/insert-custom-elements.js +40 -0
  207. package/lib/db-ops/pages/write/insert-headings.d.ts +15 -0
  208. package/lib/db-ops/pages/write/insert-headings.js +27 -0
  209. package/lib/db-ops/pages/write/insert-iframes.d.ts +14 -0
  210. package/lib/db-ops/pages/write/insert-iframes.js +28 -0
  211. package/lib/db-ops/pages/write/insert-inventory-content-items.d.ts +38 -0
  212. package/lib/db-ops/pages/write/insert-inventory-content-items.js +60 -0
  213. package/lib/db-ops/pages/write/insert-inventory-seeds.d.ts +36 -0
  214. package/lib/db-ops/pages/write/insert-inventory-seeds.js +48 -0
  215. package/lib/db-ops/pages/write/insert-inventory-skipped-pages.d.ts +42 -0
  216. package/lib/db-ops/pages/write/insert-inventory-skipped-pages.js +56 -0
  217. package/lib/db-ops/pages/write/insert-jsonld.d.ts +17 -0
  218. package/lib/db-ops/pages/write/insert-jsonld.js +49 -0
  219. package/lib/db-ops/pages/write/insert-main-content-images.d.ts +20 -0
  220. package/lib/db-ops/pages/write/insert-main-content-images.js +32 -0
  221. package/lib/db-ops/pages/write/insert-main-content-tables.d.ts +14 -0
  222. package/lib/db-ops/pages/write/insert-main-content-tables.js +29 -0
  223. package/lib/db-ops/pages/write/insert-page.d.ts +56 -0
  224. package/lib/db-ops/pages/write/insert-page.js +259 -0
  225. package/lib/db-ops/pages/write/insert-technologies.d.ts +25 -0
  226. package/lib/db-ops/pages/write/insert-technologies.js +45 -0
  227. package/lib/db-ops/pages/write/insert-videos.d.ts +14 -0
  228. package/lib/db-ops/pages/write/insert-videos.js +28 -0
  229. package/lib/db-ops/pages/write/link-redirect-sources.d.ts +42 -0
  230. package/lib/db-ops/pages/write/link-redirect-sources.js +101 -0
  231. package/lib/db-ops/pages/write/record-redirect.d.ts +35 -0
  232. package/lib/db-ops/pages/write/record-redirect.js +100 -0
  233. package/lib/db-ops/pages/write/set-skipped-page.d.ts +13 -0
  234. package/lib/db-ops/pages/write/set-skipped-page.js +24 -0
  235. package/lib/db-ops/pages/write/update-page.d.ts +40 -0
  236. package/lib/db-ops/pages/write/update-page.js +419 -0
  237. package/lib/db-ops/pages/write/write-page-html-blob.d.ts +19 -0
  238. package/lib/db-ops/pages/write/write-page-html-blob.js +41 -0
  239. package/lib/db-ops/referrers/get-redirects-for-pages.d.ts +9 -0
  240. package/lib/db-ops/referrers/get-redirects-for-pages.js +15 -0
  241. package/lib/db-ops/referrers/get-referrers-of-page.d.ts +17 -0
  242. package/lib/db-ops/referrers/get-referrers-of-page.js +32 -0
  243. package/lib/db-ops/referrers/get-referrers-of-resource.d.ts +8 -0
  244. package/lib/db-ops/referrers/get-referrers-of-resource.js +15 -0
  245. package/lib/db-ops/resources/build-resource-query.d.ts +25 -0
  246. package/lib/db-ops/resources/build-resource-query.js +29 -0
  247. package/lib/db-ops/resources/get-existing-resource-urls.d.ts +9 -0
  248. package/lib/db-ops/resources/get-existing-resource-urls.js +24 -0
  249. package/lib/db-ops/resources/get-resource-by-url.d.ts +13 -0
  250. package/lib/db-ops/resources/get-resource-by-url.js +22 -0
  251. package/lib/db-ops/resources/get-resource-url-list.d.ts +17 -0
  252. package/lib/db-ops/resources/get-resource-url-list.js +26 -0
  253. package/lib/db-ops/resources/get-resources.d.ts +8 -0
  254. package/lib/db-ops/resources/get-resources.js +11 -0
  255. package/lib/db-ops/resources/insert-inventory-resources.d.ts +24 -0
  256. package/lib/db-ops/resources/insert-inventory-resources.js +64 -0
  257. package/lib/db-ops/resources/insert-resource-referrers.d.ts +15 -0
  258. package/lib/db-ops/resources/insert-resource-referrers.js +54 -0
  259. package/lib/db-ops/resources/insert-resource.d.ts +34 -0
  260. package/lib/db-ops/resources/insert-resource.js +73 -0
  261. package/lib/db-ops/resources/reconstruct-resource-rows.d.ts +26 -0
  262. package/lib/db-ops/resources/reconstruct-resource-rows.js +30 -0
  263. package/lib/db-ops/templates/assign-template-labels.d.ts +60 -0
  264. package/lib/db-ops/templates/assign-template-labels.js +187 -0
  265. package/lib/db-ops/templates/replace-page-templates.d.ts +44 -0
  266. package/lib/db-ops/templates/replace-page-templates.js +174 -0
  267. package/lib/db-ops/templates/serialize-template-cluster-reason.d.ts +16 -0
  268. package/lib/db-ops/templates/serialize-template-cluster-reason.js +17 -0
  269. package/lib/db-ops/templates/types.d.ts +103 -0
  270. package/lib/db-ops/templates/types.js +1 -0
  271. package/lib/debug.d.ts +8 -0
  272. package/lib/debug.js +9 -0
  273. package/lib/decode-html-blob.d.ts +20 -0
  274. package/lib/decode-html-blob.js +23 -0
  275. package/lib/decode-page-html-blob-bytes.d.ts +25 -0
  276. package/lib/decode-page-html-blob-bytes.js +29 -0
  277. package/lib/decode-stored-blob-bytes.d.ts +25 -0
  278. package/lib/decode-stored-blob-bytes.js +47 -0
  279. package/lib/derive-lineage-from-parent.d.ts +37 -0
  280. package/lib/derive-lineage-from-parent.js +42 -0
  281. package/lib/drop-legacy-tables.d.ts +45 -0
  282. package/lib/drop-legacy-tables.js +56 -0
  283. package/lib/error-kind/classify-error-kind.d.ts +20 -0
  284. package/lib/error-kind/classify-error-kind.js +136 -0
  285. package/lib/error-kind/network-related-error-kinds.d.ts +23 -0
  286. package/lib/error-kind/network-related-error-kinds.js +28 -0
  287. package/lib/error-kind/permanent-error-kinds.d.ts +48 -0
  288. package/lib/error-kind/permanent-error-kinds.js +54 -0
  289. package/lib/error-kind/types.d.ts +54 -0
  290. package/lib/error-kind/types.js +1 -0
  291. package/lib/filesystem/append-text.d.ts +9 -0
  292. package/lib/filesystem/append-text.js +14 -0
  293. package/lib/filesystem/copy-dir-sync.d.ts +6 -0
  294. package/lib/filesystem/copy-dir-sync.js +9 -0
  295. package/lib/filesystem/copy-dir.d.ts +7 -0
  296. package/lib/filesystem/copy-dir.js +13 -0
  297. package/lib/filesystem/copy-file-with-progress.d.ts +20 -0
  298. package/lib/filesystem/copy-file-with-progress.js +34 -0
  299. package/lib/filesystem/exists.d.ts +6 -0
  300. package/lib/filesystem/exists.js +9 -0
  301. package/lib/filesystem/get-file-list.d.ts +8 -0
  302. package/lib/filesystem/get-file-list.js +12 -0
  303. package/lib/filesystem/is-dir.d.ts +6 -0
  304. package/lib/filesystem/is-dir.js +10 -0
  305. package/lib/filesystem/mkdir.d.ts +8 -0
  306. package/lib/filesystem/mkdir.js +15 -0
  307. package/lib/filesystem/output-binary.d.ts +12 -0
  308. package/lib/filesystem/output-binary.js +17 -0
  309. package/lib/filesystem/output-json.d.ts +9 -0
  310. package/lib/filesystem/output-json.js +14 -0
  311. package/lib/filesystem/output-text.d.ts +11 -0
  312. package/lib/filesystem/output-text.js +32 -0
  313. package/lib/filesystem/parse-pax-path.d.ts +18 -0
  314. package/lib/filesystem/parse-pax-path.js +47 -0
  315. package/lib/filesystem/parse-tar-size-field.d.ts +13 -0
  316. package/lib/filesystem/parse-tar-size-field.js +40 -0
  317. package/lib/filesystem/peek-tar-top-dir.d.ts +35 -0
  318. package/lib/filesystem/peek-tar-top-dir.js +215 -0
  319. package/lib/filesystem/read-json.d.ts +7 -0
  320. package/lib/filesystem/read-json.js +11 -0
  321. package/lib/filesystem/read-text.d.ts +6 -0
  322. package/lib/filesystem/read-text.js +10 -0
  323. package/lib/filesystem/readline.d.ts +11 -0
  324. package/lib/filesystem/readline.js +26 -0
  325. package/lib/filesystem/remove.d.ts +5 -0
  326. package/lib/filesystem/remove.js +10 -0
  327. package/lib/filesystem/rename.d.ts +16 -0
  328. package/lib/filesystem/rename.js +48 -0
  329. package/lib/filesystem/tar.d.ts +23 -0
  330. package/lib/filesystem/tar.js +78 -0
  331. package/lib/filesystem/untar.d.ts +33 -0
  332. package/lib/filesystem/untar.js +84 -0
  333. package/lib/get-failed-page-messages.d.ts +56 -0
  334. package/lib/get-failed-page-messages.js +146 -0
  335. package/lib/get-json.d.ts +10 -0
  336. package/lib/get-json.js +25 -0
  337. package/lib/html-snapshot/match-selector-html.d.ts +25 -0
  338. package/lib/html-snapshot/match-selector-html.js +28 -0
  339. package/lib/html-snapshot/match-selector-snapshots.d.ts +33 -0
  340. package/lib/html-snapshot/match-selector-snapshots.js +33 -0
  341. package/lib/html-snapshot/search-html-document.d.ts +29 -0
  342. package/lib/html-snapshot/search-html-document.js +27 -0
  343. package/lib/html-snapshot/search-html-snapshots.d.ts +36 -0
  344. package/lib/html-snapshot/search-html-snapshots.js +35 -0
  345. package/lib/html-snapshot/types.d.ts +111 -0
  346. package/lib/html-snapshot/types.js +7 -0
  347. package/lib/html-snapshot/validate-search-pattern.d.ts +15 -0
  348. package/lib/html-snapshot/validate-search-pattern.js +17 -0
  349. package/lib/init-schema.d.ts +48 -0
  350. package/lib/init-schema.js +124 -0
  351. package/lib/is-inventory-source.d.ts +21 -0
  352. package/lib/is-inventory-source.js +22 -0
  353. package/lib/is-within-outage-window.d.ts +49 -0
  354. package/lib/is-within-outage-window.js +33 -0
  355. package/lib/isolated-cluster/create-isolated-cluster-run.d.ts +24 -0
  356. package/lib/isolated-cluster/create-isolated-cluster-run.js +26 -0
  357. package/lib/libsql-dialect.d.ts +115 -0
  358. package/lib/libsql-dialect.js +116 -0
  359. package/lib/limited-page-ids.d.ts +9 -0
  360. package/lib/limited-page-ids.js +18 -0
  361. package/lib/meta/assert-compatible-version.d.ts +60 -0
  362. package/lib/meta/assert-compatible-version.js +93 -0
  363. package/lib/meta/classify-jsonld-type.d.ts +23 -0
  364. package/lib/meta/classify-jsonld-type.js +43 -0
  365. package/lib/meta/compare-semver.d.ts +23 -0
  366. package/lib/meta/compare-semver.js +51 -0
  367. package/lib/meta/compute-main-contents-denormalized.d.ts +41 -0
  368. package/lib/meta/compute-main-contents-denormalized.js +88 -0
  369. package/lib/meta/compute-page-denormalized.d.ts +20 -0
  370. package/lib/meta/compute-page-denormalized.js +35 -0
  371. package/lib/meta/derive-flat-from-meta.d.ts +34 -0
  372. package/lib/meta/derive-flat-from-meta.js +158 -0
  373. package/lib/meta/derive-meta-extras.d.ts +20 -0
  374. package/lib/meta/derive-meta-extras.js +23 -0
  375. package/lib/meta/extract-tags-for-archive.d.ts +17 -0
  376. package/lib/meta/extract-tags-for-archive.js +36 -0
  377. package/lib/meta/parse-main-content-class-list.d.ts +19 -0
  378. package/lib/meta/parse-main-content-class-list.js +34 -0
  379. package/lib/meta/summarize-jsonld.d.ts +17 -0
  380. package/lib/meta/summarize-jsonld.js +29 -0
  381. package/lib/meta/technologies/combine-technology-confidence.d.ts +46 -0
  382. package/lib/meta/technologies/combine-technology-confidence.js +93 -0
  383. package/lib/meta/technologies/convert-legacy-page-tags-to-inserts.d.ts +45 -0
  384. package/lib/meta/technologies/convert-legacy-page-tags-to-inserts.js +53 -0
  385. package/lib/meta/technologies/convert-tag-row-to-wappalyzer-signal.d.ts +33 -0
  386. package/lib/meta/technologies/convert-tag-row-to-wappalyzer-signal.js +46 -0
  387. package/lib/meta/technologies/extract-technologies-for-archive.d.ts +33 -0
  388. package/lib/meta/technologies/extract-technologies-for-archive.js +30 -0
  389. package/lib/meta/technologies/match-js-license-comment-signal.d.ts +21 -0
  390. package/lib/meta/technologies/match-js-license-comment-signal.js +23 -0
  391. package/lib/meta/technologies/match-structural-technology-signals.d.ts +26 -0
  392. package/lib/meta/technologies/match-structural-technology-signals.js +48 -0
  393. package/lib/meta/technologies/normalize-wappalyzer-entries.d.ts +25 -0
  394. package/lib/meta/technologies/normalize-wappalyzer-entries.js +35 -0
  395. package/lib/meta/technologies/technology-signal-definitions.d.ts +44 -0
  396. package/lib/meta/technologies/technology-signal-definitions.js +60 -0
  397. package/lib/meta/technologies/types.d.ts +70 -0
  398. package/lib/meta/technologies/types.js +13 -0
  399. package/lib/meta/types.d.ts +1490 -0
  400. package/lib/meta/types.js +65 -0
  401. package/lib/migrate-content-items-alias-of-id.d.ts +52 -0
  402. package/lib/migrate-content-items-alias-of-id.js +69 -0
  403. package/lib/migrate-content-items-dedupe-cap-event-id.d.ts +46 -0
  404. package/lib/migrate-content-items-dedupe-cap-event-id.js +62 -0
  405. package/lib/migrate-content-items-is-metadata-only.d.ts +44 -0
  406. package/lib/migrate-content-items-is-metadata-only.js +60 -0
  407. package/lib/migrate-entity-tables.d.ts +55 -0
  408. package/lib/migrate-entity-tables.js +66 -0
  409. package/lib/migrate-info-created-cwd.d.ts +17 -0
  410. package/lib/migrate-info-created-cwd.js +36 -0
  411. package/lib/migrate-info-main-content-selector.d.ts +16 -0
  412. package/lib/migrate-info-main-content-selector.js +35 -0
  413. package/lib/migrate-info-request-header-names.d.ts +16 -0
  414. package/lib/migrate-info-request-header-names.js +35 -0
  415. package/lib/migrate-info-roots.d.ts +20 -0
  416. package/lib/migrate-info-roots.js +52 -0
  417. package/lib/migrate-inventory-runs-to-list-reconcile-runs.d.ts +34 -0
  418. package/lib/migrate-inventory-runs-to-list-reconcile-runs.js +51 -0
  419. package/lib/migrate-list-reconcile-runs-exclude-skipped.d.ts +25 -0
  420. package/lib/migrate-list-reconcile-runs-exclude-skipped.js +44 -0
  421. package/lib/migrate-list-reconcile-runs-invalid-skipped.d.ts +16 -0
  422. package/lib/migrate-list-reconcile-runs-invalid-skipped.js +35 -0
  423. package/lib/migrate-main-contents-columns.d.ts +26 -0
  424. package/lib/migrate-main-contents-columns.js +61 -0
  425. package/lib/migrate-page-meta-body-hash.d.ts +44 -0
  426. package/lib/migrate-page-meta-body-hash.js +63 -0
  427. package/lib/migrate-page-meta-console-error-count.d.ts +27 -0
  428. package/lib/migrate-page-meta-console-error-count.js +45 -0
  429. package/lib/migrate-page-meta-custom-element-count.d.ts +33 -0
  430. package/lib/migrate-page-meta-custom-element-count.js +51 -0
  431. package/lib/migrate-page-meta-image-scan.d.ts +27 -0
  432. package/lib/migrate-page-meta-image-scan.js +52 -0
  433. package/lib/migrate-page-tags-to-page-technologies.d.ts +39 -0
  434. package/lib/migrate-page-tags-to-page-technologies.js +79 -0
  435. package/lib/migrate-ref-tables.d.ts +25 -0
  436. package/lib/migrate-ref-tables.js +38 -0
  437. package/lib/native-executor/check-native-executor-config.d.ts +17 -0
  438. package/lib/native-executor/check-native-executor-config.js +20 -0
  439. package/lib/page-meta-column-maps.d.ts +32 -0
  440. package/lib/page-meta-column-maps.js +43 -0
  441. package/lib/page.d.ts +546 -0
  442. package/lib/page.js +764 -0
  443. package/lib/peek-archive-lock.d.ts +40 -0
  444. package/lib/peek-archive-lock.js +62 -0
  445. package/lib/populate-entity-tables/collapse-anchor-rows.d.ts +41 -0
  446. package/lib/populate-entity-tables/collapse-anchor-rows.js +87 -0
  447. package/lib/populate-entity-tables/derive-dom-path.d.ts +35 -0
  448. package/lib/populate-entity-tables/derive-dom-path.js +72 -0
  449. package/lib/populate-entity-tables/is-blob-ref-value.d.ts +16 -0
  450. package/lib/populate-entity-tables/is-blob-ref-value.js +19 -0
  451. package/lib/populate-entity-tables/match-images-to-dom-paths.d.ts +66 -0
  452. package/lib/populate-entity-tables/match-images-to-dom-paths.js +96 -0
  453. package/lib/populate-entity-tables/populate-anchor-edges.d.ts +33 -0
  454. package/lib/populate-entity-tables/populate-anchor-edges.js +153 -0
  455. package/lib/populate-entity-tables/populate-content-items.d.ts +40 -0
  456. package/lib/populate-entity-tables/populate-content-items.js +141 -0
  457. package/lib/populate-entity-tables/populate-entities.d.ts +81 -0
  458. package/lib/populate-entity-tables/populate-entities.js +110 -0
  459. package/lib/populate-entity-tables/populate-image-items.d.ts +91 -0
  460. package/lib/populate-entity-tables/populate-image-items.js +226 -0
  461. package/lib/populate-entity-tables/populate-page-meta.d.ts +33 -0
  462. package/lib/populate-entity-tables/populate-page-meta.js +267 -0
  463. package/lib/populate-entity-tables/populate-resource-items.d.ts +22 -0
  464. package/lib/populate-entity-tables/populate-resource-items.js +114 -0
  465. package/lib/populate-entity-tables/populate-resource-ref-edges.d.ts +31 -0
  466. package/lib/populate-entity-tables/populate-resource-ref-edges.js +33 -0
  467. package/lib/populate-entity-tables/resolve-blob-refs.d.ts +31 -0
  468. package/lib/populate-entity-tables/resolve-blob-refs.js +100 -0
  469. package/lib/populate-entity-tables/resolve-content-type-refs.d.ts +22 -0
  470. package/lib/populate-entity-tables/resolve-content-type-refs.js +27 -0
  471. package/lib/populate-entity-tables/resolve-header-sets.d.ts +49 -0
  472. package/lib/populate-entity-tables/resolve-header-sets.js +122 -0
  473. package/lib/populate-entity-tables/resolve-json-refs.d.ts +25 -0
  474. package/lib/populate-entity-tables/resolve-json-refs.js +67 -0
  475. package/lib/populate-entity-tables/resolve-text-refs.d.ts +30 -0
  476. package/lib/populate-entity-tables/resolve-text-refs.js +61 -0
  477. package/lib/populate-entity-tables/resolve-url-or-blob-from-maps.d.ts +21 -0
  478. package/lib/populate-entity-tables/resolve-url-or-blob-from-maps.js +27 -0
  479. package/lib/populate-entity-tables/resolve-url-refs.d.ts +33 -0
  480. package/lib/populate-entity-tables/resolve-url-refs.js +60 -0
  481. package/lib/populate-entity-tables/test-utils/count-rows.d.ts +17 -0
  482. package/lib/populate-entity-tables/test-utils/count-rows.js +20 -0
  483. package/lib/populate-entity-tables/test-utils/seed-content-items.d.ts +25 -0
  484. package/lib/populate-entity-tables/test-utils/seed-content-items.js +42 -0
  485. package/lib/populate-entity-tables/test-utils/setup-entities-db.d.ts +30 -0
  486. package/lib/populate-entity-tables/test-utils/setup-entities-db.js +175 -0
  487. package/lib/populate-entity-tables/types.d.ts +157 -0
  488. package/lib/populate-entity-tables/types.js +12 -0
  489. package/lib/populate-entity-tables/upsert-text-refs.d.ts +38 -0
  490. package/lib/populate-entity-tables/upsert-text-refs.js +78 -0
  491. package/lib/populate-ref-tables/classify-content-type.d.ts +16 -0
  492. package/lib/populate-ref-tables/classify-content-type.js +52 -0
  493. package/lib/populate-ref-tables/compute-content-hash.d.ts +22 -0
  494. package/lib/populate-ref-tables/compute-content-hash.js +26 -0
  495. package/lib/populate-ref-tables/compute-header-flags.d.ts +16 -0
  496. package/lib/populate-ref-tables/compute-header-flags.js +70 -0
  497. package/lib/populate-ref-tables/content-type-rules.d.ts +38 -0
  498. package/lib/populate-ref-tables/content-type-rules.js +133 -0
  499. package/lib/populate-ref-tables/create-header-table-caches.d.ts +25 -0
  500. package/lib/populate-ref-tables/create-header-table-caches.js +49 -0
  501. package/lib/populate-ref-tables/data-uri-url-refs-limit.d.ts +15 -0
  502. package/lib/populate-ref-tables/data-uri-url-refs-limit.js +15 -0
  503. package/lib/populate-ref-tables/decode-data-uri.d.ts +21 -0
  504. package/lib/populate-ref-tables/decode-data-uri.js +126 -0
  505. package/lib/populate-ref-tables/decompose-header-set.d.ts +29 -0
  506. package/lib/populate-ref-tables/decompose-header-set.js +157 -0
  507. package/lib/populate-ref-tables/decompose-url.d.ts +25 -0
  508. package/lib/populate-ref-tables/decompose-url.js +70 -0
  509. package/lib/populate-ref-tables/header-stability.d.ts +19 -0
  510. package/lib/populate-ref-tables/header-stability.js +22 -0
  511. package/lib/populate-ref-tables/header-value-cache-key.d.ts +17 -0
  512. package/lib/populate-ref-tables/header-value-cache-key.js +19 -0
  513. package/lib/populate-ref-tables/normalize-mime.d.ts +24 -0
  514. package/lib/populate-ref-tables/normalize-mime.js +36 -0
  515. package/lib/populate-ref-tables/populate-blob-refs.d.ts +38 -0
  516. package/lib/populate-ref-tables/populate-blob-refs.js +134 -0
  517. package/lib/populate-ref-tables/populate-content-type-refs.d.ts +27 -0
  518. package/lib/populate-ref-tables/populate-content-type-refs.js +70 -0
  519. package/lib/populate-ref-tables/populate-header-tables.d.ts +35 -0
  520. package/lib/populate-ref-tables/populate-header-tables.js +80 -0
  521. package/lib/populate-ref-tables/populate-json-refs.d.ts +29 -0
  522. package/lib/populate-ref-tables/populate-json-refs.js +101 -0
  523. package/lib/populate-ref-tables/populate-refs.d.ts +51 -0
  524. package/lib/populate-ref-tables/populate-refs.js +62 -0
  525. package/lib/populate-ref-tables/populate-text-refs.d.ts +32 -0
  526. package/lib/populate-ref-tables/populate-text-refs.js +133 -0
  527. package/lib/populate-ref-tables/populate-url-refs.d.ts +28 -0
  528. package/lib/populate-ref-tables/populate-url-refs.js +148 -0
  529. package/lib/populate-ref-tables/test-utils/count-rows.d.ts +15 -0
  530. package/lib/populate-ref-tables/test-utils/count-rows.js +17 -0
  531. package/lib/populate-ref-tables/types.d.ts +197 -0
  532. package/lib/populate-ref-tables/types.js +7 -0
  533. package/lib/populate-ref-tables/upsert-one-header-set.d.ts +34 -0
  534. package/lib/populate-ref-tables/upsert-one-header-set.js +208 -0
  535. package/lib/populate-ref-tables/volatile-header-names.d.ts +20 -0
  536. package/lib/populate-ref-tables/volatile-header-names.js +33 -0
  537. package/lib/redirect-table.d.ts +9 -0
  538. package/lib/redirect-table.js +28 -0
  539. package/lib/release-finished-statements.d.ts +42 -0
  540. package/lib/release-finished-statements.js +45 -0
  541. package/lib/resolve-redirect-chain.d.ts +33 -0
  542. package/lib/resolve-redirect-chain.js +27 -0
  543. package/lib/resource.d.ts +46 -0
  544. package/lib/resource.js +62 -0
  545. package/lib/retarget-legacy-fk-tables.d.ts +61 -0
  546. package/lib/retarget-legacy-fk-tables.js +137 -0
  547. package/lib/safe-path.d.ts +9 -0
  548. package/lib/safe-path.js +17 -0
  549. package/lib/scope/build-scope-map.d.ts +21 -0
  550. package/lib/scope/build-scope-map.js +32 -0
  551. package/lib/scope/find-scope-entry.d.ts +25 -0
  552. package/lib/scope/find-scope-entry.js +45 -0
  553. package/lib/template-classification/classify-archive-page-templates.d.ts +42 -0
  554. package/lib/template-classification/classify-archive-page-templates.js +70 -0
  555. package/lib/template-classification/classify-page-templates.d.ts +33 -0
  556. package/lib/template-classification/classify-page-templates.js +60 -0
  557. package/lib/template-classification/collect-page-ids-with-html.d.ts +24 -0
  558. package/lib/template-classification/collect-page-ids-with-html.js +30 -0
  559. package/lib/template-classification/collect-page-stylesheet-urls.d.ts +32 -0
  560. package/lib/template-classification/collect-page-stylesheet-urls.js +130 -0
  561. package/lib/template-classification/create-content-root-hint.d.ts +41 -0
  562. package/lib/template-classification/create-content-root-hint.js +51 -0
  563. package/lib/template-classification/create-page-cluster-factory.d.ts +36 -0
  564. package/lib/template-classification/create-page-cluster-factory.js +52 -0
  565. package/lib/template-classification/load-page-cluster-candidates.d.ts +32 -0
  566. package/lib/template-classification/load-page-cluster-candidates.js +93 -0
  567. package/lib/template-classification/page-cluster/resolve-page-cluster-keys.d.ts +34 -0
  568. package/lib/template-classification/page-cluster/resolve-page-cluster-keys.js +236 -0
  569. package/lib/template-classification/page-cluster/types.d.ts +123 -0
  570. package/lib/template-classification/page-cluster/types.js +1 -0
  571. package/lib/template-classification/types.d.ts +234 -0
  572. package/lib/template-classification/types.js +1 -0
  573. package/lib/test-utils/build-full-schema-test-db.d.ts +34 -0
  574. package/lib/test-utils/build-full-schema-test-db.js +74 -0
  575. package/lib/test-utils/create-legacy-analysis-tables.d.ts +13 -0
  576. package/lib/test-utils/create-legacy-analysis-tables.js +37 -0
  577. package/lib/test-utils/fk-parent-tables.d.ts +15 -0
  578. package/lib/test-utils/fk-parent-tables.js +19 -0
  579. package/lib/test-utils/seed-content-item.d.ts +35 -0
  580. package/lib/test-utils/seed-content-item.js +42 -0
  581. package/lib/test-utils/setup-legacy-fk-db.d.ts +34 -0
  582. package/lib/test-utils/setup-legacy-fk-db.js +271 -0
  583. package/lib/transfer/attach-source-database.d.ts +31 -0
  584. package/lib/transfer/attach-source-database.js +40 -0
  585. package/lib/transfer/build-split-config.d.ts +30 -0
  586. package/lib/transfer/build-split-config.js +42 -0
  587. package/lib/transfer/clear-replaced-page-rows.d.ts +23 -0
  588. package/lib/transfer/clear-replaced-page-rows.js +61 -0
  589. package/lib/transfer/concat-archives.d.ts +55 -0
  590. package/lib/transfer/concat-archives.js +95 -0
  591. package/lib/transfer/concat-source-transfer-phases.d.ts +10 -0
  592. package/lib/transfer/concat-source-transfer-phases.js +17 -0
  593. package/lib/transfer/content-item-rank-sql.d.ts +21 -0
  594. package/lib/transfer/content-item-rank-sql.js +23 -0
  595. package/lib/transfer/copy-anchor-edges.d.ts +28 -0
  596. package/lib/transfer/copy-anchor-edges.js +42 -0
  597. package/lib/transfer/copy-dictionaries-for-concat.d.ts +39 -0
  598. package/lib/transfer/copy-dictionaries-for-concat.js +81 -0
  599. package/lib/transfer/copy-dictionaries-for-split.d.ts +29 -0
  600. package/lib/transfer/copy-dictionaries-for-split.js +224 -0
  601. package/lib/transfer/copy-header-set-children.d.ts +27 -0
  602. package/lib/transfer/copy-header-set-children.js +51 -0
  603. package/lib/transfer/copy-image-items.d.ts +21 -0
  604. package/lib/transfer/copy-image-items.js +62 -0
  605. package/lib/transfer/copy-inventory-source-lists.d.ts +30 -0
  606. package/lib/transfer/copy-inventory-source-lists.js +61 -0
  607. package/lib/transfer/copy-journal-tables.d.ts +30 -0
  608. package/lib/transfer/copy-journal-tables.js +56 -0
  609. package/lib/transfer/copy-page-console-logs.d.ts +16 -0
  610. package/lib/transfer/copy-page-console-logs.js +27 -0
  611. package/lib/transfer/copy-page-html-blobs.d.ts +31 -0
  612. package/lib/transfer/copy-page-html-blobs.js +43 -0
  613. package/lib/transfer/copy-page-meta.d.ts +27 -0
  614. package/lib/transfer/copy-page-meta.js +68 -0
  615. package/lib/transfer/copy-page-template-clusters.d.ts +31 -0
  616. package/lib/transfer/copy-page-template-clusters.js +56 -0
  617. package/lib/transfer/copy-page-template-labels.d.ts +34 -0
  618. package/lib/transfer/copy-page-template-labels.js +88 -0
  619. package/lib/transfer/copy-resource-items.d.ts +29 -0
  620. package/lib/transfer/copy-resource-items.js +89 -0
  621. package/lib/transfer/copy-resource-ref-edges.d.ts +20 -0
  622. package/lib/transfer/copy-resource-ref-edges.js +33 -0
  623. package/lib/transfer/copy-simple-page-scoped-tables.d.ts +15 -0
  624. package/lib/transfer/copy-simple-page-scoped-tables.js +34 -0
  625. package/lib/transfer/count-external-pages-in-scope.d.ts +26 -0
  626. package/lib/transfer/count-external-pages-in-scope.js +40 -0
  627. package/lib/transfer/create-transfer-temp-tables.d.ts +30 -0
  628. package/lib/transfer/create-transfer-temp-tables.js +59 -0
  629. package/lib/transfer/dictionary-copy-specs.d.ts +32 -0
  630. package/lib/transfer/dictionary-copy-specs.js +28 -0
  631. package/lib/transfer/drop-transfer-temp-tables.d.ts +9 -0
  632. package/lib/transfer/drop-transfer-temp-tables.js +18 -0
  633. package/lib/transfer/flatten-redirect-chains.d.ts +44 -0
  634. package/lib/transfer/flatten-redirect-chains.js +74 -0
  635. package/lib/transfer/insert-content-items.d.ts +35 -0
  636. package/lib/transfer/insert-content-items.js +116 -0
  637. package/lib/transfer/list-transfer-columns.d.ts +35 -0
  638. package/lib/transfer/list-transfer-columns.js +45 -0
  639. package/lib/transfer/mark-in-scope-content-items.d.ts +31 -0
  640. package/lib/transfer/mark-in-scope-content-items.js +54 -0
  641. package/lib/transfer/merge-archive-configs.d.ts +51 -0
  642. package/lib/transfer/merge-archive-configs.js +85 -0
  643. package/lib/transfer/plan-content-items-for-concat.d.ts +33 -0
  644. package/lib/transfer/plan-content-items-for-concat.js +51 -0
  645. package/lib/transfer/plan-content-items-for-split.d.ts +42 -0
  646. package/lib/transfer/plan-content-items-for-split.js +83 -0
  647. package/lib/transfer/plan-resource-items.d.ts +40 -0
  648. package/lib/transfer/plan-resource-items.js +69 -0
  649. package/lib/transfer/quote-transfer-identifier.d.ts +18 -0
  650. package/lib/transfer/quote-transfer-identifier.js +20 -0
  651. package/lib/transfer/reclassify-resource-externality.d.ts +37 -0
  652. package/lib/transfer/reclassify-resource-externality.js +66 -0
  653. package/lib/transfer/remap-redirect-dest-ids.d.ts +34 -0
  654. package/lib/transfer/remap-redirect-dest-ids.js +51 -0
  655. package/lib/transfer/replace-content-items.d.ts +39 -0
  656. package/lib/transfer/replace-content-items.js +83 -0
  657. package/lib/transfer/simple-page-scoped-tables.d.ts +25 -0
  658. package/lib/transfer/simple-page-scoped-tables.js +38 -0
  659. package/lib/transfer/split-archive.d.ts +55 -0
  660. package/lib/transfer/split-archive.js +98 -0
  661. package/lib/transfer/split-source-transfer-phases.d.ts +11 -0
  662. package/lib/transfer/split-source-transfer-phases.js +18 -0
  663. package/lib/transfer/transfer-action.d.ts +34 -0
  664. package/lib/transfer/transfer-action.js +32 -0
  665. package/lib/transfer/transfer-archive-rows.d.ts +65 -0
  666. package/lib/transfer/transfer-archive-rows.js +156 -0
  667. package/lib/transfer/transfer-dictionary-tables.d.ts +12 -0
  668. package/lib/transfer/transfer-dictionary-tables.js +22 -0
  669. package/lib/transfer/transfer-post-phases.d.ts +10 -0
  670. package/lib/transfer/transfer-post-phases.js +13 -0
  671. package/lib/transfer/transfer-source-alias.d.ts +9 -0
  672. package/lib/transfer/transfer-source-alias.js +9 -0
  673. package/lib/transfer/types.d.ts +111 -0
  674. package/lib/transfer/types.js +35 -0
  675. package/lib/types.d.ts +772 -0
  676. package/lib/types.js +1 -0
  677. package/lib/url-alias/compute-tier-a-alias-key.d.ts +44 -0
  678. package/lib/url-alias/compute-tier-a-alias-key.js +47 -0
  679. package/lib/url-alias/compute-tier-b-alias-key.d.ts +23 -0
  680. package/lib/url-alias/compute-tier-b-alias-key.js +26 -0
  681. package/lib/url-alias/group-alias-candidates.d.ts +27 -0
  682. package/lib/url-alias/group-alias-candidates.js +29 -0
  683. package/lib/url-alias/types.d.ts +12 -0
  684. package/lib/url-alias/types.js +1 -0
  685. package/lib/url-pattern/compute-shape-key.d.ts +58 -0
  686. package/lib/url-pattern/compute-shape-key.js +129 -0
  687. package/lib/url-pattern/decompose-url.d.ts +33 -0
  688. package/lib/url-pattern/decompose-url.js +79 -0
  689. package/lib/url-pattern/reconstruct-url.d.ts +15 -0
  690. package/lib/url-pattern/reconstruct-url.js +33 -0
  691. package/lib/url-sort/compute-url-sort-ranks.d.ts +30 -0
  692. package/lib/url-sort/compute-url-sort-ranks.js +33 -0
  693. package/lib/utils/array/each-splitted.d.ts +10 -0
  694. package/lib/utils/array/each-splitted.js +14 -0
  695. package/lib/utils/debug.d.ts +8 -0
  696. package/lib/utils/debug.js +8 -0
  697. package/lib/utils/error/emit-error-with-retry.d.ts +40 -0
  698. package/lib/utils/error/emit-error-with-retry.js +44 -0
  699. package/lib/utils/error/emit-error.d.ts +39 -0
  700. package/lib/utils/error/emit-error.js +41 -0
  701. package/lib/utils/object/parse-response-headers.d.ts +12 -0
  702. package/lib/utils/object/parse-response-headers.js +26 -0
  703. package/lib/utils/object/redact-request-headers.d.ts +15 -0
  704. package/lib/utils/object/redact-request-headers.js +27 -0
  705. package/lib/utils/types/types.d.ts +383 -0
  706. package/lib/utils/types/types.js +1 -0
  707. package/lib/verify-migration/capture-rejection.d.ts +24 -0
  708. package/lib/verify-migration/capture-rejection.js +31 -0
  709. package/lib/verify-migration/check-anchor-edges-count.d.ts +34 -0
  710. package/lib/verify-migration/check-anchor-edges-count.js +72 -0
  711. package/lib/verify-migration/check-anchor-edges-sum.d.ts +13 -0
  712. package/lib/verify-migration/check-anchor-edges-sum.js +27 -0
  713. package/lib/verify-migration/check-content-items-count.d.ts +16 -0
  714. package/lib/verify-migration/check-content-items-count.js +30 -0
  715. package/lib/verify-migration/check-content-type-preservation.d.ts +22 -0
  716. package/lib/verify-migration/check-content-type-preservation.js +40 -0
  717. package/lib/verify-migration/check-foreign-key-integrity.d.ts +31 -0
  718. package/lib/verify-migration/check-foreign-key-integrity.js +47 -0
  719. package/lib/verify-migration/check-image-items-count.d.ts +12 -0
  720. package/lib/verify-migration/check-image-items-count.js +26 -0
  721. package/lib/verify-migration/check-page-meta-count.d.ts +15 -0
  722. package/lib/verify-migration/check-page-meta-count.js +31 -0
  723. package/lib/verify-migration/check-reader-parity.d.ts +23 -0
  724. package/lib/verify-migration/check-reader-parity.js +182 -0
  725. package/lib/verify-migration/check-resource-items-count.d.ts +17 -0
  726. package/lib/verify-migration/check-resource-items-count.js +33 -0
  727. package/lib/verify-migration/check-url-round-trip.d.ts +43 -0
  728. package/lib/verify-migration/check-url-round-trip.js +112 -0
  729. package/lib/verify-migration/types.d.ts +70 -0
  730. package/lib/verify-migration/types.js +63 -0
  731. package/lib/verify-migration/verify-migration.d.ts +41 -0
  732. package/lib/verify-migration/verify-migration.js +120 -0
  733. package/lib/with-bulk-write-pragmas.d.ts +51 -0
  734. package/lib/with-bulk-write-pragmas.js +132 -0
  735. package/lib/write-queue.d.ts +32 -0
  736. package/lib/write-queue.js +55 -0
  737. package/package.json +360 -5
@@ -0,0 +1,124 @@
1
+ import { createAdjunctTables } from './create-adjunct-tables.js';
2
+ import { createEntityTables } from './create-entity-tables.js';
3
+ import { createRefTables } from './create-ref-tables.js';
4
+ import { createTemplateTables } from './create-template-tables.js';
5
+ /**
6
+ * Initializes the archive database schema if tables do not exist.
7
+ *
8
+ * The schema is composed of five groups, each owned by a dedicated DDL
9
+ * function so the migration script (`scripts/migrate-to-0.13.mjs`) can
10
+ * provision the exact same shapes on archives it upgrades:
11
+ *
12
+ * - **`info`** (inline below): single-row crawl configuration.
13
+ * - **Ref / header dictionary tables** ({@link createRefTables}):
14
+ * `url_refs`, `content_type_refs`, `text_refs`, `json_refs`,
15
+ * `blob_refs`, `header_name_refs`, `header_value_refs`, `header_sets`,
16
+ * `header_set_entries`, `header_flags`. See that file for column-level
17
+ * rationale and the reason `blob_refs` uses a regular rowid PK instead
18
+ * of WITHOUT ROWID.
19
+ * - **Entity / edge tables** ({@link createEntityTables}):
20
+ * `content_items`, `page_meta`, `resource_items`, `anchor_edges`,
21
+ * `resource_ref_edges`, `image_items` — the write-model the crawler
22
+ * writes during a crawl and every reader queries. Must run AFTER
23
+ * `createRefTables` because most entity tables reference ref-table PKs.
24
+ * - **Adjunct tables** ({@link createAdjunctTables}): `page_errors`,
25
+ * `crawl_errors`, `technology_signals`, `page_technologies`, `page_jsonld`, `list_reconcile_runs`,
26
+ * `page_html_blobs` +
27
+ * `page_html_ref`. Must run AFTER `createEntityTables` because the
28
+ * page-scoped tables FK into `content_items(id)`.
29
+ * - **Template classification tables** ({@link createTemplateTables}):
30
+ * `page_templates`, `page_template_clusters`, `page_template_labels` —
31
+ * the crawl-end DOM-structure classification, kept apart from the
32
+ * adjunct tables because it has its own producer and write path.
33
+ *
34
+ * The legacy flat write-model tables (`pages` / `anchors` / `images` /
35
+ * `resources` / `resources-referrers`) are deliberately NOT created:
36
+ * they only exist inside pre-0.13 archives, where they serve as the
37
+ * populate source for `scripts/migrate-to-0.13.mjs` before that script
38
+ * drops them.
39
+ *
40
+ * **PRAGMA `page_size` and `journal_mode`** are set BEFORE any
41
+ * `CREATE TABLE` because SQLite only honors `page_size` changes against
42
+ * an empty database, and `journal_mode = WAL` is persistent. Other
43
+ * per-connection PRAGMAs live in {@link applyConnectionPragmas}.
44
+ *
45
+ * Pre-0.13 migration is intentionally absent. `assertCompatibleVersion`
46
+ * (called before `initSchema`) rejects older archives with a friendly
47
+ * error naming the migration scripts to run; `v0.x` policy allows
48
+ * breaking changes.
49
+ * @param instance - The Knex query builder instance connected to the database.
50
+ */
51
+ export async function initSchema(instance) {
52
+ // Only the one-shot work (PRAGMAs + `info` creation) is gated on the
53
+ // `info` table's existence. The DDL groups below run on EVERY
54
+ // call: each is internally idempotent (sentinel / IF NOT EXISTS /
55
+ // per-table guards), and re-running them self-heals an archive whose
56
+ // provisioning crashed partway through — `info` created but a later
57
+ // group missing. With a single all-or-nothing gate, such a stub would
58
+ // short-circuit here forever and every subsequent write would die with
59
+ // `no such table` and no way back.
60
+ if (!(await instance.schema.hasTable('info'))) {
61
+ // Page size must be set on an empty database file; once any data is
62
+ // written, only VACUUM can change it. journal_mode is also one-shot
63
+ // (persistent) and so stays here.
64
+ await instance.raw('PRAGMA page_size = 16384');
65
+ await instance.raw('PRAGMA journal_mode = WAL');
66
+ await instance.schema.createTable('info', (t) => {
67
+ t.increments('id');
68
+ t.string('version');
69
+ t.string('name');
70
+ t.string('baseUrl');
71
+ t.json('roots');
72
+ t.boolean('recursive');
73
+ t.integer('interval');
74
+ t.boolean('image');
75
+ t.boolean('fetchExternal');
76
+ t.integer('parallels');
77
+ t.json('excludes');
78
+ t.json('excludeKeywords');
79
+ t.json('excludeUrls');
80
+ t.integer('maxExcludedDepth');
81
+ t.integer('retry');
82
+ t.boolean('fromList');
83
+ t.boolean('disableQueries');
84
+ t.string('userAgent');
85
+ t.boolean('ignoreRobots');
86
+ t.string('mainContentSelector');
87
+ t.json('requestHeaderNames');
88
+ t.string('createdCwd');
89
+ });
90
+ }
91
+ // 0.13 ref / header dictionary tables. DDL + column-level rationale
92
+ // lives in {@link createRefTables}, shared with the migration script's
93
+ // schema catch-up — a divergence between the two paths would silently
94
+ // break the population step's UNIQUE / CHECK contract.
95
+ // `createRefTables` uses bare CREATE TABLE, so it needs a sentinel
96
+ // guard here (all 10 tables are created together — any one of them
97
+ // works as the sentinel).
98
+ if (!(await instance.schema.hasTable('url_refs'))) {
99
+ await createRefTables(instance);
100
+ }
101
+ // 0.13 core entity / edge tables — the write-model the crawler writes
102
+ // during a crawl and every reader queries. MUST run after
103
+ // {@link createRefTables} because `content_items`, `page_meta`,
104
+ // `resource_items`, `anchor_edges`, and `image_items` all reference
105
+ // the ref tables (`url_refs`, `content_type_refs`, `text_refs`,
106
+ // `json_refs`, `blob_refs`, `header_sets`) via FK clauses.
107
+ await createEntityTables(instance);
108
+ // Adjunct tables that FK into `content_items` (page_errors /
109
+ // technology_signals / page_technologies / page_jsonld /
110
+ // page_html_*) plus the standalone log tables
111
+ // (crawl_errors / list_reconcile_runs). MUST run after
112
+ // {@link createEntityTables} so the FK targets exist. DDL +
113
+ // column-level rationale lives in {@link createAdjunctTables}, which is
114
+ // shared with `scripts/migrate-to-0.13.mjs` — a divergence between the
115
+ // two paths is exactly how migrated archives ended up with stale
116
+ // `REFERENCES pages(id)` declarations in the pre-0.13 era.
117
+ await createAdjunctTables(instance);
118
+ // Template classification tables (page_templates / page_template_clusters /
119
+ // page_template_labels). Separate from the adjunct group because the
120
+ // producer is the crawl-end classification step, not the crawl write path.
121
+ // `page_templates` FKs into `content_items(id)`, so this too
122
+ // MUST run after {@link createEntityTables}.
123
+ await createTemplateTables(instance);
124
+ }
@@ -0,0 +1,21 @@
1
+ import type { PageSource } from './types.js';
2
+ /**
3
+ * Predicate that returns `true` when the given page source value belongs to
4
+ * the inventory chain — i.e. it is one of the `'inventory-*'` variants of
5
+ * {@link PageSource}.
6
+ *
7
+ * Centralises the membership check that decides whether lineage
8
+ * propagation should fire. Three call sites used to inline
9
+ * `s === 'inventory-seed' || s === 'inventory-discovered'`, which is both
10
+ * a DRY violation AND a future-proofing trap: when a new inventory-family
11
+ * label gets added (e.g. `'inventory-promoted'`), every inlined check has
12
+ * to be located and updated by hand. Routing through this predicate
13
+ * keeps the membership rule in one place.
14
+ *
15
+ * Returns `false` for `undefined` so callers can pass the raw `source`
16
+ * column value (which is non-NULL in the DB schema but reads as
17
+ * `undefined` from a missing row in JS) without a separate null check.
18
+ * @param source - The source value to test, or `undefined` when no row matched.
19
+ * @returns `true` if the source is in the inventory chain, `false` otherwise.
20
+ */
21
+ export declare function isInventorySource(source: PageSource | undefined): boolean;
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Predicate that returns `true` when the given page source value belongs to
3
+ * the inventory chain — i.e. it is one of the `'inventory-*'` variants of
4
+ * {@link PageSource}.
5
+ *
6
+ * Centralises the membership check that decides whether lineage
7
+ * propagation should fire. Three call sites used to inline
8
+ * `s === 'inventory-seed' || s === 'inventory-discovered'`, which is both
9
+ * a DRY violation AND a future-proofing trap: when a new inventory-family
10
+ * label gets added (e.g. `'inventory-promoted'`), every inlined check has
11
+ * to be located and updated by hand. Routing through this predicate
12
+ * keeps the membership rule in one place.
13
+ *
14
+ * Returns `false` for `undefined` so callers can pass the raw `source`
15
+ * column value (which is non-NULL in the DB schema but reads as
16
+ * `undefined` from a missing row in JS) without a separate null check.
17
+ * @param source - The source value to test, or `undefined` when no row matched.
18
+ * @returns `true` if the source is in the inventory chain, `false` otherwise.
19
+ */
20
+ export function isInventorySource(source) {
21
+ return source === 'inventory-seed' || source === 'inventory-discovered';
22
+ }
@@ -0,0 +1,49 @@
1
+ /**
2
+ * A resolved (closed) network-outage interval, as consumed by
3
+ * {@link isWithinOutageWindow}.
4
+ *
5
+ * This is deliberately NOT the raw `network_outages` row shape: a row whose
6
+ * `ended_at` is still `NULL` (the crawl session crashed before recovery was
7
+ * observed) must be resolved to a concrete `endedAt` by the caller — e.g.
8
+ * `listNetworkOutages` clamping it to the latest observed timestamp in the
9
+ * archive — before it reaches this function. Accepting a nullable `endedAt`
10
+ * here would let a crashed session's outage silently swallow every
11
+ * subsequent timestamp as "network-caused" forever.
12
+ */
13
+ export interface OutageWindow {
14
+ /** Epoch ms the outage is considered to have started (already backdated to the earliest triggering error). */
15
+ readonly startedAt: number;
16
+ /** Epoch ms the outage is considered to have ended. Never `NULL` — see the interface docstring. */
17
+ readonly endedAt: number;
18
+ }
19
+ /**
20
+ * Decide whether a timestamp falls inside any recorded network-outage
21
+ * window — i.e. whether an error observed at that instant is more likely
22
+ * attributable to the operator's own network than to the target site.
23
+ *
24
+ * Pure and dependency-free by design: no DB handle, no `Crawler` instance.
25
+ * This is the single predicate every consumer (`resetFailedPages`,
26
+ * `listDnsBurnedHostCandidates`, `getSummary`'s attribution split) is
27
+ * expected to call, so the inclusive/exclusive boundary decision below is
28
+ * made exactly once.
29
+ *
30
+ * **Boundaries are inclusive on both ends.** A timestamp equal to
31
+ * `startedAt` or `endedAt` counts as inside the window. This errs toward
32
+ * attributing borderline errors to the outage rather than to the site:
33
+ * classifying a genuinely network-caused failure as "unknown/site kills it
34
+ * forever" (a false negative) is worse than the reverse (a false positive
35
+ * merely costs one extra retry pass before the kind classifier sorts it out
36
+ * again).
37
+ * @param timestamp - Epoch ms to test (typically an error's `createdAt`).
38
+ * @param windows - Resolved outage windows to test against. An empty array
39
+ * always yields `false` — this is what makes an archive with no
40
+ * `network_outages` rows (every archive created before this feature, or
41
+ * any crawl with no detected outage) behave identically to today.
42
+ * @returns `true` if `timestamp` falls within any window.
43
+ * @example
44
+ * ```ts
45
+ * isWithinOutageWindow(1_000, [{ startedAt: 500, endedAt: 1_500 }]); // true
46
+ * isWithinOutageWindow(1_000, []); // false — no recorded outages
47
+ * ```
48
+ */
49
+ export declare function isWithinOutageWindow(timestamp: number, windows: readonly OutageWindow[]): boolean;
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Decide whether a timestamp falls inside any recorded network-outage
3
+ * window — i.e. whether an error observed at that instant is more likely
4
+ * attributable to the operator's own network than to the target site.
5
+ *
6
+ * Pure and dependency-free by design: no DB handle, no `Crawler` instance.
7
+ * This is the single predicate every consumer (`resetFailedPages`,
8
+ * `listDnsBurnedHostCandidates`, `getSummary`'s attribution split) is
9
+ * expected to call, so the inclusive/exclusive boundary decision below is
10
+ * made exactly once.
11
+ *
12
+ * **Boundaries are inclusive on both ends.** A timestamp equal to
13
+ * `startedAt` or `endedAt` counts as inside the window. This errs toward
14
+ * attributing borderline errors to the outage rather than to the site:
15
+ * classifying a genuinely network-caused failure as "unknown/site kills it
16
+ * forever" (a false negative) is worse than the reverse (a false positive
17
+ * merely costs one extra retry pass before the kind classifier sorts it out
18
+ * again).
19
+ * @param timestamp - Epoch ms to test (typically an error's `createdAt`).
20
+ * @param windows - Resolved outage windows to test against. An empty array
21
+ * always yields `false` — this is what makes an archive with no
22
+ * `network_outages` rows (every archive created before this feature, or
23
+ * any crawl with no detected outage) behave identically to today.
24
+ * @returns `true` if `timestamp` falls within any window.
25
+ * @example
26
+ * ```ts
27
+ * isWithinOutageWindow(1_000, [{ startedAt: 500, endedAt: 1_500 }]); // true
28
+ * isWithinOutageWindow(1_000, []); // false — no recorded outages
29
+ * ```
30
+ */
31
+ export function isWithinOutageWindow(timestamp, windows) {
32
+ return windows.some((window) => timestamp >= window.startedAt && timestamp <= window.endedAt);
33
+ }
@@ -0,0 +1,24 @@
1
+ import type { IsolatedClusterRun } from '@nitpicker/core/types';
2
+ /**
3
+ * Starts the computation of the connected components of the isolated pages
4
+ * (the inventory pages linked to only from other inventory pages), fed with
5
+ * the link edges as SQLite returns them and never holding them.
6
+ *
7
+ * `@nitpicker/query` reaches the native addon through this archive function
8
+ * (see ARCHITECTURE.md's dependency rule); what an edge counts as, how
9
+ * redirect and alias hops are followed and how the components are numbered
10
+ * are the docs of `createIsolatedClusterRun` in `@nitpicker/core`, which this
11
+ * calls as it is.
12
+ * @param candidateIds - The candidate page ids, in the order the components
13
+ * are numbered in (ascending page id for the viewer read model's `component_id`).
14
+ * @param redirects - The redirect and alias hops of the whole archive,
15
+ * `[source, destination, ...]` by page id.
16
+ * @returns The run.
17
+ * @example
18
+ * ```ts
19
+ * const run = createIsolatedClusterRun([10, 20, 30], [40, 30]);
20
+ * run.unionEdges([10, 20, 20, 40]);
21
+ * run.labels(); // Uint32Array [0, 0, 0]
22
+ * ```
23
+ */
24
+ export declare function createIsolatedClusterRun(candidateIds: ArrayLike<number>, redirects: ArrayLike<number>): IsolatedClusterRun;
@@ -0,0 +1,26 @@
1
+ import { createIsolatedClusterRun as createIsolatedClusterRunNative } from '@nitpicker/core/create-isolated-cluster-run';
2
+ /**
3
+ * Starts the computation of the connected components of the isolated pages
4
+ * (the inventory pages linked to only from other inventory pages), fed with
5
+ * the link edges as SQLite returns them and never holding them.
6
+ *
7
+ * `@nitpicker/query` reaches the native addon through this archive function
8
+ * (see ARCHITECTURE.md's dependency rule); what an edge counts as, how
9
+ * redirect and alias hops are followed and how the components are numbered
10
+ * are the docs of `createIsolatedClusterRun` in `@nitpicker/core`, which this
11
+ * calls as it is.
12
+ * @param candidateIds - The candidate page ids, in the order the components
13
+ * are numbered in (ascending page id for the viewer read model's `component_id`).
14
+ * @param redirects - The redirect and alias hops of the whole archive,
15
+ * `[source, destination, ...]` by page id.
16
+ * @returns The run.
17
+ * @example
18
+ * ```ts
19
+ * const run = createIsolatedClusterRun([10, 20, 30], [40, 30]);
20
+ * run.unionEdges([10, 20, 20, 40]);
21
+ * run.labels(); // Uint32Array [0, 0, 0]
22
+ * ```
23
+ */
24
+ export function createIsolatedClusterRun(candidateIds, redirects) {
25
+ return createIsolatedClusterRunNative(candidateIds, redirects);
26
+ }
@@ -0,0 +1,115 @@
1
+ import type { Knex } from 'knex';
2
+ /**
3
+ * Minimal shape of the query object Knex passes to `_query`.
4
+ * `response` / `context` are what the `better-sqlite3` dialect fills in for
5
+ * statements that return no rows.
6
+ */
7
+ interface DialectQuery {
8
+ sql?: string;
9
+ response?: unknown;
10
+ context?: unknown;
11
+ }
12
+ /**
13
+ * Type of Knex's internal `better-sqlite3` dialect: `Knex.Client` plus the two
14
+ * members {@link LibsqlDialect} relies on that the published declaration lacks.
15
+ * Declared as a class (not a constructor type) so the static side of
16
+ * `Knex.Client` is kept and `knex({ client: LibsqlDialect })` still type-checks.
17
+ */
18
+ declare class BetterSqlite3Client extends Knex.Client {
19
+ /**
20
+ * `true` only on the per-transaction client Knex derives from the main one
21
+ * (`makeTxClient`), through which every query of a transaction runs.
22
+ */
23
+ transacting?: boolean;
24
+ protected _query(connection: unknown, query: DialectQuery): Promise<DialectQuery>;
25
+ }
26
+ /**
27
+ * Untyped reference to Knex's internal `better-sqlite3` dialect.
28
+ *
29
+ * Knex's published `exports` do not include this subpath, so TypeScript cannot
30
+ * resolve a declaration file for it. The dialect is a concrete subclass of
31
+ * `Knex.Client` at runtime, so the safe cast is intentional.
32
+ */
33
+ declare const Base: typeof BetterSqlite3Client;
34
+ /**
35
+ * Knex dialect that reuses the `better-sqlite3` adapter logic but swaps the
36
+ * underlying driver for `libsql`. `libsql` ships pre-compiled binaries via the
37
+ * `@libsql/<platform>-<arch>` optionalDependencies pattern, so no postinstall
38
+ * download from GitHub Releases is required.
39
+ *
40
+ * A transaction that SQLite rolls back by itself (for example on a full disk)
41
+ * rejects with the original error, not with the failure of the `ROLLBACK`
42
+ * Knex sends afterwards.
43
+ * @example
44
+ * ```ts
45
+ * import knex from 'knex';
46
+ *
47
+ * import { LibsqlDialect } from './libsql-dialect.js';
48
+ *
49
+ * const db = knex({
50
+ * client: LibsqlDialect,
51
+ * connection: { filename: 'archive.sqlite' },
52
+ * useNullAsDefault: true,
53
+ * });
54
+ *
55
+ * try {
56
+ * await db.transaction(async (trx) => {
57
+ * await trx.raw('INSERT INTO t (v) VALUES (?)', ['...']);
58
+ * });
59
+ * } catch (error) {
60
+ * // `SQLITE_FULL` when the disk filled up mid-transaction,
61
+ * // not `ROLLBACK - cannot rollback - no transaction is active`.
62
+ * console.error((error as { code?: string }).code);
63
+ * }
64
+ * ```
65
+ */
66
+ export declare class LibsqlDialect extends Base {
67
+ /**
68
+ * Returns the `libsql` constructor as the SQLite driver.
69
+ *
70
+ * Typed as `unknown` to avoid leaking the `Libsql.DatabaseConstructor`
71
+ * namespace from a non-re-exported module across the public API surface.
72
+ */
73
+ protected _driver(): unknown;
74
+ /**
75
+ * Skips a `ROLLBACK` for a transaction SQLite has already rolled back, and
76
+ * delegates every other statement to the `better-sqlite3` implementation.
77
+ * Knex calls it from outside the client (`executeQuery`), so it must stay
78
+ * reachable at runtime; `protected` is only a compile-time marker, as for
79
+ * `_driver`.
80
+ *
81
+ * Why: SQLite rolls a transaction back by itself on some errors
82
+ * (`SQLITE_FULL`, `SQLITE_IOERR`, `SQLITE_INTERRUPT`, `SQLITE_NOMEM` in the
83
+ * documented list, which SQLite reserves the right to extend) and documents
84
+ * that a following `ROLLBACK` then fails harmlessly
85
+ * (https://www.sqlite.org/lang_transaction.html, "Response To Errors Within
86
+ * A Transaction"). Knex does not treat it as harmless:
87
+ * `Transaction#query` replaces the error being rolled back with the failure
88
+ * of the `ROLLBACK`, so callers would see `ROLLBACK - cannot rollback - no
89
+ * transaction is active` instead of the `SQLITE_FULL` that caused it.
90
+ *
91
+ * Why not in each caller: every transaction in the archive goes through
92
+ * this dialect, and all of them lose the original error the same way.
93
+ *
94
+ * The skip needs all of: a Knex transaction client (`transacting`), a
95
+ * connection that reports `inTransaction === false`, and a rollback
96
+ * statement. Anything else is executed, so a stray `ROLLBACK` through the
97
+ * main client, or on a connection that does not expose the flag, stays
98
+ * visible as the programming error it is.
99
+ *
100
+ * `ROLLBACK TO SAVEPOINT` is skipped under the same conditions: the
101
+ * automatic rollback discards the savepoints with the transaction. A caller
102
+ * that catches the error of a nested transaction and carries on with the
103
+ * outer one is then running in autocommit mode, because the outer
104
+ * transaction no longer exists.
105
+ *
106
+ * The result mirrors what the `better-sqlite3` dialect records for a
107
+ * statement that returns no rows. Nothing ran, so there is no row id or
108
+ * change count to report, and `0` is fine even when `safeIntegers` makes
109
+ * real results `bigint`.
110
+ * @param connection - The raw `libsql` connection.
111
+ * @param query - The Knex query object.
112
+ */
113
+ protected _query(connection: unknown, query: DialectQuery): Promise<DialectQuery>;
114
+ }
115
+ export {};
@@ -0,0 +1,116 @@
1
+ // @ts-expect-error - Internal Knex subpath without published type declarations
2
+ import Client_BetterSQLite3 from 'knex/lib/dialects/better-sqlite3/index.js';
3
+ import libsql from 'libsql';
4
+ import { dbLog } from './debug.js';
5
+ /**
6
+ * Untyped reference to Knex's internal `better-sqlite3` dialect.
7
+ *
8
+ * Knex's published `exports` do not include this subpath, so TypeScript cannot
9
+ * resolve a declaration file for it. The dialect is a concrete subclass of
10
+ * `Knex.Client` at runtime, so the safe cast is intentional.
11
+ */
12
+ const Base = Client_BetterSQLite3;
13
+ /**
14
+ * Matches `ROLLBACK` and `ROLLBACK TO SAVEPOINT`. Capture group 1 is the
15
+ * statement kind, for logging.
16
+ *
17
+ * Same prefix test Knex's `Transaction#query` (`lib/execution/transaction.js`)
18
+ * uses to recognise a rollback statement. Keep the two in step when upgrading
19
+ * Knex.
20
+ */
21
+ const ROLLBACK_PATTERN = /^(ROLLBACK(?:\s+TO\s+SAVEPOINT)?)\b/i;
22
+ /**
23
+ * Knex dialect that reuses the `better-sqlite3` adapter logic but swaps the
24
+ * underlying driver for `libsql`. `libsql` ships pre-compiled binaries via the
25
+ * `@libsql/<platform>-<arch>` optionalDependencies pattern, so no postinstall
26
+ * download from GitHub Releases is required.
27
+ *
28
+ * A transaction that SQLite rolls back by itself (for example on a full disk)
29
+ * rejects with the original error, not with the failure of the `ROLLBACK`
30
+ * Knex sends afterwards.
31
+ * @example
32
+ * ```ts
33
+ * import knex from 'knex';
34
+ *
35
+ * import { LibsqlDialect } from './libsql-dialect.js';
36
+ *
37
+ * const db = knex({
38
+ * client: LibsqlDialect,
39
+ * connection: { filename: 'archive.sqlite' },
40
+ * useNullAsDefault: true,
41
+ * });
42
+ *
43
+ * try {
44
+ * await db.transaction(async (trx) => {
45
+ * await trx.raw('INSERT INTO t (v) VALUES (?)', ['...']);
46
+ * });
47
+ * } catch (error) {
48
+ * // `SQLITE_FULL` when the disk filled up mid-transaction,
49
+ * // not `ROLLBACK - cannot rollback - no transaction is active`.
50
+ * console.error((error as { code?: string }).code);
51
+ * }
52
+ * ```
53
+ */
54
+ export class LibsqlDialect extends Base {
55
+ /**
56
+ * Returns the `libsql` constructor as the SQLite driver.
57
+ *
58
+ * Typed as `unknown` to avoid leaking the `Libsql.DatabaseConstructor`
59
+ * namespace from a non-re-exported module across the public API surface.
60
+ */
61
+ _driver() {
62
+ return libsql;
63
+ }
64
+ /**
65
+ * Skips a `ROLLBACK` for a transaction SQLite has already rolled back, and
66
+ * delegates every other statement to the `better-sqlite3` implementation.
67
+ * Knex calls it from outside the client (`executeQuery`), so it must stay
68
+ * reachable at runtime; `protected` is only a compile-time marker, as for
69
+ * `_driver`.
70
+ *
71
+ * Why: SQLite rolls a transaction back by itself on some errors
72
+ * (`SQLITE_FULL`, `SQLITE_IOERR`, `SQLITE_INTERRUPT`, `SQLITE_NOMEM` in the
73
+ * documented list, which SQLite reserves the right to extend) and documents
74
+ * that a following `ROLLBACK` then fails harmlessly
75
+ * (https://www.sqlite.org/lang_transaction.html, "Response To Errors Within
76
+ * A Transaction"). Knex does not treat it as harmless:
77
+ * `Transaction#query` replaces the error being rolled back with the failure
78
+ * of the `ROLLBACK`, so callers would see `ROLLBACK - cannot rollback - no
79
+ * transaction is active` instead of the `SQLITE_FULL` that caused it.
80
+ *
81
+ * Why not in each caller: every transaction in the archive goes through
82
+ * this dialect, and all of them lose the original error the same way.
83
+ *
84
+ * The skip needs all of: a Knex transaction client (`transacting`), a
85
+ * connection that reports `inTransaction === false`, and a rollback
86
+ * statement. Anything else is executed, so a stray `ROLLBACK` through the
87
+ * main client, or on a connection that does not expose the flag, stays
88
+ * visible as the programming error it is.
89
+ *
90
+ * `ROLLBACK TO SAVEPOINT` is skipped under the same conditions: the
91
+ * automatic rollback discards the savepoints with the transaction. A caller
92
+ * that catches the error of a nested transaction and carries on with the
93
+ * outer one is then running in autocommit mode, because the outer
94
+ * transaction no longer exists.
95
+ *
96
+ * The result mirrors what the `better-sqlite3` dialect records for a
97
+ * statement that returns no rows. Nothing ran, so there is no row id or
98
+ * change count to report, and `0` is fine even when `safeIntegers` makes
99
+ * real results `bigint`.
100
+ * @param connection - The raw `libsql` connection.
101
+ * @param query - The Knex query object.
102
+ */
103
+ async _query(connection, query) {
104
+ // `connection` may be undefined: `super._query` then reports `No connection provided`.
105
+ const inTransaction = connection
106
+ ?.inTransaction;
107
+ const rollback = ROLLBACK_PATTERN.exec(query.sql ?? '');
108
+ if (this.transacting === true && inTransaction === false && rollback) {
109
+ dbLog('Skipping %s: SQLite has already rolled the transaction back', rollback[1]);
110
+ query.response = { changes: 0, lastInsertRowid: 0 };
111
+ query.context = { lastID: 0, changes: 0 };
112
+ return query;
113
+ }
114
+ return super._query(connection, query);
115
+ }
116
+ }
@@ -0,0 +1,9 @@
1
+ import type { Knex } from 'knex';
2
+ /**
3
+ * Returns a Knex subquery builder that selects page IDs with pagination,
4
+ * ordered by `content_items.crawl_order` (nulls last), excluding
5
+ * redirected pages.
6
+ * @param limit - The maximum number of page IDs to return.
7
+ * @param offset - The number of page IDs to skip before returning results.
8
+ */
9
+ export declare function limitedPageIds(limit: number, offset: number): (qb: Knex.QueryBuilder<Record<string, unknown>, unknown>) => Promise<void>;
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Returns a Knex subquery builder that selects page IDs with pagination,
3
+ * ordered by `content_items.crawl_order` (nulls last), excluding
4
+ * redirected pages.
5
+ * @param limit - The maximum number of page IDs to return.
6
+ * @param offset - The number of page IDs to skip before returning results.
7
+ */
8
+ export function limitedPageIds(limit, offset) {
9
+ return async (qb) => {
10
+ await qb
11
+ .select('id')
12
+ .from('content_items')
13
+ .orderByRaw('`crawl_order` ASC NULLS LAST')
14
+ .whereNull('redirect_dest_id')
15
+ .limit(limit)
16
+ .offset(offset);
17
+ };
18
+ }
@@ -0,0 +1,60 @@
1
+ import type { Knex } from 'knex';
2
+ /**
3
+ * Minimum `info.version` this build accepts. Archives older than this must
4
+ * be upgraded by running the matching migration script before they can be
5
+ * opened (see {@link IncompatibleArchiveError}'s message for the mapping
6
+ * from archive version to script).
7
+ *
8
+ * This value tracks the **archive format cut**, not the npm `pkg.version`:
9
+ * a format-breaking change bumps it ahead of the corresponding release,
10
+ * and releases that do not cut the format leave it unchanged. The crawler
11
+ * writes this exact value into every new archive's `info.version`.
12
+ *
13
+ * History:
14
+ *
15
+ * - **pre-0.10**: HTML snapshots in `snapshot-html.zip` (#75), then
16
+ * relocated to `page_html_blobs` (#84); pages table has flat `noindex`,
17
+ * `og:type`-style columns derived from beholder 2.x's flat `Meta`.
18
+ * - **0.10.0**: `page_html_blobs` BLOB storage (#75/#84) +
19
+ * nested-`Meta`-derived flat columns, `meta_extras` JSON, `page_tags` /
20
+ * `page_jsonld` tables, denormalised aggregates (#85).
21
+ * - **0.13.0**: this build. Write-model refactor (epic #103) —
22
+ * `content_items` / `page_meta` / `resource_items` / `anchor_edges` /
23
+ * `resource_ref_edges` / `image_items` entity tables plus `url_refs` /
24
+ * `text_refs` / `content_type_refs` / `json_refs` / `blob_refs` /
25
+ * `header_flags` ref tables. Readers query the new tables exclusively;
26
+ * pre-0.13 archives must be upgraded with `scripts/migrate-to-0.13.mjs`
27
+ * which bumps `info.version` to `0.13.0` on completion.
28
+ * @example
29
+ * import { REQUIRED_FORMAT_VERSION } from '@nitpicker/archive/meta/assert-compatible-version';
30
+ *
31
+ * // Warn an operator before attempting to open an old archive:
32
+ * if (compareSemver(archiveInfo.version, REQUIRED_FORMAT_VERSION) < 0) {
33
+ * console.error(`Archive needs migration to format ${REQUIRED_FORMAT_VERSION}`);
34
+ * }
35
+ */
36
+ export declare const REQUIRED_FORMAT_VERSION = "0.13.0";
37
+ /**
38
+ * Verifies that the archive's on-disk format is compatible with this build.
39
+ *
40
+ * Compares the archive's `info.version` (a semver string written by
41
+ * `setConfig` at archive-create time, or by the migration script) against
42
+ * {@link REQUIRED_FORMAT_VERSION}. Older archives throw
43
+ * {@link IncompatibleArchiveError} pointing the operator at the migration
44
+ * script.
45
+ *
46
+ * Called from `Database.#init` for both writer and read-only (stub viewer)
47
+ * connections so old `._nitpicker-*` stubs surface the error too. New
48
+ * archives where the `info` table does not yet exist are tolerated —
49
+ * `initSchema` will fill them in next.
50
+ *
51
+ * The check is intentionally version-string-only, not schema-shape-based:
52
+ * `info.version` is the single declared source of truth, and a v0.10
53
+ * `migrate-to-0.10.mjs` run bumps it explicitly so the assertion passes
54
+ * once migration completes.
55
+ * @param instance - The Knex query builder for the archive's libsql connection.
56
+ * @throws {IncompatibleArchiveError} when `info.version` is older than
57
+ * {@link REQUIRED_FORMAT_VERSION}, or missing entirely on a non-empty
58
+ * archive.
59
+ */
60
+ export declare function assertCompatibleVersion(instance: Knex): Promise<void>;