@aglyn/aglyn 1.0.0-beta.221 → 1.0.0-beta.222

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 (346) hide show
  1. package/package.json +15 -11
  2. package/src/lib/app-utils/agent-openapi.js +1 -1
  3. package/src/lib/app-utils/agent-openapi.js.map +1 -1
  4. package/src/lib/app-utils/analytics-events.d.ts +3 -2
  5. package/src/lib/app-utils/analytics-events.js +3 -2
  6. package/src/lib/app-utils/analytics-events.js.map +1 -1
  7. package/src/lib/app-utils/api-plugins.d.ts +30 -0
  8. package/src/lib/app-utils/api-plugins.js +24 -1
  9. package/src/lib/app-utils/api-plugins.js.map +1 -1
  10. package/src/lib/app-utils/author-html.d.ts +1 -1
  11. package/src/lib/app-utils/author-html.js.map +1 -1
  12. package/src/lib/app-utils/bandwidth-cap.d.ts +12 -1
  13. package/src/lib/app-utils/bandwidth-cap.js +17 -1
  14. package/src/lib/app-utils/bandwidth-cap.js.map +1 -1
  15. package/src/lib/app-utils/compose-reusable-components.d.ts +19 -0
  16. package/src/lib/app-utils/compose-reusable-components.js +116 -26
  17. package/src/lib/app-utils/compose-reusable-components.js.map +1 -1
  18. package/src/lib/app-utils/console-routes.d.ts +4 -0
  19. package/src/lib/app-utils/console-routes.js +3 -0
  20. package/src/lib/app-utils/console-routes.js.map +1 -1
  21. package/src/lib/app-utils/contacts.d.ts +71 -0
  22. package/src/lib/app-utils/contacts.js +55 -0
  23. package/src/lib/app-utils/contacts.js.map +1 -1
  24. package/src/lib/app-utils/contexts.d.ts +1 -0
  25. package/src/lib/app-utils/contexts.js +1 -0
  26. package/src/lib/app-utils/contexts.js.map +1 -1
  27. package/src/lib/app-utils/crm-email-templates.js +21 -4
  28. package/src/lib/app-utils/crm-email-templates.js.map +1 -1
  29. package/src/lib/app-utils/crm-kinds.d.ts +2 -0
  30. package/src/lib/app-utils/crm-kinds.js +1 -0
  31. package/src/lib/app-utils/crm-kinds.js.map +1 -1
  32. package/src/lib/app-utils/crm.d.ts +1199 -67
  33. package/src/lib/app-utils/crm.js +1951 -310
  34. package/src/lib/app-utils/crm.js.map +1 -1
  35. package/src/lib/app-utils/csv-import.d.ts +10 -38
  36. package/src/lib/app-utils/csv-import.js +17 -42
  37. package/src/lib/app-utils/csv-import.js.map +1 -1
  38. package/src/lib/app-utils/csv.d.ts +32 -11
  39. package/src/lib/app-utils/csv.js +43 -5
  40. package/src/lib/app-utils/csv.js.map +1 -1
  41. package/src/lib/app-utils/default-site.d.ts +116 -0
  42. package/src/lib/app-utils/default-site.js +1024 -0
  43. package/src/lib/app-utils/default-site.js.map +1 -0
  44. package/src/lib/app-utils/docs-help.generated.d.ts +22 -22
  45. package/src/lib/app-utils/docs-help.generated.js +44 -10
  46. package/src/lib/app-utils/docs-help.generated.js.map +1 -1
  47. package/src/lib/app-utils/docs-index.generated.js +738 -150
  48. package/src/lib/app-utils/docs-index.generated.js.map +1 -1
  49. package/src/lib/app-utils/draft-placeholders.d.ts +76 -0
  50. package/src/lib/app-utils/draft-placeholders.js +115 -0
  51. package/src/lib/app-utils/draft-placeholders.js.map +1 -0
  52. package/src/lib/app-utils/entity-picker-context.d.ts +19 -15
  53. package/src/lib/app-utils/entity-picker-context.js +4 -4
  54. package/src/lib/app-utils/entity-picker-context.js.map +1 -1
  55. package/src/lib/app-utils/expand-repeatables.d.ts +66 -10
  56. package/src/lib/app-utils/expand-repeatables.js +88 -14
  57. package/src/lib/app-utils/expand-repeatables.js.map +1 -1
  58. package/src/lib/app-utils/forms.d.ts +33 -22
  59. package/src/lib/app-utils/forms.js +47 -28
  60. package/src/lib/app-utils/forms.js.map +1 -1
  61. package/src/lib/app-utils/full-use-cost.d.ts +277 -0
  62. package/src/lib/app-utils/full-use-cost.js +421 -0
  63. package/src/lib/app-utils/full-use-cost.js.map +1 -0
  64. package/src/lib/app-utils/health-report.js +11 -0
  65. package/src/lib/app-utils/health-report.js.map +1 -1
  66. package/src/lib/app-utils/llms-txt.d.ts +20 -0
  67. package/src/lib/app-utils/llms-txt.js +7 -1
  68. package/src/lib/app-utils/llms-txt.js.map +1 -1
  69. package/src/lib/app-utils/media-asset-facts.d.ts +16 -1
  70. package/src/lib/app-utils/media-asset-facts.js +40 -13
  71. package/src/lib/app-utils/media-asset-facts.js.map +1 -1
  72. package/src/lib/app-utils/media-bandwidth.d.ts +52 -0
  73. package/src/lib/app-utils/media-bandwidth.js +94 -0
  74. package/src/lib/app-utils/media-bandwidth.js.map +1 -0
  75. package/src/lib/app-utils/media-ref.d.ts +241 -33
  76. package/src/lib/app-utils/media-ref.js +324 -43
  77. package/src/lib/app-utils/media-ref.js.map +1 -1
  78. package/src/lib/app-utils/media-src.d.ts +8 -8
  79. package/src/lib/app-utils/media-src.js +27 -11
  80. package/src/lib/app-utils/media-src.js.map +1 -1
  81. package/src/lib/app-utils/media-takedown-reach.d.ts +4 -1
  82. package/src/lib/app-utils/media-takedown-reach.js +6 -3
  83. package/src/lib/app-utils/media-takedown-reach.js.map +1 -1
  84. package/src/lib/app-utils/notifications.d.ts +1 -1
  85. package/src/lib/app-utils/notifications.js +2 -0
  86. package/src/lib/app-utils/notifications.js.map +1 -1
  87. package/src/lib/app-utils/organizations.d.ts +51 -2
  88. package/src/lib/app-utils/organizations.js +56 -3
  89. package/src/lib/app-utils/organizations.js.map +1 -1
  90. package/src/lib/app-utils/page-record-sources.d.ts +87 -0
  91. package/src/lib/app-utils/page-record-sources.js +53 -0
  92. package/src/lib/app-utils/page-record-sources.js.map +1 -0
  93. package/src/lib/app-utils/paid-media-source.d.ts +3 -7
  94. package/src/lib/app-utils/paid-media-source.js +5 -19
  95. package/src/lib/app-utils/paid-media-source.js.map +1 -1
  96. package/src/lib/app-utils/person-erasure.d.ts +5 -2
  97. package/src/lib/app-utils/person-erasure.js.map +1 -1
  98. package/src/lib/app-utils/picklists.d.ts +187 -0
  99. package/src/lib/app-utils/picklists.js +320 -0
  100. package/src/lib/app-utils/picklists.js.map +1 -0
  101. package/src/lib/app-utils/plan-entitlements.d.ts +220 -50
  102. package/src/lib/app-utils/plan-entitlements.js +309 -115
  103. package/src/lib/app-utils/plan-entitlements.js.map +1 -1
  104. package/src/lib/app-utils/realm-host-surface.generated.js +2 -0
  105. package/src/lib/app-utils/realm-host-surface.generated.js.map +1 -1
  106. package/src/lib/app-utils/release-flags.d.ts +1 -1
  107. package/src/lib/app-utils/release-flags.js +11 -0
  108. package/src/lib/app-utils/release-flags.js.map +1 -1
  109. package/src/lib/app-utils/rendered-widths.d.ts +121 -0
  110. package/src/lib/app-utils/rendered-widths.js +211 -0
  111. package/src/lib/app-utils/rendered-widths.js.map +1 -0
  112. package/src/lib/app-utils/repeat-sources.d.ts +2 -1
  113. package/src/lib/app-utils/repeat-sources.js.map +1 -1
  114. package/src/lib/app-utils/screen-route.d.ts +154 -36
  115. package/src/lib/app-utils/screen-route.js +185 -40
  116. package/src/lib/app-utils/screen-route.js.map +1 -1
  117. package/src/lib/app-utils/seo-audit.d.ts +11 -1
  118. package/src/lib/app-utils/seo-audit.js +33 -13
  119. package/src/lib/app-utils/seo-audit.js.map +1 -1
  120. package/src/lib/app-utils/seo-keywords.d.ts +11 -0
  121. package/src/lib/app-utils/seo-keywords.js +19 -5
  122. package/src/lib/app-utils/seo-keywords.js.map +1 -1
  123. package/src/lib/app-utils/seo-page-facts.d.ts +47 -4
  124. package/src/lib/app-utils/seo-page-facts.js +136 -31
  125. package/src/lib/app-utils/seo-page-facts.js.map +1 -1
  126. package/src/lib/app-utils/seo-site-scan.d.ts +42 -4
  127. package/src/lib/app-utils/seo-site-scan.js +113 -12
  128. package/src/lib/app-utils/seo-site-scan.js.map +1 -1
  129. package/src/lib/app-utils/server.d.ts +5 -4
  130. package/src/lib/app-utils/server.js +14 -5
  131. package/src/lib/app-utils/server.js.map +1 -1
  132. package/src/lib/app-utils/site-icon-set.d.ts +195 -0
  133. package/src/lib/app-utils/site-icon-set.js +351 -0
  134. package/src/lib/app-utils/site-icon-set.js.map +1 -0
  135. package/src/lib/app-utils/site-interactions.d.ts +101 -4
  136. package/src/lib/app-utils/site-interactions.js +120 -4
  137. package/src/lib/app-utils/site-interactions.js.map +1 -1
  138. package/src/lib/app-utils/starter-template-nodes.d.ts +7 -0
  139. package/src/lib/app-utils/starter-template-nodes.js +3 -0
  140. package/src/lib/app-utils/starter-template-nodes.js.map +1 -1
  141. package/src/lib/app-utils/starter-templates.d.ts +5 -19
  142. package/src/lib/app-utils/starter-templates.js +5 -49
  143. package/src/lib/app-utils/starter-templates.js.map +1 -1
  144. package/src/lib/app-utils/transfer-launcher-context.d.ts +136 -0
  145. package/src/lib/app-utils/transfer-launcher-context.js +23 -0
  146. package/src/lib/app-utils/transfer-launcher-context.js.map +1 -0
  147. package/src/lib/app-utils/transfer-resume-import.d.ts +39 -0
  148. package/src/lib/app-utils/transfer-resume-import.js +128 -0
  149. package/src/lib/app-utils/transfer-resume-import.js.map +1 -0
  150. package/src/lib/app-utils/upgrade-proposal.d.ts +66 -0
  151. package/src/lib/app-utils/upgrade-proposal.js +95 -0
  152. package/src/lib/app-utils/upgrade-proposal.js.map +1 -0
  153. package/src/lib/app-utils/utc-month.d.ts +33 -0
  154. package/src/lib/app-utils/utc-month.js +35 -0
  155. package/src/lib/app-utils/utc-month.js.map +1 -0
  156. package/src/lib/app-utils/visitor-record-ceiling.d.ts +4 -4
  157. package/src/lib/app-utils/visitor-record-ceiling.js +4 -4
  158. package/src/lib/app-utils/visitor-record-ceiling.js.map +1 -1
  159. package/src/lib/app-utils/wire-nodes.d.ts +39 -19
  160. package/src/lib/app-utils/wire-nodes.js +120 -34
  161. package/src/lib/app-utils/wire-nodes.js.map +1 -1
  162. package/src/lib/data-transfer/access.d.ts +74 -0
  163. package/src/lib/data-transfer/access.js +93 -0
  164. package/src/lib/data-transfer/access.js.map +1 -0
  165. package/src/lib/data-transfer/derive.d.ts +246 -0
  166. package/src/lib/data-transfer/derive.js +1007 -0
  167. package/src/lib/data-transfer/derive.js.map +1 -0
  168. package/src/lib/data-transfer/export-file.d.ts +46 -0
  169. package/src/lib/data-transfer/export-file.js +146 -0
  170. package/src/lib/data-transfer/export-file.js.map +1 -0
  171. package/src/lib/data-transfer/field-catalog.d.ts +134 -0
  172. package/src/lib/data-transfer/field-catalog.js +278 -0
  173. package/src/lib/data-transfer/field-catalog.js.map +1 -0
  174. package/src/lib/data-transfer/header-match.d.ts +129 -0
  175. package/src/lib/data-transfer/header-match.js +367 -0
  176. package/src/lib/data-transfer/header-match.js.map +1 -0
  177. package/src/lib/data-transfer/index.d.ts +34 -0
  178. package/src/lib/data-transfer/index.js +40 -0
  179. package/src/lib/data-transfer/index.js.map +1 -0
  180. package/src/lib/data-transfer/job.d.ts +190 -0
  181. package/src/lib/data-transfer/job.js +229 -0
  182. package/src/lib/data-transfer/job.js.map +1 -0
  183. package/src/lib/data-transfer/lookup.d.ts +45 -0
  184. package/src/lib/data-transfer/lookup.js +71 -0
  185. package/src/lib/data-transfer/lookup.js.map +1 -0
  186. package/src/lib/data-transfer/match.d.ts +99 -0
  187. package/src/lib/data-transfer/match.js +244 -0
  188. package/src/lib/data-transfer/match.js.map +1 -0
  189. package/src/lib/data-transfer/package-plan.d.ts +205 -0
  190. package/src/lib/data-transfer/package-plan.js +475 -0
  191. package/src/lib/data-transfer/package-plan.js.map +1 -0
  192. package/src/lib/data-transfer/package.d.ts +181 -0
  193. package/src/lib/data-transfer/package.js +426 -0
  194. package/src/lib/data-transfer/package.js.map +1 -0
  195. package/src/lib/data-transfer/picklist-map.d.ts +139 -0
  196. package/src/lib/data-transfer/picklist-map.js +271 -0
  197. package/src/lib/data-transfer/picklist-map.js.map +1 -0
  198. package/src/lib/data-transfer/plan.d.ts +176 -0
  199. package/src/lib/data-transfer/plan.js +451 -0
  200. package/src/lib/data-transfer/plan.js.map +1 -0
  201. package/src/lib/data-transfer/policy.d.ts +170 -0
  202. package/src/lib/data-transfer/policy.js +378 -0
  203. package/src/lib/data-transfer/policy.js.map +1 -0
  204. package/src/lib/data-transfer/resource.d.ts +211 -0
  205. package/src/lib/data-transfer/resource.js +241 -0
  206. package/src/lib/data-transfer/resource.js.map +1 -0
  207. package/src/lib/data-transfer/review.d.ts +70 -0
  208. package/src/lib/data-transfer/review.js +233 -0
  209. package/src/lib/data-transfer/review.js.map +1 -0
  210. package/src/lib/data-transfer/similarity.d.ts +40 -0
  211. package/src/lib/data-transfer/similarity.js +106 -0
  212. package/src/lib/data-transfer/similarity.js.map +1 -0
  213. package/src/lib/data-transfer/site-package.d.ts +365 -0
  214. package/src/lib/data-transfer/site-package.js +1077 -0
  215. package/src/lib/data-transfer/site-package.js.map +1 -0
  216. package/src/lib/data-transfer/source.d.ts +74 -0
  217. package/src/lib/data-transfer/source.js +293 -0
  218. package/src/lib/data-transfer/source.js.map +1 -0
  219. package/src/lib/data-transfer/transfer-api.d.ts +898 -0
  220. package/src/lib/data-transfer/transfer-api.js +107 -0
  221. package/src/lib/data-transfer/transfer-api.js.map +1 -0
  222. package/src/lib/foundation/definitions/org-billing.types.d.ts +31 -0
  223. package/src/lib/foundation/definitions/org-billing.types.js.map +1 -1
  224. package/src/lib/foundation/definitions/organization.types.d.ts +42 -1
  225. package/src/lib/foundation/definitions/organization.types.js.map +1 -1
  226. package/src/lib/foundation/definitions/platform.types.d.ts +6 -4
  227. package/src/lib/foundation/definitions/platform.types.js.map +1 -1
  228. package/src/lib/foundation/index.d.ts +1 -1
  229. package/src/lib/foundation/index.js.map +1 -1
  230. package/src/lib/plugin-manager/feature-plugins.d.ts +91 -2
  231. package/src/lib/plugin-manager/feature-plugins.js +48 -3
  232. package/src/lib/plugin-manager/feature-plugins.js.map +1 -1
  233. package/src/lib/plugin-manager/first-party-plugins.generated.d.ts +50 -0
  234. package/src/lib/plugin-manager/first-party-plugins.generated.js +1129 -28
  235. package/src/lib/plugin-manager/first-party-plugins.generated.js.map +1 -1
  236. package/src/lib/plugin-manager/index.d.ts +0 -1
  237. package/src/lib/plugin-manager/index.js +0 -1
  238. package/src/lib/plugin-manager/index.js.map +1 -1
  239. package/src/lib/plugin-manager/interaction-recipes.d.ts +142 -0
  240. package/src/lib/plugin-manager/interaction-recipes.js +104 -0
  241. package/src/lib/plugin-manager/interaction-recipes.js.map +1 -0
  242. package/src/lib/plugin-manager/interaction-step-checks.d.ts +66 -0
  243. package/src/lib/plugin-manager/interaction-step-checks.js +86 -0
  244. package/src/lib/plugin-manager/interaction-step-checks.js.map +1 -0
  245. package/src/lib/plugin-manager/plugin-artifact-types.d.ts +235 -0
  246. package/src/lib/plugin-manager/plugin-artifact-types.js +99 -0
  247. package/src/lib/plugin-manager/plugin-artifact-types.js.map +1 -0
  248. package/src/lib/plugin-manager/plugin-contact-capture.d.ts +8 -0
  249. package/src/lib/plugin-manager/plugin-contact-capture.js.map +1 -1
  250. package/src/lib/plugin-manager/plugin-conversion-credit.d.ts +216 -0
  251. package/src/lib/plugin-manager/plugin-conversion-credit.js +91 -0
  252. package/src/lib/plugin-manager/plugin-conversion-credit.js.map +1 -0
  253. package/src/lib/plugin-manager/plugin-entity-pickers.d.ts +83 -0
  254. package/src/lib/plugin-manager/plugin-entity-pickers.js +87 -0
  255. package/src/lib/plugin-manager/plugin-entity-pickers.js.map +1 -0
  256. package/src/lib/plugin-manager/plugin-host-resources.d.ts +6 -0
  257. package/src/lib/plugin-manager/plugin-host-resources.js +6 -1
  258. package/src/lib/plugin-manager/plugin-host-resources.js.map +1 -1
  259. package/src/lib/plugin-manager/plugin-intake-gates.d.ts +75 -0
  260. package/src/lib/plugin-manager/plugin-intake-gates.js +49 -0
  261. package/src/lib/plugin-manager/plugin-intake-gates.js.map +1 -0
  262. package/src/lib/plugin-manager/plugin-jobs.d.ts +5 -5
  263. package/src/lib/plugin-manager/plugin-jobs.js +7 -7
  264. package/src/lib/plugin-manager/plugin-jobs.js.map +1 -1
  265. package/src/lib/plugin-manager/plugin-live-paths.d.ts +70 -0
  266. package/src/lib/plugin-manager/plugin-live-paths.js +66 -0
  267. package/src/lib/plugin-manager/plugin-live-paths.js.map +1 -0
  268. package/src/lib/plugin-manager/plugin-org-erasure.d.ts +3 -2
  269. package/src/lib/plugin-manager/plugin-org-erasure.js +30 -5
  270. package/src/lib/plugin-manager/plugin-org-erasure.js.map +1 -1
  271. package/src/lib/plugin-manager/plugin-person-erasure.d.ts +68 -9
  272. package/src/lib/plugin-manager/plugin-person-erasure.js +196 -51
  273. package/src/lib/plugin-manager/plugin-person-erasure.js.map +1 -1
  274. package/src/lib/plugin-manager/plugin-person-records.d.ts +275 -0
  275. package/src/lib/plugin-manager/plugin-person-records.js +107 -0
  276. package/src/lib/plugin-manager/plugin-person-records.js.map +1 -0
  277. package/src/lib/plugin-manager/plugin-record-counts.d.ts +76 -0
  278. package/src/lib/plugin-manager/plugin-record-counts.js +49 -0
  279. package/src/lib/plugin-manager/plugin-record-counts.js.map +1 -0
  280. package/src/lib/plugin-manager/plugin-record-email-state.d.ts +26 -0
  281. package/src/lib/plugin-manager/plugin-record-email-state.js +16 -0
  282. package/src/lib/plugin-manager/plugin-record-email-state.js.map +1 -1
  283. package/src/lib/plugin-manager/plugin-record-index.d.ts +10 -0
  284. package/src/lib/plugin-manager/plugin-record-index.js.map +1 -1
  285. package/src/lib/plugin-manager/plugin-record-lists.d.ts +86 -6
  286. package/src/lib/plugin-manager/plugin-record-lists.js +42 -5
  287. package/src/lib/plugin-manager/plugin-record-lists.js.map +1 -1
  288. package/src/lib/plugin-manager/plugin-record-origin.d.ts +79 -0
  289. package/src/lib/plugin-manager/plugin-record-origin.js +46 -0
  290. package/src/lib/plugin-manager/plugin-record-origin.js.map +1 -0
  291. package/src/lib/plugin-manager/plugin-record-pages.d.ts +37 -0
  292. package/src/lib/plugin-manager/plugin-record-pages.js +52 -0
  293. package/src/lib/plugin-manager/plugin-record-pages.js.map +1 -0
  294. package/src/lib/plugin-manager/plugin-record-timeline.d.ts +60 -0
  295. package/src/lib/plugin-manager/plugin-record-timeline.js +16 -0
  296. package/src/lib/plugin-manager/plugin-record-timeline.js.map +1 -1
  297. package/src/lib/plugin-manager/plugin-resource-drafts.d.ts +5 -5
  298. package/src/lib/plugin-manager/plugin-resource-drafts.js.map +1 -1
  299. package/src/lib/plugin-manager/plugin-revocations.d.ts +64 -0
  300. package/src/lib/plugin-manager/plugin-revocations.js +47 -0
  301. package/src/lib/plugin-manager/plugin-revocations.js.map +1 -0
  302. package/src/lib/plugin-manager/plugin-send-tallies.d.ts +69 -0
  303. package/src/lib/plugin-manager/plugin-send-tallies.js +45 -0
  304. package/src/lib/plugin-manager/plugin-send-tallies.js.map +1 -0
  305. package/src/lib/plugin-manager/plugin-site-bundle.d.ts +40 -0
  306. package/src/lib/plugin-manager/plugin-site-bundle.js +4 -0
  307. package/src/lib/plugin-manager/plugin-site-bundle.js.map +1 -1
  308. package/src/lib/plugin-manager/plugin-site-export.d.ts +57 -1
  309. package/src/lib/plugin-manager/plugin-site-export.js +23 -10
  310. package/src/lib/plugin-manager/plugin-site-export.js.map +1 -1
  311. package/src/lib/plugin-manager/plugin-sitemap-readers.d.ts +146 -0
  312. package/src/lib/plugin-manager/plugin-sitemap-readers.js +110 -0
  313. package/src/lib/plugin-manager/plugin-sitemap-readers.js.map +1 -0
  314. package/src/lib/plugin-manager/plugin-transfer-resources.d.ts +714 -0
  315. package/src/lib/plugin-manager/plugin-transfer-resources.js +443 -0
  316. package/src/lib/plugin-manager/plugin-transfer-resources.js.map +1 -0
  317. package/src/lib/plugin-manager/plugin-usage-axes.d.ts +54 -5
  318. package/src/lib/plugin-manager/plugin-usage-axes.js +11 -3
  319. package/src/lib/plugin-manager/plugin-usage-axes.js.map +1 -1
  320. package/src/lib/plugin-manager/plugin-user-erasure.js +9 -1
  321. package/src/lib/plugin-manager/plugin-user-erasure.js.map +1 -1
  322. package/src/lib/plugin-manager/plugin-visitor-doors.d.ts +104 -0
  323. package/src/lib/plugin-manager/plugin-visitor-doors.js +108 -0
  324. package/src/lib/plugin-manager/plugin-visitor-doors.js.map +1 -0
  325. package/src/lib/plugin-manager/realm-host-aglyn.generated.js +2 -0
  326. package/src/lib/plugin-manager/realm-host-aglyn.generated.js.map +1 -1
  327. package/src/lib/plugin-manager/repeat-rows.d.ts +5 -6
  328. package/src/lib/plugin-manager/repeat-rows.js.map +1 -1
  329. package/src/lib/app-utils/actions.d.ts +0 -310
  330. package/src/lib/app-utils/actions.js +0 -506
  331. package/src/lib/app-utils/actions.js.map +0 -1
  332. package/src/lib/app-utils/automation-placeholders.d.ts +0 -72
  333. package/src/lib/app-utils/automation-placeholders.js +0 -207
  334. package/src/lib/app-utils/automation-placeholders.js.map +0 -1
  335. package/src/lib/app-utils/dataset-models.d.ts +0 -339
  336. package/src/lib/app-utils/dataset-models.js +0 -722
  337. package/src/lib/app-utils/dataset-models.js.map +0 -1
  338. package/src/lib/app-utils/datasets.d.ts +0 -171
  339. package/src/lib/app-utils/datasets.js +0 -227
  340. package/src/lib/app-utils/datasets.js.map +0 -1
  341. package/src/lib/app-utils/form-abuse-ceiling.d.ts +0 -146
  342. package/src/lib/app-utils/form-abuse-ceiling.js +0 -158
  343. package/src/lib/app-utils/form-abuse-ceiling.js.map +0 -1
  344. package/src/lib/plugin-manager/order-fulfilment.d.ts +0 -142
  345. package/src/lib/plugin-manager/order-fulfilment.js +0 -104
  346. package/src/lib/plugin-manager/order-fulfilment.js.map +0 -1
