@wildo-ai/saas-models 1.1.7 → 1.1.8

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 (861) hide show
  1. package/dist/esm/__tests__/setup.d.ts.map +1 -1
  2. package/dist/esm/__tests__/setup.js.map +1 -1
  3. package/dist/esm/_inspect.d.ts.map +1 -1
  4. package/dist/esm/_inspect.js.map +1 -1
  5. package/dist/esm/applications/application-metadata.shared.resources-config.schemas.d.ts.map +1 -1
  6. package/dist/esm/applications/application-metadata.shared.resources-config.schemas.js.map +1 -1
  7. package/dist/esm/applications/application-subject.shared.schemas.d.ts.map +1 -1
  8. package/dist/esm/applications/application-subject.shared.schemas.js.map +1 -1
  9. package/dist/esm/applications/application-versions.shared.resources-config.schemas.d.ts.map +1 -1
  10. package/dist/esm/applications/application-versions.shared.resources-config.schemas.js.map +1 -1
  11. package/dist/esm/applications/applications-context.schemas.d.ts.map +1 -1
  12. package/dist/esm/applications/applications-context.schemas.js.map +1 -1
  13. package/dist/esm/applications/applications.shared.resources-config.schemas.d.ts.map +1 -1
  14. package/dist/esm/applications/applications.shared.resources-config.schemas.js.map +1 -1
  15. package/dist/esm/applications/applications.shared.schemas.d.ts.map +1 -1
  16. package/dist/esm/applications/applications.shared.schemas.js.map +1 -1
  17. package/dist/esm/billing/billing-account.shared.resources-config.schemas.d.ts.map +1 -1
  18. package/dist/esm/billing/billing-account.shared.resources-config.schemas.js.map +1 -1
  19. package/dist/esm/billing/billing-account.shared.schemas.d.ts.map +1 -1
  20. package/dist/esm/billing/billing-account.shared.schemas.js.map +1 -1
  21. package/dist/esm/billing/billing-configuration.shared.schemas.d.ts.map +1 -1
  22. package/dist/esm/billing/billing-configuration.shared.schemas.js.map +1 -1
  23. package/dist/esm/billing/billing-enums.shared.schemas.d.ts.map +1 -1
  24. package/dist/esm/billing/billing-enums.shared.schemas.js.map +1 -1
  25. package/dist/esm/billing/billing-types.shared.schemas.d.ts.map +1 -1
  26. package/dist/esm/billing/billing-types.shared.schemas.js.map +1 -1
  27. package/dist/esm/billing/credit-pool.shared.resources-config.schemas.d.ts.map +1 -1
  28. package/dist/esm/billing/credit-pool.shared.resources-config.schemas.js.map +1 -1
  29. package/dist/esm/billing/credit-pool.shared.schemas.d.ts.map +1 -1
  30. package/dist/esm/billing/credit-pool.shared.schemas.js.map +1 -1
  31. package/dist/esm/billing/invoice-ref.shared.resources-config.schemas.d.ts.map +1 -1
  32. package/dist/esm/billing/invoice-ref.shared.resources-config.schemas.js.map +1 -1
  33. package/dist/esm/billing/invoice-ref.shared.schemas.d.ts.map +1 -1
  34. package/dist/esm/billing/invoice-ref.shared.schemas.js.map +1 -1
  35. package/dist/esm/billing/price.shared.resources-config.schemas.d.ts.map +1 -1
  36. package/dist/esm/billing/price.shared.resources-config.schemas.js.map +1 -1
  37. package/dist/esm/billing/price.shared.schemas.d.ts.map +1 -1
  38. package/dist/esm/billing/price.shared.schemas.js.map +1 -1
  39. package/dist/esm/billing/product-behavior-policy.shared.schemas.d.ts.map +1 -1
  40. package/dist/esm/billing/product-behavior-policy.shared.schemas.js.map +1 -1
  41. package/dist/esm/billing/product-definition.shared.schemas.d.ts.map +1 -1
  42. package/dist/esm/billing/product-definition.shared.schemas.js.map +1 -1
  43. package/dist/esm/billing/product.shared.resources-config.schemas.d.ts.map +1 -1
  44. package/dist/esm/billing/product.shared.resources-config.schemas.js.map +1 -1
  45. package/dist/esm/billing/product.shared.schemas.d.ts.map +1 -1
  46. package/dist/esm/billing/product.shared.schemas.js.map +1 -1
  47. package/dist/esm/billing/promotions.shared.resources-config.schemas.d.ts.map +1 -1
  48. package/dist/esm/billing/promotions.shared.resources-config.schemas.js.map +1 -1
  49. package/dist/esm/billing/promotions.shared.schemas.d.ts.map +1 -1
  50. package/dist/esm/billing/promotions.shared.schemas.js.map +1 -1
  51. package/dist/esm/billing/public-pricing-catalog.shared.atoms.d.ts.map +1 -1
  52. package/dist/esm/billing/public-pricing-catalog.shared.atoms.js.map +1 -1
  53. package/dist/esm/billing/public-pricing-catalog.shared.d.ts.map +1 -1
  54. package/dist/esm/billing/public-pricing-catalog.shared.js.map +1 -1
  55. package/dist/esm/billing/referral-reward.shared.schemas.d.ts.map +1 -1
  56. package/dist/esm/billing/referral-reward.shared.schemas.js.map +1 -1
  57. package/dist/esm/billing/referral.shared.resources-config.schemas.d.ts.map +1 -1
  58. package/dist/esm/billing/referral.shared.resources-config.schemas.js.map +1 -1
  59. package/dist/esm/billing/referral.shared.schemas.d.ts.map +1 -1
  60. package/dist/esm/billing/referral.shared.schemas.js.map +1 -1
  61. package/dist/esm/billing/subscription.shared.resources-config.schemas.d.ts.map +1 -1
  62. package/dist/esm/billing/subscription.shared.resources-config.schemas.js.map +1 -1
  63. package/dist/esm/billing/subscription.shared.schemas.d.ts.map +1 -1
  64. package/dist/esm/billing/subscription.shared.schemas.js.map +1 -1
  65. package/dist/esm/billing/usage-flush-evidence.shared.schemas.d.ts.map +1 -1
  66. package/dist/esm/billing/usage-flush-evidence.shared.schemas.js.map +1 -1
  67. package/dist/esm/billing/usage-record.shared.resources-config.schemas.d.ts.map +1 -1
  68. package/dist/esm/billing/usage-record.shared.resources-config.schemas.js.map +1 -1
  69. package/dist/esm/billing/usage-record.shared.schemas.d.ts.map +1 -1
  70. package/dist/esm/billing/usage-record.shared.schemas.js.map +1 -1
  71. package/dist/esm/charts/aggregation-query.shared.schemas.d.ts.map +1 -1
  72. package/dist/esm/charts/aggregation-query.shared.schemas.js.map +1 -1
  73. package/dist/esm/charts/aggregation.shared.definitions.d.ts.map +1 -1
  74. package/dist/esm/charts/aggregation.shared.definitions.js.map +1 -1
  75. package/dist/esm/charts/chart-definition-builder.shared.d.ts.map +1 -1
  76. package/dist/esm/charts/chart-definition-builder.shared.js.map +1 -1
  77. package/dist/esm/companion/artifact-placement.shared.definitions.d.ts.map +1 -1
  78. package/dist/esm/companion/artifact-placement.shared.definitions.js.map +1 -1
  79. package/dist/esm/companion/provider-discovery.shared.schemas.d.ts.map +1 -1
  80. package/dist/esm/companion/provider-discovery.shared.schemas.js.map +1 -1
  81. package/dist/esm/companion/shared-library-companion.shared.definitions.d.ts.map +1 -1
  82. package/dist/esm/companion/shared-library-companion.shared.definitions.js.map +1 -1
  83. package/dist/esm/companion-exports.d.ts.map +1 -1
  84. package/dist/esm/companion-exports.js.map +1 -1
  85. package/dist/esm/compliance/audit-trails/application-audit-logs.shared.resources-config.schemas.d.ts.map +1 -1
  86. package/dist/esm/compliance/audit-trails/application-audit-logs.shared.resources-config.schemas.js.map +1 -1
  87. package/dist/esm/compliance/audit-trails/audit-actor.shared.schemas.d.ts.map +1 -1
  88. package/dist/esm/compliance/audit-trails/audit-actor.shared.schemas.js.map +1 -1
  89. package/dist/esm/compliance/audit-trails/audit-export-projection.shared.schemas.d.ts.map +1 -1
  90. package/dist/esm/compliance/audit-trails/audit-export-projection.shared.schemas.js.map +1 -1
  91. package/dist/esm/compliance/audit-trails/audit-log-sink.shared.schemas.d.ts.map +1 -1
  92. package/dist/esm/compliance/audit-trails/audit-log-sink.shared.schemas.js.map +1 -1
  93. package/dist/esm/compliance/audit-trails/audit-logs.shared.resources-config.schemas.d.ts.map +1 -1
  94. package/dist/esm/compliance/audit-trails/audit-logs.shared.resources-config.schemas.js.map +1 -1
  95. package/dist/esm/compliance/audit-trails/audit-trail-config.shared.schemas.d.ts.map +1 -1
  96. package/dist/esm/compliance/audit-trails/audit-trail-config.shared.schemas.js.map +1 -1
  97. package/dist/esm/compliance/audit-trails/auditable-events.shared.schema.d.ts.map +1 -1
  98. package/dist/esm/compliance/audit-trails/auditable-events.shared.schema.js.map +1 -1
  99. package/dist/esm/compliance/audit-trails/security-audit-event-envelope.shared.schema.d.ts.map +1 -1
  100. package/dist/esm/compliance/audit-trails/security-audit-event-envelope.shared.schema.js.map +1 -1
  101. package/dist/esm/compliance/data-classification/data-classification.shared.schemas.d.ts.map +1 -1
  102. package/dist/esm/compliance/data-classification/data-classification.shared.schemas.js.map +1 -1
  103. package/dist/esm/compliance/documents/governed-document-interactions.shared.schemas.d.ts.map +1 -1
  104. package/dist/esm/compliance/documents/governed-document-interactions.shared.schemas.js.map +1 -1
  105. package/dist/esm/compliance/documents/governed-documents.shared.schemas.d.ts.map +1 -1
  106. package/dist/esm/compliance/documents/governed-documents.shared.schemas.js.map +1 -1
  107. package/dist/esm/compliance/documents/user-governed-document-acceptances.shared.resources-config.schemas.d.ts.map +1 -1
  108. package/dist/esm/compliance/documents/user-governed-document-acceptances.shared.resources-config.schemas.js.map +1 -1
  109. package/dist/esm/compliance/documents/user-governed-document-acceptances.shared.schemas.d.ts.map +1 -1
  110. package/dist/esm/compliance/documents/user-governed-document-acceptances.shared.schemas.js.map +1 -1
  111. package/dist/esm/compliance/privacy/ai-use-posture.shared.schemas.d.ts.map +1 -1
  112. package/dist/esm/compliance/privacy/ai-use-posture.shared.schemas.js.map +1 -1
  113. package/dist/esm/compliance/privacy/capability-consent-purposes.shared.utils.d.ts.map +1 -1
  114. package/dist/esm/compliance/privacy/capability-consent-purposes.shared.utils.js.map +1 -1
  115. package/dist/esm/compliance/privacy/client-storage.shared.schemas.d.ts.map +1 -1
  116. package/dist/esm/compliance/privacy/client-storage.shared.schemas.js.map +1 -1
  117. package/dist/esm/compliance/privacy/consent-gate-vocabulary.shared.schemas.d.ts.map +1 -1
  118. package/dist/esm/compliance/privacy/consent-gate-vocabulary.shared.schemas.js.map +1 -1
  119. package/dist/esm/compliance/privacy/consent-purposes.shared.d.ts.map +1 -1
  120. package/dist/esm/compliance/privacy/consent-purposes.shared.js.map +1 -1
  121. package/dist/esm/compliance/privacy/data-subject-rights.shared.schemas.d.ts.map +1 -1
  122. package/dist/esm/compliance/privacy/data-subject-rights.shared.schemas.js.map +1 -1
  123. package/dist/esm/compliance/privacy/impersonalization-scrub.shared.utils.d.ts.map +1 -1
  124. package/dist/esm/compliance/privacy/impersonalization-scrub.shared.utils.js.map +1 -1
  125. package/dist/esm/compliance/privacy/impersonalization.shared.schemas.d.ts.map +1 -1
  126. package/dist/esm/compliance/privacy/impersonalization.shared.schemas.js.map +1 -1
  127. package/dist/esm/compliance/privacy/legal-hold-subject-attribution.shared.utils.d.ts.map +1 -1
  128. package/dist/esm/compliance/privacy/legal-hold-subject-attribution.shared.utils.js.map +1 -1
  129. package/dist/esm/compliance/privacy/legal-holds.shared.resources-config.schemas.d.ts.map +1 -1
  130. package/dist/esm/compliance/privacy/legal-holds.shared.resources-config.schemas.js.map +1 -1
  131. package/dist/esm/compliance/privacy/legal-holds.shared.schemas.d.ts.map +1 -1
  132. package/dist/esm/compliance/privacy/legal-holds.shared.schemas.js.map +1 -1
  133. package/dist/esm/compliance/privacy/operating-jurisdictions.shared.schemas.d.ts.map +1 -1
  134. package/dist/esm/compliance/privacy/operating-jurisdictions.shared.schemas.js.map +1 -1
  135. package/dist/esm/compliance/privacy/operator-compliance-identity.shared.schemas.d.ts.map +1 -1
  136. package/dist/esm/compliance/privacy/operator-compliance-identity.shared.schemas.js.map +1 -1
  137. package/dist/esm/compliance/privacy/personal-data-category.shared.schemas.d.ts.map +1 -1
  138. package/dist/esm/compliance/privacy/personal-data-category.shared.schemas.js.map +1 -1
  139. package/dist/esm/compliance/privacy/personal-data-declaration.shared.utils.d.ts.map +1 -1
  140. package/dist/esm/compliance/privacy/personal-data-declaration.shared.utils.js.map +1 -1
  141. package/dist/esm/compliance/privacy/privacy.shared.schemas.d.ts.map +1 -1
  142. package/dist/esm/compliance/privacy/privacy.shared.schemas.js.map +1 -1
  143. package/dist/esm/compliance/privacy/provider-capability-disclosure.shared.schemas.d.ts.map +1 -1
  144. package/dist/esm/compliance/privacy/provider-capability-disclosure.shared.schemas.js.map +1 -1
  145. package/dist/esm/compliance/privacy/purpose-ref.shared.schemas.d.ts.map +1 -1
  146. package/dist/esm/compliance/privacy/purpose-ref.shared.schemas.js.map +1 -1
  147. package/dist/esm/compliance/privacy/redaction.shared.schemas.d.ts.map +1 -1
  148. package/dist/esm/compliance/privacy/redaction.shared.schemas.js.map +1 -1
  149. package/dist/esm/compliance/privacy/retention-binding.shared.utils.d.ts.map +1 -1
  150. package/dist/esm/compliance/privacy/retention-binding.shared.utils.js.map +1 -1
  151. package/dist/esm/compliance/privacy/retention-enforcement-records.shared.resources-config.schemas.d.ts.map +1 -1
  152. package/dist/esm/compliance/privacy/retention-enforcement-records.shared.resources-config.schemas.js.map +1 -1
  153. package/dist/esm/compliance/privacy/retention-enforcement-records.shared.schemas.d.ts.map +1 -1
  154. package/dist/esm/compliance/privacy/retention-enforcement-records.shared.schemas.js.map +1 -1
  155. package/dist/esm/compliance/privacy/retention-schedule.shared.schemas.d.ts.map +1 -1
  156. package/dist/esm/compliance/privacy/retention-schedule.shared.schemas.js.map +1 -1
  157. package/dist/esm/compliance/privacy/retention-scope-deleted.shared.utils.d.ts.map +1 -1
  158. package/dist/esm/compliance/privacy/retention-scope-deleted.shared.utils.js.map +1 -1
  159. package/dist/esm/compliance/privacy/sharing.shared.schemas.d.ts.map +1 -1
  160. package/dist/esm/compliance/privacy/sharing.shared.schemas.js.map +1 -1
  161. package/dist/esm/compliance/privacy/subject-data-recipients.shared.schemas.d.ts.map +1 -1
  162. package/dist/esm/compliance/privacy/subject-data-recipients.shared.schemas.js.map +1 -1
  163. package/dist/esm/compliance/privacy/subject-erasure-lane-evidence.shared.schemas.d.ts.map +1 -1
  164. package/dist/esm/compliance/privacy/subject-erasure-lane-evidence.shared.schemas.js.map +1 -1
  165. package/dist/esm/compliance/privacy/subject-erasure.shared.schemas.d.ts.map +1 -1
  166. package/dist/esm/compliance/privacy/subject-erasure.shared.schemas.js.map +1 -1
  167. package/dist/esm/compliance/privacy/subject-export-render.shared.utils.d.ts.map +1 -1
  168. package/dist/esm/compliance/privacy/subject-export-render.shared.utils.js.map +1 -1
  169. package/dist/esm/compliance/privacy/subject-export.shared.schemas.d.ts.map +1 -1
  170. package/dist/esm/compliance/privacy/subject-export.shared.schemas.js.map +1 -1
  171. package/dist/esm/compliance/review-cadence.shared.schemas.d.ts.map +1 -1
  172. package/dist/esm/compliance/review-cadence.shared.schemas.js.map +1 -1
  173. package/dist/esm/compliance/risk-posture.shared.schemas.d.ts.map +1 -1
  174. package/dist/esm/compliance/risk-posture.shared.schemas.js.map +1 -1
  175. package/dist/esm/config/analytics-value-moments.shared.schemas.d.ts.map +1 -1
  176. package/dist/esm/config/analytics-value-moments.shared.schemas.js.map +1 -1
  177. package/dist/esm/config/app-configuration-shared.shared.schemas.d.ts.map +1 -1
  178. package/dist/esm/config/app-configuration-shared.shared.schemas.js.map +1 -1
  179. package/dist/esm/config/app-frontend-type.shared.schemas.d.ts.map +1 -1
  180. package/dist/esm/config/app-frontend-type.shared.schemas.js.map +1 -1
  181. package/dist/esm/config/auth-config-resolution.shared.utils.d.ts.map +1 -1
  182. package/dist/esm/config/auth-config-resolution.shared.utils.js.map +1 -1
  183. package/dist/esm/config/brand-assets.shared.schemas.d.ts.map +1 -1
  184. package/dist/esm/config/brand-assets.shared.schemas.js.map +1 -1
  185. package/dist/esm/config/configuration-validation.shared.schemas.d.ts.map +1 -1
  186. package/dist/esm/config/configuration-validation.shared.schemas.js.map +1 -1
  187. package/dist/esm/config/entity-identity-config.shared.schemas.d.ts.map +1 -1
  188. package/dist/esm/config/entity-identity-config.shared.schemas.js.map +1 -1
  189. package/dist/esm/config/frontend/chart-definition.shared.schemas.d.ts.map +1 -1
  190. package/dist/esm/config/frontend/chart-definition.shared.schemas.js.map +1 -1
  191. package/dist/esm/config/frontend/chart-registration-alignment.shared.d.ts.map +1 -1
  192. package/dist/esm/config/frontend/chart-registration-alignment.shared.js.map +1 -1
  193. package/dist/esm/config/frontend/navigation.shared.schemas.d.ts.map +1 -1
  194. package/dist/esm/config/frontend/navigation.shared.schemas.js.map +1 -1
  195. package/dist/esm/config/frontend/onboarding.shared.schemas.d.ts.map +1 -1
  196. package/dist/esm/config/frontend/onboarding.shared.schemas.js.map +1 -1
  197. package/dist/esm/config/postgresql.shared.schemas.d.ts.map +1 -1
  198. package/dist/esm/config/postgresql.shared.schemas.js.map +1 -1
  199. package/dist/esm/config/registration-acquisition-policy.shared.utils.d.ts.map +1 -1
  200. package/dist/esm/config/registration-acquisition-policy.shared.utils.js.map +1 -1
  201. package/dist/esm/config-authoring.entry.d.ts.map +1 -1
  202. package/dist/esm/config-authoring.entry.js.map +1 -1
  203. package/dist/esm/crdt/crdt-merge.shared.utils.d.ts.map +1 -1
  204. package/dist/esm/crdt/crdt-merge.shared.utils.js.map +1 -1
  205. package/dist/esm/data-seeding/data-seeding-config.shared.schemas.d.ts.map +1 -1
  206. package/dist/esm/data-seeding/data-seeding-config.shared.schemas.js.map +1 -1
  207. package/dist/esm/errors/caught-error-description.shared.utils.d.ts.map +1 -1
  208. package/dist/esm/errors/caught-error-description.shared.utils.js.map +1 -1
  209. package/dist/esm/errors/errors.custom-message-ref.shared.definitions.d.ts.map +1 -1
  210. package/dist/esm/errors/errors.custom-message-ref.shared.definitions.js.map +1 -1
  211. package/dist/esm/errors/errors.shared.definitions.d.ts.map +1 -1
  212. package/dist/esm/errors/errors.shared.definitions.js.map +1 -1
  213. package/dist/esm/errors/errors.shared.schemas.d.ts.map +1 -1
  214. package/dist/esm/errors/errors.shared.schemas.js.map +1 -1
  215. package/dist/esm/errors/errors.shared.utils.d.ts.map +1 -1
  216. package/dist/esm/errors/errors.shared.utils.js.map +1 -1
  217. package/dist/esm/errors/resource-access-forbidden.shared.error.d.ts.map +1 -1
  218. package/dist/esm/errors/resource-access-forbidden.shared.error.js.map +1 -1
  219. package/dist/esm/errors/thrown-value-description.shared.utils.d.ts.map +1 -1
  220. package/dist/esm/errors/thrown-value-description.shared.utils.js.map +1 -1
  221. package/dist/esm/errors/zod-issue-formatting.shared.utils.d.ts.map +1 -1
  222. package/dist/esm/errors/zod-issue-formatting.shared.utils.js.map +1 -1
  223. package/dist/esm/exports/tabular-csv.shared.utils.d.ts.map +1 -1
  224. package/dist/esm/exports/tabular-csv.shared.utils.js.map +1 -1
  225. package/dist/esm/external-data/external-data-pipeline-description.shared.d.ts.map +1 -1
  226. package/dist/esm/external-data/external-data-pipeline-description.shared.js.map +1 -1
  227. package/dist/esm/external-data/external-data-pipeline-pass-mode.shared.d.ts.map +1 -1
  228. package/dist/esm/external-data/external-data-pipeline-pass-mode.shared.js.map +1 -1
  229. package/dist/esm/external-data/external-data-pipeline.shared.schemas.d.ts.map +1 -1
  230. package/dist/esm/external-data/external-data-pipeline.shared.schemas.js.map +1 -1
  231. package/dist/esm/external-data/external-data-provenance.shared.d.ts.map +1 -1
  232. package/dist/esm/external-data/external-data-provenance.shared.js.map +1 -1
  233. package/dist/esm/external-data.exports.d.ts.map +1 -1
  234. package/dist/esm/external-data.exports.js.map +1 -1
  235. package/dist/esm/external-providers/compose-provider-registry.shared.d.ts.map +1 -1
  236. package/dist/esm/external-providers/compose-provider-registry.shared.js.map +1 -1
  237. package/dist/esm/external-providers/engine-capabilities.shared.schemas.d.ts.map +1 -1
  238. package/dist/esm/external-providers/engine-capabilities.shared.schemas.js.map +1 -1
  239. package/dist/esm/external-providers/engine-capability-resolution-mode.shared.d.ts.map +1 -1
  240. package/dist/esm/external-providers/engine-capability-resolution-mode.shared.js.map +1 -1
  241. package/dist/esm/external-providers/engine-capability-surface.shared.d.ts.map +1 -1
  242. package/dist/esm/external-providers/engine-capability-surface.shared.js.map +1 -1
  243. package/dist/esm/external-providers/external-providers.shared.schemas.d.ts.map +1 -1
  244. package/dist/esm/external-providers/external-providers.shared.schemas.js.map +1 -1
  245. package/dist/esm/external-providers/frontend-bootstrap.shared.schemas.d.ts.map +1 -1
  246. package/dist/esm/external-providers/frontend-bootstrap.shared.schemas.js.map +1 -1
  247. package/dist/esm/external-providers/frontend-capability-public-config.shared.schemas.d.ts.map +1 -1
  248. package/dist/esm/external-providers/frontend-capability-public-config.shared.schemas.js.map +1 -1
  249. package/dist/esm/external-providers/frontend-capability-runtime.shared.types.d.ts.map +1 -1
  250. package/dist/esm/external-providers/frontend-capability-runtime.shared.types.js.map +1 -1
  251. package/dist/esm/external-providers/frontend-provider-entry.shared.schemas.d.ts.map +1 -1
  252. package/dist/esm/external-providers/frontend-provider-entry.shared.schemas.js.map +1 -1
  253. package/dist/esm/external-providers/frontend-provider-public-config.shared.d.ts.map +1 -1
  254. package/dist/esm/external-providers/frontend-provider-public-config.shared.js.map +1 -1
  255. package/dist/esm/external-providers/model-cost-accounting-config.shared.schemas.d.ts.map +1 -1
  256. package/dist/esm/external-providers/model-cost-accounting-config.shared.schemas.js.map +1 -1
  257. package/dist/esm/external-providers/provider-address-lookup-contract.shared.types.d.ts.map +1 -1
  258. package/dist/esm/external-providers/provider-address-lookup-contract.shared.types.js.map +1 -1
  259. package/dist/esm/external-providers/provider-augmentation-opt-ins.shared.schemas.d.ts.map +1 -1
  260. package/dist/esm/external-providers/provider-augmentation-opt-ins.shared.schemas.js.map +1 -1
  261. package/dist/esm/external-providers/provider-authentication-assurance.shared.schemas.d.ts.map +1 -1
  262. package/dist/esm/external-providers/provider-authentication-assurance.shared.schemas.js.map +1 -1
  263. package/dist/esm/external-providers/provider-browser-operations.shared.schemas.d.ts.map +1 -1
  264. package/dist/esm/external-providers/provider-browser-operations.shared.schemas.js.map +1 -1
  265. package/dist/esm/external-providers/provider-capability.shared.schemas.d.ts.map +1 -1
  266. package/dist/esm/external-providers/provider-capability.shared.schemas.js.map +1 -1
  267. package/dist/esm/external-providers/provider-compliance-profile.shared.schemas.d.ts.map +1 -1
  268. package/dist/esm/external-providers/provider-compliance-profile.shared.schemas.js.map +1 -1
  269. package/dist/esm/external-providers/provider-frontend-component-contract.shared.types.d.ts.map +1 -1
  270. package/dist/esm/external-providers/provider-frontend-component-contract.shared.types.js.map +1 -1
  271. package/dist/esm/external-providers/provider-frontend-surface.shared.schemas.d.ts.map +1 -1
  272. package/dist/esm/external-providers/provider-frontend-surface.shared.schemas.js.map +1 -1
  273. package/dist/esm/external-providers/provider-metadata.shared.schemas.d.ts.map +1 -1
  274. package/dist/esm/external-providers/provider-metadata.shared.schemas.js.map +1 -1
  275. package/dist/esm/external-providers/provider-package-allow-list.shared.schemas.d.ts.map +1 -1
  276. package/dist/esm/external-providers/provider-package-allow-list.shared.schemas.js.map +1 -1
  277. package/dist/esm/external-providers/provider-protocol.shared.schemas.d.ts.map +1 -1
  278. package/dist/esm/external-providers/provider-protocol.shared.schemas.js.map +1 -1
  279. package/dist/esm/external-providers/provider-scope-reauthorization.shared.schemas.d.ts.map +1 -1
  280. package/dist/esm/external-providers/provider-scope-reauthorization.shared.schemas.js.map +1 -1
  281. package/dist/esm/external-providers/provider-shared-connections.shared.schemas.d.ts.map +1 -1
  282. package/dist/esm/external-providers/provider-shared-connections.shared.schemas.js.map +1 -1
  283. package/dist/esm/external-providers/provider-tier-rule.shared.utils.d.ts.map +1 -1
  284. package/dist/esm/external-providers/provider-tier-rule.shared.utils.js.map +1 -1
  285. package/dist/esm/external-providers/provider-usage-cost.shared.d.ts.map +1 -1
  286. package/dist/esm/external-providers/provider-usage-cost.shared.js.map +1 -1
  287. package/dist/esm/external-providers/provider-usage-pricing.example.d.ts.map +1 -1
  288. package/dist/esm/external-providers/provider-usage-pricing.example.js.map +1 -1
  289. package/dist/esm/external-providers/provider-usage-pricing.shared.schemas.d.ts.map +1 -1
  290. package/dist/esm/external-providers/provider-usage-pricing.shared.schemas.js.map +1 -1
  291. package/dist/esm/features/application-features.shared.resources-config.schemas.d.ts.map +1 -1
  292. package/dist/esm/features/application-features.shared.resources-config.schemas.js.map +1 -1
  293. package/dist/esm/features/connected-feature.example.d.ts.map +1 -1
  294. package/dist/esm/features/connected-feature.example.js.map +1 -1
  295. package/dist/esm/features/core-feature-definitions.shared.d.ts.map +1 -1
  296. package/dist/esm/features/core-feature-definitions.shared.js.map +1 -1
  297. package/dist/esm/features/feature-builders.shared.d.ts.map +1 -1
  298. package/dist/esm/features/feature-builders.shared.js.map +1 -1
  299. package/dist/esm/features/feature-definition.shared.schemas.d.ts.map +1 -1
  300. package/dist/esm/features/feature-definition.shared.schemas.js.map +1 -1
  301. package/dist/esm/features/feature-registry.shared.d.ts.map +1 -1
  302. package/dist/esm/features/feature-registry.shared.js.map +1 -1
  303. package/dist/esm/features/feature-resolution.shared.schemas.d.ts.map +1 -1
  304. package/dist/esm/features/feature-resolution.shared.schemas.js.map +1 -1
  305. package/dist/esm/features/scope-features.shared.schemas.d.ts.map +1 -1
  306. package/dist/esm/features/scope-features.shared.schemas.js.map +1 -1
  307. package/dist/esm/features/user-features.shared.resources-config.schemas.d.ts.map +1 -1
  308. package/dist/esm/features/user-features.shared.resources-config.schemas.js.map +1 -1
  309. package/dist/esm/files/file-remote-reference-link.shared.schemas.d.ts.map +1 -1
  310. package/dist/esm/files/file-remote-reference-link.shared.schemas.js.map +1 -1
  311. package/dist/esm/files/file-upload-grant.shared.schemas.d.ts.map +1 -1
  312. package/dist/esm/files/file-upload-grant.shared.schemas.js.map +1 -1
  313. package/dist/esm/files/files.shared.resources-config.schemas.d.ts.map +1 -1
  314. package/dist/esm/files/files.shared.resources-config.schemas.js.map +1 -1
  315. package/dist/esm/files/files.shared.schemas.d.ts.map +1 -1
  316. package/dist/esm/files/files.shared.schemas.js.map +1 -1
  317. package/dist/esm/files/files.shared.utils.d.ts.map +1 -1
  318. package/dist/esm/files/files.shared.utils.js.map +1 -1
  319. package/dist/esm/flows-actors/a2a-push-delivery-log.shared.resources-config.schemas.d.ts.map +1 -1
  320. package/dist/esm/flows-actors/a2a-push-delivery-log.shared.resources-config.schemas.js.map +1 -1
  321. package/dist/esm/flows-actors/a2a-push-delivery-log.shared.schemas.d.ts.map +1 -1
  322. package/dist/esm/flows-actors/a2a-push-delivery-log.shared.schemas.js.map +1 -1
  323. package/dist/esm/flows-actors/a2a-token-budget-state.shared.resources-config.schemas.d.ts.map +1 -1
  324. package/dist/esm/flows-actors/a2a-token-budget-state.shared.resources-config.schemas.js.map +1 -1
  325. package/dist/esm/flows-actors/a2a-token-budget-state.shared.schemas.d.ts.map +1 -1
  326. package/dist/esm/flows-actors/a2a-token-budget-state.shared.schemas.js.map +1 -1
  327. package/dist/esm/flows-actors/actors.shared.schemas.d.ts.map +1 -1
  328. package/dist/esm/flows-actors/actors.shared.schemas.js.map +1 -1
  329. package/dist/esm/flows-actors/agent-traceability.shared.schemas.d.ts.map +1 -1
  330. package/dist/esm/flows-actors/agent-traceability.shared.schemas.js.map +1 -1
  331. package/dist/esm/flows-actors/agent-work-decisions.shared.resources-config.schemas.d.ts.map +1 -1
  332. package/dist/esm/flows-actors/agent-work-decisions.shared.resources-config.schemas.js.map +1 -1
  333. package/dist/esm/flows-actors/agent-work-decisions.shared.schemas.d.ts.map +1 -1
  334. package/dist/esm/flows-actors/agent-work-decisions.shared.schemas.js.map +1 -1
  335. package/dist/esm/flows-actors/agents.shared.schemas.d.ts.map +1 -1
  336. package/dist/esm/flows-actors/agents.shared.schemas.js.map +1 -1
  337. package/dist/esm/flows-actors/autonomous-agents.shared.schemas.d.ts.map +1 -1
  338. package/dist/esm/flows-actors/autonomous-agents.shared.schemas.js.map +1 -1
  339. package/dist/esm/flows-actors/deliberation.shared.schemas.d.ts.map +1 -1
  340. package/dist/esm/flows-actors/deliberation.shared.schemas.js.map +1 -1
  341. package/dist/esm/flows-actors/execution-plan-readiness.shared.utils.d.ts.map +1 -1
  342. package/dist/esm/flows-actors/execution-plan-readiness.shared.utils.js.map +1 -1
  343. package/dist/esm/flows-actors/flows-actors-execution.shared.resources-config.schemas.d.ts.map +1 -1
  344. package/dist/esm/flows-actors/flows-actors-execution.shared.resources-config.schemas.js.map +1 -1
  345. package/dist/esm/flows-actors/flows-actors-execution.shared.schemas.d.ts.map +1 -1
  346. package/dist/esm/flows-actors/flows-actors-execution.shared.schemas.js.map +1 -1
  347. package/dist/esm/flows-actors/flows-actors-task.shared.resources-config.schemas.d.ts.map +1 -1
  348. package/dist/esm/flows-actors/flows-actors-task.shared.resources-config.schemas.js.map +1 -1
  349. package/dist/esm/flows-actors/flows-actors-task.shared.schemas.d.ts.map +1 -1
  350. package/dist/esm/flows-actors/flows-actors-task.shared.schemas.js.map +1 -1
  351. package/dist/esm/flows-actors/flows-actors.commons.shared.schemas.d.ts.map +1 -1
  352. package/dist/esm/flows-actors/flows-actors.commons.shared.schemas.js.map +1 -1
  353. package/dist/esm/flows-actors/flows-actors.configuration.shared.schemas.d.ts.map +1 -1
  354. package/dist/esm/flows-actors/flows-actors.configuration.shared.schemas.js.map +1 -1
  355. package/dist/esm/flows-actors/flows-actors.frontend.shared.schemas.d.ts.map +1 -1
  356. package/dist/esm/flows-actors/flows-actors.frontend.shared.schemas.js.map +1 -1
  357. package/dist/esm/flows-actors/flows-actors.io.shared.schemas.d.ts.map +1 -1
  358. package/dist/esm/flows-actors/flows-actors.io.shared.schemas.js.map +1 -1
  359. package/dist/esm/flows-actors/flows-actors.system.shared.definitions.d.ts.map +1 -1
  360. package/dist/esm/flows-actors/flows-actors.system.shared.definitions.js.map +1 -1
  361. package/dist/esm/flows-actors/flows-actors.system.shared.schemas.d.ts.map +1 -1
  362. package/dist/esm/flows-actors/flows-actors.system.shared.schemas.js.map +1 -1
  363. package/dist/esm/flows-actors/flows.shared.schemas.d.ts.map +1 -1
  364. package/dist/esm/flows-actors/flows.shared.schemas.js.map +1 -1
  365. package/dist/esm/flows-actors/human-decision.shared.schemas.d.ts.map +1 -1
  366. package/dist/esm/flows-actors/human-decision.shared.schemas.js.map +1 -1
  367. package/dist/esm/flows-actors/mcp-servers.shared.schemas.d.ts.map +1 -1
  368. package/dist/esm/flows-actors/mcp-servers.shared.schemas.js.map +1 -1
  369. package/dist/esm/flows-actors/model-call-attributions.shared.resources-config.schemas.d.ts.map +1 -1
  370. package/dist/esm/flows-actors/model-call-attributions.shared.resources-config.schemas.js.map +1 -1
  371. package/dist/esm/flows-actors/model-call-attributions.shared.schemas.d.ts.map +1 -1
  372. package/dist/esm/flows-actors/model-call-attributions.shared.schemas.js.map +1 -1
  373. package/dist/esm/flows-actors/model-cost-period-aggregates.shared.resources-config.schemas.d.ts.map +1 -1
  374. package/dist/esm/flows-actors/model-cost-period-aggregates.shared.resources-config.schemas.js.map +1 -1
  375. package/dist/esm/flows-actors/model-cost-period-aggregates.shared.schemas.d.ts.map +1 -1
  376. package/dist/esm/flows-actors/model-cost-period-aggregates.shared.schemas.js.map +1 -1
  377. package/dist/esm/flows-actors/model-cost-summary.shared.schemas.d.ts.map +1 -1
  378. package/dist/esm/flows-actors/model-cost-summary.shared.schemas.js.map +1 -1
  379. package/dist/esm/flows-actors/prompt-ir.shared.schemas.d.ts.map +1 -1
  380. package/dist/esm/flows-actors/prompt-ir.shared.schemas.js.map +1 -1
  381. package/dist/esm/flows-actors/provider-call-records.shared.resources-config.schemas.d.ts.map +1 -1
  382. package/dist/esm/flows-actors/provider-call-records.shared.resources-config.schemas.js.map +1 -1
  383. package/dist/esm/flows-actors/provider-call-records.shared.schemas.d.ts.map +1 -1
  384. package/dist/esm/flows-actors/provider-call-records.shared.schemas.js.map +1 -1
  385. package/dist/esm/flows-actors/review-deadlines.shared.schemas.d.ts.map +1 -1
  386. package/dist/esm/flows-actors/review-deadlines.shared.schemas.js.map +1 -1
  387. package/dist/esm/flows-actors/tasks.actors.shared.schemas.d.ts.map +1 -1
  388. package/dist/esm/flows-actors/tasks.actors.shared.schemas.js.map +1 -1
  389. package/dist/esm/flows-actors/work-attribution.shared.schemas.d.ts.map +1 -1
  390. package/dist/esm/flows-actors/work-attribution.shared.schemas.js.map +1 -1
  391. package/dist/esm/frontend-definitions/frontend-notification-custom-message-ref.definitions.d.ts.map +1 -1
  392. package/dist/esm/frontend-definitions/frontend-notification-custom-message-ref.definitions.js.map +1 -1
  393. package/dist/esm/frontend-definitions/settings-destination-ref.definitions.d.ts.map +1 -1
  394. package/dist/esm/frontend-definitions/settings-destination-ref.definitions.js.map +1 -1
  395. package/dist/esm/guidance/guidance-flow.shared.schemas.d.ts.map +1 -1
  396. package/dist/esm/guidance/guidance-flow.shared.schemas.js.map +1 -1
  397. package/dist/esm/guidance/guidance-state.shared.resources-config.schemas.d.ts.map +1 -1
  398. package/dist/esm/guidance/guidance-state.shared.resources-config.schemas.js.map +1 -1
  399. package/dist/esm/guidance/guidance-state.shared.schemas.d.ts.map +1 -1
  400. package/dist/esm/guidance/guidance-state.shared.schemas.js.map +1 -1
  401. package/dist/esm/guidance/guidance-state.shared.utils.d.ts.map +1 -1
  402. package/dist/esm/guidance/guidance-state.shared.utils.js.map +1 -1
  403. package/dist/esm/guidance/lifecycle-config.shared.schemas.d.ts.map +1 -1
  404. package/dist/esm/guidance/lifecycle-config.shared.schemas.js.map +1 -1
  405. package/dist/esm/guidance/lifecycle-state.shared.resources-config.schemas.d.ts.map +1 -1
  406. package/dist/esm/guidance/lifecycle-state.shared.resources-config.schemas.js.map +1 -1
  407. package/dist/esm/guidance/lifecycle-state.shared.schemas.d.ts.map +1 -1
  408. package/dist/esm/guidance/lifecycle-state.shared.schemas.js.map +1 -1
  409. package/dist/esm/guidance/milestone-builders.shared.d.ts.map +1 -1
  410. package/dist/esm/guidance/milestone-builders.shared.js.map +1 -1
  411. package/dist/esm/guidance/milestone-definition.shared.schemas.d.ts.map +1 -1
  412. package/dist/esm/guidance/milestone-definition.shared.schemas.js.map +1 -1
  413. package/dist/esm/guidance/progression-presentation.shared.schemas.d.ts.map +1 -1
  414. package/dist/esm/guidance/progression-presentation.shared.schemas.js.map +1 -1
  415. package/dist/esm/guidance/progression-state.shared.resources-config.schemas.d.ts.map +1 -1
  416. package/dist/esm/guidance/progression-state.shared.resources-config.schemas.js.map +1 -1
  417. package/dist/esm/guidance/progression-state.shared.schemas.d.ts.map +1 -1
  418. package/dist/esm/guidance/progression-state.shared.schemas.js.map +1 -1
  419. package/dist/esm/http-api-binding/http-api-binding-id.shared.utils.d.ts.map +1 -1
  420. package/dist/esm/http-api-binding/http-api-binding-id.shared.utils.js.map +1 -1
  421. package/dist/esm/http-api-binding/http-api-binding.shared.schemas.d.ts.map +1 -1
  422. package/dist/esm/http-api-binding/http-api-binding.shared.schemas.js.map +1 -1
  423. package/dist/esm/http-api-binding/http-api-erasure-stance.shared.d.ts.map +1 -1
  424. package/dist/esm/http-api-binding/http-api-erasure-stance.shared.js.map +1 -1
  425. package/dist/esm/http-api-binding/http-api-rest-write-operations.shared.schemas.d.ts.map +1 -1
  426. package/dist/esm/http-api-binding/http-api-rest-write-operations.shared.schemas.js.map +1 -1
  427. package/dist/esm/http-api-binding/http-api-transport-dialect.shared.d.ts.map +1 -1
  428. package/dist/esm/http-api-binding/http-api-transport-dialect.shared.js.map +1 -1
  429. package/dist/esm/http-api-binding/read-through-engine-anchors.shared.d.ts.map +1 -1
  430. package/dist/esm/http-api-binding/read-through-engine-anchors.shared.js.map +1 -1
  431. package/dist/esm/i18n/application-config-vocabulary.shared.d.ts.map +1 -1
  432. package/dist/esm/i18n/application-config-vocabulary.shared.js.map +1 -1
  433. package/dist/esm/i18n/engine-open-vocabulary-values.shared.d.ts.map +1 -1
  434. package/dist/esm/i18n/engine-open-vocabulary-values.shared.js.map +1 -1
  435. package/dist/esm/i18n/engine-open-vocabulary.shared.d.ts.map +1 -1
  436. package/dist/esm/i18n/engine-open-vocabulary.shared.js.map +1 -1
  437. package/dist/esm/i18n/interpolate-label-params.shared.utils.d.ts.map +1 -1
  438. package/dist/esm/i18n/interpolate-label-params.shared.utils.js.map +1 -1
  439. package/dist/esm/i18n/labelling.dto.shared.schemas.d.ts.map +1 -1
  440. package/dist/esm/i18n/labelling.dto.shared.schemas.js.map +1 -1
  441. package/dist/esm/inbound/conversation-threads.shared.resources-config.schemas.d.ts.map +1 -1
  442. package/dist/esm/inbound/conversation-threads.shared.resources-config.schemas.js.map +1 -1
  443. package/dist/esm/inbound/conversation-threads.shared.schemas.d.ts.map +1 -1
  444. package/dist/esm/inbound/conversation-threads.shared.schemas.js.map +1 -1
  445. package/dist/esm/inbound/inbound-channels.shared.schemas.d.ts.map +1 -1
  446. package/dist/esm/inbound/inbound-channels.shared.schemas.js.map +1 -1
  447. package/dist/esm/inbound/inbound-delivery.shared.resources-config.schemas.d.ts.map +1 -1
  448. package/dist/esm/inbound/inbound-delivery.shared.resources-config.schemas.js.map +1 -1
  449. package/dist/esm/inbound/inbound-delivery.shared.schemas.d.ts.map +1 -1
  450. package/dist/esm/inbound/inbound-delivery.shared.schemas.js.map +1 -1
  451. package/dist/esm/inbound/inbound-endpoint-env.shared.d.ts.map +1 -1
  452. package/dist/esm/inbound/inbound-endpoint-env.shared.js.map +1 -1
  453. package/dist/esm/index.d.ts.map +1 -1
  454. package/dist/esm/index.js.map +1 -1
  455. package/dist/esm/meta-workflows/actions.meta-workflows.shared.schemas.d.ts.map +1 -1
  456. package/dist/esm/meta-workflows/actions.meta-workflows.shared.schemas.js.map +1 -1
  457. package/dist/esm/meta-workflows/catalog.meta-workflows.shared.schemas.d.ts.map +1 -1
  458. package/dist/esm/meta-workflows/catalog.meta-workflows.shared.schemas.js.map +1 -1
  459. package/dist/esm/meta-workflows/coding-tasks.meta-workflows.shared.schemas.d.ts.map +1 -1
  460. package/dist/esm/meta-workflows/coding-tasks.meta-workflows.shared.schemas.js.map +1 -1
  461. package/dist/esm/meta-workflows/context-selection.meta-workflows.shared.schemas.d.ts.map +1 -1
  462. package/dist/esm/meta-workflows/context-selection.meta-workflows.shared.schemas.js.map +1 -1
  463. package/dist/esm/meta-workflows/decisions.meta-workflows.shared.schemas.d.ts.map +1 -1
  464. package/dist/esm/meta-workflows/decisions.meta-workflows.shared.schemas.js.map +1 -1
  465. package/dist/esm/meta-workflows/orchestration.meta-workflows.shared.schemas.d.ts.map +1 -1
  466. package/dist/esm/meta-workflows/orchestration.meta-workflows.shared.schemas.js.map +1 -1
  467. package/dist/esm/meta-workflows/portable-primitives.meta-workflows.shared.schemas.d.ts.map +1 -1
  468. package/dist/esm/meta-workflows/portable-primitives.meta-workflows.shared.schemas.js.map +1 -1
  469. package/dist/esm/meta-workflows.exports.d.ts.map +1 -1
  470. package/dist/esm/meta-workflows.exports.js.map +1 -1
  471. package/dist/esm/monitoring/monitoring.shared.schemas.d.ts.map +1 -1
  472. package/dist/esm/monitoring/monitoring.shared.schemas.js.map +1 -1
  473. package/dist/esm/notifications/email/email-context.shared.schemas.d.ts.map +1 -1
  474. package/dist/esm/notifications/email/email-context.shared.schemas.js.map +1 -1
  475. package/dist/esm/notifications/email/email-submission.shared.enums.d.ts.map +1 -1
  476. package/dist/esm/notifications/email/email-submission.shared.enums.js.map +1 -1
  477. package/dist/esm/notifications/email/email-template-registry.shared.schemas.d.ts.map +1 -1
  478. package/dist/esm/notifications/email/email-template-registry.shared.schemas.js.map +1 -1
  479. package/dist/esm/notifications/email/email-template.shared.enums.d.ts.map +1 -1
  480. package/dist/esm/notifications/email/email-template.shared.enums.js.map +1 -1
  481. package/dist/esm/notifications/inbound-email/inbound-email.shared.resources-config.schemas.d.ts.map +1 -1
  482. package/dist/esm/notifications/inbound-email/inbound-email.shared.resources-config.schemas.js.map +1 -1
  483. package/dist/esm/notifications/inbound-email/inbound-email.shared.schemas.d.ts.map +1 -1
  484. package/dist/esm/notifications/inbound-email/inbound-email.shared.schemas.js.map +1 -1
  485. package/dist/esm/notifications/m2m/m2m-webhook-delivery-contract.shared.d.ts.map +1 -1
  486. package/dist/esm/notifications/m2m/m2m-webhook-delivery-contract.shared.js.map +1 -1
  487. package/dist/esm/notifications/m2m/m2m-webhook-delivery-log.shared.resources-config.schemas.d.ts.map +1 -1
  488. package/dist/esm/notifications/m2m/m2m-webhook-delivery-log.shared.resources-config.schemas.js.map +1 -1
  489. package/dist/esm/notifications/m2m/m2m-webhook-delivery-log.shared.schemas.d.ts.map +1 -1
  490. package/dist/esm/notifications/m2m/m2m-webhook-delivery-log.shared.schemas.js.map +1 -1
  491. package/dist/esm/notifications/m2m/webhook-config.shared.resources-config.schemas.d.ts.map +1 -1
  492. package/dist/esm/notifications/m2m/webhook-config.shared.resources-config.schemas.js.map +1 -1
  493. package/dist/esm/notifications/m2m/webhook-config.shared.schemas.d.ts.map +1 -1
  494. package/dist/esm/notifications/m2m/webhook-config.shared.schemas.js.map +1 -1
  495. package/dist/esm/notifications/notification-badges.core.definitions.d.ts.map +1 -1
  496. package/dist/esm/notifications/notification-badges.core.definitions.js.map +1 -1
  497. package/dist/esm/notifications/notification-badges.schemas.d.ts.map +1 -1
  498. package/dist/esm/notifications/notification-badges.schemas.js.map +1 -1
  499. package/dist/esm/notifications/notification-badges.shared.resources-config.schemas.d.ts.map +1 -1
  500. package/dist/esm/notifications/notification-badges.shared.resources-config.schemas.js.map +1 -1
  501. package/dist/esm/notifications/notifications.shared.schemas.d.ts.map +1 -1
  502. package/dist/esm/notifications/notifications.shared.schemas.js.map +1 -1
  503. package/dist/esm/organizations/application-owner-organization.shared.schemas.d.ts.map +1 -1
  504. package/dist/esm/organizations/application-owner-organization.shared.schemas.js.map +1 -1
  505. package/dist/esm/organizations/organization-features.shared.resources-config.schemas.d.ts.map +1 -1
  506. package/dist/esm/organizations/organization-features.shared.resources-config.schemas.js.map +1 -1
  507. package/dist/esm/organizations/organization-features.shared.schemas.d.ts.map +1 -1
  508. package/dist/esm/organizations/organization-features.shared.schemas.js.map +1 -1
  509. package/dist/esm/organizations/organization-members.shared.resources-config.schemas.d.ts.map +1 -1
  510. package/dist/esm/organizations/organization-members.shared.resources-config.schemas.js.map +1 -1
  511. package/dist/esm/organizations/organization-members.shared.schemas.d.ts.map +1 -1
  512. package/dist/esm/organizations/organization-members.shared.schemas.js.map +1 -1
  513. package/dist/esm/organizations/organization-notifications.shared.resources-config.schemas.d.ts.map +1 -1
  514. package/dist/esm/organizations/organization-notifications.shared.resources-config.schemas.js.map +1 -1
  515. package/dist/esm/organizations/organization-notifications.shared.schemas.d.ts.map +1 -1
  516. package/dist/esm/organizations/organization-notifications.shared.schemas.js.map +1 -1
  517. package/dist/esm/organizations/organization-preferences.shared.resources-config.schemas.d.ts.map +1 -1
  518. package/dist/esm/organizations/organization-preferences.shared.resources-config.schemas.js.map +1 -1
  519. package/dist/esm/organizations/organization-preferences.shared.schemas.d.ts.map +1 -1
  520. package/dist/esm/organizations/organization-preferences.shared.schemas.js.map +1 -1
  521. package/dist/esm/organizations/organization-profile.shared.resources-config.schemas.d.ts.map +1 -1
  522. package/dist/esm/organizations/organization-profile.shared.resources-config.schemas.js.map +1 -1
  523. package/dist/esm/organizations/organization-profile.shared.schemas.d.ts.map +1 -1
  524. package/dist/esm/organizations/organization-profile.shared.schemas.js.map +1 -1
  525. package/dist/esm/organizations/organization-unit-inheritance.shared.d.ts.map +1 -1
  526. package/dist/esm/organizations/organization-unit-inheritance.shared.js.map +1 -1
  527. package/dist/esm/organizations/organization-unit-members.shared.resources-config.schemas.d.ts.map +1 -1
  528. package/dist/esm/organizations/organization-unit-members.shared.resources-config.schemas.js.map +1 -1
  529. package/dist/esm/organizations/organization-unit-members.shared.schemas.d.ts.map +1 -1
  530. package/dist/esm/organizations/organization-unit-members.shared.schemas.js.map +1 -1
  531. package/dist/esm/organizations/organization-unit-narrowing-decision.shared.d.ts.map +1 -1
  532. package/dist/esm/organizations/organization-unit-narrowing-decision.shared.js.map +1 -1
  533. package/dist/esm/organizations/organization-unit-narrowing.example.d.ts.map +1 -1
  534. package/dist/esm/organizations/organization-unit-narrowing.example.js.map +1 -1
  535. package/dist/esm/organizations/organization-unit-narrowing.shared.d.ts.map +1 -1
  536. package/dist/esm/organizations/organization-unit-narrowing.shared.js.map +1 -1
  537. package/dist/esm/organizations/organization-units.shared.path.d.ts.map +1 -1
  538. package/dist/esm/organizations/organization-units.shared.path.js.map +1 -1
  539. package/dist/esm/organizations/organization-units.shared.resources-config.schemas.d.ts.map +1 -1
  540. package/dist/esm/organizations/organization-units.shared.resources-config.schemas.js.map +1 -1
  541. package/dist/esm/organizations/organization-units.shared.schemas.d.ts.map +1 -1
  542. package/dist/esm/organizations/organization-units.shared.schemas.js.map +1 -1
  543. package/dist/esm/organizations/organizations.shared.resources-config.schemas.d.ts.map +1 -1
  544. package/dist/esm/organizations/organizations.shared.resources-config.schemas.js.map +1 -1
  545. package/dist/esm/organizations/organizations.shared.schemas.d.ts.map +1 -1
  546. package/dist/esm/organizations/organizations.shared.schemas.js.map +1 -1
  547. package/dist/esm/organizations/service-provider-activity-feed.shared.resources-config.schemas.d.ts.map +1 -1
  548. package/dist/esm/organizations/service-provider-activity-feed.shared.resources-config.schemas.js.map +1 -1
  549. package/dist/esm/organizations/service-provider-activity-feed.shared.schemas.d.ts.map +1 -1
  550. package/dist/esm/organizations/service-provider-activity-feed.shared.schemas.js.map +1 -1
  551. package/dist/esm/organizations/service-provider-capability-grants.shared.resources-config.schemas.d.ts.map +1 -1
  552. package/dist/esm/organizations/service-provider-capability-grants.shared.resources-config.schemas.js.map +1 -1
  553. package/dist/esm/organizations/service-provider-capability-grants.shared.schemas.d.ts.map +1 -1
  554. package/dist/esm/organizations/service-provider-capability-grants.shared.schemas.js.map +1 -1
  555. package/dist/esm/organizations/service-provider-client-controls.shared.schemas.d.ts.map +1 -1
  556. package/dist/esm/organizations/service-provider-client-controls.shared.schemas.js.map +1 -1
  557. package/dist/esm/organizations/service-provider-relationships.shared.resources-config.schemas.d.ts.map +1 -1
  558. package/dist/esm/organizations/service-provider-relationships.shared.resources-config.schemas.js.map +1 -1
  559. package/dist/esm/organizations/service-provider-relationships.shared.schemas.d.ts.map +1 -1
  560. package/dist/esm/organizations/service-provider-relationships.shared.schemas.js.map +1 -1
  561. package/dist/esm/organizations/tenant-teardown-config.shared.schemas.d.ts.map +1 -1
  562. package/dist/esm/organizations/tenant-teardown-config.shared.schemas.js.map +1 -1
  563. package/dist/esm/provider-registration-runtime.exports.d.ts.map +1 -1
  564. package/dist/esm/provider-registration-runtime.exports.js.map +1 -1
  565. package/dist/esm/public-runtime/index.d.ts.map +1 -1
  566. package/dist/esm/public-runtime/index.js.map +1 -1
  567. package/dist/esm/queue/jobs.shared.resources-config.schemas.d.ts.map +1 -1
  568. package/dist/esm/queue/jobs.shared.resources-config.schemas.js.map +1 -1
  569. package/dist/esm/queue/jobs.shared.schemas.d.ts.map +1 -1
  570. package/dist/esm/queue/jobs.shared.schemas.js.map +1 -1
  571. package/dist/esm/queue/jobs.shared.utils.d.ts.map +1 -1
  572. package/dist/esm/queue/jobs.shared.utils.js.map +1 -1
  573. package/dist/esm/queue/queues.shared.schemas.d.ts.map +1 -1
  574. package/dist/esm/queue/queues.shared.schemas.js.map +1 -1
  575. package/dist/esm/queue/queues.shared.utils.d.ts.map +1 -1
  576. package/dist/esm/queue/queues.shared.utils.js.map +1 -1
  577. package/dist/esm/queue/rabbitmq-queue-args.shared.d.ts.map +1 -1
  578. package/dist/esm/queue/rabbitmq-queue-args.shared.js.map +1 -1
  579. package/dist/esm/rag/rag-retrieval-health.shared.d.ts.map +1 -1
  580. package/dist/esm/rag/rag-retrieval-health.shared.js.map +1 -1
  581. package/dist/esm/requests/header-keys.shared.d.ts.map +1 -1
  582. package/dist/esm/requests/header-keys.shared.js.map +1 -1
  583. package/dist/esm/requests/http-requests.shared.d.ts.map +1 -1
  584. package/dist/esm/requests/http-requests.shared.js.map +1 -1
  585. package/dist/esm/requests/idempotency-key.shared.d.ts.map +1 -1
  586. package/dist/esm/requests/idempotency-key.shared.js.map +1 -1
  587. package/dist/esm/requests/manual-controllers-routes-documentation.d.ts.map +1 -1
  588. package/dist/esm/requests/manual-controllers-routes-documentation.js.map +1 -1
  589. package/dist/esm/requests/manual-controllers-routes-urls.d.ts.map +1 -1
  590. package/dist/esm/requests/manual-controllers-routes-urls.js.map +1 -1
  591. package/dist/esm/requests/rate-limits.shared.schemas.d.ts.map +1 -1
  592. package/dist/esm/requests/rate-limits.shared.schemas.js.map +1 -1
  593. package/dist/esm/requests/websocket.shared.schemas.d.ts.map +1 -1
  594. package/dist/esm/requests/websocket.shared.schemas.js.map +1 -1
  595. package/dist/esm/resources/child-operations.shared.schemas.d.ts.map +1 -1
  596. package/dist/esm/resources/child-operations.shared.schemas.js.map +1 -1
  597. package/dist/esm/resources/collection-query-parameters.shared.d.ts.map +1 -1
  598. package/dist/esm/resources/collection-query-parameters.shared.js.map +1 -1
  599. package/dist/esm/resources/context-policy.shared.schemas.d.ts.map +1 -1
  600. package/dist/esm/resources/context-policy.shared.schemas.js.map +1 -1
  601. package/dist/esm/resources/embedded-resource-mark.shared.utils.d.ts.map +1 -1
  602. package/dist/esm/resources/embedded-resource-mark.shared.utils.js.map +1 -1
  603. package/dist/esm/resources/relationship-display.shared.schemas.d.ts.map +1 -1
  604. package/dist/esm/resources/relationship-display.shared.schemas.js.map +1 -1
  605. package/dist/esm/resources/resources-config.shared.factory.d.ts.map +1 -1
  606. package/dist/esm/resources/resources-config.shared.factory.js.map +1 -1
  607. package/dist/esm/resources/resources-config.shared.schemas.d.ts.map +1 -1
  608. package/dist/esm/resources/resources-config.shared.schemas.js.map +1 -1
  609. package/dist/esm/resources/resources-registry.shared.core.definitions.d.ts.map +1 -1
  610. package/dist/esm/resources/resources-registry.shared.core.definitions.js.map +1 -1
  611. package/dist/esm/resources/resources-relationships.shared.factory.d.ts.map +1 -1
  612. package/dist/esm/resources/resources-relationships.shared.factory.js.map +1 -1
  613. package/dist/esm/resources/resources-serialization.shared.schemas.d.ts.map +1 -1
  614. package/dist/esm/resources/resources-serialization.shared.schemas.js.map +1 -1
  615. package/dist/esm/resources/resources.shared.core.definitions.d.ts.map +1 -1
  616. package/dist/esm/resources/resources.shared.core.definitions.js.map +1 -1
  617. package/dist/esm/resources/resources.shared.schemas.d.ts.map +1 -1
  618. package/dist/esm/resources/resources.shared.schemas.js.map +1 -1
  619. package/dist/esm/resources/resources.shared.utils.d.ts.map +1 -1
  620. package/dist/esm/resources/resources.shared.utils.js.map +1 -1
  621. package/dist/esm/resources/utils/collection-export.shared.utils.d.ts.map +1 -1
  622. package/dist/esm/resources/utils/collection-export.shared.utils.js.map +1 -1
  623. package/dist/esm/resources/utils/composition-cascade-deletability.validation.d.ts.map +1 -1
  624. package/dist/esm/resources/utils/composition-cascade-deletability.validation.js.map +1 -1
  625. package/dist/esm/resources/utils/composition-seedability.validation.d.ts.map +1 -1
  626. package/dist/esm/resources/utils/composition-seedability.validation.js.map +1 -1
  627. package/dist/esm/resources/utils/context-addressed-composition-singleton.shared.utils.d.ts.map +1 -1
  628. package/dist/esm/resources/utils/context-addressed-composition-singleton.shared.utils.js.map +1 -1
  629. package/dist/esm/resources/utils/dependent-lifecycle-classification.validation.d.ts.map +1 -1
  630. package/dist/esm/resources/utils/dependent-lifecycle-classification.validation.js.map +1 -1
  631. package/dist/esm/resources/utils/duplicate-relationship-registration.validation.d.ts.map +1 -1
  632. package/dist/esm/resources/utils/duplicate-relationship-registration.validation.js.map +1 -1
  633. package/dist/esm/resources/utils/field-value-disclosure.utils.d.ts.map +1 -1
  634. package/dist/esm/resources/utils/field-value-disclosure.utils.js.map +1 -1
  635. package/dist/esm/resources/utils/http-api-write-declaration.shared.utils.d.ts.map +1 -1
  636. package/dist/esm/resources/utils/http-api-write-declaration.shared.utils.js.map +1 -1
  637. package/dist/esm/resources/utils/initiator-stamped-field-satisfiability.validation.d.ts.map +1 -1
  638. package/dist/esm/resources/utils/initiator-stamped-field-satisfiability.validation.js.map +1 -1
  639. package/dist/esm/resources/utils/no-subject-data-stance-coherence.shared.utils.d.ts.map +1 -1
  640. package/dist/esm/resources/utils/no-subject-data-stance-coherence.shared.utils.js.map +1 -1
  641. package/dist/esm/resources/utils/persistence-adapter-discrimination.shared.utils.d.ts.map +1 -1
  642. package/dist/esm/resources/utils/persistence-adapter-discrimination.shared.utils.js.map +1 -1
  643. package/dist/esm/resources/utils/populated-file-fields.shared.utils.d.ts.map +1 -1
  644. package/dist/esm/resources/utils/populated-file-fields.shared.utils.js.map +1 -1
  645. package/dist/esm/resources/utils/repository-dto-builder.utils.d.ts.map +1 -1
  646. package/dist/esm/resources/utils/repository-dto-builder.utils.js.map +1 -1
  647. package/dist/esm/resources/utils/request-schema-field-carriage.shared.utils.d.ts.map +1 -1
  648. package/dist/esm/resources/utils/request-schema-field-carriage.shared.utils.js.map +1 -1
  649. package/dist/esm/resources/utils/required-fk-fillability.validation.d.ts.map +1 -1
  650. package/dist/esm/resources/utils/required-fk-fillability.validation.js.map +1 -1
  651. package/dist/esm/resources/utils/resource-operation-type-guards.utils.d.ts.map +1 -1
  652. package/dist/esm/resources/utils/resource-operation-type-guards.utils.js.map +1 -1
  653. package/dist/esm/resources/utils/resource-polymorphism.factory.d.ts.map +1 -1
  654. package/dist/esm/resources/utils/resource-polymorphism.factory.js.map +1 -1
  655. package/dist/esm/resources/utils/resource-polymorphism.relationships.d.ts.map +1 -1
  656. package/dist/esm/resources/utils/resource-polymorphism.relationships.js.map +1 -1
  657. package/dist/esm/resources/utils/resource-polymorphism.schemas.d.ts.map +1 -1
  658. package/dist/esm/resources/utils/resource-polymorphism.schemas.js.map +1 -1
  659. package/dist/esm/resources/utils/resource-polymorphism.utils.d.ts.map +1 -1
  660. package/dist/esm/resources/utils/resource-polymorphism.utils.js.map +1 -1
  661. package/dist/esm/resources/utils/resource-subtree.utils.d.ts.map +1 -1
  662. package/dist/esm/resources/utils/resource-subtree.utils.js.map +1 -1
  663. package/dist/esm/resources/utils/resources-config-context-needs.utils.d.ts.map +1 -1
  664. package/dist/esm/resources/utils/resources-config-context-needs.utils.js.map +1 -1
  665. package/dist/esm/resources/utils/resources-config-naming.utils.d.ts.map +1 -1
  666. package/dist/esm/resources/utils/resources-config-naming.utils.js.map +1 -1
  667. package/dist/esm/resources/utils/resources-config-operations.dtos-builder.utils.d.ts.map +1 -1
  668. package/dist/esm/resources/utils/resources-config-operations.dtos-builder.utils.js.map +1 -1
  669. package/dist/esm/resources/utils/resources-config-operations.path.utils.d.ts.map +1 -1
  670. package/dist/esm/resources/utils/resources-config-operations.path.utils.js.map +1 -1
  671. package/dist/esm/resources/utils/resources-config-operations.urls-builder.utils.d.ts.map +1 -1
  672. package/dist/esm/resources/utils/resources-config-operations.urls-builder.utils.js.map +1 -1
  673. package/dist/esm/resources/utils/resources-config-operations.utils.d.ts.map +1 -1
  674. package/dist/esm/resources/utils/resources-config-operations.utils.js.map +1 -1
  675. package/dist/esm/resources/utils/resources-serialization.utils.d.ts.map +1 -1
  676. package/dist/esm/resources/utils/resources-serialization.utils.js.map +1 -1
  677. package/dist/esm/resources/utils/resources-summary.utils.d.ts.map +1 -1
  678. package/dist/esm/resources/utils/resources-summary.utils.js.map +1 -1
  679. package/dist/esm/resources/utils/schema-family-builder.utils.d.ts.map +1 -1
  680. package/dist/esm/resources/utils/schema-family-builder.utils.js.map +1 -1
  681. package/dist/esm/resources/utils/schema-type-inference.utils.d.ts.map +1 -1
  682. package/dist/esm/resources/utils/schema-type-inference.utils.js.map +1 -1
  683. package/dist/esm/resources/utils/schema-type-utils.d.ts.map +1 -1
  684. package/dist/esm/resources/utils/schema-type-utils.js.map +1 -1
  685. package/dist/esm/resources/utils/schema-variant-resolver.utils.d.ts.map +1 -1
  686. package/dist/esm/resources/utils/schema-variant-resolver.utils.js.map +1 -1
  687. package/dist/esm/resources/utils/shared-persistence-collection.utils.d.ts.map +1 -1
  688. package/dist/esm/resources/utils/shared-persistence-collection.utils.js.map +1 -1
  689. package/dist/esm/resources/utils/templatable-file-fields.shared.utils.d.ts.map +1 -1
  690. package/dist/esm/resources/utils/templatable-file-fields.shared.utils.js.map +1 -1
  691. package/dist/esm/resources/work-unit.shared.schemas.d.ts.map +1 -1
  692. package/dist/esm/resources/work-unit.shared.schemas.js.map +1 -1
  693. package/dist/esm/runtime/domain-module.shared.definitions.d.ts.map +1 -1
  694. package/dist/esm/runtime/domain-module.shared.definitions.js.map +1 -1
  695. package/dist/esm/runtime/execution-context.shared.schemas.d.ts.map +1 -1
  696. package/dist/esm/runtime/execution-context.shared.schemas.js.map +1 -1
  697. package/dist/esm/runtime/runtime.shared.schemas.d.ts.map +1 -1
  698. package/dist/esm/runtime/runtime.shared.schemas.js.map +1 -1
  699. package/dist/esm/security/api-keys/api-keys-application.shared.resources-config.schemas.d.ts.map +1 -1
  700. package/dist/esm/security/api-keys/api-keys-application.shared.resources-config.schemas.js.map +1 -1
  701. package/dist/esm/security/api-keys/api-keys-organization.shared.resources-config.schemas.d.ts.map +1 -1
  702. package/dist/esm/security/api-keys/api-keys-organization.shared.resources-config.schemas.js.map +1 -1
  703. package/dist/esm/security/api-keys/api-keys.shared.schemas.d.ts.map +1 -1
  704. package/dist/esm/security/api-keys/api-keys.shared.schemas.js.map +1 -1
  705. package/dist/esm/security/authentications/anonymous-session/anonymous-session.shared.contract.d.ts.map +1 -1
  706. package/dist/esm/security/authentications/anonymous-session/anonymous-session.shared.contract.js.map +1 -1
  707. package/dist/esm/security/authentications/authentication.shared.dto.schemas.d.ts.map +1 -1
  708. package/dist/esm/security/authentications/authentication.shared.dto.schemas.js.map +1 -1
  709. package/dist/esm/security/authentications/authentication.shared.schemas.d.ts.map +1 -1
  710. package/dist/esm/security/authentications/authentication.shared.schemas.js.map +1 -1
  711. package/dist/esm/security/authentications/authentication.shared.utils.d.ts.map +1 -1
  712. package/dist/esm/security/authentications/authentication.shared.utils.js.map +1 -1
  713. package/dist/esm/security/authentications/consumable-token.shared.schemas.d.ts.map +1 -1
  714. package/dist/esm/security/authentications/consumable-token.shared.schemas.js.map +1 -1
  715. package/dist/esm/security/authentications/cross-frontend-handoff.shared.dto.schemas.d.ts.map +1 -1
  716. package/dist/esm/security/authentications/cross-frontend-handoff.shared.dto.schemas.js.map +1 -1
  717. package/dist/esm/security/authentications/mfa-backup-code-contract.shared.d.ts.map +1 -1
  718. package/dist/esm/security/authentications/mfa-backup-code-contract.shared.js.map +1 -1
  719. package/dist/esm/security/authentications/password-blocklist.shared.utils.d.ts.map +1 -1
  720. package/dist/esm/security/authentications/password-blocklist.shared.utils.js.map +1 -1
  721. package/dist/esm/security/authentications/password-reset.shared.dto.schemas.d.ts.map +1 -1
  722. package/dist/esm/security/authentications/password-reset.shared.dto.schemas.js.map +1 -1
  723. package/dist/esm/security/authentications/registration.shared.dto.schemas.d.ts.map +1 -1
  724. package/dist/esm/security/authentications/registration.shared.dto.schemas.js.map +1 -1
  725. package/dist/esm/security/authentications/same-origin-redirect-path.shared.d.ts.map +1 -1
  726. package/dist/esm/security/authentications/same-origin-redirect-path.shared.js.map +1 -1
  727. package/dist/esm/security/authentications/scim/scim-organization-unit-mapping.shared.d.ts.map +1 -1
  728. package/dist/esm/security/authentications/scim/scim-organization-unit-mapping.shared.js.map +1 -1
  729. package/dist/esm/security/authentications/scim/scim-provisioning-config.shared.resources-config.schemas.d.ts.map +1 -1
  730. package/dist/esm/security/authentications/scim/scim-provisioning-config.shared.resources-config.schemas.js.map +1 -1
  731. package/dist/esm/security/authentications/scim/scim-provisioning-config.shared.schemas.d.ts.map +1 -1
  732. package/dist/esm/security/authentications/scim/scim-provisioning-config.shared.schemas.js.map +1 -1
  733. package/dist/esm/security/authentications/scim/scim-tokens.shared.resources-config.schemas.d.ts.map +1 -1
  734. package/dist/esm/security/authentications/scim/scim-tokens.shared.resources-config.schemas.js.map +1 -1
  735. package/dist/esm/security/authentications/scim/scim-tokens.shared.schemas.d.ts.map +1 -1
  736. package/dist/esm/security/authentications/scim/scim-tokens.shared.schemas.js.map +1 -1
  737. package/dist/esm/security/authentications/service-provider-client-authentication.shared.schemas.d.ts.map +1 -1
  738. package/dist/esm/security/authentications/service-provider-client-authentication.shared.schemas.js.map +1 -1
  739. package/dist/esm/security/authentications/siem/siem-delivery-dlq.shared.resources-config.schemas.d.ts.map +1 -1
  740. package/dist/esm/security/authentications/siem/siem-delivery-dlq.shared.resources-config.schemas.js.map +1 -1
  741. package/dist/esm/security/authentications/siem/siem-delivery-dlq.shared.schemas.d.ts.map +1 -1
  742. package/dist/esm/security/authentications/siem/siem-delivery-dlq.shared.schemas.js.map +1 -1
  743. package/dist/esm/security/authentications/siem/siem-delivery-outbox.shared.resources-config.schemas.d.ts.map +1 -1
  744. package/dist/esm/security/authentications/siem/siem-delivery-outbox.shared.resources-config.schemas.js.map +1 -1
  745. package/dist/esm/security/authentications/siem/siem-delivery-outbox.shared.schemas.d.ts.map +1 -1
  746. package/dist/esm/security/authentications/siem/siem-delivery-outbox.shared.schemas.js.map +1 -1
  747. package/dist/esm/security/authentications/siem/siem-delivery-reliability-contract.shared.d.ts.map +1 -1
  748. package/dist/esm/security/authentications/siem/siem-delivery-reliability-contract.shared.js.map +1 -1
  749. package/dist/esm/security/authentications/siem/siem-export-config.shared.resources-config.schemas.d.ts.map +1 -1
  750. package/dist/esm/security/authentications/siem/siem-export-config.shared.resources-config.schemas.js.map +1 -1
  751. package/dist/esm/security/authentications/siem/siem-export-config.shared.schemas.d.ts.map +1 -1
  752. package/dist/esm/security/authentications/siem/siem-export-config.shared.schemas.js.map +1 -1
  753. package/dist/esm/security/authentications/sso/sso-config.shared.resources-config.schemas.d.ts.map +1 -1
  754. package/dist/esm/security/authentications/sso/sso-config.shared.resources-config.schemas.js.map +1 -1
  755. package/dist/esm/security/authentications/sso/sso-config.shared.schemas.d.ts.map +1 -1
  756. package/dist/esm/security/authentications/sso/sso-config.shared.schemas.js.map +1 -1
  757. package/dist/esm/security/authentications/sso/sso-connection.shared.resources-config.schemas.d.ts.map +1 -1
  758. package/dist/esm/security/authentications/sso/sso-connection.shared.resources-config.schemas.js.map +1 -1
  759. package/dist/esm/security/authentications/sso/sso-connection.shared.schemas.d.ts.map +1 -1
  760. package/dist/esm/security/authentications/sso/sso-connection.shared.schemas.js.map +1 -1
  761. package/dist/esm/security/authorizations/administrative-continuity.shared.schemas.d.ts.map +1 -1
  762. package/dist/esm/security/authorizations/administrative-continuity.shared.schemas.js.map +1 -1
  763. package/dist/esm/security/authorizations/application-access-grants.shared.resources-config.schemas.d.ts.map +1 -1
  764. package/dist/esm/security/authorizations/application-access-grants.shared.resources-config.schemas.js.map +1 -1
  765. package/dist/esm/security/authorizations/application-access-grants.shared.schemas.d.ts.map +1 -1
  766. package/dist/esm/security/authorizations/application-access-grants.shared.schemas.js.map +1 -1
  767. package/dist/esm/security/authorizations/platform-access-grants.shared.resources-config.schemas.d.ts.map +1 -1
  768. package/dist/esm/security/authorizations/platform-access-grants.shared.resources-config.schemas.js.map +1 -1
  769. package/dist/esm/security/authorizations/platform-access-grants.shared.schemas.d.ts.map +1 -1
  770. package/dist/esm/security/authorizations/platform-access-grants.shared.schemas.js.map +1 -1
  771. package/dist/esm/security/authorizations/roles.shared.defaults.d.ts.map +1 -1
  772. package/dist/esm/security/authorizations/roles.shared.defaults.js.map +1 -1
  773. package/dist/esm/security/authorizations/roles.shared.schemas.d.ts.map +1 -1
  774. package/dist/esm/security/authorizations/roles.shared.schemas.js.map +1 -1
  775. package/dist/esm/security/authorizations/roles.shared.utils.d.ts.map +1 -1
  776. package/dist/esm/security/authorizations/roles.shared.utils.js.map +1 -1
  777. package/dist/esm/security/connected-accounts/provider-connection-listing.shared.schemas.d.ts.map +1 -1
  778. package/dist/esm/security/connected-accounts/provider-connection-listing.shared.schemas.js.map +1 -1
  779. package/dist/esm/security/connected-accounts/provider-credentials-organization.shared.resources-config.schemas.d.ts.map +1 -1
  780. package/dist/esm/security/connected-accounts/provider-credentials-organization.shared.resources-config.schemas.js.map +1 -1
  781. package/dist/esm/security/connected-accounts/provider-credentials-user.shared.resources-config.schemas.d.ts.map +1 -1
  782. package/dist/esm/security/connected-accounts/provider-credentials-user.shared.resources-config.schemas.js.map +1 -1
  783. package/dist/esm/security/connected-accounts/provider-credentials.shared.schemas.d.ts.map +1 -1
  784. package/dist/esm/security/connected-accounts/provider-credentials.shared.schemas.js.map +1 -1
  785. package/dist/esm/security/credential-rotation-grace.shared.utils.d.ts.map +1 -1
  786. package/dist/esm/security/credential-rotation-grace.shared.utils.js.map +1 -1
  787. package/dist/esm/security/crypto-keys/crypto-keys.shared.schemas.d.ts.map +1 -1
  788. package/dist/esm/security/crypto-keys/crypto-keys.shared.schemas.js.map +1 -1
  789. package/dist/esm/security/oauth-clients/oauth-clients-application.shared.resources-config.schemas.d.ts.map +1 -1
  790. package/dist/esm/security/oauth-clients/oauth-clients-application.shared.resources-config.schemas.js.map +1 -1
  791. package/dist/esm/security/oauth-clients/oauth-clients-organization.shared.resources-config.schemas.d.ts.map +1 -1
  792. package/dist/esm/security/oauth-clients/oauth-clients-organization.shared.resources-config.schemas.js.map +1 -1
  793. package/dist/esm/security/oauth-clients/oauth-clients.shared.schemas.d.ts.map +1 -1
  794. package/dist/esm/security/oauth-clients/oauth-clients.shared.schemas.js.map +1 -1
  795. package/dist/esm/security/oauth-clients/oauth-consent-grants.shared.resources-config.schemas.d.ts.map +1 -1
  796. package/dist/esm/security/oauth-clients/oauth-consent-grants.shared.resources-config.schemas.js.map +1 -1
  797. package/dist/esm/security/oauth-clients/oauth-consent-grants.shared.schemas.d.ts.map +1 -1
  798. package/dist/esm/security/oauth-clients/oauth-consent-grants.shared.schemas.js.map +1 -1
  799. package/dist/esm/security/oauth-clients/oauth-resource-server.shared.schemas.d.ts.map +1 -1
  800. package/dist/esm/security/oauth-clients/oauth-resource-server.shared.schemas.js.map +1 -1
  801. package/dist/esm/security/outbound-target-control.shared.schemas.d.ts.map +1 -1
  802. package/dist/esm/security/outbound-target-control.shared.schemas.js.map +1 -1
  803. package/dist/esm/security/submission-challenge/submission-challenge.shared.d.ts.map +1 -1
  804. package/dist/esm/security/submission-challenge/submission-challenge.shared.js.map +1 -1
  805. package/dist/esm/systems-of-record/system-of-record-actions.shared.schemas.d.ts.map +1 -1
  806. package/dist/esm/systems-of-record/system-of-record-actions.shared.schemas.js.map +1 -1
  807. package/dist/esm/systems-of-record/system-of-record-credential-kind.shared.d.ts.map +1 -1
  808. package/dist/esm/systems-of-record/system-of-record-credential-kind.shared.js.map +1 -1
  809. package/dist/esm/systems-of-record/system-of-record-declaration.shared.schemas.d.ts.map +1 -1
  810. package/dist/esm/systems-of-record/system-of-record-declaration.shared.schemas.js.map +1 -1
  811. package/dist/esm/systems-of-record/system-of-record-env.shared.d.ts.map +1 -1
  812. package/dist/esm/systems-of-record/system-of-record-env.shared.js.map +1 -1
  813. package/dist/esm/systems-of-record/system-of-record-error-codes.shared.d.ts.map +1 -1
  814. package/dist/esm/systems-of-record/system-of-record-error-codes.shared.js.map +1 -1
  815. package/dist/esm/systems-of-record/system-of-record-facet.shared.schemas.d.ts.map +1 -1
  816. package/dist/esm/systems-of-record/system-of-record-facet.shared.schemas.js.map +1 -1
  817. package/dist/esm/systems-of-record/system-of-record-partition-assignments.shared.resources-config.schemas.d.ts.map +1 -1
  818. package/dist/esm/systems-of-record/system-of-record-partition-assignments.shared.resources-config.schemas.js.map +1 -1
  819. package/dist/esm/systems-of-record/system-of-record-partition-assignments.shared.schemas.d.ts.map +1 -1
  820. package/dist/esm/systems-of-record/system-of-record-partition-assignments.shared.schemas.js.map +1 -1
  821. package/dist/esm/testing/resource-config-builders.d.ts.map +1 -1
  822. package/dist/esm/testing/resource-config-builders.js.map +1 -1
  823. package/dist/esm/testing.d.ts.map +1 -1
  824. package/dist/esm/testing.js.map +1 -1
  825. package/dist/esm/users/anonymous-user-marketing-metadata.shared.schemas.d.ts.map +1 -1
  826. package/dist/esm/users/anonymous-user-marketing-metadata.shared.schemas.js.map +1 -1
  827. package/dist/esm/users/anonymous-users.shared.resources-config.schemas.d.ts.map +1 -1
  828. package/dist/esm/users/anonymous-users.shared.resources-config.schemas.js.map +1 -1
  829. package/dist/esm/users/anonymous-users.shared.schema.d.ts.map +1 -1
  830. package/dist/esm/users/anonymous-users.shared.schema.js.map +1 -1
  831. package/dist/esm/users/inbound-contacts.shared.resources-config.schemas.d.ts.map +1 -1
  832. package/dist/esm/users/inbound-contacts.shared.resources-config.schemas.js.map +1 -1
  833. package/dist/esm/users/inbound-contacts.shared.schemas.d.ts.map +1 -1
  834. package/dist/esm/users/inbound-contacts.shared.schemas.js.map +1 -1
  835. package/dist/esm/users/user-consent-decision.shared.utils.d.ts.map +1 -1
  836. package/dist/esm/users/user-consent-decision.shared.utils.js.map +1 -1
  837. package/dist/esm/users/user-credentials.shared.resources-config.schemas.d.ts.map +1 -1
  838. package/dist/esm/users/user-credentials.shared.resources-config.schemas.js.map +1 -1
  839. package/dist/esm/users/user-credentials.shared.schemas.d.ts.map +1 -1
  840. package/dist/esm/users/user-credentials.shared.schemas.js.map +1 -1
  841. package/dist/esm/users/user-identity-links.shared.resources-config.schemas.d.ts.map +1 -1
  842. package/dist/esm/users/user-identity-links.shared.resources-config.schemas.js.map +1 -1
  843. package/dist/esm/users/user-identity-links.shared.schemas.d.ts.map +1 -1
  844. package/dist/esm/users/user-identity-links.shared.schemas.js.map +1 -1
  845. package/dist/esm/users/user-preferences-reset.shared.utils.d.ts.map +1 -1
  846. package/dist/esm/users/user-preferences-reset.shared.utils.js.map +1 -1
  847. package/dist/esm/users/user-preferences.shared.resources-config.schemas.d.ts.map +1 -1
  848. package/dist/esm/users/user-preferences.shared.resources-config.schemas.js.map +1 -1
  849. package/dist/esm/users/user-profiles.shared.resources-config.schemas.d.ts.map +1 -1
  850. package/dist/esm/users/user-profiles.shared.resources-config.schemas.js.map +1 -1
  851. package/dist/esm/users/user-self-preferences.shared.resources-config.schemas.d.ts.map +1 -1
  852. package/dist/esm/users/user-self-preferences.shared.resources-config.schemas.js.map +1 -1
  853. package/dist/esm/users/user-self-profiles.shared.resources-config.schemas.d.ts.map +1 -1
  854. package/dist/esm/users/user-self-profiles.shared.resources-config.schemas.js.map +1 -1
  855. package/dist/esm/users/user-self.shared.resources-config.schemas.d.ts.map +1 -1
  856. package/dist/esm/users/user-self.shared.resources-config.schemas.js.map +1 -1
  857. package/dist/esm/users/users.shared.resources-config.schemas.d.ts.map +1 -1
  858. package/dist/esm/users/users.shared.resources-config.schemas.js.map +1 -1
  859. package/dist/esm/users/users.shared.schemas.d.ts.map +1 -1
  860. package/dist/esm/users/users.shared.schemas.js.map +1 -1
  861. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"resources-summary.utils.js","sourceRoot":"","sources":["../../../../src/resources/utils/resources-summary.utils.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Resource Summary Utilities\n *\n * Utilities for deriving summary schemas from main schemas using decorators.\n * Summary schemas are lighter versions used for list/search operations.\n *\n * @see Section 4.3 of RESOURCE_DERIVED_OBJECTS_RATIONALIZATION.md\n */\n\nimport { z } from 'zod';\nimport {\n getZodObjectShape,\n isSummaryField,\n isBackendOnlyField,\n} from '@wildo-ai/zod-decorators';\nimport { ResourceConfiguration_InheritanceSchemaDefinition } from '../resources-config.shared.schemas';\nimport { isNonDisclosableFieldValue } from './field-value-disclosure.utils';\n\n/**\n * Options for deriving a summary schema\n */\nexport interface DeriveSummaryOptions {\n /** Always include _id field (default: true) */\n includeId?: boolean;\n /** Include foreign key fields automatically (default: false) */\n includeForeignKeys?: boolean;\n /** Additional fields to include regardless of decorators */\n additionalFields?: string[];\n /** Fields to exclude regardless of decorators */\n excludeFields?: string[];\n}\n\n/**\n * Result of summary schema validation\n */\nexport interface SummaryValidationResult {\n valid: boolean;\n issues: string[];\n}\n\n/**\n * Default summary derivation options\n */\nconst DEFAULT_DERIVE_OPTIONS: DeriveSummaryOptions = {\n includeId: true,\n includeForeignKeys: false,\n additionalFields: [],\n excludeFields: [],\n};\n\n/**\n * Mutable shape type for building schemas\n */\ntype MutableZodShape = Record<string, z.ZodTypeAny>;\n\n/**\n * Utility class for deriving and validating summary schemas.\n */\nexport class ResourcesSummaryUtils {\n\n /**\n * Derive a summary schema from a main schema using decorator metadata.\n *\n * Rules:\n * - Include fields with `isSummaryField` decorator\n * - Include virtual fields that have BOTH `isVirtual` AND `isSummaryField` decorators\n * - Skip `isBackendOnly` fields\n * - Always include `_id` (unless explicitly excluded)\n * - Do NOT auto-include `isForeignKey` fields (must be explicit)\n *\n * @param mainSchema - The main schema to derive from\n * @param options - Configuration options\n * @returns A new Zod schema containing only summary fields\n */\n static deriveSummarySchema(\n mainSchema: z.ZodTypeAny,\n options?: DeriveSummaryOptions\n ): z.ZodObject<z.ZodRawShape> {\n const opts = { ...DEFAULT_DERIVE_OPTIONS, ...options };\n const shape = getZodObjectShape(mainSchema);\n const summaryShape: MutableZodShape = {};\n\n // Always include _id if requested\n if (opts.includeId && shape._id) {\n summaryShape._id = shape._id as z.ZodTypeAny;\n }\n\n // Include additional explicitly requested fields\n for (const field of opts.additionalFields || []) {\n if (shape[field] && !opts.excludeFields?.includes(field)) {\n summaryShape[field] = shape[field] as z.ZodTypeAny;\n }\n }\n\n // Scan all fields for isSummaryField decorator\n for (const [fieldName, fieldSchema] of Object.entries(shape)) {\n // Skip if already added or excluded\n if (summaryShape[fieldName] || opts.excludeFields?.includes(fieldName)) {\n continue;\n }\n\n const typedSchema = fieldSchema as z.ZodTypeAny;\n\n // Skip backend-only fields\n if (isBackendOnlyField(typedSchema)) {\n continue;\n }\n\n // Include if has isSummaryField decorator\n if (isSummaryField(typedSchema)) {\n // Virtual fields with isSummaryField are also included\n // The virtual field computation happens at the service layer\n summaryShape[fieldName] = typedSchema;\n }\n }\n\n return z.object(summaryShape as z.ZodRawShape);\n }\n\n /**\n * Validate that a summary schema does not contain backend-only fields.\n *\n * @param summarySchema - The summary schema to validate\n * @param mainSchema - The main schema for reference\n * @returns Validation result with issues list\n */\n static validateSummarySchema(\n summarySchema: z.ZodTypeAny,\n mainSchema: z.ZodTypeAny\n ): SummaryValidationResult {\n const issues: string[] = [];\n\n try {\n const summaryShape = getZodObjectShape(summarySchema);\n const mainShape = getZodObjectShape(mainSchema);\n\n for (const [fieldName] of Object.entries(summaryShape)) {\n const mainFieldSchema = mainShape[fieldName];\n\n if (mainFieldSchema && isBackendOnlyField(mainFieldSchema as z.ZodTypeAny)) {\n issues.push(\n `Field '${fieldName}' has isBackendOnly decorator but is included in summary schema`\n );\n }\n }\n } catch (error) {\n issues.push(`Failed to validate summary schema: ${error}`);\n }\n\n return {\n valid: issues.length === 0,\n issues,\n };\n }\n\n /**\n * Derive summary schema for a discriminated union (inheritance).\n *\n * Creates a discriminated union of summary schemas where:\n * - Base summary fields apply to all variants\n * - Variant-specific summary fields apply only to that variant\n * - Discriminator field is always included in all variants\n *\n * @param mainSchema - The base schema\n * @param inheritanceDefinition - The inheritance schema definition\n * @param options - Derivation options\n * @returns A discriminated union summary schema or base summary\n */\n static deriveSummarySchemaForDiscriminatedUnion<\n TMainSchema extends z.ZodObject<z.ZodRawShape>\n >(\n mainSchema: TMainSchema,\n inheritanceDefinition: ResourceConfiguration_InheritanceSchemaDefinition<any, TMainSchema>,\n options?: DeriveSummaryOptions\n ): z.ZodTypeAny {\n\n const discriminatorField = inheritanceDefinition.discriminatorField;\n const baseSummary = this.deriveSummarySchema(mainSchema, options);\n const baseShape = getZodObjectShape(baseSummary);\n\n // Ensure discriminator field is included - create mutable copy\n const mainShape = getZodObjectShape(mainSchema);\n const mutableBaseShape: MutableZodShape = {};\n for (const [key, value] of Object.entries(baseShape)) {\n mutableBaseShape[key] = value as z.ZodTypeAny;\n }\n if (!mutableBaseShape[discriminatorField] && mainShape[discriminatorField]) {\n mutableBaseShape[discriminatorField] = mainShape[discriminatorField] as z.ZodTypeAny;\n }\n\n const variantSummaries: z.ZodObject<z.ZodRawShape>[] = [];\n\n // Add base variants (values without inheritance)\n const baseValues = inheritanceDefinition.withoutInheritanceDiscriminatorFieldValues || [];\n for (const value of baseValues) {\n variantSummaries.push(\n z.object({\n ...mutableBaseShape,\n [discriminatorField]: z.literal(value),\n } as z.ZodRawShape)\n );\n }\n\n // Add inherited variant summaries\n for (const inherited of inheritanceDefinition.inheritedSchemas || []) {\n const inheritedSummary = this.deriveSummarySchema(inherited.schema, options);\n const inheritedShape = getZodObjectShape(inheritedSummary);\n\n // Merge base summary with inherited summary\n const mergedShape: MutableZodShape = { ...mutableBaseShape };\n for (const [key, value] of Object.entries(inheritedShape)) {\n mergedShape[key] = value as z.ZodTypeAny;\n }\n mergedShape[discriminatorField] = z.literal(inherited.discriminatorFieldValue);\n\n variantSummaries.push(z.object(mergedShape as z.ZodRawShape));\n }\n\n // If only one variant, return it directly\n if (variantSummaries.length === 1) {\n return variantSummaries[0];\n }\n\n // Create discriminated union (use any to avoid Zod 4 type complexity)\n if (variantSummaries.length >= 2) {\n return z.discriminatedUnion(\n discriminatorField,\n variantSummaries as any\n );\n }\n\n // Fallback to base summary if no variants\n return baseSummary;\n }\n\n /**\n * Is this a summary field whose VALUE may be disclosed?\n *\n * Both halves are load-bearing. `isSummaryField` is the application's declaration that the field\n * is the human-readable face of a row; {@link isNonDisclosableFieldValue} is the framework's\n * answer to whether that value may leave the backend at all — and the application's declaration\n * never overrides it. A field declared BOTH `.isSummaryField()` and `.isWriteOnlySecret()` is\n * legal to author and must not be rendered anywhere a response DTO would have masked it.\n *\n * The disclosure half is DERIVED, never restated here: it is the same predicate the subject-export\n * surface withholds on, so the two cannot drift (issue #95).\n */\n static isValidSummaryField(fieldSchema: z.ZodTypeAny): boolean {\n return isSummaryField(fieldSchema) && !isNonDisclosableFieldValue(fieldSchema);\n }\n\n /**\n * Get all summary field names from a schema whose values may be disclosed.\n *\n * Routed through {@link isValidSummaryField} rather than repeating its test — the two said the\n * same thing in two places, and when the disclosure rule grew from \"not backend-only\" to the full\n * boundary, one of them would have been updated and the other left behind. That is the defect\n * class this whole change is about, in miniature.\n */\n static getSummaryFieldNames(schema: z.ZodTypeAny): string[] {\n const result: string[] = [];\n\n try {\n const shape = getZodObjectShape(schema);\n\n for (const [fieldName, fieldSchema] of Object.entries(shape)) {\n if (ResourcesSummaryUtils.isValidSummaryField(fieldSchema as z.ZodTypeAny)) {\n result.push(fieldName);\n }\n }\n } catch {\n // Schema may not be an object\n }\n\n return result;\n }\n\n}\n"]}
