@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,93 @@
1
+ import { compareSemver } from './compare-semver.js';
2
+ import { IncompatibleArchiveError } from './types.js';
3
+ /**
4
+ * Minimum `info.version` this build accepts. Archives older than this must
5
+ * be upgraded by running the matching migration script before they can be
6
+ * opened (see {@link IncompatibleArchiveError}'s message for the mapping
7
+ * from archive version to script).
8
+ *
9
+ * This value tracks the **archive format cut**, not the npm `pkg.version`:
10
+ * a format-breaking change bumps it ahead of the corresponding release,
11
+ * and releases that do not cut the format leave it unchanged. The crawler
12
+ * writes this exact value into every new archive's `info.version`.
13
+ *
14
+ * History:
15
+ *
16
+ * - **pre-0.10**: HTML snapshots in `snapshot-html.zip` (#75), then
17
+ * relocated to `page_html_blobs` (#84); pages table has flat `noindex`,
18
+ * `og:type`-style columns derived from beholder 2.x's flat `Meta`.
19
+ * - **0.10.0**: `page_html_blobs` BLOB storage (#75/#84) +
20
+ * nested-`Meta`-derived flat columns, `meta_extras` JSON, `page_tags` /
21
+ * `page_jsonld` tables, denormalised aggregates (#85).
22
+ * - **0.13.0**: this build. Write-model refactor (epic #103) —
23
+ * `content_items` / `page_meta` / `resource_items` / `anchor_edges` /
24
+ * `resource_ref_edges` / `image_items` entity tables plus `url_refs` /
25
+ * `text_refs` / `content_type_refs` / `json_refs` / `blob_refs` /
26
+ * `header_flags` ref tables. Readers query the new tables exclusively;
27
+ * pre-0.13 archives must be upgraded with `scripts/migrate-to-0.13.mjs`
28
+ * which bumps `info.version` to `0.13.0` on completion.
29
+ * @example
30
+ * import { REQUIRED_FORMAT_VERSION } from '@nitpicker/archive/meta/assert-compatible-version';
31
+ *
32
+ * // Warn an operator before attempting to open an old archive:
33
+ * if (compareSemver(archiveInfo.version, REQUIRED_FORMAT_VERSION) < 0) {
34
+ * console.error(`Archive needs migration to format ${REQUIRED_FORMAT_VERSION}`);
35
+ * }
36
+ */
37
+ export const REQUIRED_FORMAT_VERSION = '0.13.0';
38
+ /**
39
+ * Verifies that the archive's on-disk format is compatible with this build.
40
+ *
41
+ * Compares the archive's `info.version` (a semver string written by
42
+ * `setConfig` at archive-create time, or by the migration script) against
43
+ * {@link REQUIRED_FORMAT_VERSION}. Older archives throw
44
+ * {@link IncompatibleArchiveError} pointing the operator at the migration
45
+ * script.
46
+ *
47
+ * Called from `Database.#init` for both writer and read-only (stub viewer)
48
+ * connections so old `._nitpicker-*` stubs surface the error too. New
49
+ * archives where the `info` table does not yet exist are tolerated —
50
+ * `initSchema` will fill them in next.
51
+ *
52
+ * The check is intentionally version-string-only, not schema-shape-based:
53
+ * `info.version` is the single declared source of truth, and a v0.10
54
+ * `migrate-to-0.10.mjs` run bumps it explicitly so the assertion passes
55
+ * once migration completes.
56
+ * @param instance - The Knex query builder for the archive's libsql connection.
57
+ * @throws {IncompatibleArchiveError} when `info.version` is older than
58
+ * {@link REQUIRED_FORMAT_VERSION}, or missing entirely on a non-empty
59
+ * archive.
60
+ */
61
+ export async function assertCompatibleVersion(instance) {
62
+ const hasInfo = await instance.schema.hasTable('info');
63
+ if (!hasInfo) {
64
+ // Brand-new archive — `initSchema` will create `info` and fill in
65
+ // the version next.
66
+ return;
67
+ }
68
+ const hasVersionColumn = await instance.schema.hasColumn('info', 'version');
69
+ if (!hasVersionColumn) {
70
+ // Pre-version-tracked archive (very old). The column did not exist
71
+ // before the version was added to the info schema; reject with
72
+ // `'unknown'` so the operator runs the migration script.
73
+ throw new IncompatibleArchiveError('unknown', REQUIRED_FORMAT_VERSION);
74
+ }
75
+ const row = await instance
76
+ .from('info')
77
+ .select('version')
78
+ .first();
79
+ if (row === undefined) {
80
+ // `Archive.create()` calls `Database.connect` (which runs
81
+ // `initSchema` to create the info table) BEFORE `setConfig` writes
82
+ // the initial row. The transient empty-info state is a normal step
83
+ // of archive creation, not a corrupted pre-0.10 archive.
84
+ return;
85
+ }
86
+ const archiveVersion = row.version ?? null;
87
+ if (archiveVersion === null || archiveVersion === '') {
88
+ throw new IncompatibleArchiveError('unknown', REQUIRED_FORMAT_VERSION);
89
+ }
90
+ if (compareSemver(archiveVersion, REQUIRED_FORMAT_VERSION) < 0) {
91
+ throw new IncompatibleArchiveError(archiveVersion, REQUIRED_FORMAT_VERSION);
92
+ }
93
+ }
@@ -0,0 +1,23 @@
1
+ import type { JsonLdEntry } from './types.js';
2
+ /**
3
+ * Extracts the top-level `@type` from a parsed {@link JsonLdEntry}, normalised
4
+ * to a single string suitable for an indexed SQL column.
5
+ *
6
+ * JSON-LD `@type` has four shapes in the wild:
7
+ *
8
+ * - **String** — common single-type case (e.g. `"Product"`).
9
+ * - **Array** — multi-type entries (e.g. `["Product", "Offer"]`). The first
10
+ * element is taken; the rest are recoverable from `parsed`.
11
+ * - **Missing** — top-level object without an `@type` (often a `@graph`
12
+ * wrapper). Returns `null` so the column is filterable but does not over-
13
+ * fit a single type.
14
+ * - **Parse error** — `parsed === undefined` because beholder set
15
+ * `parseError`. Returns `null`.
16
+ *
17
+ * `@graph` entries deliberately return `null` rather than `'@graph'` — a
18
+ * graph is a container, not a type, and consumers grouping by `@type` would
19
+ * see noise.
20
+ * @param entry - One JSON-LD entry as captured by beholder.
21
+ * @returns The normalised `@type` string, or `null` when not extractable.
22
+ */
23
+ export declare function classifyJsonLdType(entry: JsonLdEntry): string | null;
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Extracts the top-level `@type` from a parsed {@link JsonLdEntry}, normalised
3
+ * to a single string suitable for an indexed SQL column.
4
+ *
5
+ * JSON-LD `@type` has four shapes in the wild:
6
+ *
7
+ * - **String** — common single-type case (e.g. `"Product"`).
8
+ * - **Array** — multi-type entries (e.g. `["Product", "Offer"]`). The first
9
+ * element is taken; the rest are recoverable from `parsed`.
10
+ * - **Missing** — top-level object without an `@type` (often a `@graph`
11
+ * wrapper). Returns `null` so the column is filterable but does not over-
12
+ * fit a single type.
13
+ * - **Parse error** — `parsed === undefined` because beholder set
14
+ * `parseError`. Returns `null`.
15
+ *
16
+ * `@graph` entries deliberately return `null` rather than `'@graph'` — a
17
+ * graph is a container, not a type, and consumers grouping by `@type` would
18
+ * see noise.
19
+ * @param entry - One JSON-LD entry as captured by beholder.
20
+ * @returns The normalised `@type` string, or `null` when not extractable.
21
+ */
22
+ export function classifyJsonLdType(entry) {
23
+ if (entry.parsed === undefined || entry.parsed === null)
24
+ return null;
25
+ if (typeof entry.parsed !== 'object')
26
+ return null;
27
+ const obj = entry.parsed;
28
+ const rawType = obj['@type'];
29
+ if (typeof rawType === 'string') {
30
+ const trimmed = rawType.trim();
31
+ return trimmed === '' ? null : trimmed;
32
+ }
33
+ if (Array.isArray(rawType)) {
34
+ for (const t of rawType) {
35
+ if (typeof t === 'string') {
36
+ const trimmed = t.trim();
37
+ if (trimmed !== '')
38
+ return trimmed;
39
+ }
40
+ }
41
+ }
42
+ return null;
43
+ }
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Compares two semver-like version strings.
3
+ *
4
+ * Only the major / minor / patch numeric components are considered;
5
+ * pre-release tags (`-alpha.1`) and build metadata (`+sha.abc`) are
6
+ * dropped before comparison so `"0.10.0-alpha.1"` compares equal to
7
+ * `"0.10.0"`. Missing components default to `0`, so `"0.10"` compares
8
+ * equal to `"0.10.0"`.
9
+ *
10
+ * Designed for `assertCompatibleVersion`'s
11
+ * "is the archive's `info.version` at least the required format
12
+ * version?" check — we do not need full semver semantics there, and
13
+ * pulling in the `semver` package would be overkill for one numeric
14
+ * comparison.
15
+ * @param a - The left-hand version string.
16
+ * @param b - The right-hand version string.
17
+ * @returns Negative when `a < b`, positive when `a > b`, zero when equal.
18
+ * @example
19
+ * compareSemver('0.9.0', '0.10.0') // → -1
20
+ * compareSemver('0.10.0', '0.10.0') // → 0
21
+ * compareSemver('0.10.5-alpha.1', '0.10.0') // → +5
22
+ */
23
+ export declare function compareSemver(a: string, b: string): number;
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Compares two semver-like version strings.
3
+ *
4
+ * Only the major / minor / patch numeric components are considered;
5
+ * pre-release tags (`-alpha.1`) and build metadata (`+sha.abc`) are
6
+ * dropped before comparison so `"0.10.0-alpha.1"` compares equal to
7
+ * `"0.10.0"`. Missing components default to `0`, so `"0.10"` compares
8
+ * equal to `"0.10.0"`.
9
+ *
10
+ * Designed for `assertCompatibleVersion`'s
11
+ * "is the archive's `info.version` at least the required format
12
+ * version?" check — we do not need full semver semantics there, and
13
+ * pulling in the `semver` package would be overkill for one numeric
14
+ * comparison.
15
+ * @param a - The left-hand version string.
16
+ * @param b - The right-hand version string.
17
+ * @returns Negative when `a < b`, positive when `a > b`, zero when equal.
18
+ * @example
19
+ * compareSemver('0.9.0', '0.10.0') // → -1
20
+ * compareSemver('0.10.0', '0.10.0') // → 0
21
+ * compareSemver('0.10.5-alpha.1', '0.10.0') // → +5
22
+ */
23
+ export function compareSemver(a, b) {
24
+ const pa = parseComponents(a);
25
+ const pb = parseComponents(b);
26
+ for (let i = 0; i < 3; i++) {
27
+ const diff = (pa[i] ?? 0) - (pb[i] ?? 0);
28
+ if (diff !== 0)
29
+ return diff;
30
+ }
31
+ return 0;
32
+ }
33
+ /**
34
+ * Strips pre-release / build metadata and parses the first three numeric
35
+ * components. Missing components default to `0`. Non-numeric components
36
+ * collapse to `0` rather than throwing — `assertCompatibleVersion` needs
37
+ * defensive behavior against hand-edited `info.version` strings.
38
+ * @param version
39
+ */
40
+ function parseComponents(version) {
41
+ const core = version.split(/[-+]/)[0] ?? '';
42
+ const parts = core.split('.');
43
+ const major = Number.parseInt(parts[0] ?? '0', 10);
44
+ const minor = Number.parseInt(parts[1] ?? '0', 10);
45
+ const patch = Number.parseInt(parts[2] ?? '0', 10);
46
+ return [
47
+ Number.isFinite(major) ? major : 0,
48
+ Number.isFinite(minor) ? minor : 0,
49
+ Number.isFinite(patch) ? patch : 0,
50
+ ];
51
+ }
@@ -0,0 +1,41 @@
1
+ import type { ImageScanColumns, MainContentsDenormalizedColumns } from './types.js';
2
+ import type { MainContentsData, ScrollHeightData } from '../utils/types/types.js';
3
+ /**
4
+ * Computes the `page_meta.main_content_*` / `scroll_height_*` denormalised
5
+ * aggregate columns from beholder's `MainContentsData` / `ScrollHeightData`.
6
+ *
7
+ * `mainContents` is `null` for pages that were not fully rendered (external,
8
+ * non-HTML, or metadata-only scrapes) — in that case every column is `null`.
9
+ * This mirrors {@link import('./compute-page-denormalized.js').computePageDenormalized}'s
10
+ * write-once-at-scrape-time pattern so list / detail reads never re-derive
11
+ * counts from the `page_main_content_*` child tables.
12
+ *
13
+ * Accepts `undefined` as well as `null`: `PageData` declares `mainContents`
14
+ * as required, but test fixtures across the codebase predate this field and
15
+ * omit it (`.spec.ts` files are excluded from the `tsc` build, so this goes
16
+ * uncaught at compile time) — `== null` tolerates both without forcing every
17
+ * fixture to be updated.
18
+ *
19
+ * `customElementCount` is a separate parameter, not read off `mainContents`,
20
+ * because it is not one of beholder's `MainContentsData` categories —
21
+ * nitpicker captures Web Components itself (`@nitpicker/crawler`'s `crawler/capture-custom-elements.ts`)
22
+ * after `scrapeStart` returns. It carries three distinct states:
23
+ * `undefined`/capture-not-attempted and capture-failure both collapse to
24
+ * `null` (unknown — NOT the same as "captured, zero found"), while any
25
+ * number (including `0`) means capture succeeded.
26
+ * `imageScan` follows the same independent-of-`mainContents` shape as
27
+ * `scrollHeight` (both are per-viewport beholder scan outcomes, not derived
28
+ * from the main-content region) — it is typed as a plain `number | null`
29
+ * pair here rather than beholder's `ImageScanCode` so this function does not
30
+ * require a `@d-zero/beholder` version that exports it; the caller narrows.
31
+ * @param mainContents - Beholder's per-page main-content metrics, or `null`/`undefined`.
32
+ * @param scrollHeight - Beholder's per-page scroll-height measurements, or `null`/`undefined`.
33
+ * @param customElementCount - Count of Web Components nitpicker captured in
34
+ * the main-content region, or `null`/`undefined` when capture was not
35
+ * attempted or failed.
36
+ * @param imageScan - Beholder's per-viewport `<img>` scan outcome codes, or
37
+ * `null`/`undefined` when not attempted (page not fully rendered, or the
38
+ * scraper version does not report it yet).
39
+ * @returns The twenty denormalised columns.
40
+ */
41
+ export declare function computeMainContentsDenormalized(mainContents: MainContentsData | null | undefined, scrollHeight: ScrollHeightData | null | undefined, customElementCount?: number | null, imageScan?: ImageScanColumns | null): MainContentsDenormalizedColumns;
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Computes the `page_meta.main_content_*` / `scroll_height_*` denormalised
3
+ * aggregate columns from beholder's `MainContentsData` / `ScrollHeightData`.
4
+ *
5
+ * `mainContents` is `null` for pages that were not fully rendered (external,
6
+ * non-HTML, or metadata-only scrapes) — in that case every column is `null`.
7
+ * This mirrors {@link import('./compute-page-denormalized.js').computePageDenormalized}'s
8
+ * write-once-at-scrape-time pattern so list / detail reads never re-derive
9
+ * counts from the `page_main_content_*` child tables.
10
+ *
11
+ * Accepts `undefined` as well as `null`: `PageData` declares `mainContents`
12
+ * as required, but test fixtures across the codebase predate this field and
13
+ * omit it (`.spec.ts` files are excluded from the `tsc` build, so this goes
14
+ * uncaught at compile time) — `== null` tolerates both without forcing every
15
+ * fixture to be updated.
16
+ *
17
+ * `customElementCount` is a separate parameter, not read off `mainContents`,
18
+ * because it is not one of beholder's `MainContentsData` categories —
19
+ * nitpicker captures Web Components itself (`@nitpicker/crawler`'s `crawler/capture-custom-elements.ts`)
20
+ * after `scrapeStart` returns. It carries three distinct states:
21
+ * `undefined`/capture-not-attempted and capture-failure both collapse to
22
+ * `null` (unknown — NOT the same as "captured, zero found"), while any
23
+ * number (including `0`) means capture succeeded.
24
+ * `imageScan` follows the same independent-of-`mainContents` shape as
25
+ * `scrollHeight` (both are per-viewport beholder scan outcomes, not derived
26
+ * from the main-content region) — it is typed as a plain `number | null`
27
+ * pair here rather than beholder's `ImageScanCode` so this function does not
28
+ * require a `@d-zero/beholder` version that exports it; the caller narrows.
29
+ * @param mainContents - Beholder's per-page main-content metrics, or `null`/`undefined`.
30
+ * @param scrollHeight - Beholder's per-page scroll-height measurements, or `null`/`undefined`.
31
+ * @param customElementCount - Count of Web Components nitpicker captured in
32
+ * the main-content region, or `null`/`undefined` when capture was not
33
+ * attempted or failed.
34
+ * @param imageScan - Beholder's per-viewport `<img>` scan outcome codes, or
35
+ * `null`/`undefined` when not attempted (page not fully rendered, or the
36
+ * scraper version does not report it yet).
37
+ * @returns The twenty denormalised columns.
38
+ */
39
+ export function computeMainContentsDenormalized(mainContents, scrollHeight, customElementCount, imageScan) {
40
+ if (mainContents == null) {
41
+ return {
42
+ main_content_node_name: null,
43
+ main_content_id: null,
44
+ main_content_role: null,
45
+ main_content_selector: null,
46
+ main_content_class_list: null,
47
+ main_content_word_count: null,
48
+ main_content_body_word_count: null,
49
+ main_content_heading_count: null,
50
+ main_content_image_count: null,
51
+ main_content_table_count: null,
52
+ main_content_button_count: null,
53
+ main_content_iframe_count: null,
54
+ main_content_video_count: null,
55
+ main_content_audio_count: null,
56
+ main_content_canvas_count: null,
57
+ main_content_custom_element_count: null,
58
+ scroll_height_desktop: null,
59
+ scroll_height_mobile: null,
60
+ image_scan_desktop: null,
61
+ image_scan_mobile: null,
62
+ };
63
+ }
64
+ return {
65
+ main_content_node_name: mainContents.main?.nodeName ?? null,
66
+ main_content_id: mainContents.main?.id ?? null,
67
+ main_content_role: mainContents.main?.role ?? null,
68
+ main_content_selector: mainContents.main?.selector ?? null,
69
+ main_content_class_list: mainContents.main
70
+ ? JSON.stringify(mainContents.main.classList)
71
+ : null,
72
+ main_content_word_count: mainContents.wordCount,
73
+ main_content_body_word_count: mainContents.bodyWordCount,
74
+ main_content_heading_count: mainContents.headings.length,
75
+ main_content_image_count: mainContents.images.length,
76
+ main_content_table_count: mainContents.tables.length,
77
+ main_content_button_count: mainContents.buttons.length,
78
+ main_content_iframe_count: mainContents.iframes.length,
79
+ main_content_video_count: mainContents.videos.length,
80
+ main_content_audio_count: mainContents.audios.length,
81
+ main_content_canvas_count: mainContents.canvases.length,
82
+ main_content_custom_element_count: customElementCount ?? null,
83
+ scroll_height_desktop: scrollHeight?.desktop ?? null,
84
+ scroll_height_mobile: scrollHeight?.mobile ?? null,
85
+ image_scan_desktop: imageScan?.desktop ?? null,
86
+ image_scan_mobile: imageScan?.mobile ?? null,
87
+ };
88
+ }
@@ -0,0 +1,20 @@
1
+ import type { PageDenormalizedColumns, Meta } from './types.js';
2
+ /**
3
+ * Computes the denormalised aggregate columns stored on the `pages` table at
4
+ * write time: `tag_count`, `jsonld_count`, `tags_providers_csv`.
5
+ *
6
+ * Why denormalise: the Sheets report and the `get-page-detail` summary need
7
+ * "how many JSON-LD entries?" and "which Wappalyzer providers?" for every
8
+ * page row. Computing those at read time forces either a per-page sub-query
9
+ * (N+1) or a site-wide `GROUP BY` (heavy on 1M-page archives). Writing them
10
+ * once at scrape time keeps the read path to a single `pages` projection.
11
+ *
12
+ * `tags_providers_csv` uses comma as separator (no escaping). Wappalyzer
13
+ * provider names do not contain commas in practice; if that ever changes,
14
+ * switch to a JSON array column or use `\x1f` as separator. The CSV form
15
+ * exists because Sheets / Google Spreadsheet renders comma-separated lists
16
+ * natively without unwrapping JSON.
17
+ * @param meta - Beholder-derived metadata for the page.
18
+ * @returns The three denormalised columns.
19
+ */
20
+ export declare function computePageDenormalized(meta: Meta): PageDenormalizedColumns;
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Computes the denormalised aggregate columns stored on the `pages` table at
3
+ * write time: `tag_count`, `jsonld_count`, `tags_providers_csv`.
4
+ *
5
+ * Why denormalise: the Sheets report and the `get-page-detail` summary need
6
+ * "how many JSON-LD entries?" and "which Wappalyzer providers?" for every
7
+ * page row. Computing those at read time forces either a per-page sub-query
8
+ * (N+1) or a site-wide `GROUP BY` (heavy on 1M-page archives). Writing them
9
+ * once at scrape time keeps the read path to a single `pages` projection.
10
+ *
11
+ * `tags_providers_csv` uses comma as separator (no escaping). Wappalyzer
12
+ * provider names do not contain commas in practice; if that ever changes,
13
+ * switch to a JSON array column or use `\x1f` as separator. The CSV form
14
+ * exists because Sheets / Google Spreadsheet renders comma-separated lists
15
+ * natively without unwrapping JSON.
16
+ * @param meta - Beholder-derived metadata for the page.
17
+ * @returns The three denormalised columns.
18
+ */
19
+ export function computePageDenormalized(meta) {
20
+ // `??` guards tolerate the legacy "minimal meta" shape (`{ title: 'X' }`)
21
+ // produced by older test fixtures. Real beholder 3.0.0 always populates
22
+ // these required fields; the guards only matter for test fixtures that
23
+ // pre-date the v2 schema.
24
+ const tagEntries = meta.tags?.entries ?? [];
25
+ const jsonLd = meta.jsonLd ?? [];
26
+ const speculationRules = meta.speculationRules ?? [];
27
+ const tag_count = tagEntries.length;
28
+ const jsonld_count = jsonLd.length + speculationRules.length;
29
+ const providers = new Set();
30
+ for (const entry of tagEntries) {
31
+ providers.add(entry.provider);
32
+ }
33
+ const tags_providers_csv = [...providers].toSorted().join(',');
34
+ return { tag_count, jsonld_count, tags_providers_csv };
35
+ }
@@ -0,0 +1,34 @@
1
+ import type { FlatPageMetaColumns, Meta } from './types.js';
2
+ /**
3
+ * Derives the {@link FlatPageMetaColumns} (`pages` table flat columns) from a
4
+ * beholder {@link Meta} object.
5
+ *
6
+ * Handles three concerns the database layer should not re-implement:
7
+ *
8
+ * 1. **Null-safe traversal** of the new nested Meta shape
9
+ * (`meta.og?.title`, `meta.robots?.noindex`, `meta.link?.canonical`, etc.).
10
+ * All optional sub-objects are guarded so an absent meta tag becomes
11
+ * `null` rather than a runtime crash.
12
+ *
13
+ * 2. **URL absolutisation** for every URL-shaped column. beholder 3.0.0
14
+ * extracts link/og href values via `link.getAttribute('href')`, which
15
+ * preserves relative URLs as-written. `find-mismatches` compares
16
+ * `canonical != url` directly, so we must resolve everything against the
17
+ * page URL (or `<base href>` if present) before persistence. Malformed
18
+ * URLs become `null` rather than blowing up the entire insert.
19
+ *
20
+ * 3. **Boolean → integer coercion** for SQLite-style boolean columns
21
+ * (`robots_*`, `formatDetection_telephone`). `undefined` and unparseable
22
+ * values map to `null`.
23
+ *
24
+ * URL-shaped columns: `canonical`, `og_url`, `og_image`, `amphtml`,
25
+ * `manifest`, `icon_href`, `appleTouchIcon_href`, `twitter_image`.
26
+ * @param meta - Beholder-derived metadata for the page.
27
+ * @param pageUrl - Absolute URL of the page being persisted. Used as the
28
+ * fallback base when `meta.baseHref` is absent or relative.
29
+ * @returns A flat object whose keys map 1:1 to `pages` table columns.
30
+ * @example
31
+ * deriveFlatFromMeta(meta, 'https://example.com/about')
32
+ * // → { canonical: 'https://example.com/about', og_title: '...', ... }
33
+ */
34
+ export declare function deriveFlatFromMeta(meta: Meta, pageUrl: string): FlatPageMetaColumns;
@@ -0,0 +1,158 @@
1
+ /**
2
+ * Derives the {@link FlatPageMetaColumns} (`pages` table flat columns) from a
3
+ * beholder {@link Meta} object.
4
+ *
5
+ * Handles three concerns the database layer should not re-implement:
6
+ *
7
+ * 1. **Null-safe traversal** of the new nested Meta shape
8
+ * (`meta.og?.title`, `meta.robots?.noindex`, `meta.link?.canonical`, etc.).
9
+ * All optional sub-objects are guarded so an absent meta tag becomes
10
+ * `null` rather than a runtime crash.
11
+ *
12
+ * 2. **URL absolutisation** for every URL-shaped column. beholder 3.0.0
13
+ * extracts link/og href values via `link.getAttribute('href')`, which
14
+ * preserves relative URLs as-written. `find-mismatches` compares
15
+ * `canonical != url` directly, so we must resolve everything against the
16
+ * page URL (or `<base href>` if present) before persistence. Malformed
17
+ * URLs become `null` rather than blowing up the entire insert.
18
+ *
19
+ * 3. **Boolean → integer coercion** for SQLite-style boolean columns
20
+ * (`robots_*`, `formatDetection_telephone`). `undefined` and unparseable
21
+ * values map to `null`.
22
+ *
23
+ * URL-shaped columns: `canonical`, `og_url`, `og_image`, `amphtml`,
24
+ * `manifest`, `icon_href`, `appleTouchIcon_href`, `twitter_image`.
25
+ * @param meta - Beholder-derived metadata for the page.
26
+ * @param pageUrl - Absolute URL of the page being persisted. Used as the
27
+ * fallback base when `meta.baseHref` is absent or relative.
28
+ * @returns A flat object whose keys map 1:1 to `pages` table columns.
29
+ * @example
30
+ * deriveFlatFromMeta(meta, 'https://example.com/about')
31
+ * // → { canonical: 'https://example.com/about', og_title: '...', ... }
32
+ */
33
+ export function deriveFlatFromMeta(meta, pageUrl) {
34
+ const base = resolveBase(meta.baseHref, pageUrl);
35
+ const robots = meta.robots;
36
+ const og = meta.og;
37
+ const ogArticle = og?.article;
38
+ const twitter = meta.twitter;
39
+ const link = meta.link;
40
+ const formatDetection = meta.formatDetection;
41
+ return {
42
+ // Document basics
43
+ lang: nullableString(meta.lang),
44
+ dir: nullableString(meta.dir),
45
+ charset: nullableString(meta.charset),
46
+ baseHref: absolutizeUrl(meta.baseHref, pageUrl),
47
+ viewport_raw: nullableString(meta.viewport?.raw),
48
+ themeColor: nullableString(meta.themeColor),
49
+ applicationName: nullableString(meta.applicationName),
50
+ author: nullableString(meta.author),
51
+ generator: nullableString(meta.generator),
52
+ publisher: nullableString(meta.publisher),
53
+ // Robots
54
+ robots_raw: nullableString(robots?.raw),
55
+ robots_noindex: booleanToInt(robots?.noindex),
56
+ robots_nofollow: booleanToInt(robots?.nofollow),
57
+ robots_noarchive: booleanToInt(robots?.noarchive),
58
+ robots_noimageindex: booleanToInt(robots?.noimageindex),
59
+ googlebot: nullableString(meta.googlebot),
60
+ // Link (1:1 only)
61
+ canonical: absolutizeUrl(link?.canonical, base),
62
+ amphtml: absolutizeUrl(link?.amphtml, base),
63
+ manifest: absolutizeUrl(link?.manifest, base),
64
+ icon_href: absolutizeUrl(link?.icon?.href, base),
65
+ appleTouchIcon_href: absolutizeUrl(link?.appleTouchIcon?.href, base),
66
+ // Open Graph
67
+ og_type: nullableString(og?.type),
68
+ og_title: nullableString(og?.title),
69
+ og_url: absolutizeUrl(og?.url, base),
70
+ og_site_name: nullableString(og?.siteName),
71
+ og_description: nullableString(og?.description),
72
+ og_image: absolutizeUrl(og?.imageUrl ?? og?.image?.[0], base),
73
+ og_image_alt: nullableString(og?.imageAlt),
74
+ og_image_width: nullableString(og?.imageWidth),
75
+ og_image_height: nullableString(og?.imageHeight),
76
+ og_locale: nullableString(og?.locale),
77
+ og_article_published_time: nullableString(ogArticle?.publishedTime),
78
+ og_article_modified_time: nullableString(ogArticle?.modifiedTime),
79
+ // Twitter
80
+ twitter_card: nullableString(twitter?.card),
81
+ twitter_site: nullableString(twitter?.site),
82
+ twitter_creator: nullableString(twitter?.creator),
83
+ twitter_title: nullableString(twitter?.title),
84
+ twitter_description: nullableString(twitter?.description),
85
+ twitter_image: absolutizeUrl(twitter?.image ?? twitter?.imageSrc, base),
86
+ // One-offs
87
+ fb_app_id: nullableString(meta.fb?.appId),
88
+ verification_google: nullableString(meta.verification?.google),
89
+ formatDetection_telephone: booleanToInt(formatDetection?.telephone),
90
+ // Title / description / keywords (top-level Meta fields)
91
+ title: nullableString(meta.title),
92
+ description: nullableString(meta.description),
93
+ keywords: nullableString(meta.keywords),
94
+ };
95
+ }
96
+ /**
97
+ * Resolves the effective base URL for relative-URL absolutisation.
98
+ *
99
+ * Falls back to `pageUrl` when `baseHref` is absent. When `baseHref` itself
100
+ * is a relative URL (rare but spec-permitted), resolves it against
101
+ * `pageUrl` first so subsequent `new URL(value, base)` calls see an
102
+ * absolute base.
103
+ * @param baseHref
104
+ * @param pageUrl
105
+ */
106
+ function resolveBase(baseHref, pageUrl) {
107
+ if (!baseHref)
108
+ return pageUrl;
109
+ try {
110
+ return new URL(baseHref, pageUrl).href;
111
+ }
112
+ catch {
113
+ return pageUrl;
114
+ }
115
+ }
116
+ /**
117
+ * Resolves a possibly-relative URL against a base.
118
+ *
119
+ * Returns `null` for `undefined` / empty string / unparseable input so a
120
+ * malformed page does not abort the entire `#insertPage` call.
121
+ * @param value
122
+ * @param base
123
+ */
124
+ function absolutizeUrl(value, base) {
125
+ if (value === undefined || value === null || value === '')
126
+ return null;
127
+ try {
128
+ return new URL(value, base).href;
129
+ }
130
+ catch {
131
+ return null;
132
+ }
133
+ }
134
+ /**
135
+ * Normalises optional / empty strings to `null` so SQL `IS NULL` queries
136
+ * behave consistently. Trim is intentional — leading/trailing whitespace in
137
+ * `<meta content=>` is meaningless for downstream consumers.
138
+ * @param value
139
+ */
140
+ function nullableString(value) {
141
+ if (value === undefined || value === null)
142
+ return null;
143
+ const trimmed = value.trim();
144
+ return trimmed === '' ? null : trimmed;
145
+ }
146
+ /**
147
+ * Converts an optional boolean to SQLite's 0/1 integer representation. Any
148
+ * non-boolean (`undefined`, non-boolean string from `boolean-true` keys)
149
+ * becomes `null`.
150
+ * @param value
151
+ */
152
+ function booleanToInt(value) {
153
+ if (value === true)
154
+ return 1;
155
+ if (value === false)
156
+ return 0;
157
+ return null;
158
+ }
@@ -0,0 +1,20 @@
1
+ import type { Meta } from './types.js';
2
+ /**
3
+ * Derives the `meta_extras` JSON payload from a beholder {@link Meta} object.
4
+ *
5
+ * Strategy: pass-through everything except data that lives in dedicated
6
+ * tables (`page_jsonld`, `page_tags`) or that is debug-only
7
+ * (`_raw`). Flat columns are intentionally **not** stripped — the modest
8
+ * storage duplication is preferred over a fragile field-by-field denylist
9
+ * that breaks every time beholder grows new Meta fields.
10
+ *
11
+ * The output is JSON-stringified by the caller (`#insertPage`) and stored in
12
+ * `pages.meta_extras`. Consumers read it back via `get-page-detail` and the
13
+ * Page wrapper's `metaExtras` getter.
14
+ *
15
+ * Plan note: "ファイルサイズが多少増えてもいいから取り出しパフォーマンスを優先" — this is exactly that
16
+ * trade-off. Future Meta fields are auto-captured without code change.
17
+ * @param meta - Beholder-derived metadata for the page.
18
+ * @returns Plain object suitable for `JSON.stringify`.
19
+ */
20
+ export declare function deriveMetaExtras(meta: Meta): Record<string, unknown>;
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Derives the `meta_extras` JSON payload from a beholder {@link Meta} object.
3
+ *
4
+ * Strategy: pass-through everything except data that lives in dedicated
5
+ * tables (`page_jsonld`, `page_tags`) or that is debug-only
6
+ * (`_raw`). Flat columns are intentionally **not** stripped — the modest
7
+ * storage duplication is preferred over a fragile field-by-field denylist
8
+ * that breaks every time beholder grows new Meta fields.
9
+ *
10
+ * The output is JSON-stringified by the caller (`#insertPage`) and stored in
11
+ * `pages.meta_extras`. Consumers read it back via `get-page-detail` and the
12
+ * Page wrapper's `metaExtras` getter.
13
+ *
14
+ * Plan note: "ファイルサイズが多少増えてもいいから取り出しパフォーマンスを優先" — this is exactly that
15
+ * trade-off. Future Meta fields are auto-captured without code change.
16
+ * @param meta - Beholder-derived metadata for the page.
17
+ * @returns Plain object suitable for `JSON.stringify`.
18
+ */
19
+ export function deriveMetaExtras(meta) {
20
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars -- we destructure to omit these from the spread
21
+ const { jsonLd, speculationRules, tags, _raw, ...rest } = meta;
22
+ return rest;
23
+ }