@@ -0,0 +1,278 @@
1
+ import { _ as _extends } from "@swc/helpers/_/_extends";
2
+ /**
3
+ * @license
4
+ * Copyright 2026 Aglyn LLC
5
+ *
6
+ * Licensed under the Apache License, Version 2.0 (the "License");
7
+ * you may not use this file except in compliance with the License.
8
+ * You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing, software
13
+ * distributed under the License is distributed on an "AS IS" BASIS,
14
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ * See the License for the specific language governing permissions and
16
+ * limitations under the License.
17
+ */ /*==========================================
18
+ * FIELD CATALOG — every field a resource has, in the order a person picks them.
19
+ *
20
+ * Export offers ALL of a resource's fields: the standard ones it declares,
21
+ * the custom ones the organization defined, and the derived and system ones
22
+ * (the Aglyn id, created and updated times) that are read but never written.
23
+ * The catalog is that list, grouped and ordered once, so the export picker,
24
+ * the import mapping and the plan all name the same fields the same way.
25
+ *
26
+ * ## Presets
27
+ *
28
+ * - `everything` — every field, in catalog order.
29
+ * - `reimportable` — the default for export: the Aglyn id, the resource's
30
+ * match keys and every writable field, so the file comes back in and
31
+ * finds the records it came from.
32
+ * - `minimal` — the id, the match keys, the required fields and whatever
33
+ * short list the resource names as its minimum.
34
+ *
35
+ * A saved preset is a list of field ids; resolving it drops the ids the
36
+ * catalog no longer has (a deleted custom field) and says which.
37
+ *
38
+ * A resource may bring presets of its own (`TransferResourcePreset`): a
39
+ * named list of its fields, and the column names another product's import
40
+ * expects for them, so a file laid out for that product comes out of the
41
+ * export dialog ready to upload there.
42
+ *=========================================*/ import { customImportTarget } from "../app-utils/csv-import.js";
43
+ import { PLATFORM_BRAND_NAME } from "../app-utils/platform-brand.js";
44
+ import { TRANSFER_ID_FIELD, isTransferFieldWritable } from "./resource.js";
45
+ /** The group a field with no group, or an unknown one, is listed under. */ export const TRANSFER_OTHER_GROUP = {
46
+ id: 'other',
47
+ label: 'Other'
48
+ };
49
+ /** The group custom fields are listed under unless they name their own. */ export const TRANSFER_CUSTOM_GROUP = {
50
+ id: 'custom',
51
+ label: 'Custom fields'
52
+ };
53
+ /** The group system fields are listed under unless they name their own. */ export const TRANSFER_SYSTEM_GROUP = {
54
+ id: 'system',
55
+ label: 'System'
56
+ };
57
+ /** A custom field definition as a catalog field, with id `custom:<key>`. */ export function customTransferField(definition) {
58
+ var _definition_group, _definition_type;
59
+ return _extends({
60
+ id: customImportTarget(definition.key),
61
+ label: definition.label || definition.key,
62
+ group: (_definition_group = definition.group) != null ? _definition_group : TRANSFER_CUSTOM_GROUP.id,
63
+ type: (_definition_type = definition.type) != null ? _definition_type : 'text',
64
+ custom: true,
65
+ aliases: definition.label && definition.label !== definition.key ? [
66
+ definition.key
67
+ ] : []
68
+ }, definition.picklistId ? {
69
+ picklistId: definition.picklistId
70
+ } : {}, definition.required ? {
71
+ required: true
72
+ } : {});
73
+ }
74
+ /** The Aglyn id field every catalog carries, labeled with the configured brand. */ export function transferIdField(label = `${PLATFORM_BRAND_NAME} ID`) {
75
+ return {
76
+ id: TRANSFER_ID_FIELD,
77
+ label,
78
+ group: TRANSFER_SYSTEM_GROUP.id,
79
+ type: 'text',
80
+ system: true,
81
+ readOnly: true,
82
+ matchKey: true,
83
+ aliases: [
84
+ ...new Set([
85
+ `${PLATFORM_BRAND_NAME.toLowerCase()} id`,
86
+ 'aglyn id',
87
+ 'record id',
88
+ 'id'
89
+ ])
90
+ ]
91
+ };
92
+ }
93
+ /**
94
+ * The catalog for a resource.
95
+ *
96
+ * Standard fields come first in their groups, then derived ones, then custom
97
+ * ones, then system ones; within a group the declaration order holds. A
98
+ * field id declared twice keeps its first declaration — a custom field can
99
+ * never shadow a standard one because its id carries the `custom:` prefix.
100
+ */ export function buildTransferFieldCatalog(input) {
101
+ var _input_derived, _input_custom, _input_system, _input_groups;
102
+ const declared = [
103
+ ...input.standard,
104
+ ...((_input_derived = input.derived) != null ? _input_derived : []).map((field)=>_extends({}, field, {
105
+ derived: true
106
+ })),
107
+ ...((_input_custom = input.custom) != null ? _input_custom : []).map(customTransferField),
108
+ ...((_input_system = input.system) != null ? _input_system : []).map((field)=>{
109
+ var _field_group;
110
+ return _extends({}, field, {
111
+ system: true,
112
+ group: (_field_group = field.group) != null ? _field_group : TRANSFER_SYSTEM_GROUP.id
113
+ });
114
+ })
115
+ ];
116
+ if (!declared.some((field)=>field.id === TRANSFER_ID_FIELD)) declared.push(transferIdField());
117
+ const byId = new Map();
118
+ for (const field of declared)if (!byId.has(field.id)) byId.set(field.id, field);
119
+ const unique = [
120
+ ...byId.values()
121
+ ];
122
+ // The declared groups in their order, then any group a field names that
123
+ // was not declared, then the built-in tail (custom, system, other) unless
124
+ // the resource placed one of those itself.
125
+ const ordered = [];
126
+ const known = new Set();
127
+ const addGroup = (group)=>{
128
+ if (known.has(group.id)) return;
129
+ known.add(group.id);
130
+ ordered.push(group);
131
+ };
132
+ const builtIn = [
133
+ TRANSFER_CUSTOM_GROUP,
134
+ TRANSFER_SYSTEM_GROUP,
135
+ TRANSFER_OTHER_GROUP
136
+ ];
137
+ for (const group of (_input_groups = input.groups) != null ? _input_groups : [])addGroup(group);
138
+ for (const field of unique){
139
+ const id = field.group;
140
+ if (id && !builtIn.some((group)=>group.id === id)) addGroup({
141
+ id,
142
+ label: id
143
+ });
144
+ }
145
+ for (const group of builtIn)addGroup(group);
146
+ const groupOf = (field)=>field.group && known.has(field.group) ? field.group : TRANSFER_OTHER_GROUP.id;
147
+ const fields = ordered.flatMap((group)=>unique.filter((field)=>groupOf(field) === group.id));
148
+ return {
149
+ fields,
150
+ byId: new Map(fields.map((field)=>[
151
+ field.id,
152
+ field
153
+ ])),
154
+ groups: ordered.filter((group)=>fields.some((field)=>groupOf(field) === group.id))
155
+ };
156
+ }
157
+ /** The fields under each group, in catalog order; `fieldIds` narrows and keeps catalog order. */ export function groupTransferFields(catalog, fieldIds) {
158
+ const wanted = fieldIds ? new Set(fieldIds) : null;
159
+ const groupOf = (field)=>field.group && catalog.groups.some((group)=>group.id === field.group) ? field.group : TRANSFER_OTHER_GROUP.id;
160
+ return catalog.groups.map((group)=>({
161
+ group,
162
+ fields: catalog.fields.filter((field)=>groupOf(field) === group.id && (!wanted || wanted.has(field.id)))
163
+ })).filter((entry)=>entry.fields.length > 0);
164
+ }
165
+ /** The fields whose label, id or an alias contains every word of `query`. */ export function searchTransferFields(catalog, query) {
166
+ const words = String(query != null ? query : '').toLowerCase().split(/\s+/).filter(Boolean);
167
+ if (!words.length) return [
168
+ ...catalog.fields
169
+ ];
170
+ return catalog.fields.filter((field)=>{
171
+ var _field_aliases;
172
+ const haystack = [
173
+ field.label,
174
+ field.id,
175
+ ...(_field_aliases = field.aliases) != null ? _field_aliases : []
176
+ ].join(' ').toLowerCase();
177
+ return words.every((word)=>haystack.includes(word));
178
+ });
179
+ }
180
+ export const TRANSFER_PRESET_IDS = [
181
+ 'everything',
182
+ 'reimportable',
183
+ 'minimal'
184
+ ];
185
+ /** The longest column name a preset or an export request may give a field. */ export const TRANSFER_HEADER_MAX = 120;
186
+ /**
187
+ * The column names an export may write, from what a request or a preset
188
+ * carries: only for the chosen fields, trimmed, non-empty, at most
189
+ * {@link TRANSFER_HEADER_MAX} characters, and never two fields under one
190
+ * name — a file whose columns repeat cannot be read back.
191
+ */ export function transferExportHeaders(fieldIds, headers) {
192
+ const out = {};
193
+ if (!headers || typeof headers !== 'object' || Array.isArray(headers)) return out;
194
+ const taken = new Set();
195
+ for (const fieldId of fieldIds){
196
+ const raw = headers[fieldId];
197
+ if (typeof raw !== 'string') continue;
198
+ const name = raw.trim().slice(0, TRANSFER_HEADER_MAX);
199
+ const key = name.toLowerCase();
200
+ if (!name || taken.has(key)) continue;
201
+ taken.add(key);
202
+ out[fieldId] = name;
203
+ }
204
+ return out;
205
+ }
206
+ /**
207
+ * A list of field ids against the catalog: unknown ids dropped (and
208
+ * reported), duplicates dropped, the given order kept, and every id in
209
+ * `ensure` present — added in catalog order at the front when missing.
210
+ */ export function resolveTransferFieldSelection(catalog, selected, ensure = []) {
211
+ const seen = new Set();
212
+ const fieldIds = [];
213
+ const unknown = [];
214
+ for (const id of selected){
215
+ if (seen.has(id)) continue;
216
+ seen.add(id);
217
+ if (catalog.byId.has(id)) fieldIds.push(id);
218
+ else unknown.push(id);
219
+ }
220
+ const missing = catalog.fields.filter((field)=>ensure.includes(field.id) && !fieldIds.includes(field.id)).map((field)=>field.id);
221
+ return {
222
+ fieldIds: [
223
+ ...missing,
224
+ ...fieldIds
225
+ ],
226
+ unknown
227
+ };
228
+ }
229
+ /**
230
+ * The fields a preset exports, in order. A built-in preset is computed from
231
+ * the catalog; a saved one is resolved against it. The re-importable and
232
+ * minimal presets lead with the id and the match keys.
233
+ */ export function resolveTransferPreset(catalog, preset, hints = {}) {
234
+ var _hints_matchKeyFieldIds, _hints_minimalFieldIds, _hints_minimalFieldIds1;
235
+ // The id leads once, whether or not the match keys name it too.
236
+ const keys = [
237
+ ...new Set([
238
+ TRANSFER_ID_FIELD,
239
+ ...(_hints_matchKeyFieldIds = hints.matchKeyFieldIds) != null ? _hints_matchKeyFieldIds : []
240
+ ])
241
+ ].filter((id)=>catalog.byId.has(id));
242
+ const lead = (ids)=>{
243
+ const rest = new Set(ids);
244
+ for (const key of keys)rest.delete(key);
245
+ return [
246
+ ...keys,
247
+ ...catalog.fields.filter((field)=>rest.has(field.id)).map((field)=>field.id)
248
+ ];
249
+ };
250
+ if (typeof preset !== 'string') return resolveTransferFieldSelection(catalog, preset.fieldIds);
251
+ if (preset === 'everything') return {
252
+ fieldIds: catalog.fields.map((field)=>field.id),
253
+ unknown: []
254
+ };
255
+ if (preset === 'reimportable') {
256
+ return {
257
+ fieldIds: lead(catalog.fields.filter(isTransferFieldWritable).map((field)=>field.id)),
258
+ unknown: []
259
+ };
260
+ }
261
+ const minimal = new Set((_hints_minimalFieldIds = hints.minimalFieldIds) != null ? _hints_minimalFieldIds : []);
262
+ return {
263
+ fieldIds: lead(catalog.fields.filter((field)=>field.required || minimal.has(field.id)).map((field)=>field.id)),
264
+ unknown: ((_hints_minimalFieldIds1 = hints.minimalFieldIds) != null ? _hints_minimalFieldIds1 : []).filter((id)=>!catalog.byId.has(id))
265
+ };
266
+ }
267
+ /** `ids` with the entry at `from` moved to `to` — the picker's drag to reorder. */ export function moveTransferField(ids, from, to) {
268
+ const next = [
269
+ ...ids
270
+ ];
271
+ if (from < 0 || from >= next.length) return next;
272
+ const [moved] = next.splice(from, 1);
273
+ const at = Math.max(0, Math.min(next.length, to));
274
+ next.splice(at, 0, moved);
275
+ return next;
276
+ }
277
+
278
+ //# sourceMappingURL=field-catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../libs/aglyn/src/lib/data-transfer/field-catalog.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*==========================================\n * FIELD CATALOG — every field a resource has, in the order a person picks them.\n *\n * Export offers ALL of a resource's fields: the standard ones it declares,\n * the custom ones the organization defined, and the derived and system ones\n * (the Aglyn id, created and updated times) that are read but never written.\n * The catalog is that list, grouped and ordered once, so the export picker,\n * the import mapping and the plan all name the same fields the same way.\n *\n * ## Presets\n *\n * - `everything` — every field, in catalog order.\n * - `reimportable` — the default for export: the Aglyn id, the resource's\n * match keys and every writable field, so the file comes back in and\n * finds the records it came from.\n * - `minimal` — the id, the match keys, the required fields and whatever\n * short list the resource names as its minimum.\n *\n * A saved preset is a list of field ids; resolving it drops the ids the\n * catalog no longer has (a deleted custom field) and says which.\n *\n * A resource may bring presets of its own (`TransferResourcePreset`): a\n * named list of its fields, and the column names another product's import\n * expects for them, so a file laid out for that product comes out of the\n * export dialog ready to upload there.\n *=========================================*/\n\nimport { customImportTarget } from '../app-utils/csv-import'\nimport { PLATFORM_BRAND_NAME } from '../app-utils/platform-brand'\nimport { TRANSFER_ID_FIELD, isTransferFieldWritable } from './resource'\nimport type { TransferField, TransferFieldType } from './resource'\n\n/** A heading fields are listed under. */\nexport interface TransferFieldGroup {\n id: string\n label: string\n}\n\n/** The group a field with no group, or an unknown one, is listed under. */\nexport const TRANSFER_OTHER_GROUP: TransferFieldGroup = { id: 'other', label: 'Other' }\n\n/** The group custom fields are listed under unless they name their own. */\nexport const TRANSFER_CUSTOM_GROUP: TransferFieldGroup = { id: 'custom', label: 'Custom fields' }\n\n/** The group system fields are listed under unless they name their own. */\nexport const TRANSFER_SYSTEM_GROUP: TransferFieldGroup = { id: 'system', label: 'System' }\n\n/** A resource's fields, grouped and ordered. */\nexport interface TransferFieldCatalog {\n /** Every field, in picker order: group by group, declaration order within. */\n fields: TransferField[]\n byId: ReadonlyMap<string, TransferField>\n /** The groups that hold at least one field, in order. */\n groups: TransferFieldGroup[]\n}\n\n/** A custom field as the organization defined it. */\nexport interface TransferCustomFieldDefinition {\n key: string\n label: string\n type?: TransferFieldType\n picklistId?: string\n required?: boolean\n group?: string\n}\n\n/** A custom field definition as a catalog field, with id `custom:<key>`. */\nexport function customTransferField(definition: TransferCustomFieldDefinition): TransferField {\n return {\n id: customImportTarget(definition.key),\n label: definition.label || definition.key,\n group: definition.group ?? TRANSFER_CUSTOM_GROUP.id,\n type: definition.type ?? 'text',\n custom: true,\n aliases: definition.label && definition.label !== definition.key ? [definition.key] : [],\n ...(definition.picklistId ? { picklistId: definition.picklistId } : {}),\n ...(definition.required ? { required: true } : {}),\n }\n}\n\n/** What a catalog is built from. */\nexport interface TransferCatalogInput {\n /** The resource's own fields. */\n standard: readonly TransferField[]\n /** The organization's custom fields. */\n custom?: readonly TransferCustomFieldDefinition[]\n /** Computed fields, exported and never written. */\n derived?: readonly TransferField[]\n /** Platform-written fields; the Aglyn id is added when absent. */\n system?: readonly TransferField[]\n /** The groups, in order. Groups a field names but this list lacks are listed after these. */\n groups?: readonly TransferFieldGroup[]\n}\n\n/** The Aglyn id field every catalog carries, labeled with the configured brand. */\nexport function transferIdField(label = `${PLATFORM_BRAND_NAME} ID`): TransferField {\n return {\n id: TRANSFER_ID_FIELD,\n label,\n group: TRANSFER_SYSTEM_GROUP.id,\n type: 'text',\n system: true,\n readOnly: true,\n matchKey: true,\n aliases: [...new Set([`${PLATFORM_BRAND_NAME.toLowerCase()} id`, 'aglyn id', 'record id', 'id'])],\n }\n}\n\n/**\n * The catalog for a resource.\n *\n * Standard fields come first in their groups, then derived ones, then custom\n * ones, then system ones; within a group the declaration order holds. A\n * field id declared twice keeps its first declaration — a custom field can\n * never shadow a standard one because its id carries the `custom:` prefix.\n */\nexport function buildTransferFieldCatalog(input: TransferCatalogInput): TransferFieldCatalog {\n const declared: TransferField[] = [\n ...input.standard,\n ...(input.derived ?? []).map((field) => ({ ...field, derived: true })),\n ...(input.custom ?? []).map(customTransferField),\n ...(input.system ?? []).map((field) => ({\n ...field,\n system: true,\n group: field.group ?? TRANSFER_SYSTEM_GROUP.id,\n })),\n ]\n if (!declared.some((field) => field.id === TRANSFER_ID_FIELD)) declared.push(transferIdField())\n\n const byId = new Map<string, TransferField>()\n for (const field of declared) if (!byId.has(field.id)) byId.set(field.id, field)\n const unique = [...byId.values()]\n\n // The declared groups in their order, then any group a field names that\n // was not declared, then the built-in tail (custom, system, other) unless\n // the resource placed one of those itself.\n const ordered: TransferFieldGroup[] = []\n const known = new Set<string>()\n const addGroup = (group: TransferFieldGroup): void => {\n if (known.has(group.id)) return\n known.add(group.id)\n ordered.push(group)\n }\n const builtIn = [TRANSFER_CUSTOM_GROUP, TRANSFER_SYSTEM_GROUP, TRANSFER_OTHER_GROUP]\n for (const group of input.groups ?? []) addGroup(group)\n for (const field of unique) {\n const id = field.group\n if (id && !builtIn.some((group) => group.id === id)) addGroup({ id, label: id })\n }\n for (const group of builtIn) addGroup(group)\n\n const groupOf = (field: TransferField): string =>\n field.group && known.has(field.group) ? field.group : TRANSFER_OTHER_GROUP.id\n const fields = ordered.flatMap((group) => unique.filter((field) => groupOf(field) === group.id))\n return {\n fields,\n byId: new Map(fields.map((field) => [field.id, field])),\n groups: ordered.filter((group) => fields.some((field) => groupOf(field) === group.id)),\n }\n}\n\n/** The fields under each group, in catalog order; `fieldIds` narrows and keeps catalog order. */\nexport function groupTransferFields(\n catalog: TransferFieldCatalog,\n fieldIds?: readonly string[],\n): { group: TransferFieldGroup; fields: TransferField[] }[] {\n const wanted = fieldIds ? new Set(fieldIds) : null\n const groupOf = (field: TransferField): string =>\n field.group && catalog.groups.some((group) => group.id === field.group) ? field.group : TRANSFER_OTHER_GROUP.id\n return catalog.groups\n .map((group) => ({\n group,\n fields: catalog.fields.filter(\n (field) => groupOf(field) === group.id && (!wanted || wanted.has(field.id)),\n ),\n }))\n .filter((entry) => entry.fields.length > 0)\n}\n\n/** The fields whose label, id or an alias contains every word of `query`. */\nexport function searchTransferFields(catalog: TransferFieldCatalog, query: string): TransferField[] {\n const words = String(query ?? '')\n .toLowerCase()\n .split(/\\s+/)\n .filter(Boolean)\n if (!words.length) return [...catalog.fields]\n return catalog.fields.filter((field) => {\n const haystack = [field.label, field.id, ...(field.aliases ?? [])].join(' ').toLowerCase()\n return words.every((word) => haystack.includes(word))\n })\n}\n\n/** The built-in presets. */\nexport type TransferPresetId = 'everything' | 'reimportable' | 'minimal'\n\nexport const TRANSFER_PRESET_IDS: readonly TransferPresetId[] = ['everything', 'reimportable', 'minimal']\n\n/** A preset a person saved: a name and the fields in their chosen order. */\nexport interface TransferSavedPreset {\n id: string\n label: string\n fieldIds: readonly string[]\n}\n\n/**\n * A preset the resource itself offers, listed after the built-in ones: its\n * fields in order and, for a layout another product imports, that\n * product's column name for each field. Its id must not be a built-in\n * preset's.\n */\nexport interface TransferResourcePreset extends TransferSavedPreset {\n /** One sentence beside the preset in the picker. */\n description?: string\n /** Field id → the CSV column name written instead of the field's label. */\n headers?: Readonly<Record<string, string>>\n}\n\n/** The longest column name a preset or an export request may give a field. */\nexport const TRANSFER_HEADER_MAX = 120\n\n/**\n * The column names an export may write, from what a request or a preset\n * carries: only for the chosen fields, trimmed, non-empty, at most\n * {@link TRANSFER_HEADER_MAX} characters, and never two fields under one\n * name — a file whose columns repeat cannot be read back.\n */\nexport function transferExportHeaders(\n fieldIds: readonly string[],\n headers: unknown,\n): Record<string, string> {\n const out: Record<string, string> = {}\n if (!headers || typeof headers !== 'object' || Array.isArray(headers)) return out\n const taken = new Set<string>()\n for (const fieldId of fieldIds) {\n const raw = (headers as Record<string, unknown>)[fieldId]\n if (typeof raw !== 'string') continue\n const name = raw.trim().slice(0, TRANSFER_HEADER_MAX)\n const key = name.toLowerCase()\n if (!name || taken.has(key)) continue\n taken.add(key)\n out[fieldId] = name\n }\n return out\n}\n\n/** What a resource says about its own presets. */\nexport interface TransferPresetHints {\n /** The fields a re-import matches on (the id is always included). */\n matchKeyFieldIds?: readonly string[]\n /** Fields the minimal preset adds beyond the id, match keys and required ones. */\n minimalFieldIds?: readonly string[]\n}\n\n/** A resolved selection: the ids to export, in order, and the ids that no longer exist. */\nexport interface TransferFieldSelection {\n fieldIds: string[]\n unknown: string[]\n}\n\n/**\n * A list of field ids against the catalog: unknown ids dropped (and\n * reported), duplicates dropped, the given order kept, and every id in\n * `ensure` present — added in catalog order at the front when missing.\n */\nexport function resolveTransferFieldSelection(\n catalog: TransferFieldCatalog,\n selected: readonly string[],\n ensure: readonly string[] = [],\n): TransferFieldSelection {\n const seen = new Set<string>()\n const fieldIds: string[] = []\n const unknown: string[] = []\n for (const id of selected) {\n if (seen.has(id)) continue\n seen.add(id)\n if (catalog.byId.has(id)) fieldIds.push(id)\n else unknown.push(id)\n }\n const missing = catalog.fields\n .filter((field) => ensure.includes(field.id) && !fieldIds.includes(field.id))\n .map((field) => field.id)\n return { fieldIds: [...missing, ...fieldIds], unknown }\n}\n\n/**\n * The fields a preset exports, in order. A built-in preset is computed from\n * the catalog; a saved one is resolved against it. The re-importable and\n * minimal presets lead with the id and the match keys.\n */\nexport function resolveTransferPreset(\n catalog: TransferFieldCatalog,\n preset: TransferPresetId | TransferSavedPreset,\n hints: TransferPresetHints = {},\n): TransferFieldSelection {\n // The id leads once, whether or not the match keys name it too.\n const keys = [...new Set([TRANSFER_ID_FIELD, ...(hints.matchKeyFieldIds ?? [])])].filter((id) => catalog.byId.has(id))\n const lead = (ids: Iterable<string>): string[] => {\n const rest = new Set(ids)\n for (const key of keys) rest.delete(key)\n return [...keys, ...catalog.fields.filter((field) => rest.has(field.id)).map((field) => field.id)]\n }\n if (typeof preset !== 'string') return resolveTransferFieldSelection(catalog, preset.fieldIds)\n if (preset === 'everything') return { fieldIds: catalog.fields.map((field) => field.id), unknown: [] }\n if (preset === 'reimportable') {\n return {\n fieldIds: lead(catalog.fields.filter(isTransferFieldWritable).map((field) => field.id)),\n unknown: [],\n }\n }\n const minimal = new Set(hints.minimalFieldIds ?? [])\n return {\n fieldIds: lead(\n catalog.fields.filter((field) => field.required || minimal.has(field.id)).map((field) => field.id),\n ),\n unknown: (hints.minimalFieldIds ?? []).filter((id) => !catalog.byId.has(id)),\n }\n}\n\n/** `ids` with the entry at `from` moved to `to` — the picker's drag to reorder. */\nexport function moveTransferField(ids: readonly string[], from: number, to: number): string[] {\n const next = [...ids]\n if (from < 0 || from >= next.length) return next\n const [moved] = next.splice(from, 1)\n const at = Math.max(0, Math.min(next.length, to))\n next.splice(at, 0, moved as string)\n return next\n}\n"],"names":["customImportTarget","PLATFORM_BRAND_NAME","TRANSFER_ID_FIELD","isTransferFieldWritable","TRANSFER_OTHER_GROUP","id","label","TRANSFER_CUSTOM_GROUP","TRANSFER_SYSTEM_GROUP","customTransferField","definition","key","group","type","custom","aliases","picklistId","required","transferIdField","system","readOnly","matchKey","Set","toLowerCase","buildTransferFieldCatalog","input","declared","standard","derived","map","field","some","push","byId","Map","has","set","unique","values","ordered","known","addGroup","add","builtIn","groups","groupOf","fields","flatMap","filter","groupTransferFields","catalog","fieldIds","wanted","entry","length","searchTransferFields","query","words","String","split","Boolean","haystack","join","every","word","includes","TRANSFER_PRESET_IDS","TRANSFER_HEADER_MAX","transferExportHeaders","headers","out","Array","isArray","taken","fieldId","raw","name","trim","slice","resolveTransferFieldSelection","selected","ensure","seen","unknown","missing","resolveTransferPreset","preset","hints","keys","matchKeyFieldIds","lead","ids","rest","delete","minimal","minimalFieldIds","moveTransferField","from","to","next","moved","splice","at","Math","max","min"],"mappings":"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"}
@@ -0,0 +1,129 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Aglyn LLC
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ import type { TransferField, TransferFieldType } from './resource';
18
+ /** Why a column was proposed for a field. */
19
+ export type HeaderMatchReason = 'exactAlias' | 'normalizedAlias' | 'fuzzy' | 'typeInference';
20
+ /** Extra header spellings for a resource's fields, from one source. */
21
+ export interface TransferAliasDictionary {
22
+ /** Who the spellings come from, shown beside the match ("Spreadsheet export"). */
23
+ source: string;
24
+ /** Field id → header spellings. */
25
+ aliases: Readonly<Record<string, readonly string[]>>;
26
+ }
27
+ /** What a column's sample cells look like. */
28
+ export type InferredCellType = 'email' | 'phone' | 'url' | 'date' | 'number' | 'currency' | 'boolean' | 'text';
29
+ /** One candidate field for a column. */
30
+ export interface HeaderCandidate {
31
+ fieldId: string;
32
+ confidence: number;
33
+ reason: HeaderMatchReason;
34
+ /** The alias that matched, as written. */
35
+ alias?: string;
36
+ /** The dictionary the alias came from, when a plugin supplied it. */
37
+ source?: string;
38
+ }
39
+ /** The proposal for one column. */
40
+ export interface HeaderMatchProposal {
41
+ column: number;
42
+ header: string;
43
+ /** The proposed field, or `null` to leave the column unmapped. */
44
+ fieldId: string | null;
45
+ confidence: number;
46
+ reason: HeaderMatchReason | null;
47
+ alias?: string;
48
+ source?: string;
49
+ /** The next-best candidates, strongest first. */
50
+ alternatives: HeaderCandidate[];
51
+ /** What the sample cells look like, when samples were given. */
52
+ inferredType: InferredCellType | null;
53
+ /** The column wanted a field another column took. */
54
+ lostField?: string;
55
+ }
56
+ /** Two or more columns that want one field. */
57
+ export interface HeaderMatchConflict {
58
+ fieldId: string;
59
+ /** Every column whose best candidate was the field, the winner first. */
60
+ columns: number[];
61
+ }
62
+ export interface HeaderMatchResult {
63
+ proposals: HeaderMatchProposal[];
64
+ /** Column → field id, for every column with a proposal. */
65
+ mapping: Record<number, string>;
66
+ conflicts: HeaderMatchConflict[];
67
+ /** Required fields no column was proposed for. */
68
+ unmappedRequired: string[];
69
+ }
70
+ export interface HeaderMatchOptions {
71
+ /** Plugin-supplied spellings, tried after the fields' own. */
72
+ dictionaries?: readonly TransferAliasDictionary[];
73
+ /** Sample rows (cells in column order) for type inference. */
74
+ samples?: readonly (readonly unknown[])[];
75
+ /** The least confidence a fuzzy match is proposed at; default 0.72. */
76
+ threshold?: number;
77
+ }
78
+ /** The default least confidence a fuzzy proposal is made at. */
79
+ export declare const HEADER_MATCH_THRESHOLD = 0.72;
80
+ /**
81
+ * A header folded for comparison: accents dropped, `camelCase` split,
82
+ * punctuation and underscores to spaces, lowercased, single-spaced.
83
+ * `First_Name`, `firstName` and `first name` fold together.
84
+ */
85
+ export declare function normalizeHeader(value: unknown): string;
86
+ /** A header with every separator removed: `e-mail` and `email` compare equal. */
87
+ export declare function compactHeader(value: unknown): string;
88
+ /**
89
+ * What a column's cells look like: the type at least 80% of its non-blank
90
+ * samples read as, or `text`. `null` when there is no non-blank sample.
91
+ */
92
+ export declare function inferCellType(cells: readonly unknown[]): InferredCellType | null;
93
+ /** Whether a field of `type` would take cells that look like `inferred`. */
94
+ export declare function inferredTypeFits(type: TransferFieldType, inferred: InferredCellType): boolean;
95
+ /** Every candidate field for one header, strongest first. */
96
+ export declare function headerCandidates(header: string, fields: readonly TransferField[], options?: Pick<HeaderMatchOptions, 'dictionaries' | 'threshold'>): HeaderCandidate[];
97
+ /**
98
+ * A proposal for every column of a file.
99
+ *
100
+ * Candidates are scored per column, nudged by type inference where samples
101
+ * were given (a fitting type breaks a near tie; a clearly misfitting one is
102
+ * demoted), then assigned greedily strongest first so each field goes to
103
+ * one column. A column with no header candidate but distinctive cells (all
104
+ * emails, all phones, all web addresses) is offered the one importable
105
+ * field of that type nobody took.
106
+ */
107
+ export declare function matchHeaders(headers: readonly string[], fields: readonly TransferField[], options?: HeaderMatchOptions): HeaderMatchResult;
108
+ /** Required fields a mapping leaves without a column. */
109
+ export declare function mappingUnmappedRequired(mapping: Readonly<Record<number, string | null | undefined>>, fields: readonly TransferField[]): string[];
110
+ /** What is wrong with a mapping as the person left it. */
111
+ export interface MappingProblems {
112
+ /** Fields two or more columns are mapped to. */
113
+ duplicates: HeaderMatchConflict[];
114
+ /** Required fields with no column. */
115
+ unmappedRequired: string[];
116
+ /** Columns mapped to a field that does not exist or cannot be imported. */
117
+ invalid: {
118
+ column: number;
119
+ fieldId: string;
120
+ }[];
121
+ }
122
+ /**
123
+ * The problems that must be resolved before a mapping can be used: a field
124
+ * two columns write, a required field nobody writes, a target that cannot
125
+ * be imported.
126
+ */
127
+ export declare function mappingProblems(mapping: Readonly<Record<number, string | null | undefined>>, fields: readonly TransferField[]): MappingProblems;
128
+ /** Whether a mapping has nothing that blocks it. */
129
+ export declare function mappingIsUsable(problems: MappingProblems): boolean;