@entifix/core 0.1.0-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 (351) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +11 -0
  3. package/dist/base-entities/configuration-client/configuration-client-singleton.d.ts +39 -0
  4. package/dist/base-entities/configuration-client/configuration-client-singleton.d.ts.map +1 -0
  5. package/dist/base-entities/configuration-client/configuration-client-singleton.js +164 -0
  6. package/dist/base-entities/configuration-client/configuration-client-singleton.js.map +1 -0
  7. package/dist/base-entities/configuration-client/index.d.ts +4 -0
  8. package/dist/base-entities/configuration-client/index.d.ts.map +1 -0
  9. package/dist/base-entities/configuration-client/index.js +5 -0
  10. package/dist/base-entities/configuration-client/index.js.map +1 -0
  11. package/dist/base-entities/configuration-client/read-configuration-from-process.d.ts +11 -0
  12. package/dist/base-entities/configuration-client/read-configuration-from-process.d.ts.map +1 -0
  13. package/dist/base-entities/configuration-client/read-configuration-from-process.js +26 -0
  14. package/dist/base-entities/configuration-client/read-configuration-from-process.js.map +1 -0
  15. package/dist/base-entities/configuration-client/types.d.ts +38 -0
  16. package/dist/base-entities/configuration-client/types.d.ts.map +1 -0
  17. package/dist/base-entities/configuration-client/types.js +3 -0
  18. package/dist/base-entities/configuration-client/types.js.map +1 -0
  19. package/dist/base-entities/entifix-error/entifix-error.d.ts +31 -0
  20. package/dist/base-entities/entifix-error/entifix-error.d.ts.map +1 -0
  21. package/dist/base-entities/entifix-error/entifix-error.js +56 -0
  22. package/dist/base-entities/entifix-error/entifix-error.js.map +1 -0
  23. package/dist/base-entities/entifix-error/index.d.ts +2 -0
  24. package/dist/base-entities/entifix-error/index.d.ts.map +1 -0
  25. package/dist/base-entities/entifix-error/index.js +3 -0
  26. package/dist/base-entities/entifix-error/index.js.map +1 -0
  27. package/dist/command-palette/command-matching.d.ts +79 -0
  28. package/dist/command-palette/command-matching.d.ts.map +1 -0
  29. package/dist/command-palette/command-matching.js +116 -0
  30. package/dist/command-palette/command-matching.js.map +1 -0
  31. package/dist/command-palette/command-source.d.ts +109 -0
  32. package/dist/command-palette/command-source.d.ts.map +1 -0
  33. package/dist/command-palette/command-source.js +11 -0
  34. package/dist/command-palette/command-source.js.map +1 -0
  35. package/dist/command-palette/index.d.ts +3 -0
  36. package/dist/command-palette/index.d.ts.map +1 -0
  37. package/dist/command-palette/index.js +4 -0
  38. package/dist/command-palette/index.js.map +1 -0
  39. package/dist/entity-definition/decorators/accessor/accessor.d.ts +3 -0
  40. package/dist/entity-definition/decorators/accessor/accessor.d.ts.map +1 -0
  41. package/dist/entity-definition/decorators/accessor/accessor.js +11 -0
  42. package/dist/entity-definition/decorators/accessor/accessor.js.map +1 -0
  43. package/dist/entity-definition/decorators/accessor/index.d.ts +2 -0
  44. package/dist/entity-definition/decorators/accessor/index.d.ts.map +1 -0
  45. package/dist/entity-definition/decorators/accessor/index.js +3 -0
  46. package/dist/entity-definition/decorators/accessor/index.js.map +1 -0
  47. package/dist/entity-definition/decorators/entity/entity.d.ts +4 -0
  48. package/dist/entity-definition/decorators/entity/entity.d.ts.map +1 -0
  49. package/dist/entity-definition/decorators/entity/entity.js +9 -0
  50. package/dist/entity-definition/decorators/entity/entity.js.map +1 -0
  51. package/dist/entity-definition/decorators/entity/index.d.ts +2 -0
  52. package/dist/entity-definition/decorators/entity/index.d.ts.map +1 -0
  53. package/dist/entity-definition/decorators/entity/index.js +3 -0
  54. package/dist/entity-definition/decorators/entity/index.js.map +1 -0
  55. package/dist/entity-definition/decorators/method/index.d.ts +2 -0
  56. package/dist/entity-definition/decorators/method/index.d.ts.map +1 -0
  57. package/dist/entity-definition/decorators/method/index.js +3 -0
  58. package/dist/entity-definition/decorators/method/index.js.map +1 -0
  59. package/dist/entity-definition/decorators/method/method.d.ts +3 -0
  60. package/dist/entity-definition/decorators/method/method.d.ts.map +1 -0
  61. package/dist/entity-definition/decorators/method/method.js +10 -0
  62. package/dist/entity-definition/decorators/method/method.js.map +1 -0
  63. package/dist/entity-definition/decorators/use-case/index.d.ts +2 -0
  64. package/dist/entity-definition/decorators/use-case/index.d.ts.map +1 -0
  65. package/dist/entity-definition/decorators/use-case/index.js +3 -0
  66. package/dist/entity-definition/decorators/use-case/index.js.map +1 -0
  67. package/dist/entity-definition/decorators/use-case/use-case.d.ts +18 -0
  68. package/dist/entity-definition/decorators/use-case/use-case.d.ts.map +1 -0
  69. package/dist/entity-definition/decorators/use-case/use-case.js +26 -0
  70. package/dist/entity-definition/decorators/use-case/use-case.js.map +1 -0
  71. package/dist/entity-definition/describe/describe-child-columns.d.ts +33 -0
  72. package/dist/entity-definition/describe/describe-child-columns.d.ts.map +1 -0
  73. package/dist/entity-definition/describe/describe-child-columns.js +44 -0
  74. package/dist/entity-definition/describe/describe-child-columns.js.map +1 -0
  75. package/dist/entity-definition/describe/describe-entity-columns.d.ts +83 -0
  76. package/dist/entity-definition/describe/describe-entity-columns.d.ts.map +1 -0
  77. package/dist/entity-definition/describe/describe-entity-columns.js +112 -0
  78. package/dist/entity-definition/describe/describe-entity-columns.js.map +1 -0
  79. package/dist/entity-definition/describe/describe-entity-use-cases.d.ts +34 -0
  80. package/dist/entity-definition/describe/describe-entity-use-cases.d.ts.map +1 -0
  81. package/dist/entity-definition/describe/describe-entity-use-cases.js +24 -0
  82. package/dist/entity-definition/describe/describe-entity-use-cases.js.map +1 -0
  83. package/dist/entity-definition/describe/index.d.ts +4 -0
  84. package/dist/entity-definition/describe/index.d.ts.map +1 -0
  85. package/dist/entity-definition/describe/index.js +5 -0
  86. package/dist/entity-definition/describe/index.js.map +1 -0
  87. package/dist/entity-definition/field-path.d.ts +49 -0
  88. package/dist/entity-definition/field-path.d.ts.map +1 -0
  89. package/dist/entity-definition/field-path.js +58 -0
  90. package/dist/entity-definition/field-path.js.map +1 -0
  91. package/dist/entity-definition/helpers/entity-definition-helpers.d.ts +59 -0
  92. package/dist/entity-definition/helpers/entity-definition-helpers.d.ts.map +1 -0
  93. package/dist/entity-definition/helpers/entity-definition-helpers.js +115 -0
  94. package/dist/entity-definition/helpers/entity-definition-helpers.js.map +1 -0
  95. package/dist/entity-definition/helpers/index.d.ts +2 -0
  96. package/dist/entity-definition/helpers/index.d.ts.map +1 -0
  97. package/dist/entity-definition/helpers/index.js +3 -0
  98. package/dist/entity-definition/helpers/index.js.map +1 -0
  99. package/dist/entity-definition/links/apply-entity-links/apply-entity-links.d.ts +48 -0
  100. package/dist/entity-definition/links/apply-entity-links/apply-entity-links.d.ts.map +1 -0
  101. package/dist/entity-definition/links/apply-entity-links/apply-entity-links.js +88 -0
  102. package/dist/entity-definition/links/apply-entity-links/apply-entity-links.js.map +1 -0
  103. package/dist/entity-definition/links/apply-entity-links/index.d.ts +2 -0
  104. package/dist/entity-definition/links/apply-entity-links/index.d.ts.map +1 -0
  105. package/dist/entity-definition/links/apply-entity-links/index.js +3 -0
  106. package/dist/entity-definition/links/apply-entity-links/index.js.map +1 -0
  107. package/dist/entity-definition/links/entity-collection-link/entity-collection-link.d.ts +29 -0
  108. package/dist/entity-definition/links/entity-collection-link/entity-collection-link.d.ts.map +1 -0
  109. package/dist/entity-definition/links/entity-collection-link/entity-collection-link.js +61 -0
  110. package/dist/entity-definition/links/entity-collection-link/entity-collection-link.js.map +1 -0
  111. package/dist/entity-definition/links/entity-collection-link/index.d.ts +2 -0
  112. package/dist/entity-definition/links/entity-collection-link/index.d.ts.map +1 -0
  113. package/dist/entity-definition/links/entity-collection-link/index.js +3 -0
  114. package/dist/entity-definition/links/entity-collection-link/index.js.map +1 -0
  115. package/dist/entity-definition/links/entity-link/entity-link.d.ts +58 -0
  116. package/dist/entity-definition/links/entity-link/entity-link.d.ts.map +1 -0
  117. package/dist/entity-definition/links/entity-link/entity-link.js +79 -0
  118. package/dist/entity-definition/links/entity-link/entity-link.js.map +1 -0
  119. package/dist/entity-definition/links/entity-link/index.d.ts +2 -0
  120. package/dist/entity-definition/links/entity-link/index.d.ts.map +1 -0
  121. package/dist/entity-definition/links/entity-link/index.js +3 -0
  122. package/dist/entity-definition/links/entity-link/index.js.map +1 -0
  123. package/dist/entity-definition/links/entity-link-source/entity-link-source.d.ts +74 -0
  124. package/dist/entity-definition/links/entity-link-source/entity-link-source.d.ts.map +1 -0
  125. package/dist/entity-definition/links/entity-link-source/entity-link-source.js +11 -0
  126. package/dist/entity-definition/links/entity-link-source/entity-link-source.js.map +1 -0
  127. package/dist/entity-definition/links/entity-link-source/index.d.ts +2 -0
  128. package/dist/entity-definition/links/entity-link-source/index.d.ts.map +1 -0
  129. package/dist/entity-definition/links/entity-link-source/index.js +3 -0
  130. package/dist/entity-definition/links/entity-link-source/index.js.map +1 -0
  131. package/dist/entity-definition/meta-entities/meta-accessor/index.d.ts +2 -0
  132. package/dist/entity-definition/meta-entities/meta-accessor/index.d.ts.map +1 -0
  133. package/dist/entity-definition/meta-entities/meta-accessor/index.js +3 -0
  134. package/dist/entity-definition/meta-entities/meta-accessor/index.js.map +1 -0
  135. package/dist/entity-definition/meta-entities/meta-accessor/meta-accessor.d.ts +137 -0
  136. package/dist/entity-definition/meta-entities/meta-accessor/meta-accessor.d.ts.map +1 -0
  137. package/dist/entity-definition/meta-entities/meta-accessor/meta-accessor.js +52 -0
  138. package/dist/entity-definition/meta-entities/meta-accessor/meta-accessor.js.map +1 -0
  139. package/dist/entity-definition/meta-entities/meta-entity/index.d.ts +2 -0
  140. package/dist/entity-definition/meta-entities/meta-entity/index.d.ts.map +1 -0
  141. package/dist/entity-definition/meta-entities/meta-entity/index.js +3 -0
  142. package/dist/entity-definition/meta-entities/meta-entity/index.js.map +1 -0
  143. package/dist/entity-definition/meta-entities/meta-entity/meta-entity.d.ts +17 -0
  144. package/dist/entity-definition/meta-entities/meta-entity/meta-entity.d.ts.map +1 -0
  145. package/dist/entity-definition/meta-entities/meta-entity/meta-entity.js +13 -0
  146. package/dist/entity-definition/meta-entities/meta-entity/meta-entity.js.map +1 -0
  147. package/dist/entity-definition/meta-entities/meta-method/index.d.ts +2 -0
  148. package/dist/entity-definition/meta-entities/meta-method/index.d.ts.map +1 -0
  149. package/dist/entity-definition/meta-entities/meta-method/index.js +3 -0
  150. package/dist/entity-definition/meta-entities/meta-method/index.js.map +1 -0
  151. package/dist/entity-definition/meta-entities/meta-method/meta-method.d.ts +16 -0
  152. package/dist/entity-definition/meta-entities/meta-method/meta-method.d.ts.map +1 -0
  153. package/dist/entity-definition/meta-entities/meta-method/meta-method.js +11 -0
  154. package/dist/entity-definition/meta-entities/meta-method/meta-method.js.map +1 -0
  155. package/dist/entity-definition/meta-entities/meta-use-case/index.d.ts +2 -0
  156. package/dist/entity-definition/meta-entities/meta-use-case/index.d.ts.map +1 -0
  157. package/dist/entity-definition/meta-entities/meta-use-case/index.js +3 -0
  158. package/dist/entity-definition/meta-entities/meta-use-case/index.js.map +1 -0
  159. package/dist/entity-definition/meta-entities/meta-use-case/meta-use-case.d.ts +94 -0
  160. package/dist/entity-definition/meta-entities/meta-use-case/meta-use-case.d.ts.map +1 -0
  161. package/dist/entity-definition/meta-entities/meta-use-case/meta-use-case.js +17 -0
  162. package/dist/entity-definition/meta-entities/meta-use-case/meta-use-case.js.map +1 -0
  163. package/dist/entity-definition/metadata/entity-metadata-document.d.ts +23 -0
  164. package/dist/entity-definition/metadata/entity-metadata-document.d.ts.map +1 -0
  165. package/dist/entity-definition/metadata/entity-metadata-document.js +16 -0
  166. package/dist/entity-definition/metadata/entity-metadata-document.js.map +1 -0
  167. package/dist/entity-definition/metadata/entity-metadata-source.d.ts +19 -0
  168. package/dist/entity-definition/metadata/entity-metadata-source.d.ts.map +1 -0
  169. package/dist/entity-definition/metadata/entity-metadata-source.js +15 -0
  170. package/dist/entity-definition/metadata/entity-metadata-source.js.map +1 -0
  171. package/dist/entity-definition/metadata/index.d.ts +3 -0
  172. package/dist/entity-definition/metadata/index.d.ts.map +1 -0
  173. package/dist/entity-definition/metadata/index.js +4 -0
  174. package/dist/entity-definition/metadata/index.js.map +1 -0
  175. package/dist/entity-definition/reconstruct/clone-entity-draft.d.ts +34 -0
  176. package/dist/entity-definition/reconstruct/clone-entity-draft.d.ts.map +1 -0
  177. package/dist/entity-definition/reconstruct/clone-entity-draft.js +75 -0
  178. package/dist/entity-definition/reconstruct/clone-entity-draft.js.map +1 -0
  179. package/dist/entity-definition/reconstruct/coerce-field-value.d.ts +34 -0
  180. package/dist/entity-definition/reconstruct/coerce-field-value.d.ts.map +1 -0
  181. package/dist/entity-definition/reconstruct/coerce-field-value.js +42 -0
  182. package/dist/entity-definition/reconstruct/coerce-field-value.js.map +1 -0
  183. package/dist/entity-definition/reconstruct/index.d.ts +5 -0
  184. package/dist/entity-definition/reconstruct/index.d.ts.map +1 -0
  185. package/dist/entity-definition/reconstruct/index.js +6 -0
  186. package/dist/entity-definition/reconstruct/index.js.map +1 -0
  187. package/dist/entity-definition/reconstruct/reconstruct-child.d.ts +35 -0
  188. package/dist/entity-definition/reconstruct/reconstruct-child.d.ts.map +1 -0
  189. package/dist/entity-definition/reconstruct/reconstruct-child.js +47 -0
  190. package/dist/entity-definition/reconstruct/reconstruct-child.js.map +1 -0
  191. package/dist/entity-definition/reconstruct/reconstruct-entity.d.ts +49 -0
  192. package/dist/entity-definition/reconstruct/reconstruct-entity.d.ts.map +1 -0
  193. package/dist/entity-definition/reconstruct/reconstruct-entity.js +116 -0
  194. package/dist/entity-definition/reconstruct/reconstruct-entity.js.map +1 -0
  195. package/dist/entity-definition/serializer/deserialize.d.ts +13 -0
  196. package/dist/entity-definition/serializer/deserialize.d.ts.map +1 -0
  197. package/dist/entity-definition/serializer/deserialize.js +145 -0
  198. package/dist/entity-definition/serializer/deserialize.js.map +1 -0
  199. package/dist/entity-definition/serializer/index.d.ts +3 -0
  200. package/dist/entity-definition/serializer/index.d.ts.map +1 -0
  201. package/dist/entity-definition/serializer/index.js +4 -0
  202. package/dist/entity-definition/serializer/index.js.map +1 -0
  203. package/dist/entity-definition/serializer/serialize.d.ts +26 -0
  204. package/dist/entity-definition/serializer/serialize.d.ts.map +1 -0
  205. package/dist/entity-definition/serializer/serialize.js +64 -0
  206. package/dist/entity-definition/serializer/serialize.js.map +1 -0
  207. package/dist/envelope/event-pattern.d.ts +14 -0
  208. package/dist/envelope/event-pattern.d.ts.map +1 -0
  209. package/dist/envelope/event-pattern.js +30 -0
  210. package/dist/envelope/event-pattern.js.map +1 -0
  211. package/dist/envelope/index.d.ts +5 -0
  212. package/dist/envelope/index.d.ts.map +1 -0
  213. package/dist/envelope/index.js +6 -0
  214. package/dist/envelope/index.js.map +1 -0
  215. package/dist/envelope/make-envelope.d.ts +45 -0
  216. package/dist/envelope/make-envelope.d.ts.map +1 -0
  217. package/dist/envelope/make-envelope.js +111 -0
  218. package/dist/envelope/make-envelope.js.map +1 -0
  219. package/dist/envelope/read-envelope.d.ts +48 -0
  220. package/dist/envelope/read-envelope.d.ts.map +1 -0
  221. package/dist/envelope/read-envelope.js +138 -0
  222. package/dist/envelope/read-envelope.js.map +1 -0
  223. package/dist/envelope/types.d.ts +173 -0
  224. package/dist/envelope/types.d.ts.map +1 -0
  225. package/dist/envelope/types.js +6 -0
  226. package/dist/envelope/types.js.map +1 -0
  227. package/dist/http/session-cookies.d.ts +25 -0
  228. package/dist/http/session-cookies.d.ts.map +1 -0
  229. package/dist/http/session-cookies.js +22 -0
  230. package/dist/http/session-cookies.js.map +1 -0
  231. package/dist/i18n/format.d.ts +22 -0
  232. package/dist/i18n/format.d.ts.map +1 -0
  233. package/dist/i18n/format.js +49 -0
  234. package/dist/i18n/format.js.map +1 -0
  235. package/dist/i18n/index.d.ts +4 -0
  236. package/dist/i18n/index.d.ts.map +1 -0
  237. package/dist/i18n/index.js +5 -0
  238. package/dist/i18n/index.js.map +1 -0
  239. package/dist/i18n/locales.d.ts +23 -0
  240. package/dist/i18n/locales.d.ts.map +1 -0
  241. package/dist/i18n/locales.js +25 -0
  242. package/dist/i18n/locales.js.map +1 -0
  243. package/dist/i18n/negotiate.d.ts +39 -0
  244. package/dist/i18n/negotiate.d.ts.map +1 -0
  245. package/dist/i18n/negotiate.js +63 -0
  246. package/dist/i18n/negotiate.js.map +1 -0
  247. package/dist/index.d.ts +42 -0
  248. package/dist/index.d.ts.map +1 -0
  249. package/dist/index.js +43 -0
  250. package/dist/index.js.map +1 -0
  251. package/dist/rsql/coerce-rsql.d.ts +27 -0
  252. package/dist/rsql/coerce-rsql.d.ts.map +1 -0
  253. package/dist/rsql/coerce-rsql.js +121 -0
  254. package/dist/rsql/coerce-rsql.js.map +1 -0
  255. package/dist/rsql/index.d.ts +8 -0
  256. package/dist/rsql/index.d.ts.map +1 -0
  257. package/dist/rsql/index.js +9 -0
  258. package/dist/rsql/index.js.map +1 -0
  259. package/dist/rsql/load-request-url.d.ts +30 -0
  260. package/dist/rsql/load-request-url.d.ts.map +1 -0
  261. package/dist/rsql/load-request-url.js +67 -0
  262. package/dist/rsql/load-request-url.js.map +1 -0
  263. package/dist/rsql/parse-rsql.d.ts +35 -0
  264. package/dist/rsql/parse-rsql.d.ts.map +1 -0
  265. package/dist/rsql/parse-rsql.js +235 -0
  266. package/dist/rsql/parse-rsql.js.map +1 -0
  267. package/dist/rsql/rsql-operators.d.ts +36 -0
  268. package/dist/rsql/rsql-operators.d.ts.map +1 -0
  269. package/dist/rsql/rsql-operators.js +65 -0
  270. package/dist/rsql/rsql-operators.js.map +1 -0
  271. package/dist/rsql/rsql-values.d.ts +11 -0
  272. package/dist/rsql/rsql-values.d.ts.map +1 -0
  273. package/dist/rsql/rsql-values.js +26 -0
  274. package/dist/rsql/rsql-values.js.map +1 -0
  275. package/dist/rsql/serialize-rsql.d.ts +19 -0
  276. package/dist/rsql/serialize-rsql.d.ts.map +1 -0
  277. package/dist/rsql/serialize-rsql.js +71 -0
  278. package/dist/rsql/serialize-rsql.js.map +1 -0
  279. package/dist/rsql/sort-param.d.ts +20 -0
  280. package/dist/rsql/sort-param.d.ts.map +1 -0
  281. package/dist/rsql/sort-param.js +66 -0
  282. package/dist/rsql/sort-param.js.map +1 -0
  283. package/dist/types/BulkOutcome.d.ts +27 -0
  284. package/dist/types/BulkOutcome.d.ts.map +1 -0
  285. package/dist/types/BulkOutcome.js +8 -0
  286. package/dist/types/BulkOutcome.js.map +1 -0
  287. package/dist/types/Entity.d.ts +6 -0
  288. package/dist/types/Entity.d.ts.map +1 -0
  289. package/dist/types/Entity.js +3 -0
  290. package/dist/types/Entity.js.map +1 -0
  291. package/dist/types/EntityAction.d.ts +15 -0
  292. package/dist/types/EntityAction.d.ts.map +1 -0
  293. package/dist/types/EntityAction.js +18 -0
  294. package/dist/types/EntityAction.js.map +1 -0
  295. package/dist/types/EntityDraft.d.ts +47 -0
  296. package/dist/types/EntityDraft.d.ts.map +1 -0
  297. package/dist/types/EntityDraft.js +14 -0
  298. package/dist/types/EntityDraft.js.map +1 -0
  299. package/dist/types/EntityFiltering.d.ts +45 -0
  300. package/dist/types/EntityFiltering.d.ts.map +1 -0
  301. package/dist/types/EntityFiltering.js +30 -0
  302. package/dist/types/EntityFiltering.js.map +1 -0
  303. package/dist/types/EntityLoadRequest.d.ts +10 -0
  304. package/dist/types/EntityLoadRequest.d.ts.map +1 -0
  305. package/dist/types/EntityLoadRequest.js +3 -0
  306. package/dist/types/EntityLoadRequest.js.map +1 -0
  307. package/dist/types/EntityPage.d.ts +8 -0
  308. package/dist/types/EntityPage.d.ts.map +1 -0
  309. package/dist/types/EntityPage.js +3 -0
  310. package/dist/types/EntityPage.js.map +1 -0
  311. package/dist/types/EntityRowDraft.d.ts +79 -0
  312. package/dist/types/EntityRowDraft.d.ts.map +1 -0
  313. package/dist/types/EntityRowDraft.js +65 -0
  314. package/dist/types/EntityRowDraft.js.map +1 -0
  315. package/dist/types/EntitySelection.d.ts +117 -0
  316. package/dist/types/EntitySelection.d.ts.map +1 -0
  317. package/dist/types/EntitySelection.js +107 -0
  318. package/dist/types/EntitySelection.js.map +1 -0
  319. package/dist/types/EntitySorting.d.ts +7 -0
  320. package/dist/types/EntitySorting.d.ts.map +1 -0
  321. package/dist/types/EntitySorting.js +3 -0
  322. package/dist/types/EntitySorting.js.map +1 -0
  323. package/dist/types/Json.d.ts +37 -0
  324. package/dist/types/Json.d.ts.map +1 -0
  325. package/dist/types/Json.js +43 -0
  326. package/dist/types/Json.js.map +1 -0
  327. package/dist/types/StandardSchema.d.ts +45 -0
  328. package/dist/types/StandardSchema.d.ts.map +1 -0
  329. package/dist/types/StandardSchema.js +15 -0
  330. package/dist/types/StandardSchema.js.map +1 -0
  331. package/dist/types/UseCase.d.ts +10 -0
  332. package/dist/types/UseCase.d.ts.map +1 -0
  333. package/dist/types/UseCase.js +10 -0
  334. package/dist/types/UseCase.js.map +1 -0
  335. package/dist/wizard/index.d.ts +4 -0
  336. package/dist/wizard/index.d.ts.map +1 -0
  337. package/dist/wizard/index.js +5 -0
  338. package/dist/wizard/index.js.map +1 -0
  339. package/dist/wizard/wizard-definition.d.ts +108 -0
  340. package/dist/wizard/wizard-definition.d.ts.map +1 -0
  341. package/dist/wizard/wizard-definition.js +125 -0
  342. package/dist/wizard/wizard-definition.js.map +1 -0
  343. package/dist/wizard/wizard-navigation.d.ts +81 -0
  344. package/dist/wizard/wizard-navigation.d.ts.map +1 -0
  345. package/dist/wizard/wizard-navigation.js +139 -0
  346. package/dist/wizard/wizard-navigation.js.map +1 -0
  347. package/dist/wizard/wizard-state.d.ts +89 -0
  348. package/dist/wizard/wizard-state.d.ts.map +1 -0
  349. package/dist/wizard/wizard-state.js +103 -0
  350. package/dist/wizard/wizard-state.js.map +1 -0
  351. package/package.json +64 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/entity-definition/helpers/entity-definition-helpers.ts"],"sourcesContent":["(Symbol as { metadata?: symbol }).metadata ??= Symbol.for('Symbol.metadata');\n\nimport { EntifixBuildError } from '../../base-entities/entifix-error/index.js';\nimport { Entity, EntityConstructor } from '../../types/Entity.js';\nimport { UseCaseConstructor } from '../../types/UseCase.js';\nimport {\n type ChildConstructor,\n MetaAccessor,\n} from '../meta-entities/meta-accessor/index.js';\nimport { MetaEntity } from '../meta-entities/meta-entity/index.js';\nimport { MetaMethod } from '../meta-entities/meta-method/index.js';\nimport {\n MetaUseCase,\n MetaUseCaseBinding,\n} from '../meta-entities/meta-use-case/index.js';\n\ndeclare global {\n interface SymbolConstructor {\n readonly metadata: unique symbol;\n }\n}\n\nexport const META_ENTITY_KEY = Symbol('MetaEntity');\nexport const META_ACCESSOR_KEY = Symbol('MetaAccessor');\nexport const META_METHOD_KEY = Symbol('MetaMethod');\nexport const META_USE_CASE_KEY = Symbol('MetaUseCase');\nexport const META_USE_CASE_BINDING_KEY = Symbol('MetaUseCaseBinding');\n\nfunction requireMetadata(\n metadata: DecoratorMetadataObject | undefined,\n): DecoratorMetadataObject {\n if (!metadata) {\n throw new EntifixBuildError(\n 'Decorator metadata unavailable — Symbol.metadata polyfill missing or stage-3 decorator emit not enabled.',\n );\n }\n return metadata;\n}\n\nexport function setMetaEntity(\n metadata: DecoratorMetadataObject | undefined,\n metaEntity: MetaEntity,\n) {\n requireMetadata(metadata)[META_ENTITY_KEY] = metaEntity;\n}\n\nexport function appendMetaAccessor(\n metadata: DecoratorMetadataObject | undefined,\n metaAccessor: MetaAccessor,\n) {\n const meta = requireMetadata(metadata);\n const existing =\n (meta[META_ACCESSOR_KEY] as MetaAccessor[] | undefined) ?? [];\n meta[META_ACCESSOR_KEY] = [...existing, metaAccessor];\n}\n\nexport function appendMetaMethod(\n metadata: DecoratorMetadataObject | undefined,\n metaMethod: MetaMethod,\n) {\n const meta = requireMetadata(metadata);\n const existing = (meta[META_METHOD_KEY] as MetaMethod[] | undefined) ?? [];\n meta[META_METHOD_KEY] = [...existing, metaMethod];\n}\n\n/**\n * Append a use case to the metadata of the entity it acts on.\n *\n * This is the one decorator that writes a bag other than its own: a use case is\n * declared on its own class, but the entity is what a surface holds, so the\n * descriptor has to end up there. The consequence is that a use-case module\n * which is never imported leaves the entity looking as if it had no actions,\n * which is why `@r10c/slices` asserts every `@useCase()` class is re-exported\n * from its package barrel.\n *\n * It reads the target's **own** metadata rather than going through\n * {@link readMetadata}. `Symbol.metadata` resolves along the prototype chain, so\n * an inherited read would append the verb to a base class's bag and leak it to\n * every subclass. A target with no own metadata is an entity missing\n * `@entity()`, or a circular import that evaluated the use case first.\n */\nexport function appendMetaUseCase<TEntity extends Entity>(\n target: EntityConstructor<TEntity>,\n metaUseCase: MetaUseCase,\n) {\n const own = Object.getOwnPropertyDescriptor(target, Symbol.metadata)\n ?.value as DecoratorMetadataObject | null | undefined;\n if (!own) {\n throw new EntifixBuildError(\n `Use case \"${metaUseCase.key}\" targets ${target.name}, which has no metadata of its own — it is missing @entity(), or a circular import evaluated the use case first.`,\n );\n }\n const existing = (own[META_USE_CASE_KEY] as MetaUseCase[] | undefined) ?? [];\n own[META_USE_CASE_KEY] = [...existing, metaUseCase];\n}\n\n/**\n * Record on the use-case class itself which entity and verb it implements, so\n * the permission can be derived from the class alone. That is what keeps the\n * verb string written once, at the declaration, instead of being retyped at\n * every guard.\n */\nexport function setMetaUseCaseBinding(\n metadata: DecoratorMetadataObject | undefined,\n binding: MetaUseCaseBinding,\n) {\n requireMetadata(metadata)[META_USE_CASE_BINDING_KEY] = binding;\n}\n\nfunction readMetadata(\n target: ChildConstructor,\n): DecoratorMetadataObject | undefined {\n return target[Symbol.metadata] ?? undefined;\n}\n\nexport function extractMetaEntity<TEntity extends Entity>(\n target: EntityConstructor<TEntity>,\n): MetaEntity {\n const metadata = readMetadata(target);\n const metaEntity = metadata?.[META_ENTITY_KEY] as MetaEntity | undefined;\n if (!metaEntity) {\n throw new EntifixBuildError(`MetaEntity not found for ${target.name}`);\n }\n return metaEntity;\n}\n\n/**\n * Every accessor declared on a class.\n *\n * The target is a {@link ChildConstructor}, not an `EntityConstructor`: an\n * `@accessor()` writes to its own class's metadata bag with no help from\n * `@entity()`, so a `composition` member's child — a value with no `id` — is\n * described by exactly this walk.\n */\nexport function extractMetaAccessors(target: ChildConstructor): MetaAccessor[] {\n const metadata = readMetadata(target);\n return (metadata?.[META_ACCESSOR_KEY] as MetaAccessor[] | undefined) ?? [];\n}\n\nexport function extractMetaMethods<TEntity extends Entity>(\n target: EntityConstructor<TEntity>,\n): MetaMethod[] {\n const metadata = readMetadata(target);\n return (metadata?.[META_METHOD_KEY] as MetaMethod[] | undefined) ?? [];\n}\n\n/** Every use case declared against an entity. Empty until one is imported. */\nexport function extractMetaUseCases<TEntity extends Entity>(\n target: EntityConstructor<TEntity>,\n): MetaUseCase[] {\n const metadata = readMetadata(target);\n return (metadata?.[META_USE_CASE_KEY] as MetaUseCase[] | undefined) ?? [];\n}\n\n/** The entity and verb a `@useCase()` class implements. */\nexport function extractMetaUseCaseBinding(\n target: UseCaseConstructor,\n): MetaUseCaseBinding {\n const metadata = (\n target as { [Symbol.metadata]?: DecoratorMetadataObject | null }\n )[Symbol.metadata];\n const binding = metadata?.[META_USE_CASE_BINDING_KEY] as\n MetaUseCaseBinding | undefined;\n if (!binding) {\n throw new EntifixBuildError(\n `MetaUseCase not found for ${target.name} — is it missing @useCase()?`,\n );\n }\n return binding;\n}\n"],"names":["Symbol","metadata","for","EntifixBuildError","META_ENTITY_KEY","META_ACCESSOR_KEY","META_METHOD_KEY","META_USE_CASE_KEY","META_USE_CASE_BINDING_KEY","requireMetadata","setMetaEntity","metaEntity","appendMetaAccessor","metaAccessor","meta","existing","appendMetaMethod","metaMethod","appendMetaUseCase","target","metaUseCase","own","Object","getOwnPropertyDescriptor","value","key","name","setMetaUseCaseBinding","binding","readMetadata","undefined","extractMetaEntity","extractMetaAccessors","extractMetaMethods","extractMetaUseCases","extractMetaUseCaseBinding"],"mappings":"IAACA,SAAD;CAAA,YAAA,CAACA,UAAAA,QAAiCC,QAAQ,YAA1C,YAAA,AAACD,QAAiCC,QAAQ,GAAKD,OAAOE,GAAG,CAAC;AAE1D,SAASC,iBAAiB,QAAQ,6CAA6C;AAoB/E,OAAO,MAAMC,kBAAkBJ,OAAO,cAAc;AACpD,OAAO,MAAMK,oBAAoBL,OAAO,gBAAgB;AACxD,OAAO,MAAMM,kBAAkBN,OAAO,cAAc;AACpD,OAAO,MAAMO,oBAAoBP,OAAO,eAAe;AACvD,OAAO,MAAMQ,4BAA4BR,OAAO,sBAAsB;AAEtE,SAASS,gBACPR,QAA6C;IAE7C,IAAI,CAACA,UAAU;QACb,MAAM,IAAIE,kBACR;IAEJ;IACA,OAAOF;AACT;AAEA,OAAO,SAASS,cACdT,QAA6C,EAC7CU,UAAsB;IAEtBF,gBAAgBR,SAAS,CAACG,gBAAgB,GAAGO;AAC/C;AAEA,OAAO,SAASC,mBACdX,QAA6C,EAC7CY,YAA0B;QAIvBC;IAFH,MAAMA,OAAOL,gBAAgBR;IAC7B,MAAMc,YACHD,0BAAAA,IAAI,CAACT,kBAAkB,YAAvBS,0BAA0D,EAAE;IAC/DA,IAAI,CAACT,kBAAkB,GAAG;WAAIU;QAAUF;KAAa;AACvD;AAEA,OAAO,SAASG,iBACdf,QAA6C,EAC7CgB,UAAsB;QAGJH;IADlB,MAAMA,OAAOL,gBAAgBR;IAC7B,MAAMc,YAAYD,wBAAAA,IAAI,CAACR,gBAAgB,YAArBQ,wBAAsD,EAAE;IAC1EA,IAAI,CAACR,gBAAgB,GAAG;WAAIS;QAAUE;KAAW;AACnD;AAEA;;;;;;;;;;;;;;;CAeC,GACD,OAAO,SAASC,kBACdC,MAAkC,EAClCC,WAAwB;QASNC;QAPNC;IAAZ,MAAMD,OAAMC,mCAAAA,OAAOC,wBAAwB,CAACJ,QAAQnB,OAAOC,QAAQ,sBAAvDqB,iCACRE,KAAK;IACT,IAAI,CAACH,KAAK;QACR,MAAM,IAAIlB,kBACR,CAAC,UAAU,EAAEiB,YAAYK,GAAG,CAAC,UAAU,EAAEN,OAAOO,IAAI,CAAC,gHAAgH,CAAC;IAE1K;IACA,MAAMX,YAAYM,yBAAAA,GAAG,CAACd,kBAAkB,YAAtBc,yBAAwD,EAAE;IAC5EA,GAAG,CAACd,kBAAkB,GAAG;WAAIQ;QAAUK;KAAY;AACrD;AAEA;;;;;CAKC,GACD,OAAO,SAASO,sBACd1B,QAA6C,EAC7C2B,OAA2B;IAE3BnB,gBAAgBR,SAAS,CAACO,0BAA0B,GAAGoB;AACzD;AAEA,SAASC,aACPV,MAAwB;QAEjBA;IAAP,QAAOA,0BAAAA,MAAM,CAACnB,OAAOC,QAAQ,CAAC,YAAvBkB,0BAA2BW;AACpC;AAEA,OAAO,SAASC,kBACdZ,MAAkC;IAElC,MAAMlB,WAAW4B,aAAaV;IAC9B,MAAMR,aAAaV,4BAAAA,QAAU,CAACG,gBAAgB;IAC9C,IAAI,CAACO,YAAY;QACf,MAAM,IAAIR,kBAAkB,CAAC,yBAAyB,EAAEgB,OAAOO,IAAI,EAAE;IACvE;IACA,OAAOf;AACT;AAEA;;;;;;;CAOC,GACD,OAAO,SAASqB,qBAAqBb,MAAwB;;IAC3D,MAAMlB,WAAW4B,aAAaV;IAC9B,eAAQlB,4BAAAA,QAAU,CAACI,kBAAkB,mBAAmC,EAAE;AAC5E;AAEA,OAAO,SAAS4B,mBACdd,MAAkC;;IAElC,MAAMlB,WAAW4B,aAAaV;IAC9B,eAAQlB,4BAAAA,QAAU,CAACK,gBAAgB,mBAAiC,EAAE;AACxE;AAEA,4EAA4E,GAC5E,OAAO,SAAS4B,oBACdf,MAAkC;;IAElC,MAAMlB,WAAW4B,aAAaV;IAC9B,eAAQlB,4BAAAA,QAAU,CAACM,kBAAkB,mBAAkC,EAAE;AAC3E;AAEA,yDAAyD,GACzD,OAAO,SAAS4B,0BACdhB,MAA0B;IAE1B,MAAMlB,WAAW,AACfkB,MACD,CAACnB,OAAOC,QAAQ,CAAC;IAClB,MAAM2B,UAAU3B,4BAAAA,QAAU,CAACO,0BAA0B;IAErD,IAAI,CAACoB,SAAS;QACZ,MAAM,IAAIzB,kBACR,CAAC,0BAA0B,EAAEgB,OAAOO,IAAI,CAAC,4BAA4B,CAAC;IAE1E;IACA,OAAOE;AACT"}
