canopycms 0.0.54 → 0.0.56

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 (225) hide show
  1. package/dist/api/assets.d.ts +14 -2
  2. package/dist/api/assets.d.ts.map +1 -1
  3. package/dist/api/assets.js +14 -3
  4. package/dist/api/assets.js.map +1 -1
  5. package/dist/api/branch-status.d.ts.map +1 -1
  6. package/dist/api/branch-status.js +8 -2
  7. package/dist/api/branch-status.js.map +1 -1
  8. package/dist/api/client.d.ts +2 -2
  9. package/dist/api/client.d.ts.map +1 -1
  10. package/dist/api/client.js +29 -14
  11. package/dist/api/client.js.map +1 -1
  12. package/dist/api/content.d.ts +2 -2
  13. package/dist/api/content.d.ts.map +1 -1
  14. package/dist/api/content.js +160 -26
  15. package/dist/api/content.js.map +1 -1
  16. package/dist/api/entries.d.ts.map +1 -1
  17. package/dist/api/entries.js +8 -4
  18. package/dist/api/entries.js.map +1 -1
  19. package/dist/api/github-sync.d.ts.map +1 -1
  20. package/dist/api/github-sync.js +45 -7
  21. package/dist/api/github-sync.js.map +1 -1
  22. package/dist/api/groups.d.ts.map +1 -1
  23. package/dist/api/groups.js +15 -5
  24. package/dist/api/groups.js.map +1 -1
  25. package/dist/api/permissions.d.ts +6 -6
  26. package/dist/api/permissions.d.ts.map +1 -1
  27. package/dist/api/permissions.js +24 -9
  28. package/dist/api/permissions.js.map +1 -1
  29. package/dist/api/request-body-hash.d.ts +33 -0
  30. package/dist/api/request-body-hash.d.ts.map +1 -0
  31. package/dist/api/request-body-hash.js +43 -0
  32. package/dist/api/request-body-hash.js.map +1 -0
  33. package/dist/api/resolve-references.d.ts.map +1 -1
  34. package/dist/api/resolve-references.js +8 -1
  35. package/dist/api/resolve-references.js.map +1 -1
  36. package/dist/api/schema.js +9 -9
  37. package/dist/api/schema.js.map +1 -1
  38. package/dist/api/settings-helpers.d.ts +14 -1
  39. package/dist/api/settings-helpers.d.ts.map +1 -1
  40. package/dist/api/settings-helpers.js +11 -2
  41. package/dist/api/settings-helpers.js.map +1 -1
  42. package/dist/api/types.d.ts +10 -0
  43. package/dist/api/types.d.ts.map +1 -1
  44. package/dist/auth/caching-auth-plugin.d.ts +8 -1
  45. package/dist/auth/caching-auth-plugin.d.ts.map +1 -1
  46. package/dist/auth/caching-auth-plugin.js +6 -1
  47. package/dist/auth/caching-auth-plugin.js.map +1 -1
  48. package/dist/auth/index.d.ts +1 -0
  49. package/dist/auth/index.d.ts.map +1 -1
  50. package/dist/auth/index.js +1 -0
  51. package/dist/auth/index.js.map +1 -1
  52. package/dist/auth/plugin.d.ts +35 -0
  53. package/dist/auth/plugin.d.ts.map +1 -1
  54. package/dist/auth/plugin.js +27 -1
  55. package/dist/auth/plugin.js.map +1 -1
  56. package/dist/authorization/helpers.d.ts +16 -0
  57. package/dist/authorization/helpers.d.ts.map +1 -1
  58. package/dist/authorization/helpers.js +18 -0
  59. package/dist/authorization/helpers.js.map +1 -1
  60. package/dist/authorization/index.d.ts +1 -1
  61. package/dist/authorization/index.d.ts.map +1 -1
  62. package/dist/authorization/index.js +1 -1
  63. package/dist/authorization/index.js.map +1 -1
  64. package/dist/build/generate-ai-content.d.ts.map +1 -1
  65. package/dist/build/generate-ai-content.js +7 -0
  66. package/dist/build/generate-ai-content.js.map +1 -1
  67. package/dist/cli/cli.d.ts.map +1 -1
  68. package/dist/cli/cli.js +2 -1
  69. package/dist/cli/cli.js.map +1 -1
  70. package/dist/cli/generate-ai-content.js +1150 -355
  71. package/dist/cli/init.d.ts +1 -1
  72. package/dist/cli/init.d.ts.map +1 -1
  73. package/dist/cli/init.js +40 -13
  74. package/dist/cli/init.js.map +1 -1
  75. package/dist/cli/sync.d.ts.map +1 -1
  76. package/dist/cli/sync.js +88 -60
  77. package/dist/cli/sync.js.map +1 -1
  78. package/dist/cli/template-files/canopy.ts.template +2 -1
  79. package/dist/cli/template-files/edit-page.tsx.template +8 -1
  80. package/dist/cli/template-files/middleware.ts.template +18 -0
  81. package/dist/cli/templates.d.ts.map +1 -1
  82. package/dist/cli/templates.js +19 -4
  83. package/dist/cli/templates.js.map +1 -1
  84. package/dist/config/helpers.d.ts +9 -1
  85. package/dist/config/helpers.d.ts.map +1 -1
  86. package/dist/config/helpers.js +33 -75
  87. package/dist/config/helpers.js.map +1 -1
  88. package/dist/config/schemas/config.d.ts +8 -24
  89. package/dist/config/schemas/config.d.ts.map +1 -1
  90. package/dist/config/schemas/config.js +12 -5
  91. package/dist/config/schemas/config.js.map +1 -1
  92. package/dist/config/schemas/media.d.ts +1 -10
  93. package/dist/config/schemas/media.d.ts.map +1 -1
  94. package/dist/config/schemas/media.js +8 -6
  95. package/dist/config/schemas/media.js.map +1 -1
  96. package/dist/config/types.d.ts +6 -4
  97. package/dist/config/types.d.ts.map +1 -1
  98. package/dist/config-test.d.ts +5 -3
  99. package/dist/config-test.d.ts.map +1 -1
  100. package/dist/config-test.js +9 -1
  101. package/dist/config-test.js.map +1 -1
  102. package/dist/content-id-index.d.ts +12 -6
  103. package/dist/content-id-index.d.ts.map +1 -1
  104. package/dist/content-id-index.js +12 -6
  105. package/dist/content-id-index.js.map +1 -1
  106. package/dist/content-index-generation.d.ts +30 -0
  107. package/dist/content-index-generation.d.ts.map +1 -0
  108. package/dist/content-index-generation.js +131 -0
  109. package/dist/content-index-generation.js.map +1 -0
  110. package/dist/content-index-registry.d.ts +38 -0
  111. package/dist/content-index-registry.d.ts.map +1 -0
  112. package/dist/content-index-registry.js +53 -0
  113. package/dist/content-index-registry.js.map +1 -0
  114. package/dist/content-listing.d.ts +3 -1
  115. package/dist/content-listing.d.ts.map +1 -1
  116. package/dist/content-listing.js +1 -0
  117. package/dist/content-listing.js.map +1 -1
  118. package/dist/content-store.d.ts +130 -6
  119. package/dist/content-store.d.ts.map +1 -1
  120. package/dist/content-store.js +343 -31
  121. package/dist/content-store.js.map +1 -1
  122. package/dist/editor/Editor.d.ts.map +1 -1
  123. package/dist/editor/Editor.js +27 -19
  124. package/dist/editor/Editor.js.map +1 -1
  125. package/dist/editor/FormRenderer.d.ts +7 -0
  126. package/dist/editor/FormRenderer.d.ts.map +1 -1
  127. package/dist/editor/FormRenderer.js +12 -3
  128. package/dist/editor/FormRenderer.js.map +1 -1
  129. package/dist/editor/components/EditorHeader.d.ts.map +1 -1
  130. package/dist/editor/components/EditorHeader.js +3 -4
  131. package/dist/editor/components/EditorHeader.js.map +1 -1
  132. package/dist/editor/components/EditorSidebar.d.ts.map +1 -1
  133. package/dist/editor/components/EditorSidebar.js +2 -4
  134. package/dist/editor/components/EditorSidebar.js.map +1 -1
  135. package/dist/editor/fields/ReferenceField.d.ts.map +1 -1
  136. package/dist/editor/fields/ReferenceField.js +19 -2
  137. package/dist/editor/fields/ReferenceField.js.map +1 -1
  138. package/dist/editor/group-manager/hooks/useGroupState.d.ts.map +1 -1
  139. package/dist/editor/group-manager/hooks/useGroupState.js +5 -2
  140. package/dist/editor/group-manager/hooks/useGroupState.js.map +1 -1
  141. package/dist/editor/hooks/useDraftManager.d.ts +15 -0
  142. package/dist/editor/hooks/useDraftManager.d.ts.map +1 -1
  143. package/dist/editor/hooks/useDraftManager.js +140 -1
  144. package/dist/editor/hooks/useDraftManager.js.map +1 -1
  145. package/dist/editor/hooks/useEntryManager.d.ts +9 -2
  146. package/dist/editor/hooks/useEntryManager.d.ts.map +1 -1
  147. package/dist/editor/hooks/useEntryManager.js +9 -3
  148. package/dist/editor/hooks/useEntryManager.js.map +1 -1
  149. package/dist/editor/hooks/useSchemaManager.d.ts +34 -10
  150. package/dist/editor/hooks/useSchemaManager.d.ts.map +1 -1
  151. package/dist/editor/hooks/useSchemaManager.js +22 -25
  152. package/dist/editor/hooks/useSchemaManager.js.map +1 -1
  153. package/dist/editor/schema-editor/CollectionEditor.d.ts +6 -5
  154. package/dist/editor/schema-editor/CollectionEditor.d.ts.map +1 -1
  155. package/dist/editor/schema-editor/CollectionEditor.js +37 -12
  156. package/dist/editor/schema-editor/CollectionEditor.js.map +1 -1
  157. package/dist/entry-link-resolver.d.ts.map +1 -1
  158. package/dist/entry-link-resolver.js +5 -0
  159. package/dist/entry-link-resolver.js.map +1 -1
  160. package/dist/git-manager.d.ts +38 -3
  161. package/dist/git-manager.d.ts.map +1 -1
  162. package/dist/git-manager.js +141 -33
  163. package/dist/git-manager.js.map +1 -1
  164. package/dist/github-service.d.ts +69 -3
  165. package/dist/github-service.d.ts.map +1 -1
  166. package/dist/github-service.js +149 -25
  167. package/dist/github-service.js.map +1 -1
  168. package/dist/http/handler.d.ts +1 -1
  169. package/dist/http/handler.d.ts.map +1 -1
  170. package/dist/http/handler.js +36 -7
  171. package/dist/http/handler.js.map +1 -1
  172. package/dist/http/router.d.ts +11 -0
  173. package/dist/http/router.d.ts.map +1 -1
  174. package/dist/http/router.js +80 -16
  175. package/dist/http/router.js.map +1 -1
  176. package/dist/paths/validation.d.ts.map +1 -1
  177. package/dist/paths/validation.js +12 -0
  178. package/dist/paths/validation.js.map +1 -1
  179. package/dist/schema/schema-store.d.ts +9 -0
  180. package/dist/schema/schema-store.d.ts.map +1 -1
  181. package/dist/schema/schema-store.js +57 -8
  182. package/dist/schema/schema-store.js.map +1 -1
  183. package/dist/services.d.ts +1 -0
  184. package/dist/services.d.ts.map +1 -1
  185. package/dist/services.js +9 -2
  186. package/dist/services.js.map +1 -1
  187. package/dist/static/index.d.ts +32 -0
  188. package/dist/static/index.d.ts.map +1 -1
  189. package/dist/static/index.js +90 -0
  190. package/dist/static/index.js.map +1 -1
  191. package/dist/sync-core.d.ts.map +1 -1
  192. package/dist/sync-core.js +22 -9
  193. package/dist/sync-core.js.map +1 -1
  194. package/dist/user.d.ts +0 -18
  195. package/dist/user.d.ts.map +1 -1
  196. package/dist/user.js +7 -22
  197. package/dist/user.js.map +1 -1
  198. package/dist/utils/error.d.ts +8 -0
  199. package/dist/utils/error.d.ts.map +1 -1
  200. package/dist/utils/error.js +35 -7
  201. package/dist/utils/error.js.map +1 -1
  202. package/dist/validation/deletion-checker.d.ts.map +1 -1
  203. package/dist/validation/deletion-checker.js +6 -5
  204. package/dist/validation/deletion-checker.js.map +1 -1
  205. package/dist/validation/entry-validator.d.ts +67 -0
  206. package/dist/validation/entry-validator.d.ts.map +1 -0
  207. package/dist/validation/entry-validator.js +277 -0
  208. package/dist/validation/entry-validator.js.map +1 -0
  209. package/dist/validation/field-traversal.d.ts +23 -1
  210. package/dist/validation/field-traversal.d.ts.map +1 -1
  211. package/dist/validation/field-traversal.js +29 -9
  212. package/dist/validation/field-traversal.js.map +1 -1
  213. package/dist/worker/cms-worker.d.ts +70 -6
  214. package/dist/worker/cms-worker.d.ts.map +1 -1
  215. package/dist/worker/cms-worker.js +199 -93
  216. package/dist/worker/cms-worker.js.map +1 -1
  217. package/package.json +2 -2
  218. package/dist/editor/components/EditorContext.d.ts +0 -35
  219. package/dist/editor/components/EditorContext.d.ts.map +0 -1
  220. package/dist/editor/components/EditorContext.js +0 -19
  221. package/dist/editor/components/EditorContext.js.map +0 -1
  222. package/dist/editor/env.d.ts +0 -5
  223. package/dist/editor/env.d.ts.map +0 -1
  224. package/dist/editor/env.js +0 -5
  225. package/dist/editor/env.js.map +0 -1
