@nitpicker/archive 0.0.0 → 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 +106 -0
  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 +350 -3
@@ -0,0 +1,17 @@
1
+ import type { TagRowForInsert, TagsMeta } from './types.js';
2
+ /**
3
+ * Flattens {@link TagsMeta.entries} (per provider × external-id tuple) into
4
+ * insert-ready rows for the `page_tags` table.
5
+ *
6
+ * One Wappalyzer entry → one row. `entry.id` becomes `externalId`. `category`
7
+ * is the first element of `categories`; the full list is preserved in the
8
+ * `categories` JSON column. `sources` is preserved verbatim as a JSON column.
9
+ *
10
+ * `pageId` is **not** filled here — the database layer injects it because the
11
+ * page row is `INSERT`-ed in the same transaction and its ID is known only at
12
+ * insert time.
13
+ * @param tags - The `meta.tags` object from beholder.
14
+ * @returns Rows ready for the `page_tags` insert; empty array when no tags
15
+ * were detected.
16
+ */
17
+ export declare function extractTagsForArchive(tags: TagsMeta | undefined): ReadonlyArray<Omit<TagRowForInsert, 'pageId'>>;
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Flattens {@link TagsMeta.entries} (per provider × external-id tuple) into
3
+ * insert-ready rows for the `page_tags` table.
4
+ *
5
+ * One Wappalyzer entry → one row. `entry.id` becomes `externalId`. `category`
6
+ * is the first element of `categories`; the full list is preserved in the
7
+ * `categories` JSON column. `sources` is preserved verbatim as a JSON column.
8
+ *
9
+ * `pageId` is **not** filled here — the database layer injects it because the
10
+ * page row is `INSERT`-ed in the same transaction and its ID is known only at
11
+ * insert time.
12
+ * @param tags - The `meta.tags` object from beholder.
13
+ * @returns Rows ready for the `page_tags` insert; empty array when no tags
14
+ * were detected.
15
+ */
16
+ export function extractTagsForArchive(tags) {
17
+ // `tags` can be undefined when fed legacy minimal-Meta test fixtures.
18
+ // Real beholder 3.0.0 always populates this required field.
19
+ const entries = tags?.entries ?? [];
20
+ if (entries.length === 0)
21
+ return [];
22
+ return entries.map((entry) => ({
23
+ provider: entry.provider,
24
+ category: entry.categories[0] ?? null,
25
+ externalId: entry.id ?? null,
26
+ version: entry.version ?? null,
27
+ confidence: entry.confidence ?? null,
28
+ categories: [...entry.categories],
29
+ sources: entry.sources.map((s) => ({
30
+ type: s.type,
31
+ src: s.src,
32
+ location: s.location,
33
+ globalName: s.globalName,
34
+ })),
35
+ }));
36
+ }
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Decodes the `page_meta.main_content_class_list` column — the detected
3
+ * main-content element's CSS classes, stored as a JSON array — shared by
4
+ * `Page.mainContentClassList` and template classification's page loader so
5
+ * both read the column the same way.
6
+ *
7
+ * The crawler writes the column with `JSON.stringify` on a string array, so
8
+ * anything else is a corrupt archive; it throws rather than guessing, since
9
+ * a silently dropped class list would change which template a page lands in.
10
+ * @param raw - The column value; `null` when no main region was detected.
11
+ * @returns The class names, or `null` when no main region was detected.
12
+ * @throws {Error} When the value is not a JSON array of strings.
13
+ * @example
14
+ * ```ts
15
+ * parseMainContentClassList('["spc","wide"]'); // ['spc', 'wide']
16
+ * parseMainContentClassList(null); // null
17
+ * ```
18
+ */
19
+ export declare function parseMainContentClassList(raw: string | null): string[] | null;
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Decodes the `page_meta.main_content_class_list` column — the detected
3
+ * main-content element's CSS classes, stored as a JSON array — shared by
4
+ * `Page.mainContentClassList` and template classification's page loader so
5
+ * both read the column the same way.
6
+ *
7
+ * The crawler writes the column with `JSON.stringify` on a string array, so
8
+ * anything else is a corrupt archive; it throws rather than guessing, since
9
+ * a silently dropped class list would change which template a page lands in.
10
+ * @param raw - The column value; `null` when no main region was detected.
11
+ * @returns The class names, or `null` when no main region was detected.
12
+ * @throws {Error} When the value is not a JSON array of strings.
13
+ * @example
14
+ * ```ts
15
+ * parseMainContentClassList('["spc","wide"]'); // ['spc', 'wide']
16
+ * parseMainContentClassList(null); // null
17
+ * ```
18
+ */
19
+ export function parseMainContentClassList(raw) {
20
+ if (raw === null) {
21
+ return null;
22
+ }
23
+ let parsed;
24
+ try {
25
+ parsed = JSON.parse(raw);
26
+ }
27
+ catch {
28
+ throw new Error(`main_content_class_list is not valid JSON: ${raw}`);
29
+ }
30
+ if (!Array.isArray(parsed) || parsed.some((name) => typeof name !== 'string')) {
31
+ throw new Error(`main_content_class_list is not a JSON array of strings: ${raw}`);
32
+ }
33
+ return parsed;
34
+ }
@@ -0,0 +1,17 @@
1
+ import type { JsonLdRow, JsonLdSummary } from './types.js';
2
+ /**
3
+ * Builds the {@link JsonLdSummary} object returned by `get-page-detail` from a
4
+ * page's JSON-LD rows.
5
+ *
6
+ * Why summary: the raw payload of a single page's JSON-LD can reach several
7
+ * MB on e-commerce sites (Amazon product page = 50 schemas × 50KB). Returning
8
+ * that inline blows up MCP / LLM token budgets. The summary preserves the
9
+ * shape of the data (counts + unique types + parse error count) so consumers
10
+ * can decide whether to drill in via `get-page-jsonld(url)`.
11
+ *
12
+ * Entries with `type === null` are surfaced as `'(unknown)'` so the type
13
+ * list is enumerable without sentinel handling on the consumer side.
14
+ * @param rows - All `page_jsonld` rows for one page.
15
+ * @returns Summary with `count`, sorted unique `types[]`, and `parseErrorCount`.
16
+ */
17
+ export declare function summarizeJsonLd(rows: readonly JsonLdRow[]): JsonLdSummary;
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Builds the {@link JsonLdSummary} object returned by `get-page-detail` from a
3
+ * page's JSON-LD rows.
4
+ *
5
+ * Why summary: the raw payload of a single page's JSON-LD can reach several
6
+ * MB on e-commerce sites (Amazon product page = 50 schemas × 50KB). Returning
7
+ * that inline blows up MCP / LLM token budgets. The summary preserves the
8
+ * shape of the data (counts + unique types + parse error count) so consumers
9
+ * can decide whether to drill in via `get-page-jsonld(url)`.
10
+ *
11
+ * Entries with `type === null` are surfaced as `'(unknown)'` so the type
12
+ * list is enumerable without sentinel handling on the consumer side.
13
+ * @param rows - All `page_jsonld` rows for one page.
14
+ * @returns Summary with `count`, sorted unique `types[]`, and `parseErrorCount`.
15
+ */
16
+ export function summarizeJsonLd(rows) {
17
+ const types = new Set();
18
+ let parseErrorCount = 0;
19
+ for (const row of rows) {
20
+ types.add(row.type ?? '(unknown)');
21
+ if (row.parseError !== null)
22
+ parseErrorCount++;
23
+ }
24
+ return {
25
+ count: rows.length,
26
+ types: [...types].toSorted(),
27
+ parseErrorCount,
28
+ };
29
+ }
@@ -0,0 +1,46 @@
1
+ import type { PageTechnologyPartial, TechnologySignalPartial } from './types.js';
2
+ /**
3
+ * Options for {@link combineTechnologyConfidence}.
4
+ */
5
+ export interface CombineTechnologyConfidenceOptions {
6
+ /**
7
+ * Skip the `TECHNOLOGY_CONFIDENCE_THRESHOLD` drop. Set by the `page_tags`
8
+ * legacy-migration callers (`migrate-page-tags-to-page-technologies.ts`,
9
+ * `retarget-legacy-fk-tables.ts`): the threshold exists to filter noisy
10
+ * NEW detections at crawl time, but migration is converting Wappalyzer
11
+ * detections the old `page_tags`-based API already returned
12
+ * unconditionally (including low-confidence ones) — dropping them here
13
+ * would silently and permanently lose data with no recovery path (v0.x
14
+ * policy is read-time migration only, no retroactive re-crawl).
15
+ */
16
+ skipThreshold?: boolean;
17
+ }
18
+ /**
19
+ * Combines every signal detected for one technology on one page into a
20
+ * single confidence score via noisy-OR:
21
+ *
22
+ * ```
23
+ * confidence = round(100 * (1 - Π (1 - weight/100)))
24
+ * ```
25
+ *
26
+ * over each DISTINCT `signalType` present (same signal type appearing
27
+ * twice — e.g. two different `url-pattern` definitions both matching —
28
+ * counts once, at its highest weight; compounding only happens ACROSS
29
+ * signal types, which is what makes this "multiple independent signals
30
+ * agree" rather than "one noisy signal repeated"). A single signal's
31
+ * result equals its own weight exactly (`1 - (1 - w/100) = w/100`).
32
+ *
33
+ * Technologies whose combined confidence falls below
34
+ * `TECHNOLOGY_CONFIDENCE_THRESHOLD` are dropped entirely — a lone weak
35
+ * signal (e.g. `id="app"`, weight 15) is noise, not a detection, and
36
+ * `page_technologies` has no `isDetected` column to hide it behind; the
37
+ * row simply is not written. Pass `options.skipThreshold` to keep every
38
+ * technology regardless of confidence (see its docs for why).
39
+ * @param signals - Every signal detected for a single page, across all
40
+ * technologies (this function groups by `technology` internally).
41
+ * @param options - See {@link CombineTechnologyConfidenceOptions}.
42
+ * @returns One {@link PageTechnologyPartial} per technology (filtered by
43
+ * the confidence threshold unless `options.skipThreshold` is set), in no
44
+ * particular order.
45
+ */
46
+ export declare function combineTechnologyConfidence(signals: readonly TechnologySignalPartial[], options?: CombineTechnologyConfidenceOptions): PageTechnologyPartial[];
@@ -0,0 +1,93 @@
1
+ import { TECHNOLOGY_CONFIDENCE_THRESHOLD } from './technology-signal-definitions.js';
2
+ /**
3
+ * Priority order for picking which signal's `category`/`version` wins when
4
+ * more than one signal for the same technology supplies one. `wappalyzer`
5
+ * wins first — it is the only source with a real Wappalyzer-reported
6
+ * `version`; `meta-generator` second — also carries a real version
7
+ * (`<meta name="generator" content="Astro v4.2.0">`); the rest never
8
+ * carry a version and are listed only so the `.find()` below terminates
9
+ * deterministically regardless of definition order.
10
+ */
11
+ const CATEGORY_VERSION_SOURCE_PRIORITY = [
12
+ 'wappalyzer',
13
+ 'meta-generator',
14
+ 'html-marker',
15
+ 'url-pattern',
16
+ 'scoped-attr',
17
+ 'js-license-comment',
18
+ 'weak-marker',
19
+ ];
20
+ /**
21
+ * Combines every signal detected for one technology on one page into a
22
+ * single confidence score via noisy-OR:
23
+ *
24
+ * ```
25
+ * confidence = round(100 * (1 - Π (1 - weight/100)))
26
+ * ```
27
+ *
28
+ * over each DISTINCT `signalType` present (same signal type appearing
29
+ * twice — e.g. two different `url-pattern` definitions both matching —
30
+ * counts once, at its highest weight; compounding only happens ACROSS
31
+ * signal types, which is what makes this "multiple independent signals
32
+ * agree" rather than "one noisy signal repeated"). A single signal's
33
+ * result equals its own weight exactly (`1 - (1 - w/100) = w/100`).
34
+ *
35
+ * Technologies whose combined confidence falls below
36
+ * `TECHNOLOGY_CONFIDENCE_THRESHOLD` are dropped entirely — a lone weak
37
+ * signal (e.g. `id="app"`, weight 15) is noise, not a detection, and
38
+ * `page_technologies` has no `isDetected` column to hide it behind; the
39
+ * row simply is not written. Pass `options.skipThreshold` to keep every
40
+ * technology regardless of confidence (see its docs for why).
41
+ * @param signals - Every signal detected for a single page, across all
42
+ * technologies (this function groups by `technology` internally).
43
+ * @param options - See {@link CombineTechnologyConfidenceOptions}.
44
+ * @returns One {@link PageTechnologyPartial} per technology (filtered by
45
+ * the confidence threshold unless `options.skipThreshold` is set), in no
46
+ * particular order.
47
+ */
48
+ export function combineTechnologyConfidence(signals, options = {}) {
49
+ const byTechnology = new Map();
50
+ for (const signal of signals) {
51
+ const group = byTechnology.get(signal.technology);
52
+ if (group) {
53
+ group.push(signal);
54
+ }
55
+ else {
56
+ byTechnology.set(signal.technology, [signal]);
57
+ }
58
+ }
59
+ const results = [];
60
+ for (const [technology, group] of byTechnology) {
61
+ const maxWeightByType = new Map();
62
+ for (const signal of group) {
63
+ const current = maxWeightByType.get(signal.signalType);
64
+ if (current === undefined || signal.weight > current) {
65
+ maxWeightByType.set(signal.signalType, signal.weight);
66
+ }
67
+ }
68
+ const product = [...maxWeightByType.values()].reduce((acc, weight) => acc * (1 - weight / 100), 1);
69
+ const confidence = Math.round(100 * (1 - product));
70
+ if (!options.skipThreshold && confidence < TECHNOLOGY_CONFIDENCE_THRESHOLD)
71
+ continue;
72
+ let categorySource;
73
+ let versionSource;
74
+ for (const type of CATEGORY_VERSION_SOURCE_PRIORITY) {
75
+ if (!categorySource) {
76
+ categorySource = group.find((s) => s.signalType === type && s.category != null);
77
+ }
78
+ if (!versionSource) {
79
+ versionSource = group.find((s) => s.signalType === type && s.version != null);
80
+ }
81
+ if (categorySource && versionSource)
82
+ break;
83
+ }
84
+ results.push({
85
+ technology,
86
+ category: categorySource?.category ?? null,
87
+ version: versionSource?.version ?? null,
88
+ confidence,
89
+ signalCount: maxWeightByType.size,
90
+ });
91
+ }
92
+ return results;
93
+ }
@@ -0,0 +1,45 @@
1
+ import type { LegacyTagRowLike } from './convert-tag-row-to-wappalyzer-signal.js';
2
+ /** One `technology_signals` row ready for insertion, `pageId` already resolved. */
3
+ export interface LegacyTechnologySignalInsert {
4
+ pageId: number;
5
+ technology: string;
6
+ signalType: string;
7
+ evidence: string | null;
8
+ weight: number;
9
+ }
10
+ /** One `page_technologies` row ready for insertion, `pageId` already resolved. */
11
+ export interface LegacyPageTechnologyInsert {
12
+ pageId: number;
13
+ technology: string;
14
+ category: string | null;
15
+ version: string | null;
16
+ confidence: number;
17
+ signalCount: number;
18
+ }
19
+ /** Result of {@link convertLegacyPageTagsToInserts}. */
20
+ export interface LegacyPageTagsConversion {
21
+ signalInserts: LegacyTechnologySignalInsert[];
22
+ technologyInserts: LegacyPageTechnologyInsert[];
23
+ }
24
+ /**
25
+ * Converts every persisted (legacy) `page_tags` row into the `pageId`-keyed
26
+ * `technology_signals` + `page_technologies` insert rows for that page's
27
+ * whole tag set — shared by both `page_tags` migration paths
28
+ * (`migrate-page-tags-to-page-technologies.ts` for archives already on the
29
+ * current schema, `retarget-legacy-fk-tables.ts` for the 0.10→0.13 upgrade)
30
+ * so a `page_tags` row converts identically regardless of which path
31
+ * produced it, and a future fix to the conversion only needs to change one
32
+ * place.
33
+ *
34
+ * Uses `combineTechnologyConfidence(signals, { skipThreshold: true })` —
35
+ * migration preserves every historical Wappalyzer detection the old
36
+ * `page_tags`-based API returned unconditionally, rather than applying the
37
+ * confidence-noise filter meant for fresh crawl-time detections (see that
38
+ * option's docs).
39
+ * @param rows - Every `page_tags` row, in any order (grouped internally by
40
+ * `pageId`).
41
+ * @returns The two insert-ready row sets, empty arrays if `rows` is empty.
42
+ */
43
+ export declare function convertLegacyPageTagsToInserts(rows: readonly (LegacyTagRowLike & {
44
+ pageId: number;
45
+ })[]): LegacyPageTagsConversion;
@@ -0,0 +1,53 @@
1
+ import { combineTechnologyConfidence } from './combine-technology-confidence.js';
2
+ import { convertTagRowToWappalyzerSignal } from './convert-tag-row-to-wappalyzer-signal.js';
3
+ /**
4
+ * Converts every persisted (legacy) `page_tags` row into the `pageId`-keyed
5
+ * `technology_signals` + `page_technologies` insert rows for that page's
6
+ * whole tag set — shared by both `page_tags` migration paths
7
+ * (`migrate-page-tags-to-page-technologies.ts` for archives already on the
8
+ * current schema, `retarget-legacy-fk-tables.ts` for the 0.10→0.13 upgrade)
9
+ * so a `page_tags` row converts identically regardless of which path
10
+ * produced it, and a future fix to the conversion only needs to change one
11
+ * place.
12
+ *
13
+ * Uses `combineTechnologyConfidence(signals, { skipThreshold: true })` —
14
+ * migration preserves every historical Wappalyzer detection the old
15
+ * `page_tags`-based API returned unconditionally, rather than applying the
16
+ * confidence-noise filter meant for fresh crawl-time detections (see that
17
+ * option's docs).
18
+ * @param rows - Every `page_tags` row, in any order (grouped internally by
19
+ * `pageId`).
20
+ * @returns The two insert-ready row sets, empty arrays if `rows` is empty.
21
+ */
22
+ export function convertLegacyPageTagsToInserts(rows) {
23
+ const signalsByPage = new Map();
24
+ for (const row of rows) {
25
+ const signal = convertTagRowToWappalyzerSignal(row);
26
+ const group = signalsByPage.get(row.pageId);
27
+ if (group) {
28
+ group.push(signal);
29
+ }
30
+ else {
31
+ signalsByPage.set(row.pageId, [signal]);
32
+ }
33
+ }
34
+ const signalInserts = [];
35
+ const technologyInserts = [];
36
+ for (const [pageId, signals] of signalsByPage) {
37
+ for (const signal of signals) {
38
+ signalInserts.push({
39
+ pageId,
40
+ technology: signal.technology,
41
+ signalType: signal.signalType,
42
+ evidence: signal.evidence,
43
+ weight: signal.weight,
44
+ });
45
+ }
46
+ for (const technology of combineTechnologyConfidence(signals, {
47
+ skipThreshold: true,
48
+ })) {
49
+ technologyInserts.push({ pageId, ...technology });
50
+ }
51
+ }
52
+ return { signalInserts, technologyInserts };
53
+ }
@@ -0,0 +1,33 @@
1
+ import type { TechnologySignalPartial } from './types.js';
2
+ /**
3
+ * Minimal shape this function needs from a persisted (legacy) `page_tags`
4
+ * row. Deliberately narrower than the old `TagRow` — only the columns a
5
+ * `wappalyzer` signal can use. `categories` accepts `unknown` because
6
+ * callers read it via two different paths that disagree on whether the
7
+ * driver already parsed the `json()` column: raw `SELECT` (still a JSON
8
+ * string) vs. knex's typed row mapping (already an array on some drivers).
9
+ */
10
+ export interface LegacyTagRowLike {
11
+ provider: string;
12
+ version: string | null;
13
+ confidence: number | null;
14
+ categories: unknown;
15
+ }
16
+ /**
17
+ * Converts one persisted (legacy) `page_tags` row into a `wappalyzer`
18
+ * technology signal — the shared core `migrate-page-tags-to-page-technologies.ts`
19
+ * (read-time migration for archives already on the current schema) and
20
+ * `retarget-legacy-fk-tables.ts` (0.10→0.13 upgrade path) both call, so a
21
+ * `page_tags` row converts identically regardless of which migration path
22
+ * produced it.
23
+ *
24
+ * Mirrors `normalize-wappalyzer-entries.ts`'s live-beholder conversion, but
25
+ * reads from the OLD persisted row shape (`provider`/`version`/`confidence`/
26
+ * `categories`) instead of beholder's live `TagEntry` (`provider`/`version`/
27
+ * `confidence`/`categories`/`id`/`sources`) — structurally similar, but
28
+ * `page_tags` has no `id` (externalId) to use as `evidence`, so the provider
29
+ * name is used instead.
30
+ * @param row - The persisted `page_tags` row (or an equivalent shape).
31
+ * @returns The equivalent `wappalyzer` signal.
32
+ */
33
+ export declare function convertTagRowToWappalyzerSignal(row: LegacyTagRowLike): TechnologySignalPartial;
@@ -0,0 +1,46 @@
1
+ import { WAPPALYZER_PROVIDER_TO_TECHNOLOGY, WAPPALYZER_SIGNAL_WEIGHT, } from './technology-signal-definitions.js';
2
+ /**
3
+ * Converts one persisted (legacy) `page_tags` row into a `wappalyzer`
4
+ * technology signal — the shared core `migrate-page-tags-to-page-technologies.ts`
5
+ * (read-time migration for archives already on the current schema) and
6
+ * `retarget-legacy-fk-tables.ts` (0.10→0.13 upgrade path) both call, so a
7
+ * `page_tags` row converts identically regardless of which migration path
8
+ * produced it.
9
+ *
10
+ * Mirrors `normalize-wappalyzer-entries.ts`'s live-beholder conversion, but
11
+ * reads from the OLD persisted row shape (`provider`/`version`/`confidence`/
12
+ * `categories`) instead of beholder's live `TagEntry` (`provider`/`version`/
13
+ * `confidence`/`categories`/`id`/`sources`) — structurally similar, but
14
+ * `page_tags` has no `id` (externalId) to use as `evidence`, so the provider
15
+ * name is used instead.
16
+ * @param row - The persisted `page_tags` row (or an equivalent shape).
17
+ * @returns The equivalent `wappalyzer` signal.
18
+ */
19
+ export function convertTagRowToWappalyzerSignal(row) {
20
+ const categories = parseCategories(row.categories);
21
+ return {
22
+ technology: WAPPALYZER_PROVIDER_TO_TECHNOLOGY[row.provider] ?? row.provider,
23
+ signalType: 'wappalyzer',
24
+ evidence: row.provider,
25
+ weight: row.confidence ?? WAPPALYZER_SIGNAL_WEIGHT,
26
+ category: categories[0] ?? null,
27
+ version: row.version ?? null,
28
+ };
29
+ }
30
+ /**
31
+ * @param raw
32
+ */
33
+ function parseCategories(raw) {
34
+ if (Array.isArray(raw))
35
+ return raw;
36
+ if (typeof raw === 'string' && raw.length > 0) {
37
+ try {
38
+ const parsed = JSON.parse(raw);
39
+ return Array.isArray(parsed) ? parsed : [];
40
+ }
41
+ catch {
42
+ return [];
43
+ }
44
+ }
45
+ return [];
46
+ }
@@ -0,0 +1,33 @@
1
+ import type { PageTechnologyPartial, TechnologySignalPartial } from './types.js';
2
+ import type { PageData } from '../../utils/types/types.js';
3
+ /**
4
+ * The result of one page's technology-signal extraction: every raw signal
5
+ * (for `technology_signals`, MCP/query signal-level lookups, and per-page
6
+ * "why was this detected" drill-down) plus the confidence-combined roll-up
7
+ * (for `page_technologies`).
8
+ */
9
+ export interface ExtractedTechnologies {
10
+ signals: TechnologySignalPartial[];
11
+ technologies: PageTechnologyPartial[];
12
+ }
13
+ /**
14
+ * Extracts every technology signal for one page — structural (HTML markers,
15
+ * URL path fragments, scoped attributes, `<meta name="generator">`) plus
16
+ * Wappalyzer (beholder's `meta.tags.entries`) — and combines them into
17
+ * confidence-scored technology rows.
18
+ *
19
+ * Crawl-time, synchronous, zero extra network cost — the direct replacement
20
+ * for `extract-tags-for-archive.ts` in the live crawl write path (that file
21
+ * itself is untouched; `scripts/migrate-to-0.10.mjs` still depends on it).
22
+ * JS-license-comment signals from external JS files are NOT produced here —
23
+ * they require an extra network fetch per JS resource and are added
24
+ * afterward, once per crawl, by `scan-js-resources-for-technology-signals.ts`
25
+ * ("JSスキャン・エンリッチメント", a distinct post-crawl category — see
26
+ * ARCHITECTURE.md). A license banner inside the page's own HTML (an inline
27
+ * `<script>`) is matched here, since the structural list applies every
28
+ * definition, `js-license-comment` included, to the HTML.
29
+ * @param html - The page's raw HTML string.
30
+ * @param meta - `PageData.meta` (for `generator` and `tags.entries`).
31
+ * @returns Raw signals and their confidence-combined roll-up.
32
+ */
33
+ export declare function extractTechnologiesForArchive(html: string, meta: PageData['meta']): ExtractedTechnologies;
@@ -0,0 +1,30 @@
1
+ import { combineTechnologyConfidence } from './combine-technology-confidence.js';
2
+ import { matchStructuralTechnologySignals } from './match-structural-technology-signals.js';
3
+ import { normalizeWappalyzerEntries } from './normalize-wappalyzer-entries.js';
4
+ /**
5
+ * Extracts every technology signal for one page — structural (HTML markers,
6
+ * URL path fragments, scoped attributes, `<meta name="generator">`) plus
7
+ * Wappalyzer (beholder's `meta.tags.entries`) — and combines them into
8
+ * confidence-scored technology rows.
9
+ *
10
+ * Crawl-time, synchronous, zero extra network cost — the direct replacement
11
+ * for `extract-tags-for-archive.ts` in the live crawl write path (that file
12
+ * itself is untouched; `scripts/migrate-to-0.10.mjs` still depends on it).
13
+ * JS-license-comment signals from external JS files are NOT produced here —
14
+ * they require an extra network fetch per JS resource and are added
15
+ * afterward, once per crawl, by `scan-js-resources-for-technology-signals.ts`
16
+ * ("JSスキャン・エンリッチメント", a distinct post-crawl category — see
17
+ * ARCHITECTURE.md). A license banner inside the page's own HTML (an inline
18
+ * `<script>`) is matched here, since the structural list applies every
19
+ * definition, `js-license-comment` included, to the HTML.
20
+ * @param html - The page's raw HTML string.
21
+ * @param meta - `PageData.meta` (for `generator` and `tags.entries`).
22
+ * @returns Raw signals and their confidence-combined roll-up.
23
+ */
24
+ export function extractTechnologiesForArchive(html, meta) {
25
+ const structuralSignals = matchStructuralTechnologySignals(html, meta.generator);
26
+ const wappalyzerSignals = normalizeWappalyzerEntries(meta.tags?.entries);
27
+ const signals = [...structuralSignals, ...wappalyzerSignals];
28
+ const technologies = combineTechnologyConfidence(signals);
29
+ return { signals, technologies };
30
+ }
@@ -0,0 +1,21 @@
1
+ import type { TechnologySignalPartial } from './types.js';
2
+ /**
3
+ * Tests a JS resource's leading bytes against the structural fingerprint
4
+ * list's `js-license-comment` definitions (such as Vue's leading license
5
+ * banner), returning the first that matches. The same definitions
6
+ * `matchStructuralTechnologySignals` applies to page HTML; the list lives
7
+ * in `@nitpicker/core`'s `crates/nitpicker_tech_detect`, and the crawler
8
+ * reaches it through this function because it does not import the addon
9
+ * directly.
10
+ * @param script - The resource's leading bytes as fetched (a byte-capped
11
+ * prefix, so possibly cut inside a character — such bytes read as U+FFFD,
12
+ * as `Buffer.prototype.toString('utf8')` decodes them).
13
+ * @returns The first matching signal, or `null` when none matches.
14
+ * @example
15
+ * ```ts
16
+ * matchJsLicenseCommentSignal(Buffer.from('/*!\n * Vue.js v3.4.0\n *\/'));
17
+ * // { technology: 'Vue', signalType: 'js-license-comment',
18
+ * // evidence: '/*!\n * Vue.js v3', weight: 55, category: 'JavaScript frameworks' }
19
+ * ```
20
+ */
21
+ export declare function matchJsLicenseCommentSignal(script: Uint8Array): TechnologySignalPartial | null;
@@ -0,0 +1,23 @@
1
+ import { matchJsLicenseCommentSignal as matchJsLicenseCommentSignalNative } from '@nitpicker/core/match-js-license-comment-signal';
2
+ /**
3
+ * Tests a JS resource's leading bytes against the structural fingerprint
4
+ * list's `js-license-comment` definitions (such as Vue's leading license
5
+ * banner), returning the first that matches. The same definitions
6
+ * `matchStructuralTechnologySignals` applies to page HTML; the list lives
7
+ * in `@nitpicker/core`'s `crates/nitpicker_tech_detect`, and the crawler
8
+ * reaches it through this function because it does not import the addon
9
+ * directly.
10
+ * @param script - The resource's leading bytes as fetched (a byte-capped
11
+ * prefix, so possibly cut inside a character — such bytes read as U+FFFD,
12
+ * as `Buffer.prototype.toString('utf8')` decodes them).
13
+ * @returns The first matching signal, or `null` when none matches.
14
+ * @example
15
+ * ```ts
16
+ * matchJsLicenseCommentSignal(Buffer.from('/*!\n * Vue.js v3.4.0\n *\/'));
17
+ * // { technology: 'Vue', signalType: 'js-license-comment',
18
+ * // evidence: '/*!\n * Vue.js v3', weight: 55, category: 'JavaScript frameworks' }
19
+ * ```
20
+ */
21
+ export function matchJsLicenseCommentSignal(script) {
22
+ return matchJsLicenseCommentSignalNative(script);
23
+ }
@@ -0,0 +1,26 @@
1
+ import type { TechnologySignalPartial } from './types.js';
2
+ /**
3
+ * Detects the structural fingerprint list (`@nitpicker/core`'s
4
+ * `crates/nitpicker_tech_detect`) against a page's raw HTML, plus
5
+ * `<meta name="generator">` prefix matches against the already-extracted
6
+ * `generator` field. Pure and synchronous — no network I/O, no Wappalyzer
7
+ * data (see `normalize-wappalyzer-entries.ts` for that source).
8
+ *
9
+ * The HTML match runs in the native addon, which scans the page once for
10
+ * every fingerprint. The JavaScript regular expressions it was ported from
11
+ * stay in `structural-signal-definitions.ts`, excluded from the build, as
12
+ * the oracle for `match-structural-technology-signals.parity.spec.ts`.
13
+ * @param html - The page's raw HTML string (empty for external or
14
+ * metadata-only scrapes, which then match nothing).
15
+ * @param generator - `page_meta.generator` (already extracted by
16
+ * `derive-flat-from-meta.ts` from beholder's `Meta`), or `null`/`undefined`.
17
+ * @returns Un-combined structural signals, one per matched fingerprint in
18
+ * the list's order, then one per matched generator prefix.
19
+ * @example
20
+ * ```ts
21
+ * matchStructuralTechnologySignals('<div data-v-1a2b3c4d></div>', 'Nuxt 3.8');
22
+ * // [{ technology: 'Vue', signalType: 'scoped-attr', ... },
23
+ * // { technology: 'Nuxt', signalType: 'meta-generator', version: '3.8', ... }]
24
+ * ```
25
+ */
26
+ export declare function matchStructuralTechnologySignals(html: string, generator: string | null | undefined): TechnologySignalPartial[];