1
+ {"version":3,"file":"resources-summary.utils.js","sourceRoot":"","sources":["../../../../../src/resources/utils/resources-summary.utils.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Resource Summary Utilities\n *\n * Utilities for deriving summary schemas from main schemas using decorators.\n * Summary schemas are lighter versions used for list/search operations.\n *\n * @see Section 4.3 of RESOURCE_DERIVED_OBJECTS_RATIONALIZATION.md\n */\n\nimport { z } from 'zod';\nimport {\n getZodObjectShape,\n isSummaryField,\n isBackendOnlyField,\n} from '@wildo-ai/zod-decorators';\nimport { ResourceConfiguration_InheritanceSchemaDefinition } from '../resources-config.shared.schemas';\nimport { isNonDisclosableFieldValue } from './field-value-disclosure.utils';\n\n/**\n * Options for deriving a summary schema\n */\nexport interface DeriveSummaryOptions {\n /** Always include _id field (default: true) */\n includeId?: boolean;\n /** Include foreign key fields automatically (default: false) */\n includeForeignKeys?: boolean;\n /** Additional fields to include regardless of decorators */\n additionalFields?: string[];\n /** Fields to exclude regardless of decorators */\n excludeFields?: string[];\n}\n\n/**\n * Result of summary schema validation\n */\nexport interface SummaryValidationResult {\n valid: boolean;\n issues: string[];\n}\n\n/**\n * Default summary derivation options\n */\nconst DEFAULT_DERIVE_OPTIONS: DeriveSummaryOptions = {\n includeId: true,\n includeForeignKeys: false,\n additionalFields: [],\n excludeFields: [],\n};\n\n/**\n * Mutable shape type for building schemas\n */\ntype MutableZodShape = Record<string, z.ZodTypeAny>;\n\n/**\n * Utility class for deriving and validating summary schemas.\n */\nexport class ResourcesSummaryUtils {\n\n /**\n * Derive a summary schema from a main schema using decorator metadata.\n *\n * Rules:\n * - Include fields with `isSummaryField` decorator\n * - Include virtual fields that have BOTH `isVirtual` AND `isSummaryField` decorators\n * - Skip `isBackendOnly` fields\n * - Always include `_id` (unless explicitly excluded)\n * - Do NOT auto-include `isForeignKey` fields (must be explicit)\n *\n * @param mainSchema - The main schema to derive from\n * @param options - Configuration options\n * @returns A new Zod schema containing only summary fields\n */\n static deriveSummarySchema(\n mainSchema: z.ZodTypeAny,\n options?: DeriveSummaryOptions\n ): z.ZodObject<z.ZodRawShape> {\n const opts = { ...DEFAULT_DERIVE_OPTIONS, ...options };\n const shape = getZodObjectShape(mainSchema);\n const summaryShape: MutableZodShape = {};\n\n // Always include _id if requested\n if (opts.includeId && shape._id) {\n summaryShape._id = shape._id as z.ZodTypeAny;\n }\n\n // Include additional explicitly requested fields\n for (const field of opts.additionalFields || []) {\n if (shape[field] && !opts.excludeFields?.includes(field)) {\n summaryShape[field] = shape[field] as z.ZodTypeAny;\n }\n }\n\n // Scan all fields for isSummaryField decorator\n for (const [fieldName, fieldSchema] of Object.entries(shape)) {\n // Skip if already added or excluded\n if (summaryShape[fieldName] || opts.excludeFields?.includes(fieldName)) {\n continue;\n }\n\n const typedSchema = fieldSchema as z.ZodTypeAny;\n\n // Skip backend-only fields\n if (isBackendOnlyField(typedSchema)) {\n continue;\n }\n\n // Include if has isSummaryField decorator\n if (isSummaryField(typedSchema)) {\n // Virtual fields with isSummaryField are also included\n // The virtual field computation happens at the service layer\n summaryShape[fieldName] = typedSchema;\n }\n }\n\n return z.object(summaryShape as z.ZodRawShape);\n }\n\n /**\n * Validate that a summary schema does not contain backend-only fields.\n *\n * @param summarySchema - The summary schema to validate\n * @param mainSchema - The main schema for reference\n * @returns Validation result with issues list\n */\n static validateSummarySchema(\n summarySchema: z.ZodTypeAny,\n mainSchema: z.ZodTypeAny\n ): SummaryValidationResult {\n const issues: string[] = [];\n\n try {\n const summaryShape = getZodObjectShape(summarySchema);\n const mainShape = getZodObjectShape(mainSchema);\n\n for (const [fieldName] of Object.entries(summaryShape)) {\n const mainFieldSchema = mainShape[fieldName];\n\n if (mainFieldSchema && isBackendOnlyField(mainFieldSchema as z.ZodTypeAny)) {\n issues.push(\n `Field '${fieldName}' has isBackendOnly decorator but is included in summary schema`\n );\n }\n }\n } catch (error) {\n issues.push(`Failed to validate summary schema: ${error}`);\n }\n\n return {\n valid: issues.length === 0,\n issues,\n };\n }\n\n /**\n * Derive summary schema for a discriminated union (inheritance).\n *\n * Creates a discriminated union of summary schemas where:\n * - Base summary fields apply to all variants\n * - Variant-specific summary fields apply only to that variant\n * - Discriminator field is always included in all variants\n *\n * @param mainSchema - The base schema\n * @param inheritanceDefinition - The inheritance schema definition\n * @param options - Derivation options\n * @returns A discriminated union summary schema or base summary\n */\n static deriveSummarySchemaForDiscriminatedUnion<\n TMainSchema extends z.ZodObject<z.ZodRawShape>\n >(\n mainSchema: TMainSchema,\n inheritanceDefinition: ResourceConfiguration_InheritanceSchemaDefinition<any, TMainSchema>,\n options?: DeriveSummaryOptions\n ): z.ZodTypeAny {\n\n const discriminatorField = inheritanceDefinition.discriminatorField;\n const baseSummary = this.deriveSummarySchema(mainSchema, options);\n const baseShape = getZodObjectShape(baseSummary);\n\n // Ensure discriminator field is included - create mutable copy\n const mainShape = getZodObjectShape(mainSchema);\n const mutableBaseShape: MutableZodShape = {};\n for (const [key, value] of Object.entries(baseShape)) {\n mutableBaseShape[key] = value as z.ZodTypeAny;\n }\n if (!mutableBaseShape[discriminatorField] && mainShape[discriminatorField]) {\n mutableBaseShape[discriminatorField] = mainShape[discriminatorField] as z.ZodTypeAny;\n }\n\n const variantSummaries: z.ZodObject<z.ZodRawShape>[] = [];\n\n // Add base variants (values without inheritance)\n const baseValues = inheritanceDefinition.withoutInheritanceDiscriminatorFieldValues || [];\n for (const value of baseValues) {\n variantSummaries.push(\n z.object({\n ...mutableBaseShape,\n [discriminatorField]: z.literal(value),\n } as z.ZodRawShape)\n );\n }\n\n // Add inherited variant summaries\n for (const inherited of inheritanceDefinition.inheritedSchemas || []) {\n const inheritedSummary = this.deriveSummarySchema(inherited.schema, options);\n const inheritedShape = getZodObjectShape(inheritedSummary);\n\n // Merge base summary with inherited summary\n const mergedShape: MutableZodShape = { ...mutableBaseShape };\n for (const [key, value] of Object.entries(inheritedShape)) {\n mergedShape[key] = value as z.ZodTypeAny;\n }\n mergedShape[discriminatorField] = z.literal(inherited.discriminatorFieldValue);\n\n variantSummaries.push(z.object(mergedShape as z.ZodRawShape));\n }\n\n // If only one variant, return it directly\n if (variantSummaries.length === 1) {\n return variantSummaries[0];\n }\n\n // Create discriminated union (use any to avoid Zod 4 type complexity)\n if (variantSummaries.length >= 2) {\n return z.discriminatedUnion(\n discriminatorField,\n variantSummaries as any\n );\n }\n\n // Fallback to base summary if no variants\n return baseSummary;\n }\n\n /**\n * Is this a summary field whose VALUE may be disclosed?\n *\n * Both halves are load-bearing. `isSummaryField` is the application's declaration that the field\n * is the human-readable face of a row; {@link isNonDisclosableFieldValue} is the framework's\n * answer to whether that value may leave the backend at all — and the application's declaration\n * never overrides it. A field declared BOTH `.isSummaryField()` and `.isWriteOnlySecret()` is\n * legal to author and must not be rendered anywhere a response DTO would have masked it.\n *\n * The disclosure half is DERIVED, never restated here: it is the same predicate the subject-export\n * surface withholds on, so the two cannot drift (issue #95).\n */\n static isValidSummaryField(fieldSchema: z.ZodTypeAny): boolean {\n return isSummaryField(fieldSchema) && !isNonDisclosableFieldValue(fieldSchema);\n }\n\n /**\n * Get all summary field names from a schema whose values may be disclosed.\n *\n * Routed through {@link isValidSummaryField} rather than repeating its test — the two said the\n * same thing in two places, and when the disclosure rule grew from \"not backend-only\" to the full\n * boundary, one of them would have been updated and the other left behind. That is the defect\n * class this whole change is about, in miniature.\n */\n static getSummaryFieldNames(schema: z.ZodTypeAny): string[] {\n const result: string[] = [];\n\n try {\n const shape = getZodObjectShape(schema);\n\n for (const [fieldName, fieldSchema] of Object.entries(shape)) {\n if (ResourcesSummaryUtils.isValidSummaryField(fieldSchema as z.ZodTypeAny)) {\n result.push(fieldName);\n }\n }\n } catch {\n // Schema may not be an object\n }\n\n return result;\n }\n\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"schema-family-builder.utils.d.ts","sourceRoot":"","sources":["../../../../src/resources/utils/schema-family-builder.utils.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,iDAAiD,EAElD,MAAM,oCAAoC,CAAC;AAO5C;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAElD;;GAEG;AACH,MAAM,WAAW,aAAa,CAAC,OAAO,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC;IACvE,oDAAoD;IACpD,MAAM,EAAE,OAAO,CAAC;IAEhB;;;OAGG;IACH,cAAc,CAAC,EAAE;QACf,aAAa,EAAE;YACb,KAAK,EAAE,MAAM,CAAC;YACd,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;SACvB,CAAC;QACF,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;KACrE,CAAC;CACH;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,kBAAkB,CACjC,KAAK,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,EACxC,mBAAmB,SAAS,MAAM,EAClC,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;IAE3E,yCAAyC;IACzC,IAAI,EAAE,KAAK,CAAC;IAEZ,kCAAkC;IAClC,aAAa,EAAE;QACb,yCAAyC;QACzC,KAAK,EAAE,mBAAmB,CAAC;QAC3B;;;WAGG;QACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;KACvB,CAAC;IAEF,mDAAmD;IACnD,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,YAAY,CAC3B,KAAK,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,EACxC,mBAAmB,SAAS,MAAM,EAClC,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;IAE3E,kBAAkB;IAClB,IAAI,EAAE,KAAK,CAAC;IAEZ,+BAA+B;IAC/B,kBAAkB,EAAE,mBAAmB,CAAC;IAExC,+CAA+C;IAC/C,UAAU,EAAE,MAAM,EAAE,CAAC;IAErB,oEAAoE;IACpE,QAAQ,EAAE;SACP,CAAC,IAAI,MAAM,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC;KACnD,CAAC;IAEF,8CAA8C;IAC9C,KAAK,EAAE,CAAC,CAAC,UAAU,CAAC;IAEpB,qEAAqE;IACrE,2BAA2B,EAAE,iDAAiD,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;CACrG;AAiBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,EACxC,mBAAmB,SAAS,MAAM,EAClC,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAE3E,MAAM,EAAE,kBAAkB,CAAC,KAAK,EAAE,mBAAmB,EAAE,SAAS,CAAC,GAChE,YAAY,CAAC,KAAK,EAAE,mBAAmB,EAAE,SAAS,CAAC,CAgHrD"}
1
+ {"version":3,"file":"schema-family-builder.utils.d.ts","sourceRoot":"","sources":["../../../../../src/resources/utils/schema-family-builder.utils.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,iDAAiD,EAElD,MAAM,oCAAoC,CAAC;AAO5C;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAElD;;GAEG;AACH,MAAM,WAAW,aAAa,CAAC,OAAO,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC;IACvE,oDAAoD;IACpD,MAAM,EAAE,OAAO,CAAC;IAEhB;;;OAGG;IACH,cAAc,CAAC,EAAE;QACf,aAAa,EAAE;YACb,KAAK,EAAE,MAAM,CAAC;YACd,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;SACvB,CAAC;QACF,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;KACrE,CAAC;CACH;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,kBAAkB,CACjC,KAAK,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,EACxC,mBAAmB,SAAS,MAAM,EAClC,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;IAE3E,yCAAyC;IACzC,IAAI,EAAE,KAAK,CAAC;IAEZ,kCAAkC;IAClC,aAAa,EAAE;QACb,yCAAyC;QACzC,KAAK,EAAE,mBAAmB,CAAC;QAC3B;;;WAGG;QACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;KACvB,CAAC;IAEF,mDAAmD;IACnD,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,YAAY,CAC3B,KAAK,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,EACxC,mBAAmB,SAAS,MAAM,EAClC,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;IAE3E,kBAAkB;IAClB,IAAI,EAAE,KAAK,CAAC;IAEZ,+BAA+B;IAC/B,kBAAkB,EAAE,mBAAmB,CAAC;IAExC,+CAA+C;IAC/C,UAAU,EAAE,MAAM,EAAE,CAAC;IAErB,oEAAoE;IACpE,QAAQ,EAAE;SACP,CAAC,IAAI,MAAM,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC;KACnD,CAAC;IAEF,8CAA8C;IAC9C,KAAK,EAAE,CAAC,CAAC,UAAU,CAAC;IAEpB,qEAAqE;IACrE,2BAA2B,EAAE,iDAAiD,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;CACrG;AAiBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,EACxC,mBAAmB,SAAS,MAAM,EAClC,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAE3E,MAAM,EAAE,kBAAkB,CAAC,KAAK,EAAE,mBAAmB,EAAE,SAAS,CAAC,GAChE,YAAY,CAAC,KAAK,EAAE,mBAAmB,EAAE,SAAS,CAAC,CAgHrD"}
@@ -1 +1 @@
1
- {"version":3,"file":"schema-family-builder.utils.js","sourceRoot":"","sources":["../../../../src/resources/utils/schema-family-builder.utils.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Schema Family Builder - Simplifies Inheritance Configuration\n *\n * Provides a builder pattern for creating discriminated union schemas with\n * automatic generation of inheritance configuration.\n *\n * @see Section 19 of RESOURCE_DERIVED_OBJECTS_RATIONALIZATION.md\n */\n\nimport { z } from 'zod';\nimport { getZodObjectShape, getEnumValues, addDiscriminator } from '@wildo-ai/zod-decorators';\nimport {\n ResourceConfiguration_InheritanceSchemaDefinition,\n ResourceConfiguration_InheritanceItemSchemaDefinition\n} from '../resources-config.shared.schemas';\nimport { ErrorCustomMessageReference } from '../../errors/errors.custom-message-ref.shared.definitions';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\n/**\n * EnumLike type for discriminator values\n */\nexport type EnumLikeType = Record<string, string>;\n\n/**\n * Variant configuration - can include nested variants for multi-level inheritance\n */\nexport interface VariantConfig<TExtend extends z.ZodObject<z.ZodRawShape>> {\n /** Fields to add to base schema for this variant */\n extend: TExtend;\n\n /**\n * Nested variants - for multi-level discriminated unions\n * Example: RECURRING -> { DAILY: {...}, WEEKLY: {...} }\n */\n nestedVariants?: {\n discriminator: {\n field: string;\n baseValues?: string[];\n };\n variants: Record<string, VariantConfig<z.ZodObject<z.ZodRawShape>>>;\n };\n}\n\n/**\n * @wildo_source:part:start saas.models.schema-family-builder facet:layer:shared facet:family:schema-family\n *\n * Configuration for creating a schema family.\n *\n * Import path for application code: `@wildo-ai/saas-models`.\n *\n * Use this when one resource keeps a shared base schema plus one or more\n * discriminator-driven variants.\n */\nexport interface SchemaFamilyConfig<\n TBase extends z.ZodObject<z.ZodRawShape>,\n TDiscriminatorField extends string,\n TVariants extends Record<string, VariantConfig<z.ZodObject<z.ZodRawShape>>>\n> {\n /** Base schema with all common fields */\n base: TBase;\n\n /** Discriminator configuration */\n discriminator: {\n /** Field name used for discrimination */\n field: TDiscriminatorField;\n /**\n * Values that use base schema only (no variant extension)\n * If not provided, auto-detected from enum values not in variants\n */\n baseValues?: string[];\n };\n\n /** Variant schemas keyed by discriminator value */\n variants: TVariants;\n}\n\n/**\n * Result of creating a schema family.\n *\n * Import path for application code: `@wildo-ai/saas-models`.\n *\n * The returned object exposes the shared base schema, each extended variant,\n * the discriminated union, and the generated inheritance metadata used by the\n * wider resource/config system.\n */\nexport interface SchemaFamily<\n TBase extends z.ZodObject<z.ZodRawShape>,\n TDiscriminatorField extends string,\n TVariants extends Record<string, VariantConfig<z.ZodObject<z.ZodRawShape>>>\n> {\n /** Base schema */\n base: TBase;\n\n /** Discriminator field name */\n discriminatorField: TDiscriminatorField;\n\n /** Values that don't have extended variants */\n baseValues: string[];\n\n /** Extended variant schemas (base merged with variant extension) */\n variants: {\n [K in keyof TVariants]: z.ZodObject<z.ZodRawShape>;\n };\n\n /** Zod discriminated union of all variants */\n union: z.ZodTypeAny;\n\n /** Auto-generated inheritenceSchemaDefinition for resource config */\n inheritenceSchemaDefinition: ResourceConfiguration_InheritanceSchemaDefinition<EnumLikeType, TBase>;\n}\n\n// =============================================================================\n// ERROR HELPER\n// =============================================================================\n\n/**\n * Create a configuration error with context\n */\nfunction createConfigError(ref: ErrorCustomMessageReference, context: Record<string, unknown>): Error {\n return new Error(`[SchemaFamily] ${ref}: ${JSON.stringify(context)}`);\n}\n\n// =============================================================================\n// MAIN BUILDER FUNCTION\n// =============================================================================\n\n/**\n * Creates a schema family with automatic inheritance configuration generation.\n *\n * Import path for application code: `@wildo-ai/saas-models`.\n *\n * Use this when a discriminator field on the base schema decides which\n * variant-only extension fields are valid.\n *\n * @example\n * ```typescript\n * const TodosSchemaFamily = createSchemaFamily({\n * base: z.object({\n * _id: z.string().isDBIndexed(),\n * title: z.string().isSummaryField(),\n * recurringType: z.enum(['ONE_TIME', 'RECURRING']),\n * }),\n * discriminator: {\n * field: 'recurringType',\n * baseValues: ['ONE_TIME'],\n * },\n * variants: {\n * RECURRING: {\n * extend: z.object({\n * recurrence: z.enum(['DAILY', 'WEEKLY']),\n * }),\n * },\n * },\n * });\n * ```\n */\nexport function createSchemaFamily<\n TBase extends z.ZodObject<z.ZodRawShape>,\n TDiscriminatorField extends string,\n TVariants extends Record<string, VariantConfig<z.ZodObject<z.ZodRawShape>>>\n>(\n config: SchemaFamilyConfig<TBase, TDiscriminatorField, TVariants>\n): SchemaFamily<TBase, TDiscriminatorField, TVariants> {\n\n const { base, discriminator, variants } = config;\n\n // Validation: Ensure discriminator field exists in base schema\n const baseShape = getZodObjectShape(base);\n if (!baseShape[discriminator.field]) {\n throw createConfigError(\n ErrorCustomMessageReference.SCHEMA_FAMILY_INVALID_DISCRIMINATOR,\n {\n discriminatorField: discriminator.field,\n availableFields: Object.keys(baseShape)\n }\n );\n }\n\n // Auto-detect baseValues FIRST since we need it for the discriminator decorator\n let resolvedBaseValues = discriminator.baseValues;\n if (!resolvedBaseValues) {\n const discriminatorSchema = baseShape[discriminator.field];\n const allEnumValues = getEnumValues(discriminatorSchema);\n const variantKeys = new Set(Object.keys(variants));\n resolvedBaseValues = allEnumValues.filter(v => !variantKeys.has(v));\n }\n\n // Build extended variant schemas with support for nested inheritance\n const extendedVariants: Record<string, z.ZodObject<z.ZodRawShape>> = {};\n const inheritedSchemas: ResourceConfiguration_InheritanceItemSchemaDefinition<EnumLikeType, TBase>[] = [];\n\n for (const [discriminatorValue, variantConfig] of Object.entries(variants)) {\n // Extend base with variant extension (Zod 4 pattern - .merge() is deprecated)\n // Also add the discriminator literal with isDiscriminator decorator\n const extendedSchema = base.extend({\n ...(variantConfig.extend as z.ZodObject<z.ZodRawShape>).shape,\n [discriminator.field]: addDiscriminator(z.literal(discriminatorValue), { baseValues: resolvedBaseValues })\n });\n extendedVariants[discriminatorValue] = extendedSchema;\n\n // Build inheritance config entry - use the extended schema with decorated discriminator\n const inheritanceEntry: ResourceConfiguration_InheritanceItemSchemaDefinition<EnumLikeType, TBase> = {\n discriminatorFieldValue: discriminatorValue,\n schema: extendedSchema as TBase,\n };\n\n // Handle nested variants (multi-level inheritance)\n if (variantConfig.nestedVariants) {\n inheritanceEntry.inheritenceSchemaDefinition = buildNestedInheritance(\n extendedSchema,\n variantConfig.nestedVariants,\n resolvedBaseValues\n ) as ResourceConfiguration_InheritanceSchemaDefinition<EnumLikeType, TBase>;\n }\n\n inheritedSchemas.push(inheritanceEntry);\n }\n\n // Validation: Ensure all enum values are accounted for\n validateAllValuesAccountedFor(\n discriminator.field,\n baseShape[discriminator.field],\n resolvedBaseValues,\n inheritedSchemas\n );\n\n // Build discriminated union - use any to avoid Zod 4 type complexity\n const allVariantSchemas: z.ZodObject<z.ZodRawShape>[] = [];\n\n // Add base schemas for baseValues\n // Mark discriminator field with isDiscriminator decorator so it's distinguished from non-discriminator literals\n for (const value of resolvedBaseValues || []) {\n allVariantSchemas.push(\n base.extend({\n [discriminator.field]: addDiscriminator(z.literal(value), { baseValues: resolvedBaseValues })\n }) as z.ZodObject<z.ZodRawShape>\n );\n }\n\n // Add extended schemas for variants\n // Mark discriminator field with isDiscriminator decorator so it's distinguished from non-discriminator literals\n for (const [value, schema] of Object.entries(extendedVariants)) {\n allVariantSchemas.push(\n schema.extend({\n [discriminator.field]: addDiscriminator(z.literal(value), { baseValues: resolvedBaseValues })\n }) as z.ZodObject<z.ZodRawShape>\n );\n }\n\n // Create the union (type as any to handle Zod 4 complexity)\n let union: z.ZodTypeAny;\n if (allVariantSchemas.length >= 2) {\n union = z.discriminatedUnion(\n discriminator.field,\n allVariantSchemas as any\n );\n } else if (allVariantSchemas.length === 1) {\n union = allVariantSchemas[0];\n } else {\n union = base;\n }\n\n return {\n base,\n discriminatorField: discriminator.field,\n baseValues: resolvedBaseValues || [],\n variants: extendedVariants as { [K in keyof TVariants]: z.ZodObject<z.ZodRawShape> },\n union,\n inheritenceSchemaDefinition: {\n discriminatorField: discriminator.field,\n withoutInheritanceDiscriminatorFieldValues: resolvedBaseValues,\n inheritedSchemas,\n },\n };\n}\n/** @wildo_source:part:end saas.models.schema-family-builder */\n\n// =============================================================================\n// HELPER FUNCTIONS\n// =============================================================================\n\n/**\n * Recursively build nested inheritance configuration for multi-level discriminated unions.\n *\n * @param parentSchema - The parent schema to extend\n * @param nestedConfig - The nested variants configuration\n * @param parentBaseValues - Base values from parent level (for discriminator decorator context)\n */\nfunction buildNestedInheritance<TParent extends z.ZodObject<z.ZodRawShape>>(\n parentSchema: TParent,\n nestedConfig: NonNullable<VariantConfig<z.ZodObject<z.ZodRawShape>>['nestedVariants']>,\n parentBaseValues?: string[]\n): ResourceConfiguration_InheritanceSchemaDefinition<EnumLikeType, TParent> {\n\n const inheritedSchemas: ResourceConfiguration_InheritanceItemSchemaDefinition<EnumLikeType, TParent>[] = [];\n\n // Resolve base values for this nested level\n const nestedBaseValues = nestedConfig.discriminator.baseValues || [];\n\n for (const [discriminatorValue, variantConfig] of Object.entries(nestedConfig.variants)) {\n // Extend parent with variant extension AND add discriminator literal with decorator\n const extendedSchema = parentSchema.extend({\n ...variantConfig.extend.shape,\n [nestedConfig.discriminator.field]: addDiscriminator(z.literal(discriminatorValue), { baseValues: nestedBaseValues })\n });\n\n const entry: ResourceConfiguration_InheritanceItemSchemaDefinition<EnumLikeType, TParent> = {\n discriminatorFieldValue: discriminatorValue,\n schema: extendedSchema as TParent,\n };\n\n // Recurse for deeper nesting\n if (variantConfig.nestedVariants) {\n entry.inheritenceSchemaDefinition = buildNestedInheritance(\n extendedSchema,\n variantConfig.nestedVariants,\n nestedBaseValues\n ) as ResourceConfiguration_InheritanceSchemaDefinition<EnumLikeType, TParent>;\n }\n\n inheritedSchemas.push(entry);\n }\n\n return {\n discriminatorField: nestedConfig.discriminator.field,\n withoutInheritanceDiscriminatorFieldValues: nestedConfig.discriminator.baseValues,\n inheritedSchemas,\n };\n}\n\n/**\n * Validate that all discriminator enum values are accounted for.\n * Throws Error if values are missing or duplicated.\n */\nfunction validateAllValuesAccountedFor(\n discriminatorField: string,\n discriminatorSchema: z.ZodTypeAny,\n baseValues: string[],\n inheritedSchemas: { discriminatorFieldValue: string }[]\n): void {\n\n const allEnumValues = getEnumValues(discriminatorSchema);\n if (allEnumValues.length === 0) {\n // Not an enum field, skip validation\n return;\n }\n\n const accountedValues = new Set([\n ...baseValues,\n ...inheritedSchemas.map(s => s.discriminatorFieldValue)\n ]);\n\n const unaccountedValues = allEnumValues.filter(v => !accountedValues.has(v));\n\n if (unaccountedValues.length > 0) {\n throw createConfigError(\n ErrorCustomMessageReference.SCHEMA_FAMILY_UNACCOUNTED_VALUES,\n {\n discriminatorField,\n unaccountedValues,\n hint: 'Add these values to either baseValues or variants'\n }\n );\n }\n\n // Check for values in both baseValues and inheritedSchemas (contradiction)\n const baseValuesSet = new Set(baseValues);\n const duplicates = inheritedSchemas\n .filter(s => baseValuesSet.has(s.discriminatorFieldValue))\n .map(s => s.discriminatorFieldValue);\n\n if (duplicates.length > 0) {\n throw createConfigError(\n ErrorCustomMessageReference.SCHEMA_FAMILY_DUPLICATE_VALUES,\n {\n discriminatorField,\n duplicateValues: duplicates,\n hint: 'A value cannot be both a baseValue and have a variant schema'\n }\n );\n }\n}\n"]}
1
+ {"version":3,"file":"schema-family-builder.utils.js","sourceRoot":"","sources":["../../../../../src/resources/utils/schema-family-builder.utils.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Schema Family Builder - Simplifies Inheritance Configuration\n *\n * Provides a builder pattern for creating discriminated union schemas with\n * automatic generation of inheritance configuration.\n *\n * @see Section 19 of RESOURCE_DERIVED_OBJECTS_RATIONALIZATION.md\n */\n\nimport { z } from 'zod';\nimport { getZodObjectShape, getEnumValues, addDiscriminator } from '@wildo-ai/zod-decorators';\nimport {\n ResourceConfiguration_InheritanceSchemaDefinition,\n ResourceConfiguration_InheritanceItemSchemaDefinition\n} from '../resources-config.shared.schemas';\nimport { ErrorCustomMessageReference } from '../../errors/errors.custom-message-ref.shared.definitions';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\n/**\n * EnumLike type for discriminator values\n */\nexport type EnumLikeType = Record<string, string>;\n\n/**\n * Variant configuration - can include nested variants for multi-level inheritance\n */\nexport interface VariantConfig<TExtend extends z.ZodObject<z.ZodRawShape>> {\n /** Fields to add to base schema for this variant */\n extend: TExtend;\n\n /**\n * Nested variants - for multi-level discriminated unions\n * Example: RECURRING -> { DAILY: {...}, WEEKLY: {...} }\n */\n nestedVariants?: {\n discriminator: {\n field: string;\n baseValues?: string[];\n };\n variants: Record<string, VariantConfig<z.ZodObject<z.ZodRawShape>>>;\n };\n}\n\n/**\n * @wildo_source:part:start saas.models.schema-family-builder facet:layer:shared facet:family:schema-family\n *\n * Configuration for creating a schema family.\n *\n * Import path for application code: `@wildo-ai/saas-models`.\n *\n * Use this when one resource keeps a shared base schema plus one or more\n * discriminator-driven variants.\n */\nexport interface SchemaFamilyConfig<\n TBase extends z.ZodObject<z.ZodRawShape>,\n TDiscriminatorField extends string,\n TVariants extends Record<string, VariantConfig<z.ZodObject<z.ZodRawShape>>>\n> {\n /** Base schema with all common fields */\n base: TBase;\n\n /** Discriminator configuration */\n discriminator: {\n /** Field name used for discrimination */\n field: TDiscriminatorField;\n /**\n * Values that use base schema only (no variant extension)\n * If not provided, auto-detected from enum values not in variants\n */\n baseValues?: string[];\n };\n\n /** Variant schemas keyed by discriminator value */\n variants: TVariants;\n}\n\n/**\n * Result of creating a schema family.\n *\n * Import path for application code: `@wildo-ai/saas-models`.\n *\n * The returned object exposes the shared base schema, each extended variant,\n * the discriminated union, and the generated inheritance metadata used by the\n * wider resource/config system.\n */\nexport interface SchemaFamily<\n TBase extends z.ZodObject<z.ZodRawShape>,\n TDiscriminatorField extends string,\n TVariants extends Record<string, VariantConfig<z.ZodObject<z.ZodRawShape>>>\n> {\n /** Base schema */\n base: TBase;\n\n /** Discriminator field name */\n discriminatorField: TDiscriminatorField;\n\n /** Values that don't have extended variants */\n baseValues: string[];\n\n /** Extended variant schemas (base merged with variant extension) */\n variants: {\n [K in keyof TVariants]: z.ZodObject<z.ZodRawShape>;\n };\n\n /** Zod discriminated union of all variants */\n union: z.ZodTypeAny;\n\n /** Auto-generated inheritenceSchemaDefinition for resource config */\n inheritenceSchemaDefinition: ResourceConfiguration_InheritanceSchemaDefinition<EnumLikeType, TBase>;\n}\n\n// =============================================================================\n// ERROR HELPER\n// =============================================================================\n\n/**\n * Create a configuration error with context\n */\nfunction createConfigError(ref: ErrorCustomMessageReference, context: Record<string, unknown>): Error {\n return new Error(`[SchemaFamily] ${ref}: ${JSON.stringify(context)}`);\n}\n\n// =============================================================================\n// MAIN BUILDER FUNCTION\n// =============================================================================\n\n/**\n * Creates a schema family with automatic inheritance configuration generation.\n *\n * Import path for application code: `@wildo-ai/saas-models`.\n *\n * Use this when a discriminator field on the base schema decides which\n * variant-only extension fields are valid.\n *\n * @example\n * ```typescript\n * const TodosSchemaFamily = createSchemaFamily({\n * base: z.object({\n * _id: z.string().isDBIndexed(),\n * title: z.string().isSummaryField(),\n * recurringType: z.enum(['ONE_TIME', 'RECURRING']),\n * }),\n * discriminator: {\n * field: 'recurringType',\n * baseValues: ['ONE_TIME'],\n * },\n * variants: {\n * RECURRING: {\n * extend: z.object({\n * recurrence: z.enum(['DAILY', 'WEEKLY']),\n * }),\n * },\n * },\n * });\n * ```\n */\nexport function createSchemaFamily<\n TBase extends z.ZodObject<z.ZodRawShape>,\n TDiscriminatorField extends string,\n TVariants extends Record<string, VariantConfig<z.ZodObject<z.ZodRawShape>>>\n>(\n config: SchemaFamilyConfig<TBase, TDiscriminatorField, TVariants>\n): SchemaFamily<TBase, TDiscriminatorField, TVariants> {\n\n const { base, discriminator, variants } = config;\n\n // Validation: Ensure discriminator field exists in base schema\n const baseShape = getZodObjectShape(base);\n if (!baseShape[discriminator.field]) {\n throw createConfigError(\n ErrorCustomMessageReference.SCHEMA_FAMILY_INVALID_DISCRIMINATOR,\n {\n discriminatorField: discriminator.field,\n availableFields: Object.keys(baseShape)\n }\n );\n }\n\n // Auto-detect baseValues FIRST since we need it for the discriminator decorator\n let resolvedBaseValues = discriminator.baseValues;\n if (!resolvedBaseValues) {\n const discriminatorSchema = baseShape[discriminator.field];\n const allEnumValues = getEnumValues(discriminatorSchema);\n const variantKeys = new Set(Object.keys(variants));\n resolvedBaseValues = allEnumValues.filter(v => !variantKeys.has(v));\n }\n\n // Build extended variant schemas with support for nested inheritance\n const extendedVariants: Record<string, z.ZodObject<z.ZodRawShape>> = {};\n const inheritedSchemas: ResourceConfiguration_InheritanceItemSchemaDefinition<EnumLikeType, TBase>[] = [];\n\n for (const [discriminatorValue, variantConfig] of Object.entries(variants)) {\n // Extend base with variant extension (Zod 4 pattern - .merge() is deprecated)\n // Also add the discriminator literal with isDiscriminator decorator\n const extendedSchema = base.extend({\n ...(variantConfig.extend as z.ZodObject<z.ZodRawShape>).shape,\n [discriminator.field]: addDiscriminator(z.literal(discriminatorValue), { baseValues: resolvedBaseValues })\n });\n extendedVariants[discriminatorValue] = extendedSchema;\n\n // Build inheritance config entry - use the extended schema with decorated discriminator\n const inheritanceEntry: ResourceConfiguration_InheritanceItemSchemaDefinition<EnumLikeType, TBase> = {\n discriminatorFieldValue: discriminatorValue,\n schema: extendedSchema as TBase,\n };\n\n // Handle nested variants (multi-level inheritance)\n if (variantConfig.nestedVariants) {\n inheritanceEntry.inheritenceSchemaDefinition = buildNestedInheritance(\n extendedSchema,\n variantConfig.nestedVariants,\n resolvedBaseValues\n ) as ResourceConfiguration_InheritanceSchemaDefinition<EnumLikeType, TBase>;\n }\n\n inheritedSchemas.push(inheritanceEntry);\n }\n\n // Validation: Ensure all enum values are accounted for\n validateAllValuesAccountedFor(\n discriminator.field,\n baseShape[discriminator.field],\n resolvedBaseValues,\n inheritedSchemas\n );\n\n // Build discriminated union - use any to avoid Zod 4 type complexity\n const allVariantSchemas: z.ZodObject<z.ZodRawShape>[] = [];\n\n // Add base schemas for baseValues\n // Mark discriminator field with isDiscriminator decorator so it's distinguished from non-discriminator literals\n for (const value of resolvedBaseValues || []) {\n allVariantSchemas.push(\n base.extend({\n [discriminator.field]: addDiscriminator(z.literal(value), { baseValues: resolvedBaseValues })\n }) as z.ZodObject<z.ZodRawShape>\n );\n }\n\n // Add extended schemas for variants\n // Mark discriminator field with isDiscriminator decorator so it's distinguished from non-discriminator literals\n for (const [value, schema] of Object.entries(extendedVariants)) {\n allVariantSchemas.push(\n schema.extend({\n [discriminator.field]: addDiscriminator(z.literal(value), { baseValues: resolvedBaseValues })\n }) as z.ZodObject<z.ZodRawShape>\n );\n }\n\n // Create the union (type as any to handle Zod 4 complexity)\n let union: z.ZodTypeAny;\n if (allVariantSchemas.length >= 2) {\n union = z.discriminatedUnion(\n discriminator.field,\n allVariantSchemas as any\n );\n } else if (allVariantSchemas.length === 1) {\n union = allVariantSchemas[0];\n } else {\n union = base;\n }\n\n return {\n base,\n discriminatorField: discriminator.field,\n baseValues: resolvedBaseValues || [],\n variants: extendedVariants as { [K in keyof TVariants]: z.ZodObject<z.ZodRawShape> },\n union,\n inheritenceSchemaDefinition: {\n discriminatorField: discriminator.field,\n withoutInheritanceDiscriminatorFieldValues: resolvedBaseValues,\n inheritedSchemas,\n },\n };\n}\n/** @wildo_source:part:end saas.models.schema-family-builder */\n\n// =============================================================================\n// HELPER FUNCTIONS\n// =============================================================================\n\n/**\n * Recursively build nested inheritance configuration for multi-level discriminated unions.\n *\n * @param parentSchema - The parent schema to extend\n * @param nestedConfig - The nested variants configuration\n * @param parentBaseValues - Base values from parent level (for discriminator decorator context)\n */\nfunction buildNestedInheritance<TParent extends z.ZodObject<z.ZodRawShape>>(\n parentSchema: TParent,\n nestedConfig: NonNullable<VariantConfig<z.ZodObject<z.ZodRawShape>>['nestedVariants']>,\n parentBaseValues?: string[]\n): ResourceConfiguration_InheritanceSchemaDefinition<EnumLikeType, TParent> {\n\n const inheritedSchemas: ResourceConfiguration_InheritanceItemSchemaDefinition<EnumLikeType, TParent>[] = [];\n\n // Resolve base values for this nested level\n const nestedBaseValues = nestedConfig.discriminator.baseValues || [];\n\n for (const [discriminatorValue, variantConfig] of Object.entries(nestedConfig.variants)) {\n // Extend parent with variant extension AND add discriminator literal with decorator\n const extendedSchema = parentSchema.extend({\n ...variantConfig.extend.shape,\n [nestedConfig.discriminator.field]: addDiscriminator(z.literal(discriminatorValue), { baseValues: nestedBaseValues })\n });\n\n const entry: ResourceConfiguration_InheritanceItemSchemaDefinition<EnumLikeType, TParent> = {\n discriminatorFieldValue: discriminatorValue,\n schema: extendedSchema as TParent,\n };\n\n // Recurse for deeper nesting\n if (variantConfig.nestedVariants) {\n entry.inheritenceSchemaDefinition = buildNestedInheritance(\n extendedSchema,\n variantConfig.nestedVariants,\n nestedBaseValues\n ) as ResourceConfiguration_InheritanceSchemaDefinition<EnumLikeType, TParent>;\n }\n\n inheritedSchemas.push(entry);\n }\n\n return {\n discriminatorField: nestedConfig.discriminator.field,\n withoutInheritanceDiscriminatorFieldValues: nestedConfig.discriminator.baseValues,\n inheritedSchemas,\n };\n}\n\n/**\n * Validate that all discriminator enum values are accounted for.\n * Throws Error if values are missing or duplicated.\n */\nfunction validateAllValuesAccountedFor(\n discriminatorField: string,\n discriminatorSchema: z.ZodTypeAny,\n baseValues: string[],\n inheritedSchemas: { discriminatorFieldValue: string }[]\n): void {\n\n const allEnumValues = getEnumValues(discriminatorSchema);\n if (allEnumValues.length === 0) {\n // Not an enum field, skip validation\n return;\n }\n\n const accountedValues = new Set([\n ...baseValues,\n ...inheritedSchemas.map(s => s.discriminatorFieldValue)\n ]);\n\n const unaccountedValues = allEnumValues.filter(v => !accountedValues.has(v));\n\n if (unaccountedValues.length > 0) {\n throw createConfigError(\n ErrorCustomMessageReference.SCHEMA_FAMILY_UNACCOUNTED_VALUES,\n {\n discriminatorField,\n unaccountedValues,\n hint: 'Add these values to either baseValues or variants'\n }\n );\n }\n\n // Check for values in both baseValues and inheritedSchemas (contradiction)\n const baseValuesSet = new Set(baseValues);\n const duplicates = inheritedSchemas\n .filter(s => baseValuesSet.has(s.discriminatorFieldValue))\n .map(s => s.discriminatorFieldValue);\n\n if (duplicates.length > 0) {\n throw createConfigError(\n ErrorCustomMessageReference.SCHEMA_FAMILY_DUPLICATE_VALUES,\n {\n discriminatorField,\n duplicateValues: duplicates,\n hint: 'A value cannot be both a baseValue and have a variant schema'\n }\n );\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"schema-type-inference.utils.d.ts","sourceRoot":"","sources":["../../../../src/resources/utils/schema-type-inference.utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;GAGG;AACH,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAE7D;;;GAGG;AACH,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEjE;;;GAGG;AACH,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC"}
1
+ {"version":3,"file":"schema-type-inference.utils.d.ts","sourceRoot":"","sources":["../../../../../src/resources/utils/schema-type-inference.utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;GAGG;AACH,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAE7D;;;GAGG;AACH,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEjE;;;GAGG;AACH,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"schema-type-inference.utils.js","sourceRoot":"","sources":["../../../../src/resources/utils/schema-type-inference.utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG","sourcesContent":["/**\n * Schema Type Inference Utilities\n * \n * Centralized type utilities for Zod schema inference.\n * Using type aliases instead of direct z.infer<T> improves TypeScript's\n * type caching and reduces memory usage during compilation.\n * \n * @see TYPING_OPTIMIZATION_PLAN.md\n */\n\nimport { z } from 'zod';\n\n/**\n * Type alias for inferring Zod schema types.\n * TypeScript caches this more efficiently than direct z.infer<T> usage.\n */\nexport type SchemaInfer<T extends z.ZodTypeAny> = z.infer<T>;\n\n/**\n * Type alias specifically for main schema inference.\n * Used in resource configuration function parameters.\n */\nexport type MainSchemaInfer<T extends z.ZodTypeAny> = z.infer<T>;\n\n/**\n * Type alias for array schema inference.\n * Used in paginated responses and list operations.\n */\nexport type SchemaArrayInfer<T extends z.ZodTypeAny> = z.infer<T>[];\n"]}
1
+ {"version":3,"file":"schema-type-inference.utils.js","sourceRoot":"","sources":["../../../../../src/resources/utils/schema-type-inference.utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG","sourcesContent":["/**\n * Schema Type Inference Utilities\n * \n * Centralized type utilities for Zod schema inference.\n * Using type aliases instead of direct z.infer<T> improves TypeScript's\n * type caching and reduces memory usage during compilation.\n * \n * @see TYPING_OPTIMIZATION_PLAN.md\n */\n\nimport { z } from 'zod';\n\n/**\n * Type alias for inferring Zod schema types.\n * TypeScript caches this more efficiently than direct z.infer<T> usage.\n */\nexport type SchemaInfer<T extends z.ZodTypeAny> = z.infer<T>;\n\n/**\n * Type alias specifically for main schema inference.\n * Used in resource configuration function parameters.\n */\nexport type MainSchemaInfer<T extends z.ZodTypeAny> = z.infer<T>;\n\n/**\n * Type alias for array schema inference.\n * Used in paginated responses and list operations.\n */\nexport type SchemaArrayInfer<T extends z.ZodTypeAny> = z.infer<T>[];\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"schema-type-utils.d.ts","sourceRoot":"","sources":["../../../../src/resources/utils/schema-type-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAIL,YAAY,EACb,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAM5D;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,CAAC,OAAO,SAAS,CAAC,CAAC,UAAU,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;AAEnF;;GAEG;AACH,MAAM,MAAM,eAAe,CAAC,OAAO,SAAS,CAAC,CAAC,UAAU,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;AAMjF;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,GAAG,MAAM,EAAE,CAgBnE;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,CAAC,CAAC,UAAU,EACpB,SAAS,EAAE,YAAY,GACtB,MAAM,EAAE,CAkBV;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,GAAG,OAAO,CAE9D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,GAAG,MAAM,CAE/D"}
1
+ {"version":3,"file":"schema-type-utils.d.ts","sourceRoot":"","sources":["../../../../../src/resources/utils/schema-type-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAIL,YAAY,EACb,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAM5D;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,CAAC,OAAO,SAAS,CAAC,CAAC,UAAU,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;AAEnF;;GAEG;AACH,MAAM,MAAM,eAAe,CAAC,OAAO,SAAS,CAAC,CAAC,UAAU,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;AAMjF;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,GAAG,MAAM,EAAE,CAgBnE;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,CAAC,CAAC,UAAU,EACpB,SAAS,EAAE,YAAY,GACtB,MAAM,EAAE,CAkBV;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,GAAG,OAAO,CAE9D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,GAAG,MAAM,CAE/D"}
@@ -1 +1 @@
1
- {"version":3,"file":"schema-type-utils.js","sourceRoot":"","sources":["../../../../src/resources/utils/schema-type-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,yBAAyB,EAE1B,MAAM,0BAA0B,CAAC;AAmBlC,gFAAgF;AAChF,oBAAoB;AACpB,gFAAgF;AAEhF;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAoB;IACvD,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAExC,KAAK,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7D,IAAI,cAAc,CAAC,WAA2B,CAAC,EAAE,CAAC;gBAChD,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,8BAA8B;IAChC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,0BAA0B,CACxC,MAAoB,EACpB,SAAuB;IAEvB,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAExC,KAAK,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7D,kFAAkF;YAClF,MAAM,QAAQ,GAAG,yBAAyB,CAAC,WAA2B,CAAC,CAAC;YACxE,IAAI,QAAQ,IAAI,QAAQ,CAAC,SAAS,CAAC,KAAK,SAAS,EAAE,CAAC;gBAClD,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,8BAA8B;IAChC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAoB;IACnD,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAoB;IACrD,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;AAC7C,CAAC","sourcesContent":["/**\n * Schema Type Utilities\n * \n * TypeScript utility types for working with decorated schemas,\n * particularly for virtual field type inference.\n * \n * @see Section 23.3.B of RESOURCE_DERIVED_OBJECTS_RATIONALIZATION.md\n */\n\nimport { z } from 'zod';\nimport { \n getZodObjectShape, \n isVirtualField, \n getFieldMetadataRecursive,\n ZodDecorator \n} from '@wildo-ai/zod-decorators';\nimport { SchemaInfer } from './schema-type-inference.utils';\n\n// =============================================================================\n// UTILITY TYPES\n// =============================================================================\n\n/**\n * Schema type including virtual fields.\n * This is the complete inferred type from the schema.\n * Virtual fields are computed at runtime by VirtualFieldsBackendService.\n */\nexport type WithVirtualFields<TSchema extends z.ZodTypeAny> = SchemaInfer<TSchema>;\n\n/**\n * Schema type as it appears in API responses (after stripping backend-only fields).\n */\nexport type ApiResponseType<TSchema extends z.ZodTypeAny> = SchemaInfer<TSchema>;\n\n// =============================================================================\n// RUNTIME FUNCTIONS\n// =============================================================================\n\n/**\n * Get all virtual field names from a schema at runtime.\n * \n * @param schema - The Zod schema to analyze\n * @returns Array of field names that have the `isVirtual` decorator\n * \n * @example\n * ```typescript\n * const TodoSchema = z.object({\n * title: z.string(),\n * displayName: z.string().isVirtual({ calculate: ... }),\n * });\n * \n * const virtualFields = getVirtualFieldNames(TodoSchema);\n * // ['displayName']\n * ```\n */\nexport function getVirtualFieldNames(schema: z.ZodTypeAny): string[] {\n const result: string[] = [];\n \n try {\n const shape = getZodObjectShape(schema);\n \n for (const [fieldName, fieldSchema] of Object.entries(shape)) {\n if (isVirtualField(fieldSchema as z.ZodTypeAny)) {\n result.push(fieldName);\n }\n }\n } catch {\n // Schema may not be an object\n }\n\n return result;\n}\n\n/**\n * Get all field names with a specific decorator.\n * \n * @param schema - The Zod schema to analyze\n * @param decorator - The decorator to check for\n * @returns Array of field names that have the specified decorator\n */\nexport function getFieldNamesWithDecorator(\n schema: z.ZodTypeAny, \n decorator: ZodDecorator\n): string[] {\n const result: string[] = [];\n \n try {\n const shape = getZodObjectShape(schema);\n \n for (const [fieldName, fieldSchema] of Object.entries(shape)) {\n // Use recursive lookup to find metadata through wrapper types (ZodOptional, etc.)\n const metadata = getFieldMetadataRecursive(fieldSchema as z.ZodTypeAny);\n if (metadata && metadata[decorator] !== undefined) {\n result.push(fieldName);\n }\n }\n } catch {\n // Schema may not be an object\n }\n\n return result;\n}\n\n/**\n * Check if a schema has any virtual fields.\n */\nexport function hasVirtualFields(schema: z.ZodTypeAny): boolean {\n return getVirtualFieldNames(schema).length > 0;\n}\n\n/**\n * Get the count of virtual fields in a schema.\n */\nexport function countVirtualFields(schema: z.ZodTypeAny): number {\n return getVirtualFieldNames(schema).length;\n}\n"]}
1
+ {"version":3,"file":"schema-type-utils.js","sourceRoot":"","sources":["../../../../../src/resources/utils/schema-type-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,yBAAyB,EAE1B,MAAM,0BAA0B,CAAC;AAmBlC,gFAAgF;AAChF,oBAAoB;AACpB,gFAAgF;AAEhF;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAoB;IACvD,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAExC,KAAK,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7D,IAAI,cAAc,CAAC,WAA2B,CAAC,EAAE,CAAC;gBAChD,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,8BAA8B;IAChC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,0BAA0B,CACxC,MAAoB,EACpB,SAAuB;IAEvB,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAExC,KAAK,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7D,kFAAkF;YAClF,MAAM,QAAQ,GAAG,yBAAyB,CAAC,WAA2B,CAAC,CAAC;YACxE,IAAI,QAAQ,IAAI,QAAQ,CAAC,SAAS,CAAC,KAAK,SAAS,EAAE,CAAC;gBAClD,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,8BAA8B;IAChC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAoB;IACnD,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAoB;IACrD,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;AAC7C,CAAC","sourcesContent":["/**\n * Schema Type Utilities\n * \n * TypeScript utility types for working with decorated schemas,\n * particularly for virtual field type inference.\n * \n * @see Section 23.3.B of RESOURCE_DERIVED_OBJECTS_RATIONALIZATION.md\n */\n\nimport { z } from 'zod';\nimport { \n getZodObjectShape, \n isVirtualField, \n getFieldMetadataRecursive,\n ZodDecorator \n} from '@wildo-ai/zod-decorators';\nimport { SchemaInfer } from './schema-type-inference.utils';\n\n// =============================================================================\n// UTILITY TYPES\n// =============================================================================\n\n/**\n * Schema type including virtual fields.\n * This is the complete inferred type from the schema.\n * Virtual fields are computed at runtime by VirtualFieldsBackendService.\n */\nexport type WithVirtualFields<TSchema extends z.ZodTypeAny> = SchemaInfer<TSchema>;\n\n/**\n * Schema type as it appears in API responses (after stripping backend-only fields).\n */\nexport type ApiResponseType<TSchema extends z.ZodTypeAny> = SchemaInfer<TSchema>;\n\n// =============================================================================\n// RUNTIME FUNCTIONS\n// =============================================================================\n\n/**\n * Get all virtual field names from a schema at runtime.\n * \n * @param schema - The Zod schema to analyze\n * @returns Array of field names that have the `isVirtual` decorator\n * \n * @example\n * ```typescript\n * const TodoSchema = z.object({\n * title: z.string(),\n * displayName: z.string().isVirtual({ calculate: ... }),\n * });\n * \n * const virtualFields = getVirtualFieldNames(TodoSchema);\n * // ['displayName']\n * ```\n */\nexport function getVirtualFieldNames(schema: z.ZodTypeAny): string[] {\n const result: string[] = [];\n \n try {\n const shape = getZodObjectShape(schema);\n \n for (const [fieldName, fieldSchema] of Object.entries(shape)) {\n if (isVirtualField(fieldSchema as z.ZodTypeAny)) {\n result.push(fieldName);\n }\n }\n } catch {\n // Schema may not be an object\n }\n\n return result;\n}\n\n/**\n * Get all field names with a specific decorator.\n * \n * @param schema - The Zod schema to analyze\n * @param decorator - The decorator to check for\n * @returns Array of field names that have the specified decorator\n */\nexport function getFieldNamesWithDecorator(\n schema: z.ZodTypeAny, \n decorator: ZodDecorator\n): string[] {\n const result: string[] = [];\n \n try {\n const shape = getZodObjectShape(schema);\n \n for (const [fieldName, fieldSchema] of Object.entries(shape)) {\n // Use recursive lookup to find metadata through wrapper types (ZodOptional, etc.)\n const metadata = getFieldMetadataRecursive(fieldSchema as z.ZodTypeAny);\n if (metadata && metadata[decorator] !== undefined) {\n result.push(fieldName);\n }\n }\n } catch {\n // Schema may not be an object\n }\n\n return result;\n}\n\n/**\n * Check if a schema has any virtual fields.\n */\nexport function hasVirtualFields(schema: z.ZodTypeAny): boolean {\n return getVirtualFieldNames(schema).length > 0;\n}\n\n/**\n * Get the count of virtual fields in a schema.\n */\nexport function countVirtualFields(schema: z.ZodTypeAny): number {\n return getVirtualFieldNames(schema).length;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"schema-variant-resolver.utils.d.ts","sourceRoot":"","sources":["../../../../src/resources/utils/schema-variant-resolver.utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,iDAAiD,EAAE,MAAM,oCAAoC,CAAC;AAEvG;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAClE,UAAU,EAAE,CAAC,CAAC,UAAU,EACxB,qBAAqB,EAAE,iDAAiD,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,SAAS,EAC9F,MAAM,EAAE,CAAC,GACR,CAAC,CAAC,UAAU,CA2Cd;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC7D,qBAAqB,EAAE,iDAAiD,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,SAAS,EAC9F,MAAM,EAAE,CAAC,EACT,kBAAkB,EAAE,MAAM,GACzB,OAAO,CAST;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,CAAC,CAAC,UAAU,EACxB,qBAAqB,EAAE,iDAAiD,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,SAAS,GAC7F,GAAG,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC,CAgBlC"}
1
+ {"version":3,"file":"schema-variant-resolver.utils.d.ts","sourceRoot":"","sources":["../../../../../src/resources/utils/schema-variant-resolver.utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,iDAAiD,EAAE,MAAM,oCAAoC,CAAC;AAEvG;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAClE,UAAU,EAAE,CAAC,CAAC,UAAU,EACxB,qBAAqB,EAAE,iDAAiD,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,SAAS,EAC9F,MAAM,EAAE,CAAC,GACR,CAAC,CAAC,UAAU,CA2Cd;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC7D,qBAAqB,EAAE,iDAAiD,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,SAAS,EAC9F,MAAM,EAAE,CAAC,EACT,kBAAkB,EAAE,MAAM,GACzB,OAAO,CAST;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,CAAC,CAAC,UAAU,EACxB,qBAAqB,EAAE,iDAAiD,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,SAAS,GAC7F,GAAG,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC,CAgBlC"}
@@ -1 +1 @@
1
- {"version":3,"file":"schema-variant-resolver.utils.js","sourceRoot":"","sources":["../../../../src/resources/utils/schema-variant-resolver.utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,sBAAsB,CACpC,UAAwB,EACxB,qBAA8F,EAC9F,MAAS;IAET,sCAAsC;IACtC,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC3B,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,4CAA4C;IAC5C,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,IAAI,qBAAqB,CAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnG,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,sCAAsC;IACtC,MAAM,kBAAkB,GAAG,qBAAqB,CAAC,kBAAkB,CAAC;IACpE,MAAM,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAEtD,wDAAwD;IACxD,IAAI,kBAAkB,KAAK,SAAS,IAAI,kBAAkB,KAAK,IAAI,EAAE,CAAC;QACpE,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,iDAAiD;IACjD,MAAM,UAAU,GAAG,qBAAqB,CAAC,0CAA0C,IAAI,EAAE,CAAC;IAC1F,IAAI,UAAU,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAC5C,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,qCAAqC;IACrC,KAAK,MAAM,SAAS,IAAI,qBAAqB,CAAC,gBAAgB,EAAE,CAAC;QAC/D,IAAI,SAAS,CAAC,uBAAuB,KAAK,kBAAkB,EAAE,CAAC;YAC7D,mDAAmD;YACnD,IAAI,SAAS,CAAC,2BAA2B,EAAE,CAAC;gBAC1C,OAAO,sBAAsB,CAC3B,SAAS,CAAC,MAAM,EAChB,SAAS,CAAC,2BAA2B,EACrC,MAAM,CACP,CAAC;YACJ,CAAC;YACD,OAAO,SAAS,CAAC,MAAM,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,6DAA6D;IAC7D,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAC/B,qBAA8F,EAC9F,MAAS,EACT,kBAA0B;IAE1B,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,kBAAkB,GAAG,qBAAqB,CAAC,kBAAkB,CAAC;IACpE,MAAM,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAEtD,OAAO,kBAAkB,KAAK,kBAAkB,CAAC;AACnD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAClC,UAAwB,EACxB,qBAA8F;IAE9F,MAAM,MAAM,GAAG,IAAI,GAAG,EAA+B,CAAC;IAEtD,kEAAkE;IAClE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAE7B,IAAI,CAAC,qBAAqB,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,EAAE,CAAC;QACtE,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,6BAA6B;IAC7B,KAAK,MAAM,SAAS,IAAI,qBAAqB,CAAC,gBAAgB,EAAE,CAAC;QAC/D,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,uBAAuB,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IAClE,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["/**\n * Schema Variant Resolver Utilities\n * \n * Resolves the correct schema variant for an object based on discriminator values.\n * Used at runtime to get the variant-specific schema for virtual field computation,\n * backend-only field stripping, and summary derivation.\n * \n * @see Section 19 of RESOURCE_DERIVED_OBJECTS_RATIONALIZATION.md\n */\n\nimport { z } from 'zod';\nimport { ResourceConfiguration_InheritanceSchemaDefinition } from '../resources-config.shared.schemas';\n\n/**\n * Resolve the correct schema for an object based on inheritance discriminators.\n * \n * @param mainSchema - The base/main schema\n * @param inheritanceDefinition - The inheritance schema definition (optional)\n * @param object - The data object to inspect for discriminator values\n * @returns The correct schema variant for the object\n * \n * @example\n * ```typescript\n * const config = registry.getResourceConfiguration(resourceType);\n * const effectiveSchema = resolveSchemaForObject(\n * config.mainSchema,\n * config.inheritenceSchemaDefinition,\n * data\n * );\n * // effectiveSchema is now the variant-specific schema if applicable\n * ```\n */\nexport function resolveSchemaForObject<T extends Record<string, any>>(\n mainSchema: z.ZodTypeAny,\n inheritanceDefinition: ResourceConfiguration_InheritanceSchemaDefinition<any, any> | undefined,\n object: T\n): z.ZodTypeAny {\n // No inheritance - return main schema\n if (!inheritanceDefinition) {\n return mainSchema;\n }\n\n // No inherited schemas - return main schema\n if (!inheritanceDefinition.inheritedSchemas || inheritanceDefinition.inheritedSchemas.length === 0) {\n return mainSchema;\n }\n\n // Get discriminator value from object\n const discriminatorField = inheritanceDefinition.discriminatorField;\n const discriminatorValue = object[discriminatorField];\n\n // No discriminator value in object - return main schema\n if (discriminatorValue === undefined || discriminatorValue === null) {\n return mainSchema;\n }\n\n // Check if value is a base (non-inherited) value\n const baseValues = inheritanceDefinition.withoutInheritanceDiscriminatorFieldValues || [];\n if (baseValues.includes(discriminatorValue)) {\n return mainSchema;\n }\n\n // Find the matching inherited schema\n for (const inherited of inheritanceDefinition.inheritedSchemas) {\n if (inherited.discriminatorFieldValue === discriminatorValue) {\n // Recursively resolve if nested inheritance exists\n if (inherited.inheritenceSchemaDefinition) {\n return resolveSchemaForObject(\n inherited.schema,\n inherited.inheritenceSchemaDefinition,\n object\n );\n }\n return inherited.schema;\n }\n }\n\n // No matching variant found - return main schema as fallback\n return mainSchema;\n}\n\n/**\n * Check if an object matches a specific inheritance variant.\n * \n * @param inheritanceDefinition - The inheritance schema definition\n * @param object - The data object to check\n * @param targetVariantValue - The discriminator value to check for\n * @returns True if the object is of the specified variant\n */\nexport function isObjectOfVariant<T extends Record<string, any>>(\n inheritanceDefinition: ResourceConfiguration_InheritanceSchemaDefinition<any, any> | undefined,\n object: T,\n targetVariantValue: string\n): boolean {\n if (!inheritanceDefinition) {\n return false;\n }\n\n const discriminatorField = inheritanceDefinition.discriminatorField;\n const discriminatorValue = object[discriminatorField];\n\n return discriminatorValue === targetVariantValue;\n}\n\n/**\n * Get all variant schemas including the base schema.\n * \n * @param mainSchema - The base/main schema\n * @param inheritanceDefinition - The inheritance schema definition\n * @returns Map of discriminator value to schema\n */\nexport function getAllVariantSchemas(\n mainSchema: z.ZodTypeAny,\n inheritanceDefinition: ResourceConfiguration_InheritanceSchemaDefinition<any, any> | undefined\n): Map<string | null, z.ZodTypeAny> {\n const result = new Map<string | null, z.ZodTypeAny>();\n\n // Base schema for non-inherited values (null key represents base)\n result.set(null, mainSchema);\n\n if (!inheritanceDefinition || !inheritanceDefinition.inheritedSchemas) {\n return result;\n }\n\n // Add each inherited variant\n for (const inherited of inheritanceDefinition.inheritedSchemas) {\n result.set(inherited.discriminatorFieldValue, inherited.schema);\n }\n\n return result;\n}\n"]}
1
+ {"version":3,"file":"schema-variant-resolver.utils.js","sourceRoot":"","sources":["../../../../../src/resources/utils/schema-variant-resolver.utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,sBAAsB,CACpC,UAAwB,EACxB,qBAA8F,EAC9F,MAAS;IAET,sCAAsC;IACtC,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC3B,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,4CAA4C;IAC5C,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,IAAI,qBAAqB,CAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnG,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,sCAAsC;IACtC,MAAM,kBAAkB,GAAG,qBAAqB,CAAC,kBAAkB,CAAC;IACpE,MAAM,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAEtD,wDAAwD;IACxD,IAAI,kBAAkB,KAAK,SAAS,IAAI,kBAAkB,KAAK,IAAI,EAAE,CAAC;QACpE,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,iDAAiD;IACjD,MAAM,UAAU,GAAG,qBAAqB,CAAC,0CAA0C,IAAI,EAAE,CAAC;IAC1F,IAAI,UAAU,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAC5C,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,qCAAqC;IACrC,KAAK,MAAM,SAAS,IAAI,qBAAqB,CAAC,gBAAgB,EAAE,CAAC;QAC/D,IAAI,SAAS,CAAC,uBAAuB,KAAK,kBAAkB,EAAE,CAAC;YAC7D,mDAAmD;YACnD,IAAI,SAAS,CAAC,2BAA2B,EAAE,CAAC;gBAC1C,OAAO,sBAAsB,CAC3B,SAAS,CAAC,MAAM,EAChB,SAAS,CAAC,2BAA2B,EACrC,MAAM,CACP,CAAC;YACJ,CAAC;YACD,OAAO,SAAS,CAAC,MAAM,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,6DAA6D;IAC7D,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAC/B,qBAA8F,EAC9F,MAAS,EACT,kBAA0B;IAE1B,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,kBAAkB,GAAG,qBAAqB,CAAC,kBAAkB,CAAC;IACpE,MAAM,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAEtD,OAAO,kBAAkB,KAAK,kBAAkB,CAAC;AACnD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAClC,UAAwB,EACxB,qBAA8F;IAE9F,MAAM,MAAM,GAAG,IAAI,GAAG,EAA+B,CAAC;IAEtD,kEAAkE;IAClE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAE7B,IAAI,CAAC,qBAAqB,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,EAAE,CAAC;QACtE,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,6BAA6B;IAC7B,KAAK,MAAM,SAAS,IAAI,qBAAqB,CAAC,gBAAgB,EAAE,CAAC;QAC/D,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,uBAAuB,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IAClE,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["/**\n * Schema Variant Resolver Utilities\n * \n * Resolves the correct schema variant for an object based on discriminator values.\n * Used at runtime to get the variant-specific schema for virtual field computation,\n * backend-only field stripping, and summary derivation.\n * \n * @see Section 19 of RESOURCE_DERIVED_OBJECTS_RATIONALIZATION.md\n */\n\nimport { z } from 'zod';\nimport { ResourceConfiguration_InheritanceSchemaDefinition } from '../resources-config.shared.schemas';\n\n/**\n * Resolve the correct schema for an object based on inheritance discriminators.\n * \n * @param mainSchema - The base/main schema\n * @param inheritanceDefinition - The inheritance schema definition (optional)\n * @param object - The data object to inspect for discriminator values\n * @returns The correct schema variant for the object\n * \n * @example\n * ```typescript\n * const config = registry.getResourceConfiguration(resourceType);\n * const effectiveSchema = resolveSchemaForObject(\n * config.mainSchema,\n * config.inheritenceSchemaDefinition,\n * data\n * );\n * // effectiveSchema is now the variant-specific schema if applicable\n * ```\n */\nexport function resolveSchemaForObject<T extends Record<string, any>>(\n mainSchema: z.ZodTypeAny,\n inheritanceDefinition: ResourceConfiguration_InheritanceSchemaDefinition<any, any> | undefined,\n object: T\n): z.ZodTypeAny {\n // No inheritance - return main schema\n if (!inheritanceDefinition) {\n return mainSchema;\n }\n\n // No inherited schemas - return main schema\n if (!inheritanceDefinition.inheritedSchemas || inheritanceDefinition.inheritedSchemas.length === 0) {\n return mainSchema;\n }\n\n // Get discriminator value from object\n const discriminatorField = inheritanceDefinition.discriminatorField;\n const discriminatorValue = object[discriminatorField];\n\n // No discriminator value in object - return main schema\n if (discriminatorValue === undefined || discriminatorValue === null) {\n return mainSchema;\n }\n\n // Check if value is a base (non-inherited) value\n const baseValues = inheritanceDefinition.withoutInheritanceDiscriminatorFieldValues || [];\n if (baseValues.includes(discriminatorValue)) {\n return mainSchema;\n }\n\n // Find the matching inherited schema\n for (const inherited of inheritanceDefinition.inheritedSchemas) {\n if (inherited.discriminatorFieldValue === discriminatorValue) {\n // Recursively resolve if nested inheritance exists\n if (inherited.inheritenceSchemaDefinition) {\n return resolveSchemaForObject(\n inherited.schema,\n inherited.inheritenceSchemaDefinition,\n object\n );\n }\n return inherited.schema;\n }\n }\n\n // No matching variant found - return main schema as fallback\n return mainSchema;\n}\n\n/**\n * Check if an object matches a specific inheritance variant.\n * \n * @param inheritanceDefinition - The inheritance schema definition\n * @param object - The data object to check\n * @param targetVariantValue - The discriminator value to check for\n * @returns True if the object is of the specified variant\n */\nexport function isObjectOfVariant<T extends Record<string, any>>(\n inheritanceDefinition: ResourceConfiguration_InheritanceSchemaDefinition<any, any> | undefined,\n object: T,\n targetVariantValue: string\n): boolean {\n if (!inheritanceDefinition) {\n return false;\n }\n\n const discriminatorField = inheritanceDefinition.discriminatorField;\n const discriminatorValue = object[discriminatorField];\n\n return discriminatorValue === targetVariantValue;\n}\n\n/**\n * Get all variant schemas including the base schema.\n * \n * @param mainSchema - The base/main schema\n * @param inheritanceDefinition - The inheritance schema definition\n * @returns Map of discriminator value to schema\n */\nexport function getAllVariantSchemas(\n mainSchema: z.ZodTypeAny,\n inheritanceDefinition: ResourceConfiguration_InheritanceSchemaDefinition<any, any> | undefined\n): Map<string | null, z.ZodTypeAny> {\n const result = new Map<string | null, z.ZodTypeAny>();\n\n // Base schema for non-inherited values (null key represents base)\n result.set(null, mainSchema);\n\n if (!inheritanceDefinition || !inheritanceDefinition.inheritedSchemas) {\n return result;\n }\n\n // Add each inherited variant\n for (const inherited of inheritanceDefinition.inheritedSchemas) {\n result.set(inherited.discriminatorFieldValue, inherited.schema);\n }\n\n return result;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"shared-persistence-collection.utils.d.ts","sourceRoot":"","sources":["../../../../src/resources/utils/shared-persistence-collection.utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AACjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,2DAA2D,CAAC;AAEjG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,eAAO,MAAM,8CAA8C,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAe3F,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,sCAAsC,CAAC,YAAY,EAAE,YAAY,GAAG,MAAM,CAEzF;AAED,iGAAiG;AACjG,MAAM,WAAW,2CAA2C;IAC1D,QAAQ,CAAC,kBAAkB,EAAE,YAAY,CAAC;IAC1C,yFAAyF;IACzF,QAAQ,CAAC,kBAAkB,CAAC,EAAE,sBAAsB,GAAG,SAAS,CAAC;CAClE;AAED,gFAAgF;AAChF,MAAM,WAAW,6CAA6C;IAC5D,sEAAsE;IACtE,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,yFAAyF;IACzF,QAAQ,CAAC,QAAQ,EAAE,SAAS;QAAE,YAAY,EAAE,YAAY,CAAC;QAAC,OAAO,EAAE,sBAAsB,CAAA;KAAE,EAAE,CAAC;IAC9F,sEAAsE;IACtE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,wBAAgB,kDAAkD,CAChE,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,2CAA2C,CAAC,EACnF,yBAAyB,EAAE,sBAAsB,GAChD,6CAA6C,EAAE,CAsDjD;AAED,mGAAmG;AACnG,MAAM,WAAW,6CAA6C;IAC5D,QAAQ,CAAC,kBAAkB,EAAE,YAAY,CAAC;IAC1C,QAAQ,CAAC,eAAe,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,oBAAoB,CAAA;KAAE,GAAG,SAAS,CAAC;CACxE;AA8BD,iFAAiF;AACjF,MAAM,WAAW,+CAA+C;IAC9D,8DAA8D;IAC9D,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,sFAAsF;IACtF,QAAQ,CAAC,QAAQ,EAAE,SAAS;QAAE,YAAY,EAAE,YAAY,CAAC;QAAC,IAAI,EAAE,oBAAoB,GAAG,SAAS,CAAA;KAAE,EAAE,CAAC;IACrG,yEAAyE;IACzE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AACH,wBAAgB,oDAAoD,CAClE,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,6CAA6C,CAAC,GACpF,+CAA+C,EAAE,CA0DnD;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,oBAAY,iCAAiC;IAC3C,IAAI,SAAS;IACb,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,QAAQ,aAAa;CACtB"}
1
+ {"version":3,"file":"shared-persistence-collection.utils.d.ts","sourceRoot":"","sources":["../../../../../src/resources/utils/shared-persistence-collection.utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AACjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,2DAA2D,CAAC;AAEjG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,eAAO,MAAM,8CAA8C,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAe3F,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,sCAAsC,CAAC,YAAY,EAAE,YAAY,GAAG,MAAM,CAEzF;AAED,iGAAiG;AACjG,MAAM,WAAW,2CAA2C;IAC1D,QAAQ,CAAC,kBAAkB,EAAE,YAAY,CAAC;IAC1C,yFAAyF;IACzF,QAAQ,CAAC,kBAAkB,CAAC,EAAE,sBAAsB,GAAG,SAAS,CAAC;CAClE;AAED,gFAAgF;AAChF,MAAM,WAAW,6CAA6C;IAC5D,sEAAsE;IACtE,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,yFAAyF;IACzF,QAAQ,CAAC,QAAQ,EAAE,SAAS;QAAE,YAAY,EAAE,YAAY,CAAC;QAAC,OAAO,EAAE,sBAAsB,CAAA;KAAE,EAAE,CAAC;IAC9F,sEAAsE;IACtE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,wBAAgB,kDAAkD,CAChE,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,2CAA2C,CAAC,EACnF,yBAAyB,EAAE,sBAAsB,GAChD,6CAA6C,EAAE,CAsDjD;AAED,mGAAmG;AACnG,MAAM,WAAW,6CAA6C;IAC5D,QAAQ,CAAC,kBAAkB,EAAE,YAAY,CAAC;IAC1C,QAAQ,CAAC,eAAe,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,oBAAoB,CAAA;KAAE,GAAG,SAAS,CAAC;CACxE;AA8BD,iFAAiF;AACjF,MAAM,WAAW,+CAA+C;IAC9D,8DAA8D;IAC9D,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,sFAAsF;IACtF,QAAQ,CAAC,QAAQ,EAAE,SAAS;QAAE,YAAY,EAAE,YAAY,CAAC;QAAC,IAAI,EAAE,oBAAoB,GAAG,SAAS,CAAA;KAAE,EAAE,CAAC;IACrG,yEAAyE;IACzE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AACH,wBAAgB,oDAAoD,CAClE,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,6CAA6C,CAAC,GACpF,+CAA+C,EAAE,CA0DnD;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,oBAAY,iCAAiC;IAC3C,IAAI,SAAS;IACb,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,QAAQ,aAAa;CACtB"}
@@ -1 +1 @@
1
- {"version":3,"file":"shared-persistence-collection.utils.js","sourceRoot":"","sources":["../../../../src/resources/utils/shared-persistence-collection.utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { CoreResourceType } from '../resources.shared.core.definitions';\nimport type { ResourceType } from '../resources.shared.schemas';\nimport type { PersistenceAdapterType } from '../resources-config.shared.schemas';\nimport { ErasureRetentionMode } from '../../compliance/privacy/impersonalization.shared.schemas';\n\n/**\n * Resource types that deliberately project onto ANOTHER resource type's\n * persistence collection — THE authority for \"which configs address the same\n * physical rows?\".\n *\n * ## What this expresses\n *\n * A `USER_SELF*` resource is not a different record set; it is a different DOOR\n * onto the SAME record set, with its own operations, roles and scoping. The\n * `USERS` door is the admin surface (list every user, delete a user); the\n * `USER_SELF` door is the self surface (read/update MY row). They intentionally\n * share `UserSchema` and they intentionally share storage — the persistence\n * layer builds a SEPARATE model per resource config over ONE collection.\n *\n * Anything not listed here stores under its own resource type.\n *\n * ## Why it is a single named authority\n *\n * This mapping had already been copied twice inside the backend (the\n * zod→mongoose model builder, which is what actually creates and reads the\n * collection, and the aggregation collection resolver — whose earlier\n * divergence made every aggregation query a non-existent collection and return\n * zero rows). It now has a third consumer of a completely different kind:\n * {@link findSharedPersistenceCollectionRetentionIncoherences}, a boot-time\n * coherence guard. A per-resource config factory structurally cannot see this\n * relationship — it validates ONE config at a time — so the fact has to live\n * where every layer can read it, and it has to live exactly once.\n *\n * ## The alias belongs to the RESOURCE, not to the storage adapter\n *\n * Every persistence path resolves through this map, and each adapter has\n * exactly ONE composition point that does so: MongoDB's model builder and its\n * aggregation resolver, and — on the SQL side — the single\n * `resolveTableNameForResource` helper that the hybrid planner, the PostgreSQL\n * repository and the boot-time table verifier all call.\n *\n * This was NOT always true, and the way it failed is the reason to keep it\n * true: PostgreSQL used to derive its table name straight from\n * `resourceIdentifier`, so `USER_SELF` planned, wrote and verified a `userself`\n * table while `USERS` used `users`. An adapter choice must never silently\n * change WHICH RECORDS a resource addresses — that is not a storage detail, it\n * is the \"two doors, one record set\" contract itself. On the SQL side the\n * resolved name is additionally normalised into a SQL identifier; casing is an\n * adapter concern, the alias is not.\n *\n * The one thing a shared resolver still cannot see is an alias group whose\n * members are pointed at DIFFERENT adapters — each config is individually\n * valid, and only the pair is wrong. That is what\n * {@link findSharedPersistenceCollectionAdapterIncoherences} fails closed on.\n */\nexport const RESOURCE_SHARED_PERSISTENCE_COLLECTION_ALIASES: Readonly<Record<string, string>> = {\n [CoreResourceType.USER_SELF]: CoreResourceType.USERS,\n [CoreResourceType.USER_SELF_PROFILES]: CoreResourceType.USER_PROFILES,\n [CoreResourceType.USER_SELF_PREFERENCES]: CoreResourceType.USER_PREFERENCES,\n /*\n * The application-scoped audit door addresses the organization-scoped resource's rows (#317).\n *\n * Unlike the `USER_SELF` group above — where the alias exists so a principal can address its OWN\n * row through a narrower door — this pair exists because the two doors see DIFFERENT SUBSETS of\n * one set: the organization door is tenant-filtered and structurally cannot return the rows that\n * carry no organization (logins, session evictions, application-wide policy changes), which is\n * 74% of them on a measured dogfood application. Splitting the storage would split the audit\n * trail itself, so the alias is load-bearing rather than a convenience.\n */\n [CoreResourceType.APPLICATION_AUDIT_LOGS]: CoreResourceType.AUDIT_LOGS,\n};\n\n/**\n * The persistence collection a resource type's rows live in — its alias target\n * when it declares one, otherwise the resource type itself.\n *\n * @param resourceType - the resource type whose storage location is wanted.\n * @returns the collection name, as a plain string.\n */\nexport function resolveSharedPersistenceCollectionName(resourceType: ResourceType): string {\n return RESOURCE_SHARED_PERSISTENCE_COLLECTION_ALIASES[resourceType as string] ?? (resourceType as string);\n}\n\n/** The minimal config shape {@link findSharedPersistenceCollectionAdapterIncoherences} reads. */\nexport interface SharedPersistenceCollectionAdapterCandidate {\n readonly resourceIdentifier: ResourceType;\n /** The config's OWN declaration; `undefined` means \"inherit the application default\". */\n readonly persistenceAdapter?: PersistenceAdapterType | undefined;\n}\n\n/** One collection whose resource configs are pointed at different databases. */\nexport interface SharedPersistenceCollectionAdapterIncoherence {\n /** The shared collection the disagreeing configs claim to address. */\n readonly collectionName: string;\n /** Every resource config addressing that collection, with the adapter it RESOLVED to. */\n readonly adapters: readonly { resourceType: ResourceType; adapter: PersistenceAdapterType }[];\n /** Operator-facing explanation naming the consequence and the fix. */\n readonly message: string;\n}\n\n/**\n * Registry-ASSEMBLY guardrail: every resource config that resolves to the SAME\n * persistence collection must resolve to the SAME persistence adapter.\n *\n * ## Why the shared resolver cannot cover this on its own\n *\n * {@link resolveSharedPersistenceCollectionName} makes the alias\n * adapter-independent: whichever database a resource lands in, it addresses the\n * aliased NAME. That is necessary and not sufficient. A name is only an address\n * WITHIN one database, so pointing `USERS` at PostgreSQL while `USER_SELF`\n * inherits MongoDB yields two stores that both believe they own the same rows.\n * Nothing downstream can detect it: each config is individually valid, each\n * repository is correctly built, and every per-resource check passes.\n *\n * ## The failure it prevents\n *\n * The doors silently stop sharing records. The admin door lists users the self\n * door cannot read; a self-service update writes to a row the admin door will\n * never see; and — because retention is enforced against ROWS — an erasure\n * performed through one door leaves the other door's copy completely\n * untouched, which is the same compliance-grade lie that\n * {@link findSharedPersistenceCollectionRetentionIncoherences} exists to\n * prevent, arrived at from a different direction.\n *\n * The table name is not the only thing that follows from the adapter. Id FORMAT\n * does too — the PostgreSQL repository validates ids as UUIDs while Mongo\n * expects ObjectIds, each resolved from its OWN resource's adapter — so a split\n * group would also reject through one door the very ids the other door mints.\n * Anything keyed on \"this resource's adapter\" inherits this invariant.\n *\n * ## Why this is permanent, not a capability gate\n *\n * Unlike adapter gaps that close when the missing support is implemented, this\n * one has no future in which it becomes valid: two databases cannot hold one\n * set of rows. It is deliberately NOT a ban on aliased resources using\n * PostgreSQL — an alias group that agrees on PostgreSQL resolves to one shared\n * table, and whether that table was actually provisioned is a separate,\n * already-enforced question (the boot-time table verifier).\n *\n * Resources inherit the application default when they declare nothing, so the\n * caller supplies the resolved default rather than this function guessing it.\n *\n * Pure and side-effect free: it reports, the caller throws.\n *\n * @param resourceConfigurations - every assembled resource config, keyed by resource type.\n * @param defaultPersistenceAdapter - the adapter a config with no declaration inherits.\n * @returns one entry per incoherent collection; empty when the registry is coherent.\n */\nexport function findSharedPersistenceCollectionAdapterIncoherences(\n resourceConfigurations: Record<string, SharedPersistenceCollectionAdapterCandidate>,\n defaultPersistenceAdapter: PersistenceAdapterType,\n): SharedPersistenceCollectionAdapterIncoherence[] {\n const adaptersByCollection = new Map<\n string,\n { resourceType: ResourceType; adapter: PersistenceAdapterType }[]\n >();\n\n for (const [resourceTypeKey, resourceConfig] of Object.entries(resourceConfigurations)) {\n // Same reasoning as the retention guard: prefer the config's OWN identifier so a mis-keyed\n // registry entry is diagnosed against the name its author actually wrote.\n const resourceType = (resourceConfig?.resourceIdentifier ?? resourceTypeKey) as ResourceType;\n const collectionName = resolveSharedPersistenceCollectionName(resourceType);\n const entry = {\n resourceType,\n adapter: resourceConfig?.persistenceAdapter ?? defaultPersistenceAdapter,\n };\n\n const existing = adaptersByCollection.get(collectionName);\n if (existing) {\n existing.push(entry);\n } else {\n adaptersByCollection.set(collectionName, [entry]);\n }\n }\n\n const incoherences: SharedPersistenceCollectionAdapterIncoherence[] = [];\n\n for (const [collectionName, adapters] of adaptersByCollection) {\n if (adapters.length < 2) {\n continue;\n }\n if (new Set(adapters.map((entry) => entry.adapter)).size < 2) {\n continue;\n }\n\n const declared = adapters\n .map((entry) => `'${String(entry.resourceType)}' → ${entry.adapter}`)\n .join(', ');\n\n incoherences.push({\n collectionName,\n adapters,\n message:\n `Resource configs [${declared}] all address the '${collectionName}' persistence collection but ` +\n `resolve to DIFFERENT persistence adapters. These configs are separate doors onto ONE set of ` +\n `rows, and a collection name only addresses rows within a single database, so this splits them ` +\n `across two stores that each believe they own the records: the admin door lists rows the self ` +\n `door cannot read, a self-service write lands where the admin door will never see it, and an ` +\n `erasure performed through one door leaves the other door's copy fully intact. Give every ` +\n `config listed above the same persistenceAdapter (a resource sharing a collection cannot pick ` +\n `its database alone), or stop sharing the collection.`,\n });\n }\n\n return incoherences;\n}\n\n/** The minimal config shape {@link findSharedPersistenceCollectionRetentionIncoherences} reads. */\nexport interface SharedPersistenceCollectionRetentionCandidate {\n readonly resourceIdentifier: ResourceType;\n readonly retentionPolicy?: { mode?: ErasureRetentionMode } | undefined;\n}\n\n/**\n * Canonical comparison key for a resource's retention POSTURE.\n *\n * Compares the WHOLE resolved policy, not just `mode`. It carries two members since #1635 — `mode` and\n * the nested `statutoryRetention` ground — and this is the case the whole-policy comparison was written\n * for: comparing `mode` alone would let two configs over one collection agree on the treatment while\n * one says a statute keeps the rows and the other does not. Two configs over one collection must agree\n * on ALL of it.\n *\n * Key order is normalised at EVERY depth so authoring order cannot masquerade as a disagreement. `undefined` gets\n * its own key rather than being skipped: \"rows of this resource are hard-deleted\" is a positive\n * claim, and the in-vs-out asymmetry is what produces both failure modes documented below.\n */\nfunction buildRetentionPostureKey(retentionPolicy: { mode?: ErasureRetentionMode } | undefined): string {\n if (retentionPolicy === undefined || retentionPolicy === null) {\n return 'NOT_GOVERNED';\n }\n const canonical = (value: unknown): unknown => {\n if (value === null || typeof value !== 'object' || Array.isArray(value)) return value;\n return Object.entries(value as Record<string, unknown>)\n .filter(([, member]) => member !== undefined)\n .sort(([leftKey], [rightKey]) => leftKey.localeCompare(rightKey))\n .map(([key, member]) => [key, canonical(member)]);\n };\n const entries = canonical(retentionPolicy) as unknown[];\n return entries.length === 0 ? 'NOT_GOVERNED' : JSON.stringify(entries);\n}\n\n/** One collection whose resource configs disagree about retention governance. */\nexport interface SharedPersistenceCollectionRetentionIncoherence {\n /** The shared collection the disagreeing configs write to. */\n readonly collectionName: string;\n /** Every resource config addressing that collection, with the posture it declared. */\n readonly postures: readonly { resourceType: ResourceType; mode: ErasureRetentionMode | undefined }[];\n /** Operator-facing explanation naming both failure modes and the fix. */\n readonly message: string;\n}\n\n/**\n * Registry-ASSEMBLY guardrail: every resource config that resolves to the SAME\n * persistence collection must declare the SAME retention posture.\n *\n * ## Why a config that passes every per-resource check can still be broken\n *\n * `retentionPolicy` is validated PER RESOURCE CONFIG by the config factory: it\n * checks that resource's operations, its field treatments, its system-access\n * grants. It cannot check what a SIBLING config declares, because a factory\n * invocation never sees one. But retention is enforced against ROWS, and two\n * configs can own the same rows (see\n * {@link RESOURCE_SHARED_PERSISTENCE_COLLECTION_ALIASES}). So a pair that\n * disagrees produces a config where every individual resource is valid and the\n * COLLECTION is not.\n *\n * ## The two concrete failure modes\n *\n * **1. Fail-open erasure.** The retention hide filter (rows marked `RETAINED`\n * are invisible) and the immutability freeze are injected per resource config,\n * in `buildContextualFilter`. A row erased through the governed door stays\n * fully READABLE and UPDATABLE through the ungoverned one. For the\n * `USERS`/`USER_SELF` pair that ungoverned door exposes READ + UPDATE to\n * `APP_USER` — i.e. the erased subject can still read and edit their own\n * \"erased\" record. The row is erased only from the door that was opted in,\n * which is a compliance-grade lie about the record.\n *\n * **2. Unique-index collision — a hard functional abort.** A retention-governed\n * config scopes each unique index to NON-retained rows (a partial filter on the\n * retention marker), precisely so scrubbed rows leave the index and cannot\n * collide on the shared mask value. An ungoverned config over the same\n * collection emits a PLAIN unique index on the same field. The FIRST erasure\n * succeeds; the SECOND writes the same mask value, hits the plain index, and\n * fails E11000 — inside the erasure transaction, so the whole erasure rolls\n * back. The capability is silently single-use.\n *\n * Both modes are invisible until a real erasure runs, which is why this is a\n * BOOT-time guard and not a test: the point is that a config which passes at\n * boot must actually be able to perform an erasure.\n *\n * ## Why \"one opted in, one not\" is a disagreement, not a default\n *\n * An absent `retentionPolicy` is a positive statement — \"rows of this resource\n * are hard-deleted\" — not an unset value the governed sibling can supply. Both\n * failure modes above are produced by exactly that asymmetry, so `undefined`\n * participates in the comparison as its own posture rather than being skipped.\n *\n * Pure and side-effect free: it reports, the caller throws. That keeps the\n * shared-collection fact and its invariant in the layer both persistence and\n * validation can import, while the registry owns the error shape.\n *\n * @param resourceConfigurations - every assembled resource config, keyed by resource type.\n * @returns one entry per incoherent collection; empty when the registry is coherent.\n */\nexport function findSharedPersistenceCollectionRetentionIncoherences(\n resourceConfigurations: Record<string, SharedPersistenceCollectionRetentionCandidate>,\n): SharedPersistenceCollectionRetentionIncoherence[] {\n const posturesByCollection = new Map<\n string,\n { resourceType: ResourceType; mode: ErasureRetentionMode | undefined; postureKey: string }[]\n >();\n\n for (const [resourceTypeKey, resourceConfig] of Object.entries(resourceConfigurations)) {\n // Prefer the config's OWN identifier over the map key: the registry keys by resource type, but a\n // host that mis-keyed an entry would otherwise be diagnosed against a name it never authored.\n const resourceType = (resourceConfig?.resourceIdentifier ?? resourceTypeKey) as ResourceType;\n const collectionName = resolveSharedPersistenceCollectionName(resourceType);\n const posture = {\n resourceType,\n mode: resourceConfig?.retentionPolicy?.mode,\n postureKey: buildRetentionPostureKey(resourceConfig?.retentionPolicy),\n };\n\n const existing = posturesByCollection.get(collectionName);\n if (existing) {\n existing.push(posture);\n } else {\n posturesByCollection.set(collectionName, [posture]);\n }\n }\n\n const incoherences: SharedPersistenceCollectionRetentionIncoherence[] = [];\n\n for (const [collectionName, postures] of posturesByCollection) {\n if (postures.length < 2) {\n continue;\n }\n const distinctPostures = new Set(postures.map((posture) => posture.postureKey));\n if (distinctPostures.size < 2) {\n continue;\n }\n\n const declared = postures\n .map((posture) => `'${String(posture.resourceType)}' → ${posture.mode ?? 'NOT retention-governed'}`)\n .join(', ');\n\n incoherences.push({\n collectionName,\n postures,\n message:\n `Resource configs [${declared}] all store in the '${collectionName}' collection but declare ` +\n `DIFFERENT retention postures. They are separate models over ONE set of rows, and retention is ` +\n `enforced per resource config, so this ships two defects that only appear when a real erasure ` +\n `runs: (1) FAIL-OPEN ERASURE — the retention hide filter and the immutability freeze are absent ` +\n `on the ungoverned door, leaving an erased row readable and updatable there; (2) UNIQUE-INDEX ` +\n `COLLISION — the governed config scopes its unique indexes to non-retained rows while the ` +\n `ungoverned one emits plain unique indexes on the same collection, so the SECOND erased row ` +\n `collides (E11000) and the erasure transaction rolls back. Declare the SAME retentionPolicy on ` +\n `every config listed above (a resource sharing a collection cannot opt in or out alone), or ` +\n `stop sharing the collection.`,\n });\n }\n\n return incoherences;\n}\n\n/**\n * The privilege AXES a database credential issued to a named runtime principal (a minion) is built\n * from — one closed vocabulary shared by every storage adapter that mints such a credential.\n *\n * Each axis is a distinct verb set, not a strength on a scale, and they must never be merged:\n *\n * - {@link READ} — read rows.\n * - {@link WRITE} — insert, update and delete. The only axis that can REMOVE a row.\n * - {@link APPEND} — insert only. A principal can add a row and never amend or remove it, which is\n * what makes it the axis for evidence: an audit trail a principal can rewrite is not an audit trail.\n * - {@link MAINTAIN} — insert and update, never delete, for durable runtime state whose history must\n * survive the principal that advances it.\n *\n * It lives beside the collection aliases because a grant is issued per COLLECTION: the alias map says\n * which rows a grant on a resource type reaches, and this says which verbs it carries there. The\n * derivation that fills each axis, and the engine floor it adds, live in `platform-config-lib`\n * (`deriveMinionDatabaseGrants`); the MongoDB and PostgreSQL adapters each translate an axis into\n * their own privilege dialect.\n *\n * Scope, stated because it is easy to over-read: this governs NAMED runtime principals only. The\n * application backend is not issued an axis-scoped credential — it owns its database — so nothing\n * here constrains what the backend's own credential can do to a row.\n */\nexport enum RuntimePrincipalDatabaseGrantAxis {\n READ = 'read',\n WRITE = 'write',\n APPEND = 'append',\n MAINTAIN = 'maintain',\n}\n"]}
1
+ {"version":3,"file":"shared-persistence-collection.utils.js","sourceRoot":"","sources":["../../../../../src/resources/utils/shared-persistence-collection.utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { CoreResourceType } from '../resources.shared.core.definitions';\nimport type { ResourceType } from '../resources.shared.schemas';\nimport type { PersistenceAdapterType } from '../resources-config.shared.schemas';\nimport { ErasureRetentionMode } from '../../compliance/privacy/impersonalization.shared.schemas';\n\n/**\n * Resource types that deliberately project onto ANOTHER resource type's\n * persistence collection — THE authority for \"which configs address the same\n * physical rows?\".\n *\n * ## What this expresses\n *\n * A `USER_SELF*` resource is not a different record set; it is a different DOOR\n * onto the SAME record set, with its own operations, roles and scoping. The\n * `USERS` door is the admin surface (list every user, delete a user); the\n * `USER_SELF` door is the self surface (read/update MY row). They intentionally\n * share `UserSchema` and they intentionally share storage — the persistence\n * layer builds a SEPARATE model per resource config over ONE collection.\n *\n * Anything not listed here stores under its own resource type.\n *\n * ## Why it is a single named authority\n *\n * This mapping had already been copied twice inside the backend (the\n * zod→mongoose model builder, which is what actually creates and reads the\n * collection, and the aggregation collection resolver — whose earlier\n * divergence made every aggregation query a non-existent collection and return\n * zero rows). It now has a third consumer of a completely different kind:\n * {@link findSharedPersistenceCollectionRetentionIncoherences}, a boot-time\n * coherence guard. A per-resource config factory structurally cannot see this\n * relationship — it validates ONE config at a time — so the fact has to live\n * where every layer can read it, and it has to live exactly once.\n *\n * ## The alias belongs to the RESOURCE, not to the storage adapter\n *\n * Every persistence path resolves through this map, and each adapter has\n * exactly ONE composition point that does so: MongoDB's model builder and its\n * aggregation resolver, and — on the SQL side — the single\n * `resolveTableNameForResource` helper that the hybrid planner, the PostgreSQL\n * repository and the boot-time table verifier all call.\n *\n * This was NOT always true, and the way it failed is the reason to keep it\n * true: PostgreSQL used to derive its table name straight from\n * `resourceIdentifier`, so `USER_SELF` planned, wrote and verified a `userself`\n * table while `USERS` used `users`. An adapter choice must never silently\n * change WHICH RECORDS a resource addresses — that is not a storage detail, it\n * is the \"two doors, one record set\" contract itself. On the SQL side the\n * resolved name is additionally normalised into a SQL identifier; casing is an\n * adapter concern, the alias is not.\n *\n * The one thing a shared resolver still cannot see is an alias group whose\n * members are pointed at DIFFERENT adapters — each config is individually\n * valid, and only the pair is wrong. That is what\n * {@link findSharedPersistenceCollectionAdapterIncoherences} fails closed on.\n */\nexport const RESOURCE_SHARED_PERSISTENCE_COLLECTION_ALIASES: Readonly<Record<string, string>> = {\n [CoreResourceType.USER_SELF]: CoreResourceType.USERS,\n [CoreResourceType.USER_SELF_PROFILES]: CoreResourceType.USER_PROFILES,\n [CoreResourceType.USER_SELF_PREFERENCES]: CoreResourceType.USER_PREFERENCES,\n /*\n * The application-scoped audit door addresses the organization-scoped resource's rows (#317).\n *\n * Unlike the `USER_SELF` group above — where the alias exists so a principal can address its OWN\n * row through a narrower door — this pair exists because the two doors see DIFFERENT SUBSETS of\n * one set: the organization door is tenant-filtered and structurally cannot return the rows that\n * carry no organization (logins, session evictions, application-wide policy changes), which is\n * 74% of them on a measured dogfood application. Splitting the storage would split the audit\n * trail itself, so the alias is load-bearing rather than a convenience.\n */\n [CoreResourceType.APPLICATION_AUDIT_LOGS]: CoreResourceType.AUDIT_LOGS,\n};\n\n/**\n * The persistence collection a resource type's rows live in — its alias target\n * when it declares one, otherwise the resource type itself.\n *\n * @param resourceType - the resource type whose storage location is wanted.\n * @returns the collection name, as a plain string.\n */\nexport function resolveSharedPersistenceCollectionName(resourceType: ResourceType): string {\n return RESOURCE_SHARED_PERSISTENCE_COLLECTION_ALIASES[resourceType as string] ?? (resourceType as string);\n}\n\n/** The minimal config shape {@link findSharedPersistenceCollectionAdapterIncoherences} reads. */\nexport interface SharedPersistenceCollectionAdapterCandidate {\n readonly resourceIdentifier: ResourceType;\n /** The config's OWN declaration; `undefined` means \"inherit the application default\". */\n readonly persistenceAdapter?: PersistenceAdapterType | undefined;\n}\n\n/** One collection whose resource configs are pointed at different databases. */\nexport interface SharedPersistenceCollectionAdapterIncoherence {\n /** The shared collection the disagreeing configs claim to address. */\n readonly collectionName: string;\n /** Every resource config addressing that collection, with the adapter it RESOLVED to. */\n readonly adapters: readonly { resourceType: ResourceType; adapter: PersistenceAdapterType }[];\n /** Operator-facing explanation naming the consequence and the fix. */\n readonly message: string;\n}\n\n/**\n * Registry-ASSEMBLY guardrail: every resource config that resolves to the SAME\n * persistence collection must resolve to the SAME persistence adapter.\n *\n * ## Why the shared resolver cannot cover this on its own\n *\n * {@link resolveSharedPersistenceCollectionName} makes the alias\n * adapter-independent: whichever database a resource lands in, it addresses the\n * aliased NAME. That is necessary and not sufficient. A name is only an address\n * WITHIN one database, so pointing `USERS` at PostgreSQL while `USER_SELF`\n * inherits MongoDB yields two stores that both believe they own the same rows.\n * Nothing downstream can detect it: each config is individually valid, each\n * repository is correctly built, and every per-resource check passes.\n *\n * ## The failure it prevents\n *\n * The doors silently stop sharing records. The admin door lists users the self\n * door cannot read; a self-service update writes to a row the admin door will\n * never see; and — because retention is enforced against ROWS — an erasure\n * performed through one door leaves the other door's copy completely\n * untouched, which is the same compliance-grade lie that\n * {@link findSharedPersistenceCollectionRetentionIncoherences} exists to\n * prevent, arrived at from a different direction.\n *\n * The table name is not the only thing that follows from the adapter. Id FORMAT\n * does too — the PostgreSQL repository validates ids as UUIDs while Mongo\n * expects ObjectIds, each resolved from its OWN resource's adapter — so a split\n * group would also reject through one door the very ids the other door mints.\n * Anything keyed on \"this resource's adapter\" inherits this invariant.\n *\n * ## Why this is permanent, not a capability gate\n *\n * Unlike adapter gaps that close when the missing support is implemented, this\n * one has no future in which it becomes valid: two databases cannot hold one\n * set of rows. It is deliberately NOT a ban on aliased resources using\n * PostgreSQL — an alias group that agrees on PostgreSQL resolves to one shared\n * table, and whether that table was actually provisioned is a separate,\n * already-enforced question (the boot-time table verifier).\n *\n * Resources inherit the application default when they declare nothing, so the\n * caller supplies the resolved default rather than this function guessing it.\n *\n * Pure and side-effect free: it reports, the caller throws.\n *\n * @param resourceConfigurations - every assembled resource config, keyed by resource type.\n * @param defaultPersistenceAdapter - the adapter a config with no declaration inherits.\n * @returns one entry per incoherent collection; empty when the registry is coherent.\n */\nexport function findSharedPersistenceCollectionAdapterIncoherences(\n resourceConfigurations: Record<string, SharedPersistenceCollectionAdapterCandidate>,\n defaultPersistenceAdapter: PersistenceAdapterType,\n): SharedPersistenceCollectionAdapterIncoherence[] {\n const adaptersByCollection = new Map<\n string,\n { resourceType: ResourceType; adapter: PersistenceAdapterType }[]\n >();\n\n for (const [resourceTypeKey, resourceConfig] of Object.entries(resourceConfigurations)) {\n // Same reasoning as the retention guard: prefer the config's OWN identifier so a mis-keyed\n // registry entry is diagnosed against the name its author actually wrote.\n const resourceType = (resourceConfig?.resourceIdentifier ?? resourceTypeKey) as ResourceType;\n const collectionName = resolveSharedPersistenceCollectionName(resourceType);\n const entry = {\n resourceType,\n adapter: resourceConfig?.persistenceAdapter ?? defaultPersistenceAdapter,\n };\n\n const existing = adaptersByCollection.get(collectionName);\n if (existing) {\n existing.push(entry);\n } else {\n adaptersByCollection.set(collectionName, [entry]);\n }\n }\n\n const incoherences: SharedPersistenceCollectionAdapterIncoherence[] = [];\n\n for (const [collectionName, adapters] of adaptersByCollection) {\n if (adapters.length < 2) {\n continue;\n }\n if (new Set(adapters.map((entry) => entry.adapter)).size < 2) {\n continue;\n }\n\n const declared = adapters\n .map((entry) => `'${String(entry.resourceType)}' → ${entry.adapter}`)\n .join(', ');\n\n incoherences.push({\n collectionName,\n adapters,\n message:\n `Resource configs [${declared}] all address the '${collectionName}' persistence collection but ` +\n `resolve to DIFFERENT persistence adapters. These configs are separate doors onto ONE set of ` +\n `rows, and a collection name only addresses rows within a single database, so this splits them ` +\n `across two stores that each believe they own the records: the admin door lists rows the self ` +\n `door cannot read, a self-service write lands where the admin door will never see it, and an ` +\n `erasure performed through one door leaves the other door's copy fully intact. Give every ` +\n `config listed above the same persistenceAdapter (a resource sharing a collection cannot pick ` +\n `its database alone), or stop sharing the collection.`,\n });\n }\n\n return incoherences;\n}\n\n/** The minimal config shape {@link findSharedPersistenceCollectionRetentionIncoherences} reads. */\nexport interface SharedPersistenceCollectionRetentionCandidate {\n readonly resourceIdentifier: ResourceType;\n readonly retentionPolicy?: { mode?: ErasureRetentionMode } | undefined;\n}\n\n/**\n * Canonical comparison key for a resource's retention POSTURE.\n *\n * Compares the WHOLE resolved policy, not just `mode`. It carries two members since #1635 — `mode` and\n * the nested `statutoryRetention` ground — and this is the case the whole-policy comparison was written\n * for: comparing `mode` alone would let two configs over one collection agree on the treatment while\n * one says a statute keeps the rows and the other does not. Two configs over one collection must agree\n * on ALL of it.\n *\n * Key order is normalised at EVERY depth so authoring order cannot masquerade as a disagreement. `undefined` gets\n * its own key rather than being skipped: \"rows of this resource are hard-deleted\" is a positive\n * claim, and the in-vs-out asymmetry is what produces both failure modes documented below.\n */\nfunction buildRetentionPostureKey(retentionPolicy: { mode?: ErasureRetentionMode } | undefined): string {\n if (retentionPolicy === undefined || retentionPolicy === null) {\n return 'NOT_GOVERNED';\n }\n const canonical = (value: unknown): unknown => {\n if (value === null || typeof value !== 'object' || Array.isArray(value)) return value;\n return Object.entries(value as Record<string, unknown>)\n .filter(([, member]) => member !== undefined)\n .sort(([leftKey], [rightKey]) => leftKey.localeCompare(rightKey))\n .map(([key, member]) => [key, canonical(member)]);\n };\n const entries = canonical(retentionPolicy) as unknown[];\n return entries.length === 0 ? 'NOT_GOVERNED' : JSON.stringify(entries);\n}\n\n/** One collection whose resource configs disagree about retention governance. */\nexport interface SharedPersistenceCollectionRetentionIncoherence {\n /** The shared collection the disagreeing configs write to. */\n readonly collectionName: string;\n /** Every resource config addressing that collection, with the posture it declared. */\n readonly postures: readonly { resourceType: ResourceType; mode: ErasureRetentionMode | undefined }[];\n /** Operator-facing explanation naming both failure modes and the fix. */\n readonly message: string;\n}\n\n/**\n * Registry-ASSEMBLY guardrail: every resource config that resolves to the SAME\n * persistence collection must declare the SAME retention posture.\n *\n * ## Why a config that passes every per-resource check can still be broken\n *\n * `retentionPolicy` is validated PER RESOURCE CONFIG by the config factory: it\n * checks that resource's operations, its field treatments, its system-access\n * grants. It cannot check what a SIBLING config declares, because a factory\n * invocation never sees one. But retention is enforced against ROWS, and two\n * configs can own the same rows (see\n * {@link RESOURCE_SHARED_PERSISTENCE_COLLECTION_ALIASES}). So a pair that\n * disagrees produces a config where every individual resource is valid and the\n * COLLECTION is not.\n *\n * ## The two concrete failure modes\n *\n * **1. Fail-open erasure.** The retention hide filter (rows marked `RETAINED`\n * are invisible) and the immutability freeze are injected per resource config,\n * in `buildContextualFilter`. A row erased through the governed door stays\n * fully READABLE and UPDATABLE through the ungoverned one. For the\n * `USERS`/`USER_SELF` pair that ungoverned door exposes READ + UPDATE to\n * `APP_USER` — i.e. the erased subject can still read and edit their own\n * \"erased\" record. The row is erased only from the door that was opted in,\n * which is a compliance-grade lie about the record.\n *\n * **2. Unique-index collision — a hard functional abort.** A retention-governed\n * config scopes each unique index to NON-retained rows (a partial filter on the\n * retention marker), precisely so scrubbed rows leave the index and cannot\n * collide on the shared mask value. An ungoverned config over the same\n * collection emits a PLAIN unique index on the same field. The FIRST erasure\n * succeeds; the SECOND writes the same mask value, hits the plain index, and\n * fails E11000 — inside the erasure transaction, so the whole erasure rolls\n * back. The capability is silently single-use.\n *\n * Both modes are invisible until a real erasure runs, which is why this is a\n * BOOT-time guard and not a test: the point is that a config which passes at\n * boot must actually be able to perform an erasure.\n *\n * ## Why \"one opted in, one not\" is a disagreement, not a default\n *\n * An absent `retentionPolicy` is a positive statement — \"rows of this resource\n * are hard-deleted\" — not an unset value the governed sibling can supply. Both\n * failure modes above are produced by exactly that asymmetry, so `undefined`\n * participates in the comparison as its own posture rather than being skipped.\n *\n * Pure and side-effect free: it reports, the caller throws. That keeps the\n * shared-collection fact and its invariant in the layer both persistence and\n * validation can import, while the registry owns the error shape.\n *\n * @param resourceConfigurations - every assembled resource config, keyed by resource type.\n * @returns one entry per incoherent collection; empty when the registry is coherent.\n */\nexport function findSharedPersistenceCollectionRetentionIncoherences(\n resourceConfigurations: Record<string, SharedPersistenceCollectionRetentionCandidate>,\n): SharedPersistenceCollectionRetentionIncoherence[] {\n const posturesByCollection = new Map<\n string,\n { resourceType: ResourceType; mode: ErasureRetentionMode | undefined; postureKey: string }[]\n >();\n\n for (const [resourceTypeKey, resourceConfig] of Object.entries(resourceConfigurations)) {\n // Prefer the config's OWN identifier over the map key: the registry keys by resource type, but a\n // host that mis-keyed an entry would otherwise be diagnosed against a name it never authored.\n const resourceType = (resourceConfig?.resourceIdentifier ?? resourceTypeKey) as ResourceType;\n const collectionName = resolveSharedPersistenceCollectionName(resourceType);\n const posture = {\n resourceType,\n mode: resourceConfig?.retentionPolicy?.mode,\n postureKey: buildRetentionPostureKey(resourceConfig?.retentionPolicy),\n };\n\n const existing = posturesByCollection.get(collectionName);\n if (existing) {\n existing.push(posture);\n } else {\n posturesByCollection.set(collectionName, [posture]);\n }\n }\n\n const incoherences: SharedPersistenceCollectionRetentionIncoherence[] = [];\n\n for (const [collectionName, postures] of posturesByCollection) {\n if (postures.length < 2) {\n continue;\n }\n const distinctPostures = new Set(postures.map((posture) => posture.postureKey));\n if (distinctPostures.size < 2) {\n continue;\n }\n\n const declared = postures\n .map((posture) => `'${String(posture.resourceType)}' → ${posture.mode ?? 'NOT retention-governed'}`)\n .join(', ');\n\n incoherences.push({\n collectionName,\n postures,\n message:\n `Resource configs [${declared}] all store in the '${collectionName}' collection but declare ` +\n `DIFFERENT retention postures. They are separate models over ONE set of rows, and retention is ` +\n `enforced per resource config, so this ships two defects that only appear when a real erasure ` +\n `runs: (1) FAIL-OPEN ERASURE — the retention hide filter and the immutability freeze are absent ` +\n `on the ungoverned door, leaving an erased row readable and updatable there; (2) UNIQUE-INDEX ` +\n `COLLISION — the governed config scopes its unique indexes to non-retained rows while the ` +\n `ungoverned one emits plain unique indexes on the same collection, so the SECOND erased row ` +\n `collides (E11000) and the erasure transaction rolls back. Declare the SAME retentionPolicy on ` +\n `every config listed above (a resource sharing a collection cannot opt in or out alone), or ` +\n `stop sharing the collection.`,\n });\n }\n\n return incoherences;\n}\n\n/**\n * The privilege AXES a database credential issued to a named runtime principal (a minion) is built\n * from — one closed vocabulary shared by every storage adapter that mints such a credential.\n *\n * Each axis is a distinct verb set, not a strength on a scale, and they must never be merged:\n *\n * - {@link READ} — read rows.\n * - {@link WRITE} — insert, update and delete. The only axis that can REMOVE a row.\n * - {@link APPEND} — insert only. A principal can add a row and never amend or remove it, which is\n * what makes it the axis for evidence: an audit trail a principal can rewrite is not an audit trail.\n * - {@link MAINTAIN} — insert and update, never delete, for durable runtime state whose history must\n * survive the principal that advances it.\n *\n * It lives beside the collection aliases because a grant is issued per COLLECTION: the alias map says\n * which rows a grant on a resource type reaches, and this says which verbs it carries there. The\n * derivation that fills each axis, and the engine floor it adds, live in `platform-config-lib`\n * (`deriveMinionDatabaseGrants`); the MongoDB and PostgreSQL adapters each translate an axis into\n * their own privilege dialect.\n *\n * Scope, stated because it is easy to over-read: this governs NAMED runtime principals only. The\n * application backend is not issued an axis-scoped credential — it owns its database — so nothing\n * here constrains what the backend's own credential can do to a row.\n */\nexport enum RuntimePrincipalDatabaseGrantAxis {\n READ = 'read',\n WRITE = 'write',\n APPEND = 'append',\n MAINTAIN = 'maintain',\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"templatable-file-fields.shared.utils.d.ts","sourceRoot":"","sources":["../../../../src/resources/utils/templatable-file-fields.shared.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAkBL,KAAK,kBAAkB,EACxB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,WAAW,iCAAiC;IAChD,mBAAmB,CAAC,EAAE,CACpB,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,EACxB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,CAAC,KAChC,CAAC,CAAC,UAAU,CAAC;CACnB;AAiBD,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,CAAC,CAAC,UAAU,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,qBAAa,yCAA0C,SAAQ,KAAK;aAEhD,SAAS,EAAE,MAAM;aACjB,gBAAgB,EAAE,kBAAkB,GAAG,SAAS;aAChD,mBAAmB,EAAE,kBAAkB,GAAG,SAAS;gBAFnD,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,kBAAkB,GAAG,SAAS,EAChD,mBAAmB,EAAE,kBAAkB,GAAG,SAAS;CAOtE;AAED,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,CAAC,CAAC,UAAU,EACpB,UAAU,SAAK,EACf,aAAa,UAAQ,EACrB,aAAa,GAAE,OAAO,CAAC,MAAM,CAAyB,GACrD,wBAAwB,EAAE,CAmG5B;AAmDD;;;;;GAKG;AACH,wBAAgB,qCAAqC,CACnD,MAAM,EAAE,CAAC,CAAC,UAAU,EACpB,OAAO,GAAE,iCAAsC,EAC/C,aAAa,GAAE,OAAO,CAAC,MAAM,CAAyB,GACrD,CAAC,CAAC,UAAU,CAgOd"}
1
+ {"version":3,"file":"templatable-file-fields.shared.utils.d.ts","sourceRoot":"","sources":["../../../../../src/resources/utils/templatable-file-fields.shared.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAkBL,KAAK,kBAAkB,EACxB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,WAAW,iCAAiC;IAChD,mBAAmB,CAAC,EAAE,CACpB,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,EACxB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,CAAC,KAChC,CAAC,CAAC,UAAU,CAAC;CACnB;AAiBD,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,CAAC,CAAC,UAAU,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,qBAAa,yCAA0C,SAAQ,KAAK;aAEhD,SAAS,EAAE,MAAM;aACjB,gBAAgB,EAAE,kBAAkB,GAAG,SAAS;aAChD,mBAAmB,EAAE,kBAAkB,GAAG,SAAS;gBAFnD,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,kBAAkB,GAAG,SAAS,EAChD,mBAAmB,EAAE,kBAAkB,GAAG,SAAS;CAOtE;AAED,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,CAAC,CAAC,UAAU,EACpB,UAAU,SAAK,EACf,aAAa,UAAQ,EACrB,aAAa,GAAE,OAAO,CAAC,MAAM,CAAyB,GACrD,wBAAwB,EAAE,CAmG5B;AAmDD;;;;;GAKG;AACH,wBAAgB,qCAAqC,CACnD,MAAM,EAAE,CAAC,CAAC,UAAU,EACpB,OAAO,GAAE,iCAAsC,EAC/C,aAAa,GAAE,OAAO,CAAC,MAAM,CAAyB,GACrD,CAAC,CAAC,UAAU,CAgOd"}
@@ -1 +1 @@
1
- {"version":3,"file":"templatable-file-fields.shared.utils.js","sourceRoot":"","sources":["../../../../src/resources/utils/templatable-file-fields.shared.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,SAAS,EACT,iBAAiB,EACjB,uBAAuB,EACvB,uBAAuB,EACvB,iBAAiB,EACjB,UAAU,EACV,sBAAsB,EACtB,UAAU,EACV,YAAY,EACZ,aAAa,EACb,WAAW,EACX,aAAa,EACb,eAAe,EACf,YAAY,EACZ,gBAAgB,GAEjB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB;;;;;;GAMG;AACH,SAAS,mBAAmB,CAA+B,MAAoB,EAAE,OAAgB;IAC/F,MAAM,QAAQ,GAAI,MAAc,CAAC,eAAe,CAAC,CAAC;IAClD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAe,CAAC,eAAe,CAAC,GAAG,QAAQ,CAAC;IAC/C,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAQD,MAAM,OAAO,yCAA0C,SAAQ,KAAK;IAEhD;IACA;IACA;IAHlB,YACkB,SAAiB,EACjB,gBAAgD,EAChD,mBAAmD;QAEnE,KAAK,CACH,kFAAkF,SAAS,IAAI,CAChG,CAAC;QANc,cAAS,GAAT,SAAS,CAAQ;QACjB,qBAAgB,GAAhB,gBAAgB,CAAgC;QAChD,wBAAmB,GAAnB,mBAAmB,CAAgC;QAKnE,IAAI,CAAC,IAAI,GAAG,2CAA2C,CAAC;IAC1D,CAAC;CACF;AAED,MAAM,UAAU,gCAAgC,CAC9C,MAAoB,EACpB,UAAU,GAAG,EAAE,EACf,aAAa,GAAG,KAAK,EACrB,gBAAiC,IAAI,OAAO,EAAU;IAEtD,IAAI,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1B,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,aAAa,KAAK,MAAM,EAAE,CAAC;YAC7B,MAAM,QAAQ,GAAG,uBAAuB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACvD,MAAM,SAAS,GAAG,uBAAuB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YACzD,OAAO,8BAA8B,CAAC;gBACpC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,gCAAgC,CAAC,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,gCAAgC,CAAC,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aAC5G,CAAC,CAAC;QACL,CAAC;QAED,IAAI,aAAa,CAAC,MAAM,CAAC,IAAI,aAAa,CAAC,MAAM,CAAC,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3E,MAAM,WAAW,GAAG,uBAAuB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YACjE,OAAO,WAAW;gBAChB,CAAC,CAAC,gCAAgC,CAAC,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,CAAC;gBACzF,CAAC,CAAC,EAAE,CAAC;QACT,CAAC;QAED,MAAM,eAAe,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QAC7C,IAAI,eAAe,KAAK,MAAM,EAAE,CAAC;YAC/B,OAAO,gCAAgC,CAAC,eAAe,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;QACrG,CAAC;QAED,IAAI,sBAAsB,CAAC,eAAe,CAAC,EAAE,CAAC;YAC5C,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/F,CAAC;QAED,MAAM,UAAU,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC;QAC/C,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;YAC1B,MAAM,UAAU,GAAG,SAAS,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;YACtD,MAAM,UAAU,GAAG,OAAO,UAAU,KAAK,UAAU;gBACjD,CAAC,CAAC,UAAU,EAAE;gBACd,CAAC,CAAC,SAAS,CAAC;YACd,OAAO,UAAU;gBACf,CAAC,CAAC,gCAAgC,CAAC,UAA0B,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,CAAC;gBACxG,CAAC,CAAC,EAAE,CAAC;QACT,CAAC;QAED,IAAI,UAAU,KAAK,cAAc,EAAE,CAAC;YAClC,MAAM,UAAU,GAAG,uBAAuB,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;YACpE,MAAM,WAAW,GAAG,uBAAuB,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;YACtE,OAAO,8BAA8B,CAAC;gBACpC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,gCAAgC,CAAC,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7G,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,gCAAgC,CAAC,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aAChH,CAAC,CAAC;QACL,CAAC;QAED,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;YAC3B,MAAM,YAAY,GAAG,sBAAsB,CAAC,eAAe,EAAE,SAAS,CAA+B,CAAC;YACtG,OAAO,8BAA8B,CACnC,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CACtC,gCAAgC,CAAC,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,CAAC,CACnF,CACF,CAAC;QACJ,CAAC;QAED,IAAI,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YAChC,MAAM,aAAa,GAAG,iBAAiB,CAAC,eAAe,EAAE,SAAS,CAA6B,CAAC;YAChG,OAAO,aAAa,CAAC,CAAC,CAAC,gCAAgC,CAAC,aAAa,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/G,CAAC;QAED,IAAI,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,KAAK,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;YAC5E,MAAM,WAAW,GAAG,uBAAuB,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;YAC1E,OAAO,WAAW;gBAChB,CAAC,CAAC,gCAAgC,CAAC,WAAW,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,CAAC;gBAChF,CAAC,CAAC,EAAE,CAAC;QACT,CAAC;QAED,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;YAC3B,MAAM,UAAU,GAAG,sBAAsB,CAAC,eAAe,EAAE,OAAO,CAA+B,CAAC;YAClG,MAAM,UAAU,GAAG,uBAAuB,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;YACpE,OAAO,8BAA8B,CAAC;gBACpC,GAAG,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CACtC,gCAAgC,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,CAAC,CACxE,CAAC;gBACF,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,gCAAgC,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aACrG,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,EAAE,CAAC;YAClC,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,KAAK,GAAG,iBAAiB,CAAC,eAAe,CAAC,CAAC;QACjD,OAAO,8BAA8B,CACnC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,EAAE;YACzD,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YACvE,OAAO,gCAAgC,CAAC,WAA2B,EAAE,QAAQ,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;QAC/G,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC;AAED,SAAS,8BAA8B,CACrC,MAAkC;IAElC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAoC,CAAC;IAChE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAClD,IAAI,QAAQ,IAAI,CAAC,oCAAoC,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;YACrF,MAAM,IAAI,yCAAyC,CACjD,KAAK,CAAC,SAAS,EACf,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,EAChC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAC9B,CAAC;QACJ,CAAC;QACD,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,QAAQ;YACvC,CAAC,CAAC;gBACE,GAAG,QAAQ;gBACX,aAAa,EAAE,QAAQ,CAAC,aAAa,IAAI,KAAK,CAAC,aAAa;aAC7D;YACH,CAAC,CAAC,KAAK,CAAC,CAAC;IACb,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAC3D,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,CAC9C,CAAC;AACJ,CAAC;AAED,SAAS,8BAA8B,CAAC,KAAc;IACpD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IACnD,CAAC;IAED,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvC,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC;aAC7C,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;aACpD,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,8BAA8B,CAAC,UAAU,CAAC,CAAC,CAAC,CACjF,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,oCAAoC,CAC3C,UAAwB,EACxB,WAAyB;IAEzB,OAAO,IAAI,CAAC,SAAS,CAAC,8BAA8B,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC;YAC5E,IAAI,CAAC,SAAS,CAAC,8BAA8B,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AACrF,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qCAAqC,CACnD,MAAoB,EACpB,UAA6C,EAAE,EAC/C,gBAAiC,IAAI,OAAO,EAAU;IAEtD,IAAI,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9B,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAE1B,IAAI,CAAC;QACH;;;;;;;;WAQG;QACH,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,MAAM,WAAW,GAAG,uBAAuB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YACjE,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,OAAO,MAAM,CAAC;YAChB,CAAC;YACD,MAAM,aAAa,GAAG,qCAAqC,CAAC,WAAW,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;YACjG,OAAO,aAAa,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,MAAM,EAAE,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC;QACxG,CAAC;QAED,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,MAAM,WAAW,GAAG,uBAAuB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YACjE,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,OAAO,MAAM,CAAC;YAChB,CAAC;YACD,MAAM,aAAa,GAAG,qCAAqC,CAAC,WAAW,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;YACjG,OAAO,aAAa,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,MAAM,EAAE,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC;QACxG,CAAC;QAED,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;YACzB,MAAM,WAAW,GAAG,uBAAuB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YACjE,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,OAAO,MAAM,CAAC;YAChB,CAAC;YACD,MAAM,aAAa,GAAG,qCAAqC,CAAC,WAAW,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;YACjG,IAAI,aAAa,KAAK,WAAW,EAAE,CAAC;gBAClC,OAAO,MAAM,CAAC;YAChB,CAAC;YACD,8EAA8E;YAC9E,6EAA6E;YAC7E,4EAA4E;YAC5E,4EAA4E;YAC5E,6EAA6E;YAC7E,+EAA+E;YAC/E,OAAO,mBAAmB,CAAC,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,MAAM,EAAE,cAAc,CAAY,CAAC,CAAC,CAAC;QACxH,CAAC;QAED,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;YAC1B,MAAM,QAAQ,GAAG,uBAAuB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACvD,MAAM,SAAS,GAAG,uBAAuB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YACzD,MAAM,UAAU,GAAG,QAAQ;gBACzB,CAAC,CAAC,qCAAqC,CAAC,QAAQ,EAAE,OAAO,EAAE,aAAa,CAAC;gBACzE,CAAC,CAAC,QAAQ,CAAC;YACb,MAAM,WAAW,GAAG,SAAS;gBAC3B,CAAC,CAAC,qCAAqC,CAAC,SAAS,EAAE,OAAO,EAAE,aAAa,CAAC;gBAC1E,CAAC,CAAC,SAAS,CAAC;YACd,IAAI,UAAU,KAAK,QAAQ,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;gBACzD,OAAO,MAAM,CAAC;YAChB,CAAC;YACD,IAAI,UAAU,IAAI,WAAW,EAAE,CAAC;gBAC9B,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;YACzC,CAAC;YACD,OAAO,WAAW,IAAI,UAAU,IAAI,MAAM,CAAC;QAC7C,CAAC;QAED,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;YAC1B,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;YAC7C,IAAI,OAAO,UAAU,KAAK,UAAU,EAAE,CAAC;gBACrC,OAAO,MAAM,CAAC;YAChB,CAAC;YACD,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CACjB,qCAAqC,CAAC,UAAU,EAAkB,EAAE,OAAO,EAAE,aAAa,CAAC,CAC5F,CAAC;QACJ,CAAC;QAED,IAAI,UAAU,KAAK,cAAc,EAAE,CAAC;YAClC,MAAM,UAAU,GAAG,uBAAuB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC3D,MAAM,WAAW,GAAG,uBAAuB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC7D,MAAM,YAAY,GAAG,UAAU;gBAC7B,CAAC,CAAC,qCAAqC,CAAC,UAAU,EAAE,OAAO,EAAE,aAAa,CAAC;gBAC3E,CAAC,CAAC,UAAU,CAAC;YACf,MAAM,aAAa,GAAG,WAAW;gBAC/B,CAAC,CAAC,qCAAqC,CAAC,WAAW,EAAE,OAAO,EAAE,aAAa,CAAC;gBAC5E,CAAC,CAAC,WAAW,CAAC;YAChB,OAAO,YAAY,KAAK,UAAU,IAAI,aAAa,KAAK,WAAW;gBACjE,CAAC,CAAC,MAAM;gBACR,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,YAAY,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,aAAa,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAClF,CAAC;QAED,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;YAC3B,MAAM,aAAa,GAAG,uBAAuB,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;YACvE,MAAM,YAAY,GAAG,sBAAsB,CAAC,MAAM,EAAE,SAAS,CAA+B,CAAC;YAC7F,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC;gBAC1B,OAAO,MAAM,CAAC;YAChB,CAAC;YAED,MAAM,eAAe,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAClD,qCAAqC,CAAC,MAAM,EAAE,OAAO,EAAE,aAAa,CAAC,CACtE,CAAC;YACF,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/B,OAAO,eAAe,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC;YACtC,CAAC;YACD,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,KAAK,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBAC7E,OAAO,MAAM,CAAC;YAChB,CAAC;YAED,MAAM,YAAY,GAAiB,aAAa;gBAC9C,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAClB,aAAa,EACb,eAA8E,CAC/E;gBACH,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,eAAkE,CAAC,CAAC;YAChF,OAAO,mBAAmB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QACnD,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACvB,MAAM,aAAa,GAAG,iBAAiB,CAAC,MAAM,EAAE,SAAS,CAA6B,CAAC;YACvF,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,OAAO,MAAM,CAAC;YAChB,CAAC;YAED,MAAM,eAAe,GAAG,qCAAqC,CAAC,aAAa,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;YAErG,wFAAwF;YACxF,2CAA2C;YAC3C,IAAI,eAAe,KAAK,aAAa,EAAE,CAAC;gBACtC,OAAO,MAAM,CAAC;YAChB,CAAC;YAED,4FAA4F;YAC5F,4FAA4F;YAC5F,2FAA2F;YAC3F,kDAAkD;YAClD,OAAO,gBAAgB,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QACnD,CAAC;QAED,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;YAC5B,MAAM,SAAS,GAAG,uBAAuB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAC7D,MAAM,WAAW,GAAG,uBAAuB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YACjE,MAAM,aAAa,GAAG,WAAW;gBAC/B,CAAC,CAAC,qCAAqC,CAAC,WAAW,EAAE,OAAO,EAAE,aAAa,CAAC;gBAC5E,CAAC,CAAC,WAAW,CAAC;YAChB,OAAO,WAAW,IAAI,aAAa,KAAK,WAAW;gBACjD,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,MAAM,EAAE,CAAQ,EAAE,aAAa,CAAC;gBAC3D,CAAC,CAAC,MAAM,CAAC;QACb,CAAC;QAED,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,uBAAuB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAC7D,MAAM,WAAW,GAAG,uBAAuB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YACjE,MAAM,aAAa,GAAG,WAAW;gBAC/B,CAAC,CAAC,qCAAqC,CAAC,WAAW,EAAE,OAAO,EAAE,aAAa,CAAC;gBAC5E,CAAC,CAAC,WAAW,CAAC;YAChB,OAAO,SAAS,IAAI,WAAW,IAAI,aAAa,KAAK,WAAW;gBAC9D,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,aAAa,CAAC;gBACjC,CAAC,CAAC,MAAM,CAAC;QACb,CAAC;QAED,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;YACzB,MAAM,WAAW,GAAG,uBAAuB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YACjE,MAAM,aAAa,GAAG,WAAW;gBAC/B,CAAC,CAAC,qCAAqC,CAAC,WAAW,EAAE,OAAO,EAAE,aAAa,CAAC;gBAC5E,CAAC,CAAC,WAAW,CAAC;YAChB,OAAO,WAAW,IAAI,aAAa,KAAK,WAAW;gBACjD,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC;gBACtB,CAAC,CAAC,MAAM,CAAC;QACb,CAAC;QAED,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;YAC3B,MAAM,UAAU,GAAG,sBAAsB,CAAC,MAAM,EAAE,OAAO,CAA+B,CAAC;YACzF,MAAM,UAAU,GAAG,uBAAuB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC3D,MAAM,aAAa,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACpD,qCAAqC,CAAC,IAAI,EAAE,OAAO,EAAE,aAAa,CAAC,CACpE,CAAC;YACF,MAAM,YAAY,GAAG,UAAU;gBAC7B,CAAC,CAAC,qCAAqC,CAAC,UAAU,EAAE,OAAO,EAAE,aAAa,CAAC;gBAC3E,CAAC,CAAC,UAAU,CAAC;YACf,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC;mBAC5E,YAAY,KAAK,UAAU,CAAC;YACjC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,MAAM,CAAC;YAChB,CAAC;YACD,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,aAAoB,CAAC,CAAC;YACnD,OAAO,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;QACvE,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;YACzB,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,KAAK,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACxC,MAAM,aAAa,GAAiC,EAAE,CAAC;QACvD,IAAI,OAAO,GAAG,KAAK,CAAC;QAEpB,KAAK,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7D,MAAM,WAAW,GAAG,WAA2B,CAAC;YAChD,IAAI,sBAAsB,CAAC,WAAW,CAAC,EAAE,CAAC;gBACxC,OAAO,GAAG,IAAI,CAAC;gBACf,SAAS;YACX,CAAC;YAED,MAAM,cAAc,GAAG,qCAAqC,CAAC,WAAW,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;YAClG,IAAI,cAAc,KAAK,WAAW,EAAE,CAAC;gBACnC,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;YACD,aAAa,CAAC,SAAS,CAAC,GAAG,cAAc,CAAC;QAC5C,CAAC;QAED,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,OAAO,OAAO,CAAC,mBAAmB;YAChC,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,MAAM,EAAE,aAAa,CAAC;YACpD,CAAC,CAAC,sCAAsC,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACpE,CAAC;YAAS,CAAC;QACT,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC;AAED,SAAS,sCAAsC,CAC7C,MAAwB,EACxB,aAA2C;IAE3C,MAAM,aAAa,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,IAAI,aAAa,CAAC,CAAC,CAAC;IAEtG,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC;YAC5C,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAyB,CAAC;YAC9G,CAAC,CAAC,MAAM,CAAC;QAEX,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QACrD,iGAAiG;QACjG,yFAAyF;QACzF,OAAO,aAAa,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IACvF,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAC9C,MAAM,cAAc,GAAG,iBAAiB,CAAC,MAAM,EAAE,UAAU,CAA6B,CAAC;QACzF,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;QACxF,OAAO,aAAa,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IACrF,CAAC;AACH,CAAC","sourcesContent":["import {\n getFileMetadata,\n getZodDefArrayProperty,\n getZodDef,\n getZodDefProperty,\n getZodDefSchemaProperty,\n getZodDefStringProperty,\n getZodObjectShape,\n getZodType,\n isTemplatableFileField,\n isZodArray,\n isZodDefault,\n isZodNullable,\n isZodObject,\n isZodOptional,\n SCHEMA_METADATA,\n unwrapSchema,\n withArrayElement,\n type FileSchemaMetadata,\n} from '@wildo-ai/zod-decorators';\nimport { z } from 'zod';\n\nexport interface StripTemplatableFileFieldsOptions {\n rebuildObjectSchema?: (\n schema: z.ZodObject<any>,\n shape: Record<string, z.ZodTypeAny>,\n ) => z.ZodTypeAny;\n}\n\n/**\n * Carry decorator metadata (`SCHEMA_METADATA`) from a schema onto the instance that replaces it.\n *\n * Structured value types (`z_address`, `z_file`, `z_money`, `z_range`, …) record their identity as\n * metadata on the schema INSTANCE. A rebuild that does not carry it turns the field into a plain\n * object, and the form then renders its parts as unrelated inputs.\n */\nfunction carrySchemaMetadata<TSchema extends z.ZodTypeAny>(source: z.ZodTypeAny, rebuilt: TSchema): TSchema {\n const metadata = (source as any)[SCHEMA_METADATA];\n if (metadata !== undefined) {\n (rebuilt as any)[SCHEMA_METADATA] = metadata;\n }\n return rebuilt;\n}\n\nexport interface TemplatableFileFieldPath {\n fieldName: string;\n schema: z.ZodTypeAny;\n isInsideArray: boolean;\n}\n\nexport class IncompatibleTemplatableFileFieldPathError extends Error {\n constructor(\n public readonly fieldName: string,\n public readonly existingMetadata: FileSchemaMetadata | undefined,\n public readonly conflictingMetadata: FileSchemaMetadata | undefined,\n ) {\n super(\n `Incompatible generated file metadata detected for templatable file field path \"${fieldName}\".`,\n );\n this.name = 'IncompatibleTemplatableFileFieldPathError';\n }\n}\n\nexport function collectTemplatableFileFieldPaths(\n schema: z.ZodTypeAny,\n pathPrefix = '',\n isInsideArray = false,\n activeSchemas: WeakSet<object> = new WeakSet<object>(),\n): TemplatableFileFieldPath[] {\n if (activeSchemas.has(schema)) {\n return [];\n }\n\n activeSchemas.add(schema);\n try {\n const rawSchemaType = getZodType(schema);\n if (rawSchemaType === 'pipe') {\n const inSchema = getZodDefSchemaProperty(schema, 'in');\n const outSchema = getZodDefSchemaProperty(schema, 'out');\n return mergeTemplatableFileFieldPaths([\n ...(inSchema ? collectTemplatableFileFieldPaths(inSchema, pathPrefix, isInsideArray, activeSchemas) : []),\n ...(outSchema ? collectTemplatableFileFieldPaths(outSchema, pathPrefix, isInsideArray, activeSchemas) : []),\n ]);\n }\n\n if (isZodOptional(schema) || isZodNullable(schema) || isZodDefault(schema)) {\n const innerSchema = getZodDefSchemaProperty(schema, 'innerType');\n return innerSchema\n ? collectTemplatableFileFieldPaths(innerSchema, pathPrefix, isInsideArray, activeSchemas)\n : [];\n }\n\n const unwrappedSchema = unwrapSchema(schema);\n if (unwrappedSchema !== schema) {\n return collectTemplatableFileFieldPaths(unwrappedSchema, pathPrefix, isInsideArray, activeSchemas);\n }\n\n if (isTemplatableFileField(unwrappedSchema)) {\n return pathPrefix ? [{ fieldName: pathPrefix, schema: unwrappedSchema, isInsideArray }] : [];\n }\n\n const schemaType = getZodType(unwrappedSchema);\n if (schemaType === 'lazy') {\n const lazyGetter = getZodDef(unwrappedSchema)?.getter;\n const lazySchema = typeof lazyGetter === 'function'\n ? lazyGetter()\n : undefined;\n return lazySchema\n ? collectTemplatableFileFieldPaths(lazySchema as z.ZodTypeAny, pathPrefix, isInsideArray, activeSchemas)\n : [];\n }\n\n if (schemaType === 'intersection') {\n const leftSchema = getZodDefSchemaProperty(unwrappedSchema, 'left');\n const rightSchema = getZodDefSchemaProperty(unwrappedSchema, 'right');\n return mergeTemplatableFileFieldPaths([\n ...(leftSchema ? collectTemplatableFileFieldPaths(leftSchema, pathPrefix, isInsideArray, activeSchemas) : []),\n ...(rightSchema ? collectTemplatableFileFieldPaths(rightSchema, pathPrefix, isInsideArray, activeSchemas) : []),\n ]);\n }\n\n if (schemaType === 'union') {\n const unionOptions = getZodDefArrayProperty(unwrappedSchema, 'options') as z.ZodTypeAny[] | undefined;\n return mergeTemplatableFileFieldPaths(\n (unionOptions ?? []).flatMap((option) =>\n collectTemplatableFileFieldPaths(option, pathPrefix, isInsideArray, activeSchemas)\n ),\n );\n }\n\n if (isZodArray(unwrappedSchema)) {\n const elementSchema = getZodDefProperty(unwrappedSchema, 'element') as z.ZodTypeAny | undefined;\n return elementSchema ? collectTemplatableFileFieldPaths(elementSchema, pathPrefix, true, activeSchemas) : [];\n }\n\n if (schemaType === 'record' || schemaType === 'map' || schemaType === 'set') {\n const valueSchema = getZodDefSchemaProperty(unwrappedSchema, 'valueType');\n return valueSchema\n ? collectTemplatableFileFieldPaths(valueSchema, pathPrefix, true, activeSchemas)\n : [];\n }\n\n if (schemaType === 'tuple') {\n const tupleItems = getZodDefArrayProperty(unwrappedSchema, 'items') as z.ZodTypeAny[] | undefined;\n const restSchema = getZodDefSchemaProperty(unwrappedSchema, 'rest');\n return mergeTemplatableFileFieldPaths([\n ...((tupleItems ?? []).flatMap((item) =>\n collectTemplatableFileFieldPaths(item, pathPrefix, true, activeSchemas)\n )),\n ...(restSchema ? collectTemplatableFileFieldPaths(restSchema, pathPrefix, true, activeSchemas) : []),\n ]);\n }\n\n if (!isZodObject(unwrappedSchema)) {\n return [];\n }\n\n const shape = getZodObjectShape(unwrappedSchema);\n return mergeTemplatableFileFieldPaths(\n Object.entries(shape).flatMap(([fieldName, fieldSchema]) => {\n const nextPath = pathPrefix ? `${pathPrefix}.${fieldName}` : fieldName;\n return collectTemplatableFileFieldPaths(fieldSchema as z.ZodTypeAny, nextPath, isInsideArray, activeSchemas);\n }),\n );\n } finally {\n activeSchemas.delete(schema);\n }\n}\n\nfunction mergeTemplatableFileFieldPaths(\n fields: TemplatableFileFieldPath[],\n): TemplatableFileFieldPath[] {\n const byFieldName = new Map<string, TemplatableFileFieldPath>();\n for (const field of fields) {\n const existing = byFieldName.get(field.fieldName);\n if (existing && !areTemplatableFileMetadataCompatible(existing.schema, field.schema)) {\n throw new IncompatibleTemplatableFileFieldPathError(\n field.fieldName,\n getFileMetadata(existing.schema),\n getFileMetadata(field.schema),\n );\n }\n byFieldName.set(field.fieldName, existing\n ? {\n ...existing,\n isInsideArray: existing.isInsideArray || field.isInsideArray,\n }\n : field);\n }\n return Array.from(byFieldName.values()).sort((left, right) =>\n left.fieldName.localeCompare(right.fieldName)\n );\n}\n\nfunction normalizeMetadataForComparison(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map(normalizeMetadataForComparison);\n }\n\n if (value && typeof value === 'object') {\n return Object.fromEntries(\n Object.entries(value as Record<string, unknown>)\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([key, childValue]) => [key, normalizeMetadataForComparison(childValue)]),\n );\n }\n\n return value;\n}\n\nfunction areTemplatableFileMetadataCompatible(\n leftSchema: z.ZodTypeAny,\n rightSchema: z.ZodTypeAny,\n): boolean {\n return JSON.stringify(normalizeMetadataForComparison(getFileMetadata(leftSchema)))\n === JSON.stringify(normalizeMetadataForComparison(getFileMetadata(rightSchema)));\n}\n\n/**\n * Remove generated PDF file fields from request DTO schemas, including nested\n * structures and union arms. These fields are framework-owned outputs, so they\n * must never appear in frontend/authored write DTOs even when custom DTOs are\n * provided by an application.\n */\nexport function stripTemplatableFileFieldsRecursively(\n schema: z.ZodTypeAny,\n options: StripTemplatableFileFieldsOptions = {},\n activeSchemas: WeakSet<object> = new WeakSet<object>(),\n): z.ZodTypeAny {\n if (activeSchemas.has(schema)) {\n return schema;\n }\n activeSchemas.add(schema);\n\n try {\n /*\n * Wrappers hand back the ORIGINAL instance when nothing beneath them changed (#989).\n *\n * They used to rebuild `inner.optional()` unconditionally. A fresh wrapper is a different\n * instance, so the enclosing object read it as \"changed\" and was rebuilt too — and the rebuild\n * dropped the object's decorator metadata. A `z_address()` nested in any object therefore reached\n * the create and update request DTOs as a plain object, and the form rendered its parts as\n * unrelated text inputs. Identity is what tells the object branch nothing was stripped.\n */\n if (isZodOptional(schema)) {\n const innerSchema = getZodDefSchemaProperty(schema, 'innerType');\n if (!innerSchema) {\n return schema;\n }\n const strippedInner = stripTemplatableFileFieldsRecursively(innerSchema, options, activeSchemas);\n return strippedInner === innerSchema ? schema : carrySchemaMetadata(schema, strippedInner.optional());\n }\n\n if (isZodNullable(schema)) {\n const innerSchema = getZodDefSchemaProperty(schema, 'innerType');\n if (!innerSchema) {\n return schema;\n }\n const strippedInner = stripTemplatableFileFieldsRecursively(innerSchema, options, activeSchemas);\n return strippedInner === innerSchema ? schema : carrySchemaMetadata(schema, strippedInner.nullable());\n }\n\n if (isZodDefault(schema)) {\n const innerSchema = getZodDefSchemaProperty(schema, 'innerType');\n if (!innerSchema) {\n return schema;\n }\n const strippedInner = stripTemplatableFileFieldsRecursively(innerSchema, options, activeSchemas);\n if (strippedInner === innerSchema) {\n return schema;\n }\n // Re-READ the default per parse rather than carrying a value across. In Zod 4\n // `def.defaultValue` is a GETTER, so reading it here EVALUATES the default —\n // and this stripped schema is built once, at configuration time, so a value\n // read here would be frozen into every parse the process performs. (The old\n // `typeof defaultValue === 'function'` branch could never fire for a dynamic\n // default for the same reason: the getter returns the VALUE, not the factory.)\n return carrySchemaMetadata(schema, strippedInner.default(() => getZodDefProperty(schema, 'defaultValue') as unknown));\n }\n\n const schemaType = getZodType(schema);\n if (schemaType === 'pipe') {\n const inSchema = getZodDefSchemaProperty(schema, 'in');\n const outSchema = getZodDefSchemaProperty(schema, 'out');\n const strippedIn = inSchema\n ? stripTemplatableFileFieldsRecursively(inSchema, options, activeSchemas)\n : inSchema;\n const strippedOut = outSchema\n ? stripTemplatableFileFieldsRecursively(outSchema, options, activeSchemas)\n : outSchema;\n if (strippedIn === inSchema && strippedOut === outSchema) {\n return schema;\n }\n if (strippedIn && strippedOut) {\n return z.pipe(strippedIn, strippedOut);\n }\n return strippedOut ?? strippedIn ?? schema;\n }\n\n if (schemaType === 'lazy') {\n const lazyGetter = getZodDef(schema)?.getter;\n if (typeof lazyGetter !== 'function') {\n return schema;\n }\n return z.lazy(() =>\n stripTemplatableFileFieldsRecursively(lazyGetter() as z.ZodTypeAny, options, activeSchemas)\n );\n }\n\n if (schemaType === 'intersection') {\n const leftSchema = getZodDefSchemaProperty(schema, 'left');\n const rightSchema = getZodDefSchemaProperty(schema, 'right');\n const strippedLeft = leftSchema\n ? stripTemplatableFileFieldsRecursively(leftSchema, options, activeSchemas)\n : leftSchema;\n const strippedRight = rightSchema\n ? stripTemplatableFileFieldsRecursively(rightSchema, options, activeSchemas)\n : rightSchema;\n return strippedLeft === leftSchema && strippedRight === rightSchema\n ? schema\n : z.intersection(strippedLeft ?? z.object({}), strippedRight ?? z.object({}));\n }\n\n if (schemaType === 'union') {\n const discriminator = getZodDefStringProperty(schema, 'discriminator');\n const unionOptions = getZodDefArrayProperty(schema, 'options') as z.ZodTypeAny[] | undefined;\n if (!unionOptions?.length) {\n return schema;\n }\n\n const strippedOptions = unionOptions.map((option) =>\n stripTemplatableFileFieldsRecursively(option, options, activeSchemas)\n );\n if (strippedOptions.length < 2) {\n return strippedOptions[0] ?? schema;\n }\n if (strippedOptions.every((option, index) => option === unionOptions[index])) {\n return schema;\n }\n\n const rebuiltUnion: z.ZodTypeAny = discriminator\n ? z.discriminatedUnion(\n discriminator,\n strippedOptions as [z.ZodObject<any>, z.ZodObject<any>, ...z.ZodObject<any>[]],\n )\n : z.union(strippedOptions as [z.ZodTypeAny, z.ZodTypeAny, ...z.ZodTypeAny[]]);\n return carrySchemaMetadata(schema, rebuiltUnion);\n }\n\n if (isZodArray(schema)) {\n const elementSchema = getZodDefProperty(schema, 'element') as z.ZodTypeAny | undefined;\n if (!elementSchema) {\n return schema;\n }\n\n const strippedElement = stripTemplatableFileFieldsRecursively(elementSchema, options, activeSchemas);\n\n // Nothing to strip inside the element — hand back the ORIGINAL schema, the same way the\n // intersection / record / map branches do.\n if (strippedElement === elementSchema) {\n return schema;\n }\n\n // The element WAS rewritten. `withArrayElement` keeps the array's own `.min()` / `.max()` /\n // `.length()` checks across the swap; a plain `z.array(strippedElement)` — what this branch\n // used to do unconditionally — drops them, so an authored constraint never reached the DTO\n // the controller and repository validate against.\n return withArrayElement(schema, strippedElement);\n }\n\n if (schemaType === 'record') {\n const keySchema = getZodDefSchemaProperty(schema, 'keyType');\n const valueSchema = getZodDefSchemaProperty(schema, 'valueType');\n const strippedValue = valueSchema\n ? stripTemplatableFileFieldsRecursively(valueSchema, options, activeSchemas)\n : valueSchema;\n return valueSchema && strippedValue !== valueSchema\n ? z.record((keySchema ?? z.string()) as any, strippedValue)\n : schema;\n }\n\n if (schemaType === 'map') {\n const keySchema = getZodDefSchemaProperty(schema, 'keyType');\n const valueSchema = getZodDefSchemaProperty(schema, 'valueType');\n const strippedValue = valueSchema\n ? stripTemplatableFileFieldsRecursively(valueSchema, options, activeSchemas)\n : valueSchema;\n return keySchema && valueSchema && strippedValue !== valueSchema\n ? z.map(keySchema, strippedValue)\n : schema;\n }\n\n if (schemaType === 'set') {\n const valueSchema = getZodDefSchemaProperty(schema, 'valueType');\n const strippedValue = valueSchema\n ? stripTemplatableFileFieldsRecursively(valueSchema, options, activeSchemas)\n : valueSchema;\n return valueSchema && strippedValue !== valueSchema\n ? z.set(strippedValue)\n : schema;\n }\n\n if (schemaType === 'tuple') {\n const tupleItems = getZodDefArrayProperty(schema, 'items') as z.ZodTypeAny[] | undefined;\n const restSchema = getZodDefSchemaProperty(schema, 'rest');\n const strippedItems = (tupleItems ?? []).map((item) =>\n stripTemplatableFileFieldsRecursively(item, options, activeSchemas)\n );\n const strippedRest = restSchema\n ? stripTemplatableFileFieldsRecursively(restSchema, options, activeSchemas)\n : restSchema;\n const changed = strippedItems.some((item, index) => item !== tupleItems?.[index])\n || strippedRest !== restSchema;\n if (!changed) {\n return schema;\n }\n const rebuiltTuple = z.tuple(strippedItems as any);\n return strippedRest ? rebuiltTuple.rest(strippedRest) : rebuiltTuple;\n }\n\n if (!isZodObject(schema)) {\n return schema;\n }\n\n const shape = getZodObjectShape(schema);\n const strippedShape: Record<string, z.ZodTypeAny> = {};\n let changed = false;\n\n for (const [fieldName, fieldSchema] of Object.entries(shape)) {\n const typedSchema = fieldSchema as z.ZodTypeAny;\n if (isTemplatableFileField(typedSchema)) {\n changed = true;\n continue;\n }\n\n const strippedSchema = stripTemplatableFileFieldsRecursively(typedSchema, options, activeSchemas);\n if (strippedSchema !== typedSchema) {\n changed = true;\n }\n strippedShape[fieldName] = strippedSchema;\n }\n\n if (!changed) {\n return schema;\n }\n\n return options.rebuildObjectSchema\n ? options.rebuildObjectSchema(schema, strippedShape)\n : rebuildObjectSchemaPreservingSemantics(schema, strippedShape);\n } finally {\n activeSchemas.delete(schema);\n }\n}\n\nfunction rebuildObjectSchemaPreservingSemantics(\n schema: z.ZodObject<any>,\n strippedShape: Record<string, z.ZodTypeAny>,\n): z.ZodTypeAny {\n const originalShape = getZodObjectShape(schema);\n const removedFields = Object.keys(originalShape).filter((fieldName) => !(fieldName in strippedShape));\n\n try {\n const omittedSchema = removedFields.length > 0\n ? schema.omit(Object.fromEntries(removedFields.map((fieldName) => [fieldName, true])) as Record<string, true>)\n : schema;\n\n const extended = omittedSchema.extend(strippedShape);\n // Same field set, only a nested field replaced: the object is still what its metadata describes.\n // A field REMOVED means it may not be, so the metadata stays behind on that path (#989).\n return removedFields.length === 0 ? carrySchemaMetadata(schema, extended) : extended;\n } catch {\n const rebuiltSchema = z.object(strippedShape);\n const catchallSchema = getZodDefProperty(schema, 'catchall') as z.ZodTypeAny | undefined;\n const rebuilt = catchallSchema ? rebuiltSchema.catchall(catchallSchema) : rebuiltSchema;\n return removedFields.length === 0 ? carrySchemaMetadata(schema, rebuilt) : rebuilt;\n }\n}\n"]}
1
+ {"version":3,"file":"templatable-file-fields.shared.utils.js","sourceRoot":"","sources":["../../../../../src/resources/utils/templatable-file-fields.shared.utils.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n getFileMetadata,\n getZodDefArrayProperty,\n getZodDef,\n getZodDefProperty,\n getZodDefSchemaProperty,\n getZodDefStringProperty,\n getZodObjectShape,\n getZodType,\n isTemplatableFileField,\n isZodArray,\n isZodDefault,\n isZodNullable,\n isZodObject,\n isZodOptional,\n SCHEMA_METADATA,\n unwrapSchema,\n withArrayElement,\n type FileSchemaMetadata,\n} from '@wildo-ai/zod-decorators';\nimport { z } from 'zod';\n\nexport interface StripTemplatableFileFieldsOptions {\n rebuildObjectSchema?: (\n schema: z.ZodObject<any>,\n shape: Record<string, z.ZodTypeAny>,\n ) => z.ZodTypeAny;\n}\n\n/**\n * Carry decorator metadata (`SCHEMA_METADATA`) from a schema onto the instance that replaces it.\n *\n * Structured value types (`z_address`, `z_file`, `z_money`, `z_range`, …) record their identity as\n * metadata on the schema INSTANCE. A rebuild that does not carry it turns the field into a plain\n * object, and the form then renders its parts as unrelated inputs.\n */\nfunction carrySchemaMetadata<TSchema extends z.ZodTypeAny>(source: z.ZodTypeAny, rebuilt: TSchema): TSchema {\n const metadata = (source as any)[SCHEMA_METADATA];\n if (metadata !== undefined) {\n (rebuilt as any)[SCHEMA_METADATA] = metadata;\n }\n return rebuilt;\n}\n\nexport interface TemplatableFileFieldPath {\n fieldName: string;\n schema: z.ZodTypeAny;\n isInsideArray: boolean;\n}\n\nexport class IncompatibleTemplatableFileFieldPathError extends Error {\n constructor(\n public readonly fieldName: string,\n public readonly existingMetadata: FileSchemaMetadata | undefined,\n public readonly conflictingMetadata: FileSchemaMetadata | undefined,\n ) {\n super(\n `Incompatible generated file metadata detected for templatable file field path \"${fieldName}\".`,\n );\n this.name = 'IncompatibleTemplatableFileFieldPathError';\n }\n}\n\nexport function collectTemplatableFileFieldPaths(\n schema: z.ZodTypeAny,\n pathPrefix = '',\n isInsideArray = false,\n activeSchemas: WeakSet<object> = new WeakSet<object>(),\n): TemplatableFileFieldPath[] {\n if (activeSchemas.has(schema)) {\n return [];\n }\n\n activeSchemas.add(schema);\n try {\n const rawSchemaType = getZodType(schema);\n if (rawSchemaType === 'pipe') {\n const inSchema = getZodDefSchemaProperty(schema, 'in');\n const outSchema = getZodDefSchemaProperty(schema, 'out');\n return mergeTemplatableFileFieldPaths([\n ...(inSchema ? collectTemplatableFileFieldPaths(inSchema, pathPrefix, isInsideArray, activeSchemas) : []),\n ...(outSchema ? collectTemplatableFileFieldPaths(outSchema, pathPrefix, isInsideArray, activeSchemas) : []),\n ]);\n }\n\n if (isZodOptional(schema) || isZodNullable(schema) || isZodDefault(schema)) {\n const innerSchema = getZodDefSchemaProperty(schema, 'innerType');\n return innerSchema\n ? collectTemplatableFileFieldPaths(innerSchema, pathPrefix, isInsideArray, activeSchemas)\n : [];\n }\n\n const unwrappedSchema = unwrapSchema(schema);\n if (unwrappedSchema !== schema) {\n return collectTemplatableFileFieldPaths(unwrappedSchema, pathPrefix, isInsideArray, activeSchemas);\n }\n\n if (isTemplatableFileField(unwrappedSchema)) {\n return pathPrefix ? [{ fieldName: pathPrefix, schema: unwrappedSchema, isInsideArray }] : [];\n }\n\n const schemaType = getZodType(unwrappedSchema);\n if (schemaType === 'lazy') {\n const lazyGetter = getZodDef(unwrappedSchema)?.getter;\n const lazySchema = typeof lazyGetter === 'function'\n ? lazyGetter()\n : undefined;\n return lazySchema\n ? collectTemplatableFileFieldPaths(lazySchema as z.ZodTypeAny, pathPrefix, isInsideArray, activeSchemas)\n : [];\n }\n\n if (schemaType === 'intersection') {\n const leftSchema = getZodDefSchemaProperty(unwrappedSchema, 'left');\n const rightSchema = getZodDefSchemaProperty(unwrappedSchema, 'right');\n return mergeTemplatableFileFieldPaths([\n ...(leftSchema ? collectTemplatableFileFieldPaths(leftSchema, pathPrefix, isInsideArray, activeSchemas) : []),\n ...(rightSchema ? collectTemplatableFileFieldPaths(rightSchema, pathPrefix, isInsideArray, activeSchemas) : []),\n ]);\n }\n\n if (schemaType === 'union') {\n const unionOptions = getZodDefArrayProperty(unwrappedSchema, 'options') as z.ZodTypeAny[] | undefined;\n return mergeTemplatableFileFieldPaths(\n (unionOptions ?? []).flatMap((option) =>\n collectTemplatableFileFieldPaths(option, pathPrefix, isInsideArray, activeSchemas)\n ),\n );\n }\n\n if (isZodArray(unwrappedSchema)) {\n const elementSchema = getZodDefProperty(unwrappedSchema, 'element') as z.ZodTypeAny | undefined;\n return elementSchema ? collectTemplatableFileFieldPaths(elementSchema, pathPrefix, true, activeSchemas) : [];\n }\n\n if (schemaType === 'record' || schemaType === 'map' || schemaType === 'set') {\n const valueSchema = getZodDefSchemaProperty(unwrappedSchema, 'valueType');\n return valueSchema\n ? collectTemplatableFileFieldPaths(valueSchema, pathPrefix, true, activeSchemas)\n : [];\n }\n\n if (schemaType === 'tuple') {\n const tupleItems = getZodDefArrayProperty(unwrappedSchema, 'items') as z.ZodTypeAny[] | undefined;\n const restSchema = getZodDefSchemaProperty(unwrappedSchema, 'rest');\n return mergeTemplatableFileFieldPaths([\n ...((tupleItems ?? []).flatMap((item) =>\n collectTemplatableFileFieldPaths(item, pathPrefix, true, activeSchemas)\n )),\n ...(restSchema ? collectTemplatableFileFieldPaths(restSchema, pathPrefix, true, activeSchemas) : []),\n ]);\n }\n\n if (!isZodObject(unwrappedSchema)) {\n return [];\n }\n\n const shape = getZodObjectShape(unwrappedSchema);\n return mergeTemplatableFileFieldPaths(\n Object.entries(shape).flatMap(([fieldName, fieldSchema]) => {\n const nextPath = pathPrefix ? `${pathPrefix}.${fieldName}` : fieldName;\n return collectTemplatableFileFieldPaths(fieldSchema as z.ZodTypeAny, nextPath, isInsideArray, activeSchemas);\n }),\n );\n } finally {\n activeSchemas.delete(schema);\n }\n}\n\nfunction mergeTemplatableFileFieldPaths(\n fields: TemplatableFileFieldPath[],\n): TemplatableFileFieldPath[] {\n const byFieldName = new Map<string, TemplatableFileFieldPath>();\n for (const field of fields) {\n const existing = byFieldName.get(field.fieldName);\n if (existing && !areTemplatableFileMetadataCompatible(existing.schema, field.schema)) {\n throw new IncompatibleTemplatableFileFieldPathError(\n field.fieldName,\n getFileMetadata(existing.schema),\n getFileMetadata(field.schema),\n );\n }\n byFieldName.set(field.fieldName, existing\n ? {\n ...existing,\n isInsideArray: existing.isInsideArray || field.isInsideArray,\n }\n : field);\n }\n return Array.from(byFieldName.values()).sort((left, right) =>\n left.fieldName.localeCompare(right.fieldName)\n );\n}\n\nfunction normalizeMetadataForComparison(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map(normalizeMetadataForComparison);\n }\n\n if (value && typeof value === 'object') {\n return Object.fromEntries(\n Object.entries(value as Record<string, unknown>)\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([key, childValue]) => [key, normalizeMetadataForComparison(childValue)]),\n );\n }\n\n return value;\n}\n\nfunction areTemplatableFileMetadataCompatible(\n leftSchema: z.ZodTypeAny,\n rightSchema: z.ZodTypeAny,\n): boolean {\n return JSON.stringify(normalizeMetadataForComparison(getFileMetadata(leftSchema)))\n === JSON.stringify(normalizeMetadataForComparison(getFileMetadata(rightSchema)));\n}\n\n/**\n * Remove generated PDF file fields from request DTO schemas, including nested\n * structures and union arms. These fields are framework-owned outputs, so they\n * must never appear in frontend/authored write DTOs even when custom DTOs are\n * provided by an application.\n */\nexport function stripTemplatableFileFieldsRecursively(\n schema: z.ZodTypeAny,\n options: StripTemplatableFileFieldsOptions = {},\n activeSchemas: WeakSet<object> = new WeakSet<object>(),\n): z.ZodTypeAny {\n if (activeSchemas.has(schema)) {\n return schema;\n }\n activeSchemas.add(schema);\n\n try {\n /*\n * Wrappers hand back the ORIGINAL instance when nothing beneath them changed (#989).\n *\n * They used to rebuild `inner.optional()` unconditionally. A fresh wrapper is a different\n * instance, so the enclosing object read it as \"changed\" and was rebuilt too — and the rebuild\n * dropped the object's decorator metadata. A `z_address()` nested in any object therefore reached\n * the create and update request DTOs as a plain object, and the form rendered its parts as\n * unrelated text inputs. Identity is what tells the object branch nothing was stripped.\n */\n if (isZodOptional(schema)) {\n const innerSchema = getZodDefSchemaProperty(schema, 'innerType');\n if (!innerSchema) {\n return schema;\n }\n const strippedInner = stripTemplatableFileFieldsRecursively(innerSchema, options, activeSchemas);\n return strippedInner === innerSchema ? schema : carrySchemaMetadata(schema, strippedInner.optional());\n }\n\n if (isZodNullable(schema)) {\n const innerSchema = getZodDefSchemaProperty(schema, 'innerType');\n if (!innerSchema) {\n return schema;\n }\n const strippedInner = stripTemplatableFileFieldsRecursively(innerSchema, options, activeSchemas);\n return strippedInner === innerSchema ? schema : carrySchemaMetadata(schema, strippedInner.nullable());\n }\n\n if (isZodDefault(schema)) {\n const innerSchema = getZodDefSchemaProperty(schema, 'innerType');\n if (!innerSchema) {\n return schema;\n }\n const strippedInner = stripTemplatableFileFieldsRecursively(innerSchema, options, activeSchemas);\n if (strippedInner === innerSchema) {\n return schema;\n }\n // Re-READ the default per parse rather than carrying a value across. In Zod 4\n // `def.defaultValue` is a GETTER, so reading it here EVALUATES the default —\n // and this stripped schema is built once, at configuration time, so a value\n // read here would be frozen into every parse the process performs. (The old\n // `typeof defaultValue === 'function'` branch could never fire for a dynamic\n // default for the same reason: the getter returns the VALUE, not the factory.)\n return carrySchemaMetadata(schema, strippedInner.default(() => getZodDefProperty(schema, 'defaultValue') as unknown));\n }\n\n const schemaType = getZodType(schema);\n if (schemaType === 'pipe') {\n const inSchema = getZodDefSchemaProperty(schema, 'in');\n const outSchema = getZodDefSchemaProperty(schema, 'out');\n const strippedIn = inSchema\n ? stripTemplatableFileFieldsRecursively(inSchema, options, activeSchemas)\n : inSchema;\n const strippedOut = outSchema\n ? stripTemplatableFileFieldsRecursively(outSchema, options, activeSchemas)\n : outSchema;\n if (strippedIn === inSchema && strippedOut === outSchema) {\n return schema;\n }\n if (strippedIn && strippedOut) {\n return z.pipe(strippedIn, strippedOut);\n }\n return strippedOut ?? strippedIn ?? schema;\n }\n\n if (schemaType === 'lazy') {\n const lazyGetter = getZodDef(schema)?.getter;\n if (typeof lazyGetter !== 'function') {\n return schema;\n }\n return z.lazy(() =>\n stripTemplatableFileFieldsRecursively(lazyGetter() as z.ZodTypeAny, options, activeSchemas)\n );\n }\n\n if (schemaType === 'intersection') {\n const leftSchema = getZodDefSchemaProperty(schema, 'left');\n const rightSchema = getZodDefSchemaProperty(schema, 'right');\n const strippedLeft = leftSchema\n ? stripTemplatableFileFieldsRecursively(leftSchema, options, activeSchemas)\n : leftSchema;\n const strippedRight = rightSchema\n ? stripTemplatableFileFieldsRecursively(rightSchema, options, activeSchemas)\n : rightSchema;\n return strippedLeft === leftSchema && strippedRight === rightSchema\n ? schema\n : z.intersection(strippedLeft ?? z.object({}), strippedRight ?? z.object({}));\n }\n\n if (schemaType === 'union') {\n const discriminator = getZodDefStringProperty(schema, 'discriminator');\n const unionOptions = getZodDefArrayProperty(schema, 'options') as z.ZodTypeAny[] | undefined;\n if (!unionOptions?.length) {\n return schema;\n }\n\n const strippedOptions = unionOptions.map((option) =>\n stripTemplatableFileFieldsRecursively(option, options, activeSchemas)\n );\n if (strippedOptions.length < 2) {\n return strippedOptions[0] ?? schema;\n }\n if (strippedOptions.every((option, index) => option === unionOptions[index])) {\n return schema;\n }\n\n const rebuiltUnion: z.ZodTypeAny = discriminator\n ? z.discriminatedUnion(\n discriminator,\n strippedOptions as [z.ZodObject<any>, z.ZodObject<any>, ...z.ZodObject<any>[]],\n )\n : z.union(strippedOptions as [z.ZodTypeAny, z.ZodTypeAny, ...z.ZodTypeAny[]]);\n return carrySchemaMetadata(schema, rebuiltUnion);\n }\n\n if (isZodArray(schema)) {\n const elementSchema = getZodDefProperty(schema, 'element') as z.ZodTypeAny | undefined;\n if (!elementSchema) {\n return schema;\n }\n\n const strippedElement = stripTemplatableFileFieldsRecursively(elementSchema, options, activeSchemas);\n\n // Nothing to strip inside the element — hand back the ORIGINAL schema, the same way the\n // intersection / record / map branches do.\n if (strippedElement === elementSchema) {\n return schema;\n }\n\n // The element WAS rewritten. `withArrayElement` keeps the array's own `.min()` / `.max()` /\n // `.length()` checks across the swap; a plain `z.array(strippedElement)` — what this branch\n // used to do unconditionally — drops them, so an authored constraint never reached the DTO\n // the controller and repository validate against.\n return withArrayElement(schema, strippedElement);\n }\n\n if (schemaType === 'record') {\n const keySchema = getZodDefSchemaProperty(schema, 'keyType');\n const valueSchema = getZodDefSchemaProperty(schema, 'valueType');\n const strippedValue = valueSchema\n ? stripTemplatableFileFieldsRecursively(valueSchema, options, activeSchemas)\n : valueSchema;\n return valueSchema && strippedValue !== valueSchema\n ? z.record((keySchema ?? z.string()) as any, strippedValue)\n : schema;\n }\n\n if (schemaType === 'map') {\n const keySchema = getZodDefSchemaProperty(schema, 'keyType');\n const valueSchema = getZodDefSchemaProperty(schema, 'valueType');\n const strippedValue = valueSchema\n ? stripTemplatableFileFieldsRecursively(valueSchema, options, activeSchemas)\n : valueSchema;\n return keySchema && valueSchema && strippedValue !== valueSchema\n ? z.map(keySchema, strippedValue)\n : schema;\n }\n\n if (schemaType === 'set') {\n const valueSchema = getZodDefSchemaProperty(schema, 'valueType');\n const strippedValue = valueSchema\n ? stripTemplatableFileFieldsRecursively(valueSchema, options, activeSchemas)\n : valueSchema;\n return valueSchema && strippedValue !== valueSchema\n ? z.set(strippedValue)\n : schema;\n }\n\n if (schemaType === 'tuple') {\n const tupleItems = getZodDefArrayProperty(schema, 'items') as z.ZodTypeAny[] | undefined;\n const restSchema = getZodDefSchemaProperty(schema, 'rest');\n const strippedItems = (tupleItems ?? []).map((item) =>\n stripTemplatableFileFieldsRecursively(item, options, activeSchemas)\n );\n const strippedRest = restSchema\n ? stripTemplatableFileFieldsRecursively(restSchema, options, activeSchemas)\n : restSchema;\n const changed = strippedItems.some((item, index) => item !== tupleItems?.[index])\n || strippedRest !== restSchema;\n if (!changed) {\n return schema;\n }\n const rebuiltTuple = z.tuple(strippedItems as any);\n return strippedRest ? rebuiltTuple.rest(strippedRest) : rebuiltTuple;\n }\n\n if (!isZodObject(schema)) {\n return schema;\n }\n\n const shape = getZodObjectShape(schema);\n const strippedShape: Record<string, z.ZodTypeAny> = {};\n let changed = false;\n\n for (const [fieldName, fieldSchema] of Object.entries(shape)) {\n const typedSchema = fieldSchema as z.ZodTypeAny;\n if (isTemplatableFileField(typedSchema)) {\n changed = true;\n continue;\n }\n\n const strippedSchema = stripTemplatableFileFieldsRecursively(typedSchema, options, activeSchemas);\n if (strippedSchema !== typedSchema) {\n changed = true;\n }\n strippedShape[fieldName] = strippedSchema;\n }\n\n if (!changed) {\n return schema;\n }\n\n return options.rebuildObjectSchema\n ? options.rebuildObjectSchema(schema, strippedShape)\n : rebuildObjectSchemaPreservingSemantics(schema, strippedShape);\n } finally {\n activeSchemas.delete(schema);\n }\n}\n\nfunction rebuildObjectSchemaPreservingSemantics(\n schema: z.ZodObject<any>,\n strippedShape: Record<string, z.ZodTypeAny>,\n): z.ZodTypeAny {\n const originalShape = getZodObjectShape(schema);\n const removedFields = Object.keys(originalShape).filter((fieldName) => !(fieldName in strippedShape));\n\n try {\n const omittedSchema = removedFields.length > 0\n ? schema.omit(Object.fromEntries(removedFields.map((fieldName) => [fieldName, true])) as Record<string, true>)\n : schema;\n\n const extended = omittedSchema.extend(strippedShape);\n // Same field set, only a nested field replaced: the object is still what its metadata describes.\n // A field REMOVED means it may not be, so the metadata stays behind on that path (#989).\n return removedFields.length === 0 ? carrySchemaMetadata(schema, extended) : extended;\n } catch {\n const rebuiltSchema = z.object(strippedShape);\n const catchallSchema = getZodDefProperty(schema, 'catchall') as z.ZodTypeAny | undefined;\n const rebuilt = catchallSchema ? rebuiltSchema.catchall(catchallSchema) : rebuiltSchema;\n return removedFields.length === 0 ? carrySchemaMetadata(schema, rebuilt) : rebuilt;\n }\n}\n"]}