@@ -55,10 +55,28 @@ export function defineCanopyConfig(config) {
55
55
  },
56
56
  };
57
57
  }
58
+ /**
59
+ * Assigns `value` onto `target[key]` unless `value` is undefined.
60
+ * Used by `composeCanopyConfig` to merge fragments key-by-key without a later
61
+ * fragment's absent (undefined) field clobbering a value set by an earlier one.
62
+ */
63
+ function assignFragmentField(target, key, value) {
64
+ if (value !== undefined) {
65
+ target[key] = value;
66
+ }
67
+ }
58
68
  /**
59
69
  * Helper to compose config fragments defined across multiple files.
60
70
  * Useful for splitting large configurations into domain-specific modules.
61
- * Later fragments can override media.
71
+ *
72
+ * Merges every field declared on `CanopyConfigFragment` (i.e. every field of
73
+ * `CanopyConfigInput`) — not just a hand-picked subset — so adopters can put any
74
+ * config field (including `authPlugin`, `validateEntry`, `editor`, etc.) into any
75
+ * fragment without it being silently dropped.
76
+ *
77
+ * Fragments are applied in order and later fragments win field-by-field: if a later
78
+ * fragment sets a field, it overrides an earlier one; if a later fragment omits a
79
+ * field (leaves it undefined), the earlier fragment's value is preserved.
62
80
  *
63
81
  * @example
64
82
  * ```ts
@@ -74,82 +92,22 @@ export function defineCanopyConfig(config) {
74
92
  * ```
75
93
  */