@@ -0,0 +1,2 @@
1
+ export * from './entity-definition-helpers.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/entity-definition/helpers/index.ts"],"names":[],"mappings":"AAAA,cAAc,gCAAgC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './entity-definition-helpers.js';
2
+
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/entity-definition/helpers/index.ts"],"sourcesContent":["export * from './entity-definition-helpers.js';\n"],"names":[],"mappings":"AAAA,cAAc,iCAAiC"}
@@ -0,0 +1,48 @@
1
+ import { Entity } from '../../../types/Entity.js';
2
+ import { EntityDraft } from '../../../types/EntityDraft.js';
3
+ import { EntityFieldDescriptor } from '../../describe/index.js';
4
+ /**
5
+ * The instances a user picked, keyed by accessor name — the sidecar to a form's
6
+ * string draft.
7
+ *
8
+ * A draft holds ids because it must stay JSON (a workspace autosaves it), but an
9
+ * id alone cannot be written as an embedded relation. So the picker remembers the
10
+ * instance it handed over, and this map is that memory.
11
+ *
12
+ * It is a *cache*, and it is not persisted — it dies with the page, and a
13
+ * restored draft arrives holding ids and nothing else. What refills it is
14
+ * `EntityLinkSource.selected.entity`, which resolves the id the draft did keep.
15
+ * For an `id` member a missing entry costs nothing; for an `embedded` one
16
+ * {@link applyEntityLinks} throws rather than write the wrong wire shape.
17
+ */
18
+ export type EntityLinkSelection = Record<string, Entity | undefined>;
19
+ /**
20
+ * Writes a draft's relations onto a freshly built entity, following each
21
+ * member's declared {@link EntityFieldDescriptor.linkSerialization}.
22
+ *
23
+ * This is the counterpart to `serializeEntity`, which inlines a link whenever it
24
+ * `isLoaded`: an `embedded` member therefore needs the picked instance handed to
25
+ * `setValue`, while an `id` member must be given only the scalar even when the
26
+ * instance is at hand — otherwise the wire shape would flip the moment a picker
27
+ * happened to hold the target.
28
+ *
29
+ * Pure and framework-free, so the same reconstruction runs in a browser form and
30
+ * in a backend use-case that assembles an entity from a raw draft.
31
+ *
32
+ * `linkCollection` members are left untouched: the to-many editor is a follow-up,
33
+ * and this is the branch where `setIds`/`setValues` will land.
34
+ *
35
+ * Throws {@link EntifixLogicError} when an `embedded` member holds an id with no
36
+ * instance to inline — see the branch below for why that is a fault and not a
37
+ * fallback.
38
+ */
39
+ export declare function applyEntityLinks<TEntity extends Entity>(instance: TEntity, descriptors: readonly EntityFieldDescriptor[], values: EntityDraft, selection?: EntityLinkSelection): void;
40
+ /**
41
+ * Seeds a {@link EntityLinkSelection} from a record whose relations already
42
+ * arrived materialized — an embedded payload, or a link a use-case resolved.
43
+ *
44
+ * It is what keeps opening a loaded record from re-fetching every relation label
45
+ * the record already carries.
46
+ */
47
+ export declare function seedEntityLinkSelection<TEntity extends Entity>(descriptors: readonly EntityFieldDescriptor[], entity: TEntity | undefined): EntityLinkSelection;
48
+ //# sourceMappingURL=apply-entity-links.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-entity-links.d.ts","sourceRoot":"","sources":["../../../../src/entity-definition/links/apply-entity-links/apply-entity-links.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAY,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAmB,MAAM,+BAA+B,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAGhE;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAErE;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,SAAS,MAAM,EACrD,QAAQ,EAAE,OAAO,EACjB,WAAW,EAAE,SAAS,qBAAqB,EAAE,EAC7C,MAAM,EAAE,WAAW,EACnB,SAAS,GAAE,mBAAwB,GAClC,IAAI,CAkDN;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,SAAS,MAAM,EAC5D,WAAW,EAAE,SAAS,qBAAqB,EAAE,EAC7C,MAAM,EAAE,OAAO,GAAG,SAAS,GAC1B,mBAAmB,CAgBrB"}
@@ -0,0 +1,88 @@
1
+ import { EntifixLogicError } from '../../../base-entities/entifix-error/index.js';
2
+ import { readDraftString } from '../../../types/EntityDraft.js';
3
+ import { EntityLink } from '../entity-link/index.js';
4
+ /**
5
+ * Writes a draft's relations onto a freshly built entity, following each
6
+ * member's declared {@link EntityFieldDescriptor.linkSerialization}.
7
+ *
8
+ * This is the counterpart to `serializeEntity`, which inlines a link whenever it
9
+ * `isLoaded`: an `embedded` member therefore needs the picked instance handed to
10
+ * `setValue`, while an `id` member must be given only the scalar even when the
11
+ * instance is at hand — otherwise the wire shape would flip the moment a picker
12
+ * happened to hold the target.
13
+ *
14
+ * Pure and framework-free, so the same reconstruction runs in a browser form and
15
+ * in a backend use-case that assembles an entity from a raw draft.
16
+ *
17
+ * `linkCollection` members are left untouched: the to-many editor is a follow-up,
18
+ * and this is the branch where `setIds`/`setValues` will land.
19
+ *
20
+ * Throws {@link EntifixLogicError} when an `embedded` member holds an id with no
21
+ * instance to inline — see the branch below for why that is a fault and not a
22
+ * fallback.
23
+ */ export function applyEntityLinks(instance, descriptors, values, selection = {}) {
24
+ for (const descriptor of descriptors){
25
+ var _picked_id;
26
+ if (descriptor.type !== 'link') continue;
27
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
28
+ const link = instance[descriptor.name];
29
+ // A link accessor is expected to be pre-initialized by the constructor. A
30
+ // member typed `link` that is not one is a declaration mistake, not a value
31
+ // to coerce — skipping keeps this helper from writing nonsense onto it.
32
+ if (!(link instanceof EntityLink)) continue;
33
+ const picked = selection[descriptor.name];
34
+ // Read as a string rather than trusting the draft's `JsonValue`: a
35
+ // relation's draft value is a foreign key, and a member that came back
36
+ // from storage as anything else must read as absent rather than be cast
37
+ // onto the link as an id.
38
+ const rawId = readDraftString(values, descriptor.name);
39
+ if (picked === undefined) {
40
+ // An `embedded` member cannot be written from an id: `serializeEntity`
41
+ // inlines whatever `isLoaded`, so falling through here would emit the `id`
42
+ // shape onto a member the entity declares as inlined — silently, and
43
+ // differently from the same save a moment earlier when the picker still
44
+ // held the instance. The wire shape is metadata, not a function of what
45
+ // the UI happens to have in memory, so this is a fault rather than a
46
+ // degradation. The caller's job is to resolve the id first
47
+ // (`EntityLinkSource.selected.entity`) and hand the instance over.
48
+ if (descriptor.linkSerialization === 'embedded' && rawId !== '') {
49
+ throw new EntifixLogicError(`Cannot write "${descriptor.name}" as an embedded relation: the draft ` + 'holds an id but no instance. Resolve the id through the link ' + "source's `selected.entity` before submitting, or declare the " + "member `linkSerialization: 'id'`.", undefined, {
50
+ member: descriptor.name,
51
+ id: rawId
52
+ });
53
+ }
54
+ link.setValue(undefined);
55
+ link.setId(rawId === '' ? undefined : rawId);
56
+ continue;
57
+ }
58
+ if (descriptor.linkSerialization === 'embedded') {
59
+ link.setValue(picked);
60
+ continue;
61
+ }
62
+ link.setValue(undefined);
63
+ link.setId((_picked_id = picked.id) != null ? _picked_id : rawId === '' ? undefined : rawId);
64
+ }
65
+ }
66
+ /**
67
+ * Seeds a {@link EntityLinkSelection} from a record whose relations already
68
+ * arrived materialized — an embedded payload, or a link a use-case resolved.
69
+ *
70
+ * It is what keeps opening a loaded record from re-fetching every relation label
71
+ * the record already carries.
72
+ */ export function seedEntityLinkSelection(descriptors, entity) {
73
+ const selection = {};
74
+ if (entity == null) return selection;
75
+ // Only to-one links, for the same reason {@link applyEntityLinks} writes only
76
+ // those: a collection's values are not a single selection.
77
+ for (const descriptor of descriptors){
78
+ if (descriptor.type !== 'link') continue;
79
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
80
+ const link = entity[descriptor.name];
81
+ if (link instanceof EntityLink && link.value !== undefined) {
82
+ selection[descriptor.name] = link.value;
83
+ }
84
+ }
85
+ return selection;
86
+ }
87
+
88
+ //# sourceMappingURL=apply-entity-links.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/entity-definition/links/apply-entity-links/apply-entity-links.ts"],"sourcesContent":["import { EntifixLogicError } from '../../../base-entities/entifix-error/index.js';\nimport { Entity, EntityId } from '../../../types/Entity.js';\nimport { EntityDraft, readDraftString } from '../../../types/EntityDraft.js';\nimport { EntityFieldDescriptor } from '../../describe/index.js';\nimport { EntityLink } from '../entity-link/index.js';\n\n/**\n * The instances a user picked, keyed by accessor name — the sidecar to a form's\n * string draft.\n *\n * A draft holds ids because it must stay JSON (a workspace autosaves it), but an\n * id alone cannot be written as an embedded relation. So the picker remembers the\n * instance it handed over, and this map is that memory.\n *\n * It is a *cache*, and it is not persisted — it dies with the page, and a\n * restored draft arrives holding ids and nothing else. What refills it is\n * `EntityLinkSource.selected.entity`, which resolves the id the draft did keep.\n * For an `id` member a missing entry costs nothing; for an `embedded` one\n * {@link applyEntityLinks} throws rather than write the wrong wire shape.\n */\nexport type EntityLinkSelection = Record<string, Entity | undefined>;\n\n/**\n * Writes a draft's relations onto a freshly built entity, following each\n * member's declared {@link EntityFieldDescriptor.linkSerialization}.\n *\n * This is the counterpart to `serializeEntity`, which inlines a link whenever it\n * `isLoaded`: an `embedded` member therefore needs the picked instance handed to\n * `setValue`, while an `id` member must be given only the scalar even when the\n * instance is at hand — otherwise the wire shape would flip the moment a picker\n * happened to hold the target.\n *\n * Pure and framework-free, so the same reconstruction runs in a browser form and\n * in a backend use-case that assembles an entity from a raw draft.\n *\n * `linkCollection` members are left untouched: the to-many editor is a follow-up,\n * and this is the branch where `setIds`/`setValues` will land.\n *\n * Throws {@link EntifixLogicError} when an `embedded` member holds an id with no\n * instance to inline — see the branch below for why that is a fault and not a\n * fallback.\n */\nexport function applyEntityLinks<TEntity extends Entity>(\n instance: TEntity,\n descriptors: readonly EntityFieldDescriptor[],\n values: EntityDraft,\n selection: EntityLinkSelection = {},\n): void {\n for (const descriptor of descriptors) {\n if (descriptor.type !== 'link') continue;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const link = (instance as any)[descriptor.name];\n // A link accessor is expected to be pre-initialized by the constructor. A\n // member typed `link` that is not one is a declaration mistake, not a value\n // to coerce — skipping keeps this helper from writing nonsense onto it.\n if (!(link instanceof EntityLink)) continue;\n\n const picked = selection[descriptor.name];\n // Read as a string rather than trusting the draft's `JsonValue`: a\n // relation's draft value is a foreign key, and a member that came back\n // from storage as anything else must read as absent rather than be cast\n // onto the link as an id.\n const rawId = readDraftString(values, descriptor.name);\n\n if (picked === undefined) {\n // An `embedded` member cannot be written from an id: `serializeEntity`\n // inlines whatever `isLoaded`, so falling through here would emit the `id`\n // shape onto a member the entity declares as inlined — silently, and\n // differently from the same save a moment earlier when the picker still\n // held the instance. The wire shape is metadata, not a function of what\n // the UI happens to have in memory, so this is a fault rather than a\n // degradation. The caller's job is to resolve the id first\n // (`EntityLinkSource.selected.entity`) and hand the instance over.\n if (descriptor.linkSerialization === 'embedded' && rawId !== '') {\n throw new EntifixLogicError(\n `Cannot write \"${descriptor.name}\" as an embedded relation: the draft ` +\n 'holds an id but no instance. Resolve the id through the link ' +\n \"source's `selected.entity` before submitting, or declare the \" +\n \"member `linkSerialization: 'id'`.\",\n undefined,\n { member: descriptor.name, id: rawId },\n );\n }\n link.setValue(undefined);\n link.setId(rawId === '' ? undefined : (rawId as EntityId));\n continue;\n }\n\n if (descriptor.linkSerialization === 'embedded') {\n link.setValue(picked);\n continue;\n }\n\n link.setValue(undefined);\n link.setId(picked.id ?? (rawId === '' ? undefined : (rawId as EntityId)));\n }\n}\n\n/**\n * Seeds a {@link EntityLinkSelection} from a record whose relations already\n * arrived materialized — an embedded payload, or a link a use-case resolved.\n *\n * It is what keeps opening a loaded record from re-fetching every relation label\n * the record already carries.\n */\nexport function seedEntityLinkSelection<TEntity extends Entity>(\n descriptors: readonly EntityFieldDescriptor[],\n entity: TEntity | undefined,\n): EntityLinkSelection {\n const selection: EntityLinkSelection = {};\n if (entity == null) return selection;\n\n // Only to-one links, for the same reason {@link applyEntityLinks} writes only\n // those: a collection's values are not a single selection.\n for (const descriptor of descriptors) {\n if (descriptor.type !== 'link') continue;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const link = (entity as any)[descriptor.name];\n if (link instanceof EntityLink && link.value !== undefined) {\n selection[descriptor.name] = link.value;\n }\n }\n\n return selection;\n}\n"],"names":["EntifixLogicError","readDraftString","EntityLink","applyEntityLinks","instance","descriptors","values","selection","descriptor","picked","type","link","name","rawId","undefined","linkSerialization","member","id","setValue","setId","seedEntityLinkSelection","entity","value"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,gDAAgD;AAElF,SAAsBC,eAAe,QAAQ,gCAAgC;AAE7E,SAASC,UAAU,QAAQ,0BAA0B;AAkBrD;;;;;;;;;;;;;;;;;;;CAmBC,GACD,OAAO,SAASC,iBACdC,QAAiB,EACjBC,WAA6C,EAC7CC,MAAmB,EACnBC,YAAiC,CAAC,CAAC;IAEnC,KAAK,MAAMC,cAAcH,YAAa;YA+CzBI;QA9CX,IAAID,WAAWE,IAAI,KAAK,QAAQ;QAEhC,8DAA8D;QAC9D,MAAMC,OAAO,AAACP,QAAgB,CAACI,WAAWI,IAAI,CAAC;QAC/C,0EAA0E;QAC1E,4EAA4E;QAC5E,wEAAwE;QACxE,IAAI,CAAED,CAAAA,gBAAgBT,UAAS,GAAI;QAEnC,MAAMO,SAASF,SAAS,CAACC,WAAWI,IAAI,CAAC;QACzC,mEAAmE;QACnE,uEAAuE;QACvE,wEAAwE;QACxE,0BAA0B;QAC1B,MAAMC,QAAQZ,gBAAgBK,QAAQE,WAAWI,IAAI;QAErD,IAAIH,WAAWK,WAAW;YACxB,uEAAuE;YACvE,2EAA2E;YAC3E,qEAAqE;YACrE,wEAAwE;YACxE,wEAAwE;YACxE,qEAAqE;YACrE,2DAA2D;YAC3D,mEAAmE;YACnE,IAAIN,WAAWO,iBAAiB,KAAK,cAAcF,UAAU,IAAI;gBAC/D,MAAM,IAAIb,kBACR,CAAC,cAAc,EAAEQ,WAAWI,IAAI,CAAC,qCAAqC,CAAC,GACrE,kEACA,kEACA,qCACFE,WACA;oBAAEE,QAAQR,WAAWI,IAAI;oBAAEK,IAAIJ;gBAAM;YAEzC;YACAF,KAAKO,QAAQ,CAACJ;YACdH,KAAKQ,KAAK,CAACN,UAAU,KAAKC,YAAaD;YACvC;QACF;QAEA,IAAIL,WAAWO,iBAAiB,KAAK,YAAY;YAC/CJ,KAAKO,QAAQ,CAACT;YACd;QACF;QAEAE,KAAKO,QAAQ,CAACJ;QACdH,KAAKQ,KAAK,EAACV,aAAAA,OAAOQ,EAAE,YAATR,aAAcI,UAAU,KAAKC,YAAaD;IACvD;AACF;AAEA;;;;;;CAMC,GACD,OAAO,SAASO,wBACdf,WAA6C,EAC7CgB,MAA2B;IAE3B,MAAMd,YAAiC,CAAC;IACxC,IAAIc,UAAU,MAAM,OAAOd;IAE3B,8EAA8E;IAC9E,2DAA2D;IAC3D,KAAK,MAAMC,cAAcH,YAAa;QACpC,IAAIG,WAAWE,IAAI,KAAK,QAAQ;QAChC,8DAA8D;QAC9D,MAAMC,OAAO,AAACU,MAAc,CAACb,WAAWI,IAAI,CAAC;QAC7C,IAAID,gBAAgBT,cAAcS,KAAKW,KAAK,KAAKR,WAAW;YAC1DP,SAAS,CAACC,WAAWI,IAAI,CAAC,GAAGD,KAAKW,KAAK;QACzC;IACF;IAEA,OAAOf;AACT"}
@@ -0,0 +1,2 @@
1
+ export * from './apply-entity-links.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/entity-definition/links/apply-entity-links/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './apply-entity-links.js';
2
+
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/entity-definition/links/apply-entity-links/index.ts"],"sourcesContent":["export * from './apply-entity-links.js';\n"],"names":[],"mappings":"AAAA,cAAc,0BAA0B"}
@@ -0,0 +1,29 @@
1
+ import { Effect } from 'effect';
2
+ import { EntifixError } from '../../../base-entities/entifix-error/index.js';
3
+ import { Entity, EntityConstructor, EntityId } from '../../../types/Entity.js';
4
+ import { EntityLinkResolver } from '../entity-link/index.js';
5
+ export interface EntityCollectionLinkInit<TEntity extends Entity> {
6
+ ids?: EntityId[];
7
+ values?: TEntity[];
8
+ }
9
+ /**
10
+ * A one-to-many reference. Like {@link EntityLink} it accepts either foreign
11
+ * keys (lazy, resolved through an {@link EntityLinkResolver}) or embedded
12
+ * instances, but for a collection of targets.
13
+ */
14
+ export declare class EntityCollectionLink<TEntity extends Entity> {
15
+ #private;
16
+ readonly entityConstructor: EntityConstructor<TEntity>;
17
+ constructor(entityConstructor: EntityConstructor<TEntity>, init?: EntityCollectionLinkInit<TEntity>);
18
+ setIds(ids: EntityId[]): void;
19
+ setValues(values: TEntity[] | undefined): void;
20
+ /**
21
+ * Fetches every referenced target through the resolver and caches the result.
22
+ */
23
+ reload(resolver: EntityLinkResolver): Effect.Effect<TEntity[], EntifixError>;
24
+ resolve(resolver: EntityLinkResolver): Effect.Effect<TEntity[], EntifixError>;
25
+ get ids(): EntityId[];
26
+ get values(): TEntity[] | undefined;
27
+ get isLoaded(): boolean;
28
+ }
29
+ //# sourceMappingURL=entity-collection-link.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-collection-link.d.ts","sourceRoot":"","sources":["../../../../src/entity-definition/links/entity-collection-link/entity-collection-link.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAE,YAAY,EAAE,MAAM,+CAA+C,CAAC;AAC7E,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,MAAM,WAAW,wBAAwB,CAAC,OAAO,SAAS,MAAM;IAC9D,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;CACpB;AAED;;;;GAIG;AACH,qBAAa,oBAAoB,CAAC,OAAO,SAAS,MAAM;;IAEtD,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC;gBAOrD,iBAAiB,EAAE,iBAAiB,CAAC,OAAO,CAAC,EAC7C,IAAI,CAAC,EAAE,wBAAwB,CAAC,OAAO,CAAC;IAc1C,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,IAAI;IAI7B,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,GAAG,IAAI;IAS9C;;OAEG;IACH,MAAM,CAAC,QAAQ,EAAE,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,YAAY,CAAC;IAQ5E,OAAO,CACL,QAAQ,EAAE,kBAAkB,GAC3B,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,YAAY,CAAC;IAQzC,IAAI,GAAG,IAAI,QAAQ,EAAE,CAEpB;IAED,IAAI,MAAM,IAAI,OAAO,EAAE,GAAG,SAAS,CAElC;IAED,IAAI,QAAQ,IAAI,OAAO,CAEtB;CAEF"}
@@ -0,0 +1,61 @@
1
+ import { _ as _class_private_field_loose_base } from "@swc/helpers/_/_class_private_field_loose_base";
2
+ import { _ as _class_private_field_loose_key } from "@swc/helpers/_/_class_private_field_loose_key";
3
+ import { Effect } from 'effect';
4
+ var _ids = /*#__PURE__*/ _class_private_field_loose_key("_ids"), _values = /*#__PURE__*/ _class_private_field_loose_key("_values");
5
+ /**
6
+ * A one-to-many reference. Like {@link EntityLink} it accepts either foreign
7
+ * keys (lazy, resolved through an {@link EntityLinkResolver}) or embedded
8
+ * instances, but for a collection of targets.
9
+ */ export class EntityCollectionLink {
10
+ // #endregion
11
+ // #region methods
12
+ setIds(ids) {
13
+ _class_private_field_loose_base(this, _ids)[_ids] = ids;
14
+ }
15
+ setValues(values) {
16
+ _class_private_field_loose_base(this, _values)[_values] = values;
17
+ if (values !== undefined) {
18
+ _class_private_field_loose_base(this, _ids)[_ids] = values.map((value)=>value.id).filter((id)=>id != null);
19
+ }
20
+ }
21
+ /**
22
+ * Fetches every referenced target through the resolver and caches the result.
23
+ */ reload(resolver) {
24
+ return Effect.forEach(_class_private_field_loose_base(this, _ids)[_ids], (id)=>resolver.resolve(this.entityConstructor, id), {
25
+ concurrency: 'unbounded'
26
+ }).pipe(Effect.tap((values)=>Effect.sync(()=>this.setValues(values))));
27
+ }
28
+ resolve(resolver) {
29
+ return _class_private_field_loose_base(this, _values)[_values] !== undefined ? Effect.succeed(_class_private_field_loose_base(this, _values)[_values]) : this.reload(resolver);
30
+ }
31
+ // #endregion
32
+ // #region accessors
33
+ get ids() {
34
+ return _class_private_field_loose_base(this, _ids)[_ids];
35
+ }
36
+ get values() {
37
+ return _class_private_field_loose_base(this, _values)[_values];
38
+ }
39
+ get isLoaded() {
40
+ return _class_private_field_loose_base(this, _values)[_values] !== undefined;
41
+ }
42
+ // #endregion
43
+ // #region constructors
44
+ constructor(entityConstructor, init){
45
+ var _ref, _ref1;
46
+ var _init_values;
47
+ Object.defineProperty(this, _ids, {
48
+ writable: true,
49
+ value: void 0
50
+ });
51
+ Object.defineProperty(this, _values, {
52
+ writable: true,
53
+ value: void 0
54
+ });
55
+ this.entityConstructor = entityConstructor;
56
+ _class_private_field_loose_base(this, _values)[_values] = init == null ? void 0 : init.values;
57
+ _class_private_field_loose_base(this, _ids)[_ids] = (_ref = (_ref1 = init == null ? void 0 : init.ids) != null ? _ref1 : init == null ? void 0 : (_init_values = init.values) == null ? void 0 : _init_values.map((value)=>value.id).filter((id)=>id != null)) != null ? _ref : [];
58
+ }
59
+ }
60
+
61
+ //# sourceMappingURL=entity-collection-link.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/entity-definition/links/entity-collection-link/entity-collection-link.ts"],"sourcesContent":["import { Effect } from 'effect';\n\nimport { EntifixError } from '../../../base-entities/entifix-error/index.js';\nimport { Entity, EntityConstructor, EntityId } from '../../../types/Entity.js';\nimport { EntityLinkResolver } from '../entity-link/index.js';\n\nexport interface EntityCollectionLinkInit<TEntity extends Entity> {\n ids?: EntityId[];\n values?: TEntity[];\n}\n\n/**\n * A one-to-many reference. Like {@link EntityLink} it accepts either foreign\n * keys (lazy, resolved through an {@link EntityLinkResolver}) or embedded\n * instances, but for a collection of targets.\n */\nexport class EntityCollectionLink<TEntity extends Entity> {\n // #region properties\n readonly entityConstructor: EntityConstructor<TEntity>;\n #ids: EntityId[];\n #values?: TEntity[];\n // #endregion\n\n // #region constructors\n constructor(\n entityConstructor: EntityConstructor<TEntity>,\n init?: EntityCollectionLinkInit<TEntity>,\n ) {\n this.entityConstructor = entityConstructor;\n this.#values = init?.values;\n this.#ids =\n init?.ids ??\n init?.values\n ?.map(value => value.id)\n .filter((id): id is EntityId => id != null) ??\n [];\n }\n // #endregion\n\n // #region methods\n setIds(ids: EntityId[]): void {\n this.#ids = ids;\n }\n\n setValues(values: TEntity[] | undefined): void {\n this.#values = values;\n if (values !== undefined) {\n this.#ids = values\n .map(value => value.id)\n .filter((id): id is EntityId => id != null);\n }\n }\n\n /**\n * Fetches every referenced target through the resolver and caches the result.\n */\n reload(resolver: EntityLinkResolver): Effect.Effect<TEntity[], EntifixError> {\n return Effect.forEach(\n this.#ids,\n id => resolver.resolve(this.entityConstructor, id),\n { concurrency: 'unbounded' },\n ).pipe(Effect.tap(values => Effect.sync(() => this.setValues(values))));\n }\n\n resolve(\n resolver: EntityLinkResolver,\n ): Effect.Effect<TEntity[], EntifixError> {\n return this.#values !== undefined\n ? Effect.succeed(this.#values)\n : this.reload(resolver);\n }\n // #endregion\n\n // #region accessors\n get ids(): EntityId[] {\n return this.#ids;\n }\n\n get values(): TEntity[] | undefined {\n return this.#values;\n }\n\n get isLoaded(): boolean {\n return this.#values !== undefined;\n }\n // #endregion\n}\n"],"names":["Effect","EntityCollectionLink","setIds","ids","setValues","values","undefined","map","value","id","filter","reload","resolver","forEach","resolve","entityConstructor","concurrency","pipe","tap","sync","succeed","isLoaded","init"],"mappings":";;AAAA,SAASA,MAAM,QAAQ,SAAS;IAmB9B,6DACA;AATF;;;;CAIC,GACD,OAAO,MAAMC;IAqBX,aAAa;IAEb,kBAAkB;IAClBC,OAAOC,GAAe,EAAQ;QAC5B,gCAAA,IAAI,EAAC,MAAA,QAAOA;IACd;IAEAC,UAAUC,MAA6B,EAAQ;QAC7C,gCAAA,IAAI,EAAC,SAAA,WAAUA;QACf,IAAIA,WAAWC,WAAW;YACxB,gCAAA,IAAI,EAAC,MAAA,QAAOD,OACTE,GAAG,CAACC,CAAAA,QAASA,MAAMC,EAAE,EACrBC,MAAM,CAAC,CAACD,KAAuBA,MAAM;QAC1C;IACF;IAEA;;GAEC,GACDE,OAAOC,QAA4B,EAA0C;QAC3E,OAAOZ,OAAOa,OAAO,CACnB,gCAAA,IAAI,EAAC,MAAA,OACLJ,CAAAA,KAAMG,SAASE,OAAO,CAAC,IAAI,CAACC,iBAAiB,EAAEN,KAC/C;YAAEO,aAAa;QAAY,GAC3BC,IAAI,CAACjB,OAAOkB,GAAG,CAACb,CAAAA,SAAUL,OAAOmB,IAAI,CAAC,IAAM,IAAI,CAACf,SAAS,CAACC;IAC/D;IAEAS,QACEF,QAA4B,EACY;QACxC,OAAO,gCAAA,IAAI,EAAC,SAAA,aAAYN,YACpBN,OAAOoB,OAAO,CAAC,gCAAA,IAAI,EAAC,SAAA,YACpB,IAAI,CAACT,MAAM,CAACC;IAClB;IACA,aAAa;IAEb,oBAAoB;IACpB,IAAIT,MAAkB;QACpB,OAAO,gCAAA,IAAI,EAAC,MAAA;IACd;IAEA,IAAIE,SAAgC;QAClC,OAAO,gCAAA,IAAI,EAAC,SAAA;IACd;IAEA,IAAIgB,WAAoB;QACtB,OAAO,gCAAA,IAAI,EAAC,SAAA,aAAYf;IAC1B;IA/DA,aAAa;IAEb,uBAAuB;IACvB,YACES,iBAA6C,EAC7CO,IAAwC,CACxC;YAIEA;YACAA;QAbJ,4BAAA;;mBAAA,KAAA;;QACA,4BAAA;;mBAAA,KAAA;;QAQE,IAAI,CAACP,iBAAiB,GAAGA;QACzB,gCAAA,IAAI,EAAC,SAAA,WAAUO,wBAAAA,KAAMjB,MAAM;QAC3B,gCAAA,IAAI,EAAC,MAAA,SACHiB,gBAAAA,wBAAAA,KAAMnB,GAAG,oBACTmB,yBAAAA,eAAAA,KAAMjB,MAAM,qBAAZiB,aACIf,GAAG,CAACC,CAAAA,QAASA,MAAMC,EAAE,EACtBC,MAAM,CAAC,CAACD,KAAuBA,MAAM,iBAHxCa,OAIA,EAAE;IACN;AAkDF"}
@@ -0,0 +1,2 @@
1
+ export * from './entity-collection-link.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/entity-definition/links/entity-collection-link/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './entity-collection-link.js';
2
+
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/entity-definition/links/entity-collection-link/index.ts"],"sourcesContent":["export * from './entity-collection-link.js';\n"],"names":[],"mappings":"AAAA,cAAc,8BAA8B"}
@@ -0,0 +1,58 @@
1
+ import { Effect } from 'effect';
2
+ import { EntifixError } from '../../../base-entities/entifix-error/index.js';
3
+ import { Entity, EntityConstructor, EntityId } from '../../../types/Entity.js';
4
+ /**
5
+ * Framework-free seam a link uses to materialize its target entity. The concrete
6
+ * implementation lives at the composition root (a REST-backed resolver on the
7
+ * web, a Mongo-backed one on the backend) and is injected through Effect's
8
+ * context. Keeping the interface in `core` avoids an upward dependency on the
9
+ * repository contracts defined in `@entifix/business`.
10
+ */
11
+ export interface EntityLinkResolver {
12
+ resolve<TEntity extends Entity>(entityConstructor: EntityConstructor<TEntity>, id: EntityId): Effect.Effect<TEntity, EntifixError>;
13
+ }
14
+ export interface EntityLinkInit<TEntity extends Entity> {
15
+ id?: EntityId;
16
+ value?: TEntity;
17
+ }
18
+ /**
19
+ * A reference from one entity to another. It models both shapes a raw payload
20
+ * can carry for a relation:
21
+ *
22
+ * - a **foreign key** — only the target id is known, so the entity is fetched
23
+ * lazily through {@link reload};
24
+ * - **embedded data** — the target already arrived inline and was deserialized
25
+ * into an instance, so {@link value} is populated and no fetch is needed.
26
+ *
27
+ * Resolution is expressed as an `Effect`, so the same link works in any
28
+ * environment: the caller provides an {@link EntityLinkResolver} backed by
29
+ * whatever adapter (REST, Mongo, …) fits the runtime.
30
+ */
31
+ export declare class EntityLink<TEntity extends Entity> {
32
+ #private;
33
+ readonly entityConstructor: EntityConstructor<TEntity>;
34
+ constructor(entityConstructor: EntityConstructor<TEntity>, init?: EntityLinkInit<TEntity>);
35
+ /**
36
+ * Records the foreign key when the payload only referenced the target by id.
37
+ */
38
+ setId(id: EntityId): void;
39
+ /**
40
+ * Stores an already-materialized target (embedded payload or a completed
41
+ * reload) and keeps the id in sync with it.
42
+ */
43
+ setValue(value: TEntity | undefined): void;
44
+ /**
45
+ * Fetches the target through the resolver and caches it on the link. Always
46
+ * hits the resolver — use {@link resolve} to fetch only when not already
47
+ * loaded.
48
+ */
49
+ reload(resolver: EntityLinkResolver): Effect.Effect<TEntity, EntifixError>;
50
+ /**
51
+ * Returns the cached target if present, otherwise reloads it once.
52
+ */
53
+ resolve(resolver: EntityLinkResolver): Effect.Effect<TEntity, EntifixError>;
54
+ get id(): EntityId;
55
+ get value(): TEntity | undefined;
56
+ get isLoaded(): boolean;
57
+ }
58
+ //# sourceMappingURL=entity-link.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-link.d.ts","sourceRoot":"","sources":["../../../../src/entity-definition/links/entity-link/entity-link.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAE,YAAY,EAAE,MAAM,+CAA+C,CAAC;AAC7E,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAE/E;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,OAAO,SAAS,MAAM,EAC5B,iBAAiB,EAAE,iBAAiB,CAAC,OAAO,CAAC,EAC7C,EAAE,EAAE,QAAQ,GACX,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,cAAc,CAAC,OAAO,SAAS,MAAM;IACpD,EAAE,CAAC,EAAE,QAAQ,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,UAAU,CAAC,OAAO,SAAS,MAAM;;IAE5C,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC;gBAOrD,iBAAiB,EAAE,iBAAiB,CAAC,OAAO,CAAC,EAC7C,IAAI,CAAC,EAAE,cAAc,CAAC,OAAO,CAAC;IAYhC;;OAEG;IACH,KAAK,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI;IAIzB;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI;IAO1C;;;;OAIG;IACH,MAAM,CAAC,QAAQ,EAAE,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC;IAM1E;;OAEG;IACH,OAAO,CAAC,QAAQ,EAAE,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC;IAQ3E,IAAI,EAAE,IAAI,QAAQ,CAEjB;IAED,IAAI,KAAK,IAAI,OAAO,GAAG,SAAS,CAE/B;IAED,IAAI,QAAQ,IAAI,OAAO,CAEtB;CAEF"}
@@ -0,0 +1,79 @@
1
+ import { _ as _class_private_field_loose_base } from "@swc/helpers/_/_class_private_field_loose_base";
2
+ import { _ as _class_private_field_loose_key } from "@swc/helpers/_/_class_private_field_loose_key";
3
+ import { Effect } from 'effect';
4
+ var _id = /*#__PURE__*/ _class_private_field_loose_key("_id"), _value = /*#__PURE__*/ _class_private_field_loose_key("_value");
5
+ /**
6
+ * A reference from one entity to another. It models both shapes a raw payload
7
+ * can carry for a relation:
8
+ *
9
+ * - a **foreign key** — only the target id is known, so the entity is fetched
10
+ * lazily through {@link reload};
11
+ * - **embedded data** — the target already arrived inline and was deserialized
12
+ * into an instance, so {@link value} is populated and no fetch is needed.
13
+ *
14
+ * Resolution is expressed as an `Effect`, so the same link works in any
15
+ * environment: the caller provides an {@link EntityLinkResolver} backed by
16
+ * whatever adapter (REST, Mongo, …) fits the runtime.
17
+ */ export class EntityLink {
18
+ // #endregion
19
+ // #region methods
20
+ /**
21
+ * Records the foreign key when the payload only referenced the target by id.
22
+ */ setId(id) {
23
+ _class_private_field_loose_base(this, _id)[_id] = id;
24
+ }
25
+ /**
26
+ * Stores an already-materialized target (embedded payload or a completed
27
+ * reload) and keeps the id in sync with it.
28
+ */ setValue(value) {
29
+ _class_private_field_loose_base(this, _value)[_value] = value;
30
+ if (value !== undefined && value.id != null) {
31
+ _class_private_field_loose_base(this, _id)[_id] = value.id;
32
+ }
33
+ }
34
+ /**
35
+ * Fetches the target through the resolver and caches it on the link. Always
36
+ * hits the resolver — use {@link resolve} to fetch only when not already
37
+ * loaded.
38
+ */ reload(resolver) {
39
+ return resolver.resolve(this.entityConstructor, _class_private_field_loose_base(this, _id)[_id]).pipe(Effect.tap((value)=>Effect.sync(()=>this.setValue(value))));
40
+ }
41
+ /**
42
+ * Returns the cached target if present, otherwise reloads it once.
43
+ */ resolve(resolver) {
44
+ return _class_private_field_loose_base(this, _value)[_value] !== undefined ? Effect.succeed(_class_private_field_loose_base(this, _value)[_value]) : this.reload(resolver);
45
+ }
46
+ // #endregion
47
+ // #region accessors
48
+ get id() {
49
+ var _class_private_field_loose_base__id;
50
+ var _class_private_field_loose_base__value;
51
+ return (_class_private_field_loose_base__id = _class_private_field_loose_base(this, _id)[_id]) != null ? _class_private_field_loose_base__id : (_class_private_field_loose_base__value = _class_private_field_loose_base(this, _value)[_value]) == null ? void 0 : _class_private_field_loose_base__value.id;
52
+ }
53
+ get value() {
54
+ return _class_private_field_loose_base(this, _value)[_value];
55
+ }
56
+ get isLoaded() {
57
+ return _class_private_field_loose_base(this, _value)[_value] !== undefined;
58
+ }
59
+ // #endregion
60
+ // #region constructors
61
+ constructor(entityConstructor, init){
62
+ Object.defineProperty(this, _id, {
63
+ writable: true,
64
+ value: void 0
65
+ });
66
+ Object.defineProperty(this, _value, {
67
+ writable: true,
68
+ value: void 0
69
+ });
70
+ this.entityConstructor = entityConstructor;
71
+ _class_private_field_loose_base(this, _id)[_id] = init == null ? void 0 : init.id;
72
+ _class_private_field_loose_base(this, _value)[_value] = init == null ? void 0 : init.value;
73
+ if (_class_private_field_loose_base(this, _value)[_value] !== undefined && _class_private_field_loose_base(this, _id)[_id] == null) {
74
+ _class_private_field_loose_base(this, _id)[_id] = _class_private_field_loose_base(this, _value)[_value].id;
75
+ }
76
+ }
77
+ }
78
+
79
+ //# sourceMappingURL=entity-link.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/entity-definition/links/entity-link/entity-link.ts"],"sourcesContent":["import { Effect } from 'effect';\n\nimport { EntifixError } from '../../../base-entities/entifix-error/index.js';\nimport { Entity, EntityConstructor, EntityId } from '../../../types/Entity.js';\n\n/**\n * Framework-free seam a link uses to materialize its target entity. The concrete\n * implementation lives at the composition root (a REST-backed resolver on the\n * web, a Mongo-backed one on the backend) and is injected through Effect's\n * context. Keeping the interface in `core` avoids an upward dependency on the\n * repository contracts defined in `@entifix/business`.\n */\nexport interface EntityLinkResolver {\n resolve<TEntity extends Entity>(\n entityConstructor: EntityConstructor<TEntity>,\n id: EntityId,\n ): Effect.Effect<TEntity, EntifixError>;\n}\n\nexport interface EntityLinkInit<TEntity extends Entity> {\n id?: EntityId;\n value?: TEntity;\n}\n\n/**\n * A reference from one entity to another. It models both shapes a raw payload\n * can carry for a relation:\n *\n * - a **foreign key** — only the target id is known, so the entity is fetched\n * lazily through {@link reload};\n * - **embedded data** — the target already arrived inline and was deserialized\n * into an instance, so {@link value} is populated and no fetch is needed.\n *\n * Resolution is expressed as an `Effect`, so the same link works in any\n * environment: the caller provides an {@link EntityLinkResolver} backed by\n * whatever adapter (REST, Mongo, …) fits the runtime.\n */\nexport class EntityLink<TEntity extends Entity> {\n // #region properties\n readonly entityConstructor: EntityConstructor<TEntity>;\n #id: EntityId;\n #value?: TEntity;\n // #endregion\n\n // #region constructors\n constructor(\n entityConstructor: EntityConstructor<TEntity>,\n init?: EntityLinkInit<TEntity>,\n ) {\n this.entityConstructor = entityConstructor;\n this.#id = init?.id;\n this.#value = init?.value;\n if (this.#value !== undefined && this.#id == null) {\n this.#id = this.#value.id;\n }\n }\n // #endregion\n\n // #region methods\n /**\n * Records the foreign key when the payload only referenced the target by id.\n */\n setId(id: EntityId): void {\n this.#id = id;\n }\n\n /**\n * Stores an already-materialized target (embedded payload or a completed\n * reload) and keeps the id in sync with it.\n */\n setValue(value: TEntity | undefined): void {\n this.#value = value;\n if (value !== undefined && value.id != null) {\n this.#id = value.id;\n }\n }\n\n /**\n * Fetches the target through the resolver and caches it on the link. Always\n * hits the resolver — use {@link resolve} to fetch only when not already\n * loaded.\n */\n reload(resolver: EntityLinkResolver): Effect.Effect<TEntity, EntifixError> {\n return resolver\n .resolve(this.entityConstructor, this.#id)\n .pipe(Effect.tap(value => Effect.sync(() => this.setValue(value))));\n }\n\n /**\n * Returns the cached target if present, otherwise reloads it once.\n */\n resolve(resolver: EntityLinkResolver): Effect.Effect<TEntity, EntifixError> {\n return this.#value !== undefined\n ? Effect.succeed(this.#value)\n : this.reload(resolver);\n }\n // #endregion\n\n // #region accessors\n get id(): EntityId {\n return this.#id ?? this.#value?.id;\n }\n\n get value(): TEntity | undefined {\n return this.#value;\n }\n\n get isLoaded(): boolean {\n return this.#value !== undefined;\n }\n // #endregion\n}\n"],"names":["Effect","EntityLink","setId","id","setValue","value","undefined","reload","resolver","resolve","entityConstructor","pipe","tap","sync","succeed","isLoaded","init"],"mappings":";;AAAA,SAASA,MAAM,QAAQ,SAAS;IAwC9B,2DACA;AAjBF;;;;;;;;;;;;CAYC,GACD,OAAO,MAAMC;IAmBX,aAAa;IAEb,kBAAkB;IAClB;;GAEC,GACDC,MAAMC,EAAY,EAAQ;QACxB,gCAAA,IAAI,EAAC,KAAA,OAAMA;IACb;IAEA;;;GAGC,GACDC,SAASC,KAA0B,EAAQ;QACzC,gCAAA,IAAI,EAAC,QAAA,UAASA;QACd,IAAIA,UAAUC,aAAaD,MAAMF,EAAE,IAAI,MAAM;YAC3C,gCAAA,IAAI,EAAC,KAAA,OAAME,MAAMF,EAAE;QACrB;IACF;IAEA;;;;GAIC,GACDI,OAAOC,QAA4B,EAAwC;QACzE,OAAOA,SACJC,OAAO,CAAC,IAAI,CAACC,iBAAiB,EAAE,gCAAA,IAAI,EAAC,KAAA,MACrCC,IAAI,CAACX,OAAOY,GAAG,CAACP,CAAAA,QAASL,OAAOa,IAAI,CAAC,IAAM,IAAI,CAACT,QAAQ,CAACC;IAC9D;IAEA;;GAEC,GACDI,QAAQD,QAA4B,EAAwC;QAC1E,OAAO,gCAAA,IAAI,EAAC,QAAA,YAAWF,YACnBN,OAAOc,OAAO,CAAC,gCAAA,IAAI,EAAC,QAAA,WACpB,IAAI,CAACP,MAAM,CAACC;IAClB;IACA,aAAa;IAEb,oBAAoB;IACpB,IAAIL,KAAe;;;QACjB,8CAAO,gCAAA,IAAI,EAAC,KAAA,gGAAO,gCAAA,IAAI,EAAC,QAAA,4BAAL,uCAAaA,EAAE;IACpC;IAEA,IAAIE,QAA6B;QAC/B,OAAO,gCAAA,IAAI,EAAC,QAAA;IACd;IAEA,IAAIU,WAAoB;QACtB,OAAO,gCAAA,IAAI,EAAC,QAAA,YAAWT;IACzB;IAnEA,aAAa;IAEb,uBAAuB;IACvB,YACEI,iBAA6C,EAC7CM,IAA8B,CAC9B;QARF,4BAAA;;mBAAA,KAAA;;QACA,4BAAA;;mBAAA,KAAA;;QAQE,IAAI,CAACN,iBAAiB,GAAGA;QACzB,gCAAA,IAAI,EAAC,KAAA,OAAMM,wBAAAA,KAAMb,EAAE;QACnB,gCAAA,IAAI,EAAC,QAAA,UAASa,wBAAAA,KAAMX,KAAK;QACzB,IAAI,gCAAA,IAAI,EAAC,QAAA,YAAWC,aAAa,gCAAA,IAAI,EAAC,KAAA,QAAO,MAAM;YACjD,gCAAA,IAAI,EAAC,KAAA,OAAM,gCAAA,IAAI,EAAC,QAAA,QAAOH,EAAE;QAC3B;IACF;AAwDF"}
@@ -0,0 +1,2 @@
1
+ export * from './entity-link.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/entity-definition/links/entity-link/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './entity-link.js';
2
+
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/entity-definition/links/entity-link/index.ts"],"sourcesContent":["export * from './entity-link.js';\n"],"names":[],"mappings":"AAAA,cAAc,mBAAmB"}
@@ -0,0 +1,74 @@
1
+ import { EntifixError } from '../../../base-entities/entifix-error/index.js';
2
+ import { Entity, EntityConstructor } from '../../../types/Entity.js';
3
+ import { FilterGroup } from '../../../types/EntityFiltering.js';
4
+ import { EntitySorting } from '../../../types/EntitySorting.js';
5
+ /**
6
+ * A paged, filterable list of link targets, expressed as state plus the commands
7
+ * that change it.
8
+ *
9
+ * The member names match what a table already renders from, so a browse dialog
10
+ * forwards this object through untouched. It carries no Effect and no React: the
11
+ * hook that produces it lives in the integration layer, the components that
12
+ * consume it in the controls layer, and those two may not import each other —
13
+ * this contract in `core` is what lets them meet.
14
+ */
15
+ export interface EntityLinkListView<TEntity extends Entity> {
16
+ items: ReadonlyArray<TEntity>;
17
+ totalItems: number;
18
+ currentPage: number;
19
+ pageSize: number;
20
+ isLoading: boolean;
21
+ error?: EntifixError;
22
+ filtering?: FilterGroup<TEntity>;
23
+ sorting?: EntitySorting<TEntity>;
24
+ onPageChange: (page: number) => void;
25
+ onPageSizeChange: (pageSize: number) => void;
26
+ onFilteringChange: (filtering: FilterGroup<TEntity>) => void;
27
+ onSortingChange: (sorting: EntitySorting<TEntity>) => void;
28
+ }
29
+ /** The quick half: a term, and the short list of matches it produces. */
30
+ export interface EntityLinkQuickSearch<TEntity extends Entity> {
31
+ term: string;
32
+ setTerm: (term: string) => void;
33
+ options: ReadonlyArray<TEntity>;
34
+ isLoading: boolean;
35
+ error?: EntifixError;
36
+ }
37
+ /** The browse half: the full list view, plus the dialog holding it. */
38
+ export interface EntityLinkBrowse<TEntity extends Entity> extends EntityLinkListView<TEntity> {
39
+ isOpen: boolean;
40
+ open: () => void;
41
+ close: () => void;
42
+ }
43
+ /**
44
+ * Everything an editor needs in order to set one relation, and nothing about how
45
+ * the targets are fetched.
46
+ *
47
+ * Two ways in, because they answer different questions: {@link quick} is
48
+ * "I know roughly what it is called", {@link browse} is "I need to look at the
49
+ * catalog and filter it". {@link selected} is the third, quieter one — a draft
50
+ * restored from storage holds an id and no instance, and an id is not a name.
51
+ */
52
+ export interface EntityLinkSource<TEntity extends Entity> {
53
+ entityConstructor: EntityConstructor<TEntity>;
54
+ /** Reads a target's display label, per the owner's `linkLabelProperty`. */
55
+ labelOf: (entity: TEntity) => string;
56
+ /**
57
+ * The currently held id, resolved into something a form can use.
58
+ *
59
+ * `entity` is the whole target, not just its name, and that matters: a draft
60
+ * restored from storage holds ids only, so the instance a `linkSerialization:
61
+ * 'embedded'` member needs at submit is gone. Resolving the id was already
62
+ * happening for the label — carrying the instance out is what lets the form
63
+ * rehydrate its selection instead of quietly writing the `id` shape onto an
64
+ * `embedded` member.
65
+ */
66
+ selected: {
67
+ label?: string;
68
+ entity?: TEntity;
69
+ isLoading: boolean;
70
+ };
71
+ quick: EntityLinkQuickSearch<TEntity>;
72
+ browse: EntityLinkBrowse<TEntity>;
73
+ }
74
+ //# sourceMappingURL=entity-link-source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-link-source.d.ts","sourceRoot":"","sources":["../../../../src/entity-definition/links/entity-link-source/entity-link-source.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,+CAA+C,CAAC;AAC7E,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAEhE;;;;;;;;;GASG;AACH,MAAM,WAAW,kBAAkB,CAAC,OAAO,SAAS,MAAM;IACxD,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,SAAS,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IACjC,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,gBAAgB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,iBAAiB,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IAC7D,eAAe,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;CAC5D;AAED,yEAAyE;AACzE,MAAM,WAAW,qBAAqB,CAAC,OAAO,SAAS,MAAM;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB;AAED,uEAAuE;AACvE,MAAM,WAAW,gBAAgB,CAC/B,OAAO,SAAS,MAAM,CACtB,SAAQ,kBAAkB,CAAC,OAAO,CAAC;IACnC,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,gBAAgB,CAAC,OAAO,SAAS,MAAM;IACtD,iBAAiB,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC9C,2EAA2E;IAC3E,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,MAAM,CAAC;IACrC;;;;;;;;;OASG;IACH,QAAQ,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC;IACnE,KAAK,EAAE,qBAAqB,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;CACnC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Everything an editor needs in order to set one relation, and nothing about how
3
+ * the targets are fetched.
4
+ *
5
+ * Two ways in, because they answer different questions: {@link quick} is
6
+ * "I know roughly what it is called", {@link browse} is "I need to look at the
7
+ * catalog and filter it". {@link selected} is the third, quieter one — a draft
8
+ * restored from storage holds an id and no instance, and an id is not a name.
9
+ */ export { };
10
+
11
+ //# sourceMappingURL=entity-link-source.js.map