76
94
  export const composeCanopyConfig = (...fragments) => {
77
- let media;
78
- let contentRoot;
79
- let sourceRoot;
80
- let defaultBranchAccess;
81
- let defaultPathAccess;
82
- let defaultBaseBranch;
83
- let defaultActiveBranch;
84
- let defaultRemoteName;
85
- let defaultRemoteUrl;
86
- let gitBotAuthorName;
87
- let gitBotAuthorEmail;
88
- let mode;
89
- let deploymentName;
90
- let dev;
95
+ const merged = {};
91
96
  for (const fragment of fragments) {
92
- if (fragment.media) {
93
- media = fragment.media;
94
- }
95
- if (fragment.contentRoot) {
96
- contentRoot = fragment.contentRoot;
97
- }
98
- if (fragment.sourceRoot) {
99
- sourceRoot = fragment.sourceRoot;
100
- }
101
- if (fragment.defaultBranchAccess) {
102
- defaultBranchAccess = fragment.defaultBranchAccess;
103
- }
104
- if (fragment.defaultPathAccess) {
105
- defaultPathAccess = fragment.defaultPathAccess;
106
- }
107
- if (fragment.defaultBaseBranch) {
108
- defaultBaseBranch = fragment.defaultBaseBranch;
109
- }
110
- if (fragment.defaultActiveBranch) {
111
- defaultActiveBranch = fragment.defaultActiveBranch;
112
- }
113
- if (fragment.defaultRemoteName) {
114
- defaultRemoteName = fragment.defaultRemoteName;
115
- }
116
- if (fragment.defaultRemoteUrl) {
117
- defaultRemoteUrl = fragment.defaultRemoteUrl;
118
- }
119
- if (fragment.gitBotAuthorName) {
120
- gitBotAuthorName = fragment.gitBotAuthorName;
121
- }
122
- if (fragment.gitBotAuthorEmail) {
123
- gitBotAuthorEmail = fragment.gitBotAuthorEmail;
124
- }
125
- if (fragment.mode) {
126
- mode = fragment.mode;
127
- }
128
- if (fragment.deploymentName) {
129
- deploymentName = fragment.deploymentName;
130
- }
131
- if (fragment.dev) {
132
- dev = fragment.dev;
97
+ for (const key of Object.keys(fragment)) {
98
+ assignFragmentField(merged, key, fragment[key]);
133
99
  }
134
100
  }
135
- const merged = {
136
- gitBotAuthorName: gitBotAuthorName ?? '',
137
- gitBotAuthorEmail: gitBotAuthorEmail ?? '',
138
- ...(media ? { media } : {}),
139
- ...(contentRoot ? { contentRoot } : {}),
140
- ...(sourceRoot ? { sourceRoot } : {}),
141
- ...(defaultBranchAccess ? { defaultBranchAccess } : {}),
142
- ...(defaultPathAccess ? { defaultPathAccess } : {}),
143
- ...(defaultBaseBranch ? { defaultBaseBranch } : {}),
144
- ...(defaultActiveBranch ? { defaultActiveBranch } : {}),
145
- ...(defaultRemoteName ? { defaultRemoteName } : {}),
146
- ...(defaultRemoteUrl ? { defaultRemoteUrl } : {}),
147
- ...(gitBotAuthorName ? { gitBotAuthorName } : {}),
148
- ...(gitBotAuthorEmail ? { gitBotAuthorEmail } : {}),
149
- ...(mode ? { mode } : {}),
150
- ...(deploymentName ? { deploymentName } : {}),
151
- ...(dev ? { dev } : {}),
152
- };
153
- return validateCanopyConfig(merged);
101
+ return validateCanopyConfig({
102
+ ...merged,
103
+ // gitBotAuthorName/gitBotAuthorEmail are required by CanopyConfigInput; default to ''
104
+ // so a fragment set omitting them fails validation (min length / email format) with a
105
+ // clear error rather than a TS/runtime "missing required field" surprise.
106
+ gitBotAuthorName: merged.gitBotAuthorName ?? '',
107
+ gitBotAuthorEmail: merged.gitBotAuthorEmail ?? '',
108
+ // `mode` is intentionally NOT defaulted here (SEC-C1): if no fragment supplies it,
109
+ // this composes with mode omitted and Zod fails validation with a clear
110
+ // "mode: Required"-style error rather than silently falling back to dev semantics.
111
+ });
154
112
  };
155
113
  //# sourceMappingURL=helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/config/helpers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/config/helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAWnD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAiD;IAClF,MAAM,SAAS,GAAG,oBAAoB,CAAC,MAA2B,CAAC,CAAA;IAEnE,OAAO;QACL,2DAA2D;QAC3D,MAAM,EAAE,SAAS;QAEjB,mEAAmE;QACnE,6FAA6F;QAC7F,MAAM,EAAE,CAAC,eAAkC,EAAsB,EAAE;YACjE,MAAM,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,GACvF,SAAS,CAAA;YACX,MAAM,YAAY,GAAuB;gBACvC,iBAAiB;gBACjB,mBAAmB;gBACnB,WAAW;gBACX,MAAM;gBACN,IAAI;gBACJ,YAAY;gBACZ,UAAU,EAAE,EAAE,EAAE,uCAAuC;aACxD,CAAA;YAED,uEAAuE;YACvE,IAAI,eAAe,EAAE,MAAM,EAAE,CAAC;gBAC5B,YAAY,CAAC,MAAM,GAAG;oBACpB,GAAG,YAAY,CAAC,MAAM;oBACtB,GAAG,eAAe,CAAC,MAAM;iBAC1B,CAAA;YACH,CAAC;YAED,OAAO,YAAY,CAAA;QACrB,CAAC;KACF,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,mBAAmB,CAC1B,MAAkC,EAClC,GAAM,EACN,KAA8B;IAE9B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;IACrB,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,GAAG,SAAiC,EAAgB,EAAE;IACxF,MAAM,MAAM,GAA+B,EAAE,CAAA;IAE7C,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAmC,EAAE,CAAC;YAC1E,mBAAmB,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAA;QACjD,CAAC;IACH,CAAC;IAED,OAAO,oBAAoB,CAAC;QAC1B,GAAG,MAAM;QACT,sFAAsF;QACtF,sFAAsF;QACtF,0EAA0E;QAC1E,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,IAAI,EAAE;QAC/C,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,IAAI,EAAE;QACjD,mFAAmF;QACnF,wEAAwE;QACxE,mFAAmF;KACpF,CAAC,CAAA;AACJ,CAAC,CAAA"}
@@ -13,7 +13,7 @@ export declare const defaultRemoteUrlSchema: z.ZodString;
13
13
  export declare const gitBotAuthorNameSchema: z.ZodString;
14
14
  export declare const gitBotAuthorEmailSchema: z.ZodString;
15
15
  export declare const githubTokenEnvVarSchema: z.ZodDefault<z.ZodString>;
16
- export declare const operatingModeSchema: z.ZodDefault<z.ZodEnum<["prod", "dev"]>>;
16
+ export declare const operatingModeSchema: z.ZodEnum<["prod", "dev"]>;
17
17
  export declare const deployedAsSchema: z.ZodDefault<z.ZodEnum<["static", "server"]>>;
18
18
  export declare const contentRootSchema: z.ZodDefault<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, string, string>>;
19
19
  export declare const sourceRootSchema: z.ZodOptional<z.ZodString>;
@@ -52,7 +52,7 @@ export declare const editorConfigSchema: z.ZodObject<{
52
52
  AccountComponent?: import("react").ComponentType<{}> | undefined;
53
53
  }>;
54
54
  export declare const CanopyConfigSchema: z.ZodObject<{
55
- media: z.ZodOptional<z.ZodUnion<[z.ZodObject<{
55
+ media: z.ZodOptional<z.ZodDiscriminatedUnion<"adapter", [z.ZodObject<{
56
56
  adapter: z.ZodLiteral<"local">;
57
57
  publicBaseUrl: z.ZodOptional<z.ZodString>;
58
58
  }, "strip", z.ZodTypeAny, {
@@ -85,18 +85,9 @@ export declare const CanopyConfigSchema: z.ZodObject<{
85
85
  }, {
86
86
  adapter: "lfs";
87
87
  publicBaseUrl?: string | undefined;
88
- }>, z.ZodObject<{
89
- adapter: z.ZodString;
90
- publicBaseUrl: z.ZodOptional<z.ZodString>;
91
- }, "strip", z.ZodTypeAny, {
92
- adapter: string;
93
- publicBaseUrl?: string | undefined;
94
- }, {
95
- adapter: string;
96
- publicBaseUrl?: string | undefined;
97
88
  }>]>>;
98
- defaultBranchAccess: z.ZodOptional<z.ZodDefault<z.ZodEnum<["allow", "deny"]>>>;
99
- defaultPathAccess: z.ZodOptional<z.ZodDefault<z.ZodEnum<["allow", "deny"]>>>;
89
+ defaultBranchAccess: z.ZodDefault<z.ZodEnum<["allow", "deny"]>>;
90
+ defaultPathAccess: z.ZodDefault<z.ZodEnum<["allow", "deny"]>>;
100
91
  defaultBaseBranch: z.ZodOptional<z.ZodDefault<z.ZodString>>;
101
92
  defaultActiveBranch: z.ZodOptional<z.ZodString>;
102
93
  defaultRemoteName: z.ZodOptional<z.ZodDefault<z.ZodString>>;
@@ -104,7 +95,7 @@ export declare const CanopyConfigSchema: z.ZodObject<{
104
95
  gitBotAuthorName: z.ZodString;
105
96
  gitBotAuthorEmail: z.ZodString;
106
97
  githubTokenEnvVar: z.ZodOptional<z.ZodDefault<z.ZodString>>;
107
- mode: z.ZodDefault<z.ZodEnum<["prod", "dev"]>>;
98
+ mode: z.ZodEnum<["prod", "dev"]>;
108
99
  deployedAs: z.ZodDefault<z.ZodEnum<["static", "server"]>>;
109
100
  settingsBranch: z.ZodOptional<z.ZodString>;
110
101
  autoCreateSettingsPR: z.ZodOptional<z.ZodBoolean>;
@@ -147,6 +138,8 @@ export declare const CanopyConfigSchema: z.ZodObject<{
147
138
  contentSync?: "off" | "warn" | undefined;
148
139
  }>>;
149
140
  }, "strict", z.ZodTypeAny, {
141
+ defaultBranchAccess: "allow" | "deny";
142
+ defaultPathAccess: "allow" | "deny";
150
143
  gitBotAuthorName: string;
151
144
  gitBotAuthorEmail: string;
152
145
  mode: "prod" | "dev";
@@ -166,12 +159,7 @@ export declare const CanopyConfigSchema: z.ZodObject<{
166
159
  } | {
167
160
  adapter: "lfs";
168
161
  publicBaseUrl?: string | undefined;
169
- } | {
170
- adapter: string;
171
- publicBaseUrl?: string | undefined;
172
162
  } | undefined;
173
- defaultBranchAccess?: "allow" | "deny" | undefined;
174
- defaultPathAccess?: "allow" | "deny" | undefined;
175
163
  defaultBaseBranch?: string | undefined;
176
164
  defaultActiveBranch?: string | undefined;
177
165
  defaultRemoteName?: string | undefined;
@@ -196,6 +184,7 @@ export declare const CanopyConfigSchema: z.ZodObject<{
196
184
  }, {
197
185
  gitBotAuthorName: string;
198
186
  gitBotAuthorEmail: string;
187
+ mode: "prod" | "dev";
199
188
  dev?: {
200
189
  contentSync?: "off" | "warn" | undefined;
201
190
  } | undefined;
@@ -210,9 +199,6 @@ export declare const CanopyConfigSchema: z.ZodObject<{
210
199
  } | {
211
200
  adapter: "lfs";
212
201
  publicBaseUrl?: string | undefined;
213
- } | {
214
- adapter: string;
215
- publicBaseUrl?: string | undefined;
216
202
  } | undefined;
217
203
  defaultBranchAccess?: "allow" | "deny" | undefined;
218
204
  defaultPathAccess?: "allow" | "deny" | undefined;
@@ -221,7 +207,6 @@ export declare const CanopyConfigSchema: z.ZodObject<{
221
207
  defaultRemoteName?: string | undefined;
222
208
  defaultRemoteUrl?: string | undefined;
223
209
  githubTokenEnvVar?: string | undefined;
224
- mode?: "prod" | "dev" | undefined;
225
210
  deployedAs?: "static" | "server" | undefined;
226
211
  settingsBranch?: string | undefined;
227
212
  autoCreateSettingsPR?: boolean | undefined;
@@ -253,7 +238,6 @@ export declare const getConfigDefaults: () => {
253
238
  pathAccess: "allow" | "deny";
254
239
  branchAccess: "allow" | "deny";
255
240
  contentRoot: string;
256
- mode: "prod" | "dev";
257
241
  githubTokenEnvVar: string;
258
242
  deploymentName: string;
259
243
  prodWorkspace: string;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/config/schemas/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AACrE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAKjD,eAAO,MAAM,yBAAyB,4CAA4C,CAAA;AAClF,eAAO,MAAM,uBAAuB,4CAA4C,CAAA;AAChF,eAAO,MAAM,uBAAuB,2BAA6B,CAAA;AACjE,eAAO,MAAM,uBAAuB,2BAA+B,CAAA;AACnE,eAAO,MAAM,sBAAsB,aAAoB,CAAA;AACvD,eAAO,MAAM,sBAAsB,aAAoB,CAAA;AACvD,eAAO,MAAM,uBAAuB,aAAqB,CAAA;AACzD,eAAO,MAAM,uBAAuB,2BAAyC,CAAA;AAC7E,eAAO,MAAM,mBAAmB,0CAAyC,CAAA;AACzE,eAAO,MAAM,gBAAgB,+CAAiD,CAAA;AAC9E,eAAO,MAAM,iBAAiB,qHAAwC,CAAA;AACtE,eAAO,MAAM,gBAAgB,4BAA+B,CAAA;AAC5D,eAAO,MAAM,oBAAoB,2BAA6B,CAAA;AAC9D,eAAO,MAAM,oBAAoB,0CAA0C,CAAA;AAG3E,eAAO,MAAM,eAAe;;;;;;EAE1B,CAAA;AAGF,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;EAU7B,CAAA;AAGF,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4BpB,CAAA;AAEX;;;GAGG;AACH,2FAA2F;AAC3F,eAAO,MAAM,sBAAsB,uBAAuB,CAAA;AAE1D,eAAO,MAAM,iBAAiB;;;;;;;;;;CAU5B,CAAA"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/config/schemas/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AACrE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAKjD,eAAO,MAAM,yBAAyB,4CAA4C,CAAA;AAClF,eAAO,MAAM,uBAAuB,4CAA4C,CAAA;AAChF,eAAO,MAAM,uBAAuB,2BAA6B,CAAA;AACjE,eAAO,MAAM,uBAAuB,2BAA+B,CAAA;AACnE,eAAO,MAAM,sBAAsB,aAAoB,CAAA;AACvD,eAAO,MAAM,sBAAsB,aAAoB,CAAA;AACvD,eAAO,MAAM,uBAAuB,aAAqB,CAAA;AACzD,eAAO,MAAM,uBAAuB,2BAAyC,CAAA;AAC7E,eAAO,MAAM,mBAAmB,4BAA0B,CAAA;AAC1D,eAAO,MAAM,gBAAgB,+CAAiD,CAAA;AAC9E,eAAO,MAAM,iBAAiB,qHAAwC,CAAA;AACtE,eAAO,MAAM,gBAAgB,4BAA+B,CAAA;AAC5D,eAAO,MAAM,oBAAoB,2BAA6B,CAAA;AAC9D,eAAO,MAAM,oBAAoB,0CAA0C,CAAA;AAG3E,eAAO,MAAM,eAAe;;;;;;EAE1B,CAAA;AAGF,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;EAU7B,CAAA;AAGF,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkCpB,CAAA;AAEX;;;GAGG;AACH,2FAA2F;AAC3F,eAAO,MAAM,sBAAsB,uBAAuB,CAAA;AAI1D,eAAO,MAAM,iBAAiB;;;;;;;;;CAS5B,CAAA"}
@@ -13,7 +13,7 @@ export const defaultRemoteUrlSchema = z.string().min(1);
13
13
  export const gitBotAuthorNameSchema = z.string().min(1);
14
14
  export const gitBotAuthorEmailSchema = z.string().email();
15
15
  export const githubTokenEnvVarSchema = z.string().default('GITHUB_BOT_TOKEN');
16
- export const operatingModeSchema = z.enum(['prod', 'dev']).default('dev');
16
+ export const operatingModeSchema = z.enum(['prod', 'dev']);
17
17
  export const deployedAsSchema = z.enum(['static', 'server']).default('server');
18
18
  export const contentRootSchema = relativePathSchema.default('content');
19
19
  export const sourceRootSchema = z.string().min(1).optional();
@@ -39,8 +39,12 @@ export const editorConfigSchema = z.object({
39
39
  export const CanopyConfigSchema = z
40
40
  .object({
41
41
  media: mediaSchema.optional(),
42
- defaultBranchAccess: defaultBranchAccessSchema.optional(),
43
- defaultPathAccess: defaultPathAccessSchema.optional(),
42
+ // No outer .optional() here: defaultBranchAccessSchema/defaultPathAccessSchema already
43
+ // have .default('deny'), so the field is optional on input but always resolves to
44
+ // 'allow'/'deny' (never undefined) on output. An outer .optional() would short-circuit
45
+ // before the inner default runs, defeating the fail-closed default (SCH-M1).
46
+ defaultBranchAccess: defaultBranchAccessSchema,
47
+ defaultPathAccess: defaultPathAccessSchema,
44
48
  // .optional() deliberately defeats defaultBaseBranchSchema's .default('main'):
45
49
  // unset must stay undefined after parsing so dev mode can detect the fork
46
50
  // point from git HEAD (see resolveBaseBranch in utils/git.ts).
@@ -51,7 +55,9 @@ export const CanopyConfigSchema = z
51
55
  gitBotAuthorName: gitBotAuthorNameSchema,
52
56
  gitBotAuthorEmail: gitBotAuthorEmailSchema,
53
57
  githubTokenEnvVar: githubTokenEnvVarSchema.optional(),
54
- mode: operatingModeSchema, // Has .default(), so not optional in output type
58
+ // Required by design (follow-up to SEC-C1): a prod deploy that omits `mode` must fail
59
+ // validation loudly rather than silently running header-trusting dev auth semantics.
60
+ mode: operatingModeSchema,
55
61
  deployedAs: deployedAsSchema, // Has .default('server'), so always present after validation
56
62
  settingsBranch: z.string().optional(),
57
63
  autoCreateSettingsPR: z.boolean().optional(),
@@ -71,13 +77,14 @@ export const CanopyConfigSchema = z
71
77
  */
72
78
  /** Default workspace path for prod mode (used when CANOPYCMS_WORKSPACE_ROOT is not set) */
73
79
  export const DEFAULT_PROD_WORKSPACE = '/mnt/efs/workspace';
80
+ // Note: `mode` has no default by design (SEC-C1) and is intentionally omitted here —
81
+ // operatingModeSchema.parse(undefined) would throw.
74
82
  export const getConfigDefaults = () => ({
75
83
  baseBranch: defaultBaseBranchSchema.parse(undefined),
76
84
  remoteName: defaultRemoteNameSchema.parse(undefined),
77
85
  pathAccess: defaultPathAccessSchema.parse(undefined),
78
86
  branchAccess: defaultBranchAccessSchema.parse(undefined),
79
87
  contentRoot: contentRootSchema.parse(undefined),
80
- mode: operatingModeSchema.parse(undefined),
81
88
  githubTokenEnvVar: githubTokenEnvVarSchema.parse(undefined),
82
89
  deploymentName: deploymentNameSchema.parse(undefined),
83
90
  prodWorkspace: DEFAULT_PROD_WORKSPACE,
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/config/schemas/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/config/schemas/config.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
  * Zod schemas for media adapter configuration validation.
3
3
  */
4
4
  import { z } from 'zod';
5
- export declare const mediaSchema: z.ZodUnion<[z.ZodObject<{
5
+ export declare const mediaSchema: z.ZodDiscriminatedUnion<"adapter", [z.ZodObject<{
6
6
  adapter: z.ZodLiteral<"local">;
7
7
  publicBaseUrl: z.ZodOptional<z.ZodString>;
8
8
  }, "strip", z.ZodTypeAny, {
@@ -35,14 +35,5 @@ export declare const mediaSchema: z.ZodUnion<[z.ZodObject<{
35
35
  }, {
36
36
  adapter: "lfs";
37
37
  publicBaseUrl?: string | undefined;
38
- }>, z.ZodObject<{
39
- adapter: z.ZodString;
40
- publicBaseUrl: z.ZodOptional<z.ZodString>;
41
- }, "strip", z.ZodTypeAny, {
42
- adapter: string;
43
- publicBaseUrl?: string | undefined;
44
- }, {
45
- adapter: string;
46
- publicBaseUrl?: string | undefined;
47
38
  }>]>;
48
39
  //# sourceMappingURL=media.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../../src/config/schemas/media.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAmBtB,CAAA"}
1
+ {"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../../src/config/schemas/media.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AASvB,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAetB,CAAA"}
@@ -2,8 +2,14 @@
2
2
  * Zod schemas for media adapter configuration validation.
3
3
  */
4
4
  import { z } from 'zod';
5
- // Media adapter configuration schema
6
- export const mediaSchema = z.union([
5
+ // Media adapter configuration schema.
6
+ // Keyed as a discriminated union on `adapter` so each adapter's required fields are
7
+ // enforced at parse time. With a plain z.union, a malformed s3 config (e.g. missing
8
+ // `region`) could fall through to a looser branch, silently stripping fields instead
9
+ // of failing validation. There is no generic/custom adapter branch: only 'local', 's3',
10
+ // and 'lfs' are implemented (see BACKLOG.md "Asset adapters"); add a literal branch here
11
+ // when a new adapter ships.
12
+ export const mediaSchema = z.discriminatedUnion('adapter', [
7
13
  z.object({
8
14
  adapter: z.literal('local'),
9
15
  publicBaseUrl: z.string().url().optional(),
@@ -18,9 +24,5 @@ export const mediaSchema = z.union([
18
24
  adapter: z.literal('lfs'),
19
25
  publicBaseUrl: z.string().url().optional(),
20
26
  }),
21
- z.object({
22
- adapter: z.string().min(1),
23
- publicBaseUrl: z.string().url().optional(),
24
- }),
25
27
  ]);
26
28
  //# sourceMappingURL=media.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"media.js","sourceRoot":"","sources":["../../../src/config/schemas/media.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,qCAAqC;AACrC,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC;IACjC,CAAC,CAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;QAC3B,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;KAC3C,CAAC;IACF,CAAC,CAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;QACxB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACzB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACzB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;KAC3C,CAAC;IACF,CAAC,CAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;QACzB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;KAC3C,CAAC;IACF,CAAC,CAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1B,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;KAC3C,CAAC;CACH,CAAC,CAAA"}
1
+ {"version":3,"file":"media.js","sourceRoot":"","sources":["../../../src/config/schemas/media.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,sCAAsC;AACtC,oFAAoF;AACpF,oFAAoF;AACpF,qFAAqF;AACrF,wFAAwF;AACxF,yFAAyF;AACzF,4BAA4B;AAC5B,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,kBAAkB,CAAC,SAAS,EAAE;IACzD,CAAC,CAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;QAC3B,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;KAC3C,CAAC;IACF,CAAC,CAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;QACxB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACzB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACzB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;KAC3C,CAAC;IACF,CAAC,CAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;QACzB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;KAC3C,CAAC;CACH,CAAC,CAAA"}
@@ -115,9 +115,6 @@ export type MediaConfig = {
115
115
  } | {
116
116
  adapter: 'lfs';
117
117
  publicBaseUrl?: string;
118
- } | {
119
- adapter: string;
120
- publicBaseUrl?: string;
121
118
  };
122
119
  /**
123
120
  * Field definitions for one entry type — the array of FieldConfig that
@@ -290,7 +287,12 @@ export interface CanopyConfigInput {
290
287
  gitBotAuthorName: string;
291
288
  gitBotAuthorEmail: string;
292
289
  githubTokenEnvVar?: string;
293
- mode?: OperatingMode;
290
+ /**
291
+ * Operating mode: 'prod' or 'dev'. Required — no default (SEC-C1). A prod deploy that
292
+ * omits this would otherwise silently run header-trusting dev auth semantics; the Zod
293
+ * schema fails validation loudly instead.
294
+ */
295
+ mode: OperatingMode;
294
296
  /** How this build is deployed. 'static' = no request context, no auth. Default: 'server'. */
295
297
  deployedAs?: DeployedAs;
296
298
  settingsBranch?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAGlE,eAAO,MAAM,mBAAmB,uGAUtB,CAAA;AAEV,eAAO,MAAM,UAAU,0JAOb,CAAA;AAEV,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAA;AACrE,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAA;AACnD,MAAM,MAAM,aAAa,GAAG,IAAI,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAA;AAC1D,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,IAAI,GAAG,KAAK,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAA;AAGrE,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAA;AAExD,MAAM,WAAW,gBAAgB;IAC/B,YAAY,CAAC,EAAE,YAAY,EAAE,CAAA;IAC7B,aAAa,CAAC,EAAE,aAAa,EAAE,CAAA;CAChC;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,cAAc,CAAA;IACpB,IAAI,CAAC,EAAE,gBAAgB,CAAA;IACvB,IAAI,CAAC,EAAE,gBAAgB,CAAA;IACvB,MAAM,CAAC,EAAE,gBAAgB,CAAA;CAC1B;AAGD,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AACpE,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAGvE,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,wGAAwG;IACxG,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,oBAAqB,SAAQ,eAAe;IAC3D,IAAI,EAAE,kBAAkB,CAAA;CACzB;AAED,MAAM,WAAW,iBAAkB,SAAQ,eAAe;IACxD,IAAI,EAAE,QAAQ,CAAA;IACd,OAAO,EAAE,YAAY,EAAE,CAAA;CACxB;AAED;;;;GAIG;AACH,MAAM,WAAW,oBAAqB,SAAQ,eAAe;IAC3D,IAAI,EAAE,WAAW,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IACrB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,OAAO,CAAC,EAAE,eAAe,EAAE,CAAA;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,WAAW,EAAE,CAAA;CACtB;AAED,MAAM,WAAW,gBAAiB,SAAQ,eAAe;IACvD,IAAI,EAAE,OAAO,CAAA;IACb,SAAS,EAAE,WAAW,EAAE,CAAA;CACzB;AAED,MAAM,WAAW,iBAAkB,SAAQ,eAAe;IACxD,IAAI,EAAE,QAAQ,CAAA;IACd,MAAM,EAAE,WAAW,EAAE,CAAA;CACtB;AAED;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,OAAO,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,WAAW,EAAE,CAAA;CACtB;AAED;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GAAG,eAAe,GAAG;IAChD,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;CACjC,CAAA;AAED,MAAM,MAAM,WAAW,GACnB,oBAAoB,GACpB,iBAAiB,GACjB,oBAAoB,GACpB,gBAAgB,GAChB,iBAAiB,GACjB,sBAAsB,GACtB,iBAAiB,CAAA;AAGrB,MAAM,MAAM,WAAW,GACnB;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5C;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,GACzE;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,GAC1C;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAE/C;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GAAG,SAAS,WAAW,EAAE,CAAA;AAEhD;;;;;;;GAOG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAA;IAC9B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;IAC5B,oFAAoF;IACpF,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAC3B,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,mGAAmG;IACnG,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAA;IAC9B,sDAAsD;IACtD,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,eAAe,EAAE,CAAA;IAC7C,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAA;IAClD,yFAAyF;IACzF,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CACnC,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,4EAA4E;IAC5E,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,oCAAoC;IACpC,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,eAAe,EAAE,CAAA;IAC7C,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAA;IAClD,8FAA8F;IAC9F,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CACnC,CAAA;AAED;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,oBAAoB,CAAA;AAG/C,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACpC,cAAc,CAAC,EAAE,MAAM,IAAI,CAAA;IAC3B,aAAa,CAAC,EAAE,MAAM,IAAI,CAAA;IAC1B,gBAAgB,CAAC,EAAE,KAAK,CAAC,aAAa,CAAA;CACvC;AAGD,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,MAAM,CAAA;AAClD,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,MAAM,CAAA;AAChD,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAA;AACtC,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAA;AACtC,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAA;AACrC,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAA;AACrC,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAA;AACtC,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAA;AACtC,MAAM,MAAM,mBAAmB,GAAG,aAAa,CAAA;AAC/C,MAAM,MAAM,WAAW,GAAG,MAAM,CAAA;AAChC,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,SAAS,CAAA;AAC3C,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAE5C;;;;;;;;;GASG;AACH,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,MAAM,CAAA;AAE/C,6DAA6D;AAC7D,MAAM,WAAW,SAAS;IACxB,WAAW,CAAC,EAAE,kBAAkB,CAAA;CACjC;AAED,2GAA2G;AAC3G,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,OAAO,GAAG,SAAS,CAAA;IAC1B,OAAO,EAAE,MAAM,CAAA;IACf,6DAA6D;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,qEAAqE;AACrE,MAAM,WAAW,kBAAkB;IACjC,wFAAwF;IACxF,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,6FAA6F;IAC7F,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,IAAI,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAA;IACtC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7B,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAC9B,KAAK,EAAE,kBAAkB,KACtB,oBAAoB,EAAE,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAA;AAE7D;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,WAAW,CAAA;IACnB,mBAAmB,CAAC,EAAE,mBAAmB,CAAA;IACzC,iBAAiB,CAAC,EAAE,iBAAiB,CAAA;IACrC,iBAAiB,CAAC,EAAE,iBAAiB,CAAA;IACrC,iGAAiG;IACjG,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,iBAAiB,CAAC,EAAE,iBAAiB,CAAA;IACrC,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IACnC,gBAAgB,EAAE,gBAAgB,CAAA;IAClC,iBAAiB,EAAE,iBAAiB,CAAA;IACpC,iBAAiB,CAAC,EAAE,iBAAiB,CAAA;IACrC,IAAI,EAAE,mBAAmB,CAAA;IACzB,6FAA6F;IAC7F,UAAU,EAAE,UAAU,CAAA;IACtB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,WAAW,EAAE,WAAW,CAAA;IACxB,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,MAAM,CAAC,EAAE,kBAAkB,CAAA;IAC3B,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,kFAAkF;IAClF,YAAY,CAAC,EAAE,oBAAoB,CAAA;IACnC,wGAAwG;IACxG,aAAa,CAAC,EAAE,iBAAiB,CAAA;IACjC,+FAA+F;IAC/F,GAAG,CAAC,EAAE,SAAS,CAAA;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,WAAW,CAAA;IACnB,mBAAmB,CAAC,EAAE,mBAAmB,CAAA;IACzC,iBAAiB,CAAC,EAAE,iBAAiB,CAAA;IACrC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,iGAAiG;IACjG,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,gBAAgB,EAAE,MAAM,CAAA;IACxB,iBAAiB,EAAE,MAAM,CAAA;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,IAAI,CAAC,EAAE,aAAa,CAAA;IACpB,6FAA6F;IAC7F,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,MAAM,CAAC,EAAE,kBAAkB,CAAA;IAC3B,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,kFAAkF;IAClF,YAAY,CAAC,EAAE,oBAAoB,CAAA;IACnC,wGAAwG;IACxG,aAAa,CAAC,EAAE,iBAAiB,CAAA;IACjC,+FAA+F;IAC/F,GAAG,CAAC,EAAE,SAAS,CAAA;CAChB;AAED,MAAM,MAAM,oBAAoB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAA;AAE7D;;;;GAIG;AACH,MAAM,MAAM,cAAc,GACtB;IACE,IAAI,EAAE,YAAY,CAAA;IAClB,WAAW,EAAE,WAAW,CAAA;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,mGAAmG;IACnG,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,UAAU,CAAC,EAAE,WAAW,CAAA;IACxB,8CAA8C;IAC9C,OAAO,CAAC,EAAE,SAAS,eAAe,EAAE,CAAA;IACpC,WAAW,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAA;IACzC,yFAAyF;IACzF,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAC1B,GACD;IACE,wCAAwC;IACxC,IAAI,EAAE,YAAY,CAAA;IAClB,WAAW,EAAE,WAAW,CAAA;IACxB,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,oCAAoC;IACpC,UAAU,EAAE,WAAW,CAAA;IACvB,MAAM,EAAE,aAAa,CAAA;IACrB,MAAM,EAAE,WAAW,CAAA;IACnB,oFAAoF;IACpF,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAEL;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG,IAAI,CACnC,YAAY,EACZ,mBAAmB,GAAG,qBAAqB,GAAG,aAAa,GAAG,QAAQ,GAAG,MAAM,GAAG,cAAc,CACjG,GAAG;IACF,UAAU,EAAE,cAAc,EAAE,CAAA;CAC7B,CAAA;AAGD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE;QACP,cAAc,CAAC,EAAE,MAAM,IAAI,CAAA;QAC3B,aAAa,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;QAC1C,gBAAgB,CAAC,EAAE,KAAK,CAAC,aAAa,CAAA;KACvC,CAAA;CACF"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAGlE,eAAO,MAAM,mBAAmB,uGAUtB,CAAA;AAEV,eAAO,MAAM,UAAU,0JAOb,CAAA;AAEV,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAA;AACrE,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAA;AACnD,MAAM,MAAM,aAAa,GAAG,IAAI,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAA;AAC1D,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,IAAI,GAAG,KAAK,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAA;AAGrE,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAA;AAExD,MAAM,WAAW,gBAAgB;IAC/B,YAAY,CAAC,EAAE,YAAY,EAAE,CAAA;IAC7B,aAAa,CAAC,EAAE,aAAa,EAAE,CAAA;CAChC;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,cAAc,CAAA;IACpB,IAAI,CAAC,EAAE,gBAAgB,CAAA;IACvB,IAAI,CAAC,EAAE,gBAAgB,CAAA;IACvB,MAAM,CAAC,EAAE,gBAAgB,CAAA;CAC1B;AAGD,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AACpE,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAGvE,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,wGAAwG;IACxG,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,oBAAqB,SAAQ,eAAe;IAC3D,IAAI,EAAE,kBAAkB,CAAA;CACzB;AAED,MAAM,WAAW,iBAAkB,SAAQ,eAAe;IACxD,IAAI,EAAE,QAAQ,CAAA;IACd,OAAO,EAAE,YAAY,EAAE,CAAA;CACxB;AAED;;;;GAIG;AACH,MAAM,WAAW,oBAAqB,SAAQ,eAAe;IAC3D,IAAI,EAAE,WAAW,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IACrB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,OAAO,CAAC,EAAE,eAAe,EAAE,CAAA;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,WAAW,EAAE,CAAA;CACtB;AAED,MAAM,WAAW,gBAAiB,SAAQ,eAAe;IACvD,IAAI,EAAE,OAAO,CAAA;IACb,SAAS,EAAE,WAAW,EAAE,CAAA;CACzB;AAED,MAAM,WAAW,iBAAkB,SAAQ,eAAe;IACxD,IAAI,EAAE,QAAQ,CAAA;IACd,MAAM,EAAE,WAAW,EAAE,CAAA;CACtB;AAED;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,OAAO,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,WAAW,EAAE,CAAA;CACtB;AAED;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GAAG,eAAe,GAAG;IAChD,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;CACjC,CAAA;AAED,MAAM,MAAM,WAAW,GACnB,oBAAoB,GACpB,iBAAiB,GACjB,oBAAoB,GACpB,gBAAgB,GAChB,iBAAiB,GACjB,sBAAsB,GACtB,iBAAiB,CAAA;AAKrB,MAAM,MAAM,WAAW,GACnB;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5C;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,GACzE;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAE9C;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GAAG,SAAS,WAAW,EAAE,CAAA;AAEhD;;;;;;;GAOG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAA;IAC9B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;IAC5B,oFAAoF;IACpF,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAC3B,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,mGAAmG;IACnG,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAA;IAC9B,sDAAsD;IACtD,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,eAAe,EAAE,CAAA;IAC7C,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAA;IAClD,yFAAyF;IACzF,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CACnC,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,4EAA4E;IAC5E,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,oCAAoC;IACpC,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,eAAe,EAAE,CAAA;IAC7C,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAA;IAClD,8FAA8F;IAC9F,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CACnC,CAAA;AAED;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,oBAAoB,CAAA;AAG/C,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACpC,cAAc,CAAC,EAAE,MAAM,IAAI,CAAA;IAC3B,aAAa,CAAC,EAAE,MAAM,IAAI,CAAA;IAC1B,gBAAgB,CAAC,EAAE,KAAK,CAAC,aAAa,CAAA;CACvC;AAGD,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,MAAM,CAAA;AAClD,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,MAAM,CAAA;AAChD,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAA;AACtC,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAA;AACtC,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAA;AACrC,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAA;AACrC,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAA;AACtC,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAA;AACtC,MAAM,MAAM,mBAAmB,GAAG,aAAa,CAAA;AAC/C,MAAM,MAAM,WAAW,GAAG,MAAM,CAAA;AAChC,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,SAAS,CAAA;AAC3C,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAE5C;;;;;;;;;GASG;AACH,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,MAAM,CAAA;AAE/C,6DAA6D;AAC7D,MAAM,WAAW,SAAS;IACxB,WAAW,CAAC,EAAE,kBAAkB,CAAA;CACjC;AAED,2GAA2G;AAC3G,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,OAAO,GAAG,SAAS,CAAA;IAC1B,OAAO,EAAE,MAAM,CAAA;IACf,6DAA6D;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,qEAAqE;AACrE,MAAM,WAAW,kBAAkB;IACjC,wFAAwF;IACxF,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,6FAA6F;IAC7F,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,IAAI,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAA;IACtC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7B,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAC9B,KAAK,EAAE,kBAAkB,KACtB,oBAAoB,EAAE,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAA;AAE7D;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,WAAW,CAAA;IACnB,mBAAmB,CAAC,EAAE,mBAAmB,CAAA;IACzC,iBAAiB,CAAC,EAAE,iBAAiB,CAAA;IACrC,iBAAiB,CAAC,EAAE,iBAAiB,CAAA;IACrC,iGAAiG;IACjG,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,iBAAiB,CAAC,EAAE,iBAAiB,CAAA;IACrC,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IACnC,gBAAgB,EAAE,gBAAgB,CAAA;IAClC,iBAAiB,EAAE,iBAAiB,CAAA;IACpC,iBAAiB,CAAC,EAAE,iBAAiB,CAAA;IACrC,IAAI,EAAE,mBAAmB,CAAA;IACzB,6FAA6F;IAC7F,UAAU,EAAE,UAAU,CAAA;IACtB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,WAAW,EAAE,WAAW,CAAA;IACxB,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,MAAM,CAAC,EAAE,kBAAkB,CAAA;IAC3B,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,kFAAkF;IAClF,YAAY,CAAC,EAAE,oBAAoB,CAAA;IACnC,wGAAwG;IACxG,aAAa,CAAC,EAAE,iBAAiB,CAAA;IACjC,+FAA+F;IAC/F,GAAG,CAAC,EAAE,SAAS,CAAA;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,WAAW,CAAA;IACnB,mBAAmB,CAAC,EAAE,mBAAmB,CAAA;IACzC,iBAAiB,CAAC,EAAE,iBAAiB,CAAA;IACrC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,iGAAiG;IACjG,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,gBAAgB,EAAE,MAAM,CAAA;IACxB,iBAAiB,EAAE,MAAM,CAAA;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B;;;;OAIG;IACH,IAAI,EAAE,aAAa,CAAA;IACnB,6FAA6F;IAC7F,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,MAAM,CAAC,EAAE,kBAAkB,CAAA;IAC3B,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,kFAAkF;IAClF,YAAY,CAAC,EAAE,oBAAoB,CAAA;IACnC,wGAAwG;IACxG,aAAa,CAAC,EAAE,iBAAiB,CAAA;IACjC,+FAA+F;IAC/F,GAAG,CAAC,EAAE,SAAS,CAAA;CAChB;AAED,MAAM,MAAM,oBAAoB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAA;AAE7D;;;;GAIG;AACH,MAAM,MAAM,cAAc,GACtB;IACE,IAAI,EAAE,YAAY,CAAA;IAClB,WAAW,EAAE,WAAW,CAAA;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,mGAAmG;IACnG,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,UAAU,CAAC,EAAE,WAAW,CAAA;IACxB,8CAA8C;IAC9C,OAAO,CAAC,EAAE,SAAS,eAAe,EAAE,CAAA;IACpC,WAAW,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAA;IACzC,yFAAyF;IACzF,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAC1B,GACD;IACE,wCAAwC;IACxC,IAAI,EAAE,YAAY,CAAA;IAClB,WAAW,EAAE,WAAW,CAAA;IACxB,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,oCAAoC;IACpC,UAAU,EAAE,WAAW,CAAA;IACvB,MAAM,EAAE,aAAa,CAAA;IACrB,MAAM,EAAE,WAAW,CAAA;IACnB,oFAAoF;IACpF,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAEL;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG,IAAI,CACnC,YAAY,EACZ,mBAAmB,GAAG,qBAAqB,GAAG,aAAa,GAAG,QAAQ,GAAG,MAAM,GAAG,cAAc,CACjG,GAAG;IACF,UAAU,EAAE,cAAc,EAAE,CAAA;CAC7B,CAAA;AAGD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE;QACP,cAAc,CAAC,EAAE,MAAM,IAAI,CAAA;QAC3B,aAAa,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;QAC1C,gBAAgB,CAAC,EAAE,KAAK,CAAC,aAAa,CAAA;KACvC,CAAA;CACF"}
@@ -1,10 +1,12 @@
1
1
  import type { CanopyConfig, CanopyConfigInput, RootCollectionConfig } from './config';
2
2
  import { type CanopyServices, type CreateCanopyServicesOptions } from './services';
3
- type TestConfigInput = Omit<CanopyConfigInput, 'gitBotAuthorName' | 'gitBotAuthorEmail'> & {
3
+ type TestConfigInput = Omit<CanopyConfigInput, 'gitBotAuthorName' | 'gitBotAuthorEmail' | 'mode'> & {
4
4
  schema: RootCollectionConfig;
5
- } & Partial<Pick<CanopyConfigInput, 'gitBotAuthorName' | 'gitBotAuthorEmail'>>;
5
+ } & Partial<Pick<CanopyConfigInput, 'gitBotAuthorName' | 'gitBotAuthorEmail' | 'mode'>>;
6
6
  /**
7
- * Test-only helper that fills required author fields for convenience.
7
+ * Test-only helper that fills required author fields (and defaults `mode` to 'dev') for
8
+ * convenience. The real schema requires `mode` with no default (SEC-C1); this helper
9
+ * intentionally defaults it so existing test configs don't all need `mode: 'dev'` added.
8
10
  * Do not use in production code; prefer defineCanopyConfig.
9
11
  */
10
12
  export declare const defineCanopyTestConfig: (config: TestConfigInput, overrides?: Partial<CanopyConfigInput>) => CanopyConfig;
@@ -1 +1 @@
1
- {"version":3,"file":"config-test.d.ts","sourceRoot":"","sources":["../src/config-test.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAErF,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,2BAA2B,EACjC,MAAM,YAAY,CAAA;AAOnB,KAAK,eAAe,GAAG,IAAI,CAAC,iBAAiB,EAAE,kBAAkB,GAAG,mBAAmB,CAAC,GAAG;IACzF,MAAM,EAAE,oBAAoB,CAAA;CAC7B,GAAG,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,kBAAkB,GAAG,mBAAmB,CAAC,CAAC,CAAA;AAE9E;;;GAGG;AACH,eAAO,MAAM,sBAAsB,GACjC,QAAQ,eAAe,EACvB,YAAY,OAAO,CAAC,iBAAiB,CAAC,KACrC,YAQF,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAC7B,QAAQ,eAAe,EACvB,UAAU,2BAA2B,KACpC,OAAO,CAAC,cAAc,CAkBxB,CAAA"}
1
+ {"version":3,"file":"config-test.d.ts","sourceRoot":"","sources":["../src/config-test.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAErF,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,2BAA2B,EACjC,MAAM,YAAY,CAAA;AAanB,KAAK,eAAe,GAAG,IAAI,CACzB,iBAAiB,EACjB,kBAAkB,GAAG,mBAAmB,GAAG,MAAM,CAClD,GAAG;IACF,MAAM,EAAE,oBAAoB,CAAA;CAC7B,GAAG,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,kBAAkB,GAAG,mBAAmB,GAAG,MAAM,CAAC,CAAC,CAAA;AAEvF;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,GACjC,QAAQ,eAAe,EACvB,YAAY,OAAO,CAAC,iBAAiB,CAAC,KACrC,YASF,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAC7B,QAAQ,eAAe,EACvB,UAAU,2BAA2B,KACpC,OAAO,CAAC,cAAc,CAkBxB,CAAA"}
@@ -4,8 +4,15 @@ const FALLBACK_AUTHOR = {
4
4
  gitBotAuthorName: 'CanopyCMS Test Bot',
5
5
  gitBotAuthorEmail: 'canopycms-test@example.com',
6
6
  };
7
+ // mode has no default on the real schema (SEC-C1: a prod deploy that omits it must fail
8
+ // validation loudly). This test-only fallback keeps existing test configs terse by
9
+ // defaulting to 'dev'; production config authoring goes through defineCanopyConfig, which
10
+ // has no such fallback.
11
+ const FALLBACK_MODE = 'dev';
7
12
  /**
8
- * Test-only helper that fills required author fields for convenience.
13
+ * Test-only helper that fills required author fields (and defaults `mode` to 'dev') for
14
+ * convenience. The real schema requires `mode` with no default (SEC-C1); this helper
15
+ * intentionally defaults it so existing test configs don't all need `mode: 'dev'` added.
9
16
  * Do not use in production code; prefer defineCanopyConfig.
10
17
  */
11
18
  export const defineCanopyTestConfig = (config, overrides) => {
@@ -13,6 +20,7 @@ export const defineCanopyTestConfig = (config, overrides) => {
13
20
  const { schema: _schema, ...configWithoutSchema } = config;
14
21
  return defineCanopyConfig({
15
22
  ...FALLBACK_AUTHOR,
23
+ mode: FALLBACK_MODE,
16
24
  ...configWithoutSchema,
17
25
  ...(overrides ?? {}),
18
26
  }).server;
@@ -1 +1 @@
1
- {"version":3,"file":"config-test.js","sourceRoot":"","sources":["../src/config-test.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAC5D,OAAO,EACL,wBAAwB,GAGzB,MAAM,YAAY,CAAA;AAEnB,MAAM,eAAe,GAAG;IACtB,gBAAgB,EAAE,oBAAoB;IACtC,iBAAiB,EAAE,4BAA4B;CAChD,CAAA;AAMD;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,MAAuB,EACvB,SAAsC,EACxB,EAAE;IAChB,0EAA0E;IAC1E,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,mBAAmB,EAAE,GAAG,MAAM,CAAA;IAC1D,OAAO,kBAAkB,CAAC;QACxB,GAAG,eAAe;QAClB,GAAG,mBAAmB;QACtB,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC;KACrB,CAAC,CAAC,MAAM,CAAA;AACX,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EACrC,MAAuB,EACvB,OAAqC,EACZ,EAAE;IAC3B,MAAM,YAAY,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAA;IACnD,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,WAAW,CAAC,CAAA;IAEzE,+DAA+D;IAC/D,MAAM,qBAAqB,GAAG;QAC5B,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;YACtB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,UAAU;SACX,CAAC;QACF,UAAU,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;KAC3B,CAAA;IAED,OAAO,wBAAwB,CAAC,YAAY,EAAE;QAC5C,GAAG,OAAO;QACV,iBAAiB,EACf,qBAAoF;KACvF,CAAC,CAAA;AACJ,CAAC,CAAA"}
1
+ {"version":3,"file":"config-test.js","sourceRoot":"","sources":["../src/config-test.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAC5D,OAAO,EACL,wBAAwB,GAGzB,MAAM,YAAY,CAAA;AAEnB,MAAM,eAAe,GAAG;IACtB,gBAAgB,EAAE,oBAAoB;IACtC,iBAAiB,EAAE,4BAA4B;CAChD,CAAA;AAED,wFAAwF;AACxF,mFAAmF;AACnF,0FAA0F;AAC1F,wBAAwB;AACxB,MAAM,aAAa,GAAG,KAAc,CAAA;AASpC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,MAAuB,EACvB,SAAsC,EACxB,EAAE;IAChB,0EAA0E;IAC1E,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,mBAAmB,EAAE,GAAG,MAAM,CAAA;IAC1D,OAAO,kBAAkB,CAAC;QACxB,GAAG,eAAe;QAClB,IAAI,EAAE,aAAa;QACnB,GAAG,mBAAmB;QACtB,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC;KACrB,CAAC,CAAC,MAAM,CAAA;AACX,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EACrC,MAAuB,EACvB,OAAqC,EACZ,EAAE;IAC3B,MAAM,YAAY,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAA;IACnD,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,WAAW,CAAC,CAAA;IAEzE,+DAA+D;IAC/D,MAAM,qBAAqB,GAAG;QAC5B,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;YACtB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,UAAU;SACX,CAAC;QACF,UAAU,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;KAC3B,CAAA;IAED,OAAO,wBAAwB,CAAC,YAAY,EAAE;QAC5C,GAAG,OAAO;QACV,iBAAiB,EACf,qBAAoF;KACvF,CAAC,CAAA;AACJ,CAAC,CAAA"}
@@ -29,15 +29,21 @@ export interface IdLocation {
29
29
  * - Write operations that change filenames are atomic (rename is atomic)
30
30
  * - Read operations always reflect current filesystem state after index rebuild
31
31
  *
32
+ * **How staleness is bounded:**
33
+ * - Same process: mutation sites invalidate registered ContentStores directly
34
+ * (content-index-registry.ts); the next access rebuilds.
35
+ * - Other processes: mutation sites bump an on-disk generation marker
36
+ * (content-index-generation.ts) that ContentStore probes on access, so
37
+ * stale indexes converge within the probe interval plus NFS caching delay.
38
+ * - Residual windows self-heal via ContentStore's suspicious-lookup rebuild
39
+ * (ID miss or index hit whose file is gone).
40
+ *
32
41
  * **Race condition handling:**
33
42
  * - Multiple processes creating entries simultaneously: Each generates a unique ID,
34
43
  * collisions detected during index build (fail fast)
35
- * - One process writes, another reads: Reader's stale index might miss new IDs until
36
- * next rebuild. This is acceptable - eventual consistency.
37
- * - Index drift: Rare, but processes can rebuild index if they detect missing IDs
38
- *
39
- * For most use cases (CMS with human editors), race conditions are unlikely and
40
- * eventual consistency is sufficient.
44
+ * - ContentStore.write() refuses to recreate an entry file whose ID the
45
+ * directory listing places at a different slug (existence guard), so stale
46
+ * indexes cannot manufacture duplicate-ID files.
41
47
  */
42
48
  export declare class ContentIdIndex {
43
49
  private idToLocation;
@@ -1 +1 @@
1
- {"version":3,"file":"content-id-index.d.ts","sourceRoot":"","sources":["../src/content-id-index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,YAAY,EAAE,KAAK,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,SAAS,CAAA;AAmBxF,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,SAAS,CAAA;IACb,IAAI,EAAE,OAAO,GAAG,YAAY,CAAA;IAC5B,YAAY,EAAE,YAAY,CAAA;IAC1B,UAAU,CAAC,EAAE,WAAW,CAAA;IACxB,IAAI,CAAC,EAAE,IAAI,CAAA;CACZ;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,YAAY,CAAqC;IACzD,OAAO,CAAC,QAAQ,CAAiC;IACjD,OAAO,CAAC,YAAY,CAAsC;IAC1D,OAAO,CAAC,IAAI,CAAQ;gBAER,IAAI,EAAE,MAAM;IAIxB;;;OAGG;IACG,kBAAkB,CAAC,SAAS,GAAE,MAAW,GAAG,OAAO,CAAC,IAAI,CAAC;YAIjD,aAAa;IAkE3B;;OAEG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAIvC;;OAEG;IACH,UAAU,CAAC,YAAY,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI;IAIxD;;;OAGG;IACH,eAAe,IAAI,UAAU,EAAE;IAI/B;;;;;;;OAOG;IACH,sBAAsB,CAAC,cAAc,EAAE,WAAW,GAAG,UAAU,EAAE;IAiBjE;;;;;;;;;OASG;IACH,0BAA0B,CAAC,cAAc,EAAE,WAAW,GAAG,UAAU,EAAE;IAkBrE;;;;;;;OAOG;IACH,oBAAoB,IAAI,UAAU,EAAE;IAepC;;;;OAIG;IACH,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,IAAI;IAgC3C;;;OAGG;IACH,MAAM,CAAC,EAAE,EAAE,SAAS,GAAG,IAAI;IAoB3B;;;OAGG;IACH,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,GAAG,IAAI;CA6C/D;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAuBxE;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA+BxB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAc5E;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAsCtF"}
1
+ {"version":3,"file":"content-id-index.d.ts","sourceRoot":"","sources":["../src/content-id-index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,YAAY,EAAE,KAAK,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,SAAS,CAAA;AAmBxF,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,SAAS,CAAA;IACb,IAAI,EAAE,OAAO,GAAG,YAAY,CAAA;IAC5B,YAAY,EAAE,YAAY,CAAA;IAC1B,UAAU,CAAC,EAAE,WAAW,CAAA;IACxB,IAAI,CAAC,EAAE,IAAI,CAAA;CACZ;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,YAAY,CAAqC;IACzD,OAAO,CAAC,QAAQ,CAAiC;IACjD,OAAO,CAAC,YAAY,CAAsC;IAC1D,OAAO,CAAC,IAAI,CAAQ;gBAER,IAAI,EAAE,MAAM;IAIxB;;;OAGG;IACG,kBAAkB,CAAC,SAAS,GAAE,MAAW,GAAG,OAAO,CAAC,IAAI,CAAC;YAIjD,aAAa;IAkE3B;;OAEG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAIvC;;OAEG;IACH,UAAU,CAAC,YAAY,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI;IAIxD;;;OAGG;IACH,eAAe,IAAI,UAAU,EAAE;IAI/B;;;;;;;OAOG;IACH,sBAAsB,CAAC,cAAc,EAAE,WAAW,GAAG,UAAU,EAAE;IAiBjE;;;;;;;;;OASG;IACH,0BAA0B,CAAC,cAAc,EAAE,WAAW,GAAG,UAAU,EAAE;IAkBrE;;;;;;;OAOG;IACH,oBAAoB,IAAI,UAAU,EAAE;IAepC;;;;OAIG;IACH,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,IAAI;IAgC3C;;;OAGG;IACH,MAAM,CAAC,EAAE,EAAE,SAAS,GAAG,IAAI;IAoB3B;;;OAGG;IACH,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,GAAG,IAAI;CA6C/D;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAuBxE;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA+BxB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAc5E;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAsCtF"}
@@ -41,15 +41,21 @@ function toLogicalCollectionPath(physicalPath) {
41
41
  * - Write operations that change filenames are atomic (rename is atomic)
42
42
  * - Read operations always reflect current filesystem state after index rebuild
43
43
  *
44
+ * **How staleness is bounded:**
45
+ * - Same process: mutation sites invalidate registered ContentStores directly
46
+ * (content-index-registry.ts); the next access rebuilds.
47
+ * - Other processes: mutation sites bump an on-disk generation marker
48
+ * (content-index-generation.ts) that ContentStore probes on access, so
49
+ * stale indexes converge within the probe interval plus NFS caching delay.
50
+ * - Residual windows self-heal via ContentStore's suspicious-lookup rebuild
51
+ * (ID miss or index hit whose file is gone).
52
+ *
44
53
  * **Race condition handling:**
45
54
  * - Multiple processes creating entries simultaneously: Each generates a unique ID,
46
55
  * collisions detected during index build (fail fast)
47
- * - One process writes, another reads: Reader's stale index might miss new IDs until
48
- * next rebuild. This is acceptable - eventual consistency.
49
- * - Index drift: Rare, but processes can rebuild index if they detect missing IDs
50
- *
51
- * For most use cases (CMS with human editors), race conditions are unlikely and
52
- * eventual consistency is sufficient.
56
+ * - ContentStore.write() refuses to recreate an entry file whose ID the
57
+ * directory listing places at a different slug (existence guard), so stale
58
+ * indexes cannot manufacture duplicate-ID files.
53
59
  */
54
60
  export class ContentIdIndex {
55
61
  constructor(root) {