@contractspec/example.saas-boilerplate 1.56.1 → 1.58.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (284) hide show
  1. package/.turbo/turbo-build.log +160 -188
  2. package/.turbo/turbo-prebuild.log +1 -0
  3. package/CHANGELOG.md +45 -0
  4. package/dist/billing/billing.entity.d.ts +40 -45
  5. package/dist/billing/billing.entity.d.ts.map +1 -1
  6. package/dist/billing/billing.entity.js +110 -118
  7. package/dist/billing/billing.enum.d.ts +2 -8
  8. package/dist/billing/billing.enum.d.ts.map +1 -1
  9. package/dist/billing/billing.enum.js +17 -24
  10. package/dist/billing/billing.event.d.ts +67 -73
  11. package/dist/billing/billing.event.d.ts.map +1 -1
  12. package/dist/billing/billing.event.js +84 -146
  13. package/dist/billing/billing.handler.d.ts +59 -62
  14. package/dist/billing/billing.handler.d.ts.map +1 -1
  15. package/dist/billing/billing.handler.js +140 -49
  16. package/dist/billing/billing.operations.d.ts +138 -144
  17. package/dist/billing/billing.operations.d.ts.map +1 -1
  18. package/dist/billing/billing.operations.js +273 -175
  19. package/dist/billing/billing.presentation.d.ts +2 -7
  20. package/dist/billing/billing.presentation.d.ts.map +1 -1
  21. package/dist/billing/billing.presentation.js +51 -57
  22. package/dist/billing/billing.schema.d.ts +159 -164
  23. package/dist/billing/billing.schema.d.ts.map +1 -1
  24. package/dist/billing/billing.schema.js +112 -204
  25. package/dist/billing/index.d.ts +11 -8
  26. package/dist/billing/index.d.ts.map +1 -0
  27. package/dist/billing/index.js +689 -9
  28. package/dist/browser/billing/billing.entity.js +113 -0
  29. package/dist/browser/billing/billing.enum.js +19 -0
  30. package/dist/browser/billing/billing.event.js +90 -0
  31. package/dist/browser/billing/billing.handler.js +148 -0
  32. package/dist/browser/billing/billing.operations.js +278 -0
  33. package/dist/browser/billing/billing.presentation.js +52 -0
  34. package/dist/browser/billing/billing.schema.js +121 -0
  35. package/dist/browser/billing/index.js +688 -0
  36. package/dist/browser/dashboard/dashboard.presentation.js +52 -0
  37. package/dist/browser/dashboard/index.js +52 -0
  38. package/dist/browser/docs/index.js +93 -0
  39. package/dist/browser/docs/saas-boilerplate.docblock.js +93 -0
  40. package/dist/browser/example.js +39 -0
  41. package/dist/browser/handlers/index.js +358 -0
  42. package/dist/browser/handlers/saas.handlers.js +134 -0
  43. package/dist/browser/index.js +3340 -0
  44. package/dist/browser/presentations/index.js +290 -0
  45. package/dist/browser/project/index.js +790 -0
  46. package/dist/browser/project/project.entity.js +77 -0
  47. package/dist/browser/project/project.enum.js +18 -0
  48. package/dist/browser/project/project.event.js +103 -0
  49. package/dist/browser/project/project.handler.js +178 -0
  50. package/dist/browser/project/project.operations.js +372 -0
  51. package/dist/browser/project/project.presentation.js +177 -0
  52. package/dist/browser/project/project.schema.js +134 -0
  53. package/dist/browser/saas-boilerplate.feature.js +88 -0
  54. package/dist/browser/seeders/index.js +20 -0
  55. package/dist/browser/settings/index.js +75 -0
  56. package/dist/browser/settings/settings.entity.js +74 -0
  57. package/dist/browser/settings/settings.enum.js +11 -0
  58. package/dist/browser/shared/mock-data.js +104 -0
  59. package/dist/browser/shared/overlay-types.js +0 -0
  60. package/dist/browser/tests/operations.test-spec.js +112 -0
  61. package/dist/browser/ui/SaasDashboard.js +988 -0
  62. package/dist/browser/ui/SaasProjectList.js +162 -0
  63. package/dist/browser/ui/SaasSettingsPanel.js +145 -0
  64. package/dist/browser/ui/hooks/index.js +159 -0
  65. package/dist/browser/ui/hooks/useProjectList.js +66 -0
  66. package/dist/browser/ui/hooks/useProjectMutations.js +91 -0
  67. package/dist/browser/ui/index.js +1808 -0
  68. package/dist/browser/ui/modals/CreateProjectModal.js +153 -0
  69. package/dist/browser/ui/modals/ProjectActionsModal.js +335 -0
  70. package/dist/browser/ui/modals/index.js +487 -0
  71. package/dist/browser/ui/overlays/demo-overlays.js +61 -0
  72. package/dist/browser/ui/overlays/index.js +61 -0
  73. package/dist/browser/ui/renderers/index.js +675 -0
  74. package/dist/browser/ui/renderers/project-list.markdown.js +499 -0
  75. package/dist/browser/ui/renderers/project-list.renderer.js +177 -0
  76. package/dist/dashboard/dashboard.presentation.d.ts +2 -7
  77. package/dist/dashboard/dashboard.presentation.d.ts.map +1 -1
  78. package/dist/dashboard/dashboard.presentation.js +51 -53
  79. package/dist/dashboard/index.d.ts +5 -2
  80. package/dist/dashboard/index.d.ts.map +1 -0
  81. package/dist/dashboard/index.js +53 -3
  82. package/dist/docs/index.d.ts +2 -1
  83. package/dist/docs/index.d.ts.map +1 -0
  84. package/dist/docs/index.js +94 -1
  85. package/dist/docs/saas-boilerplate.docblock.d.ts +2 -1
  86. package/dist/docs/saas-boilerplate.docblock.d.ts.map +1 -0
  87. package/dist/docs/saas-boilerplate.docblock.js +45 -51
  88. package/dist/example.d.ts +2 -6
  89. package/dist/example.d.ts.map +1 -1
  90. package/dist/example.js +37 -50
  91. package/dist/handlers/index.d.ts +7 -4
  92. package/dist/handlers/index.d.ts.map +1 -0
  93. package/dist/handlers/index.js +358 -4
  94. package/dist/handlers/saas.handlers.d.ts +60 -60
  95. package/dist/handlers/saas.handlers.d.ts.map +1 -1
  96. package/dist/handlers/saas.handlers.js +127 -140
  97. package/dist/index.d.ts +15 -45
  98. package/dist/index.d.ts.map +1 -1
  99. package/dist/index.js +3335 -75
  100. package/dist/node/billing/billing.entity.js +113 -0
  101. package/dist/node/billing/billing.enum.js +19 -0
  102. package/dist/node/billing/billing.event.js +90 -0
  103. package/dist/node/billing/billing.handler.js +148 -0
  104. package/dist/node/billing/billing.operations.js +278 -0
  105. package/dist/node/billing/billing.presentation.js +52 -0
  106. package/dist/node/billing/billing.schema.js +121 -0
  107. package/dist/node/billing/index.js +688 -0
  108. package/dist/node/dashboard/dashboard.presentation.js +52 -0
  109. package/dist/node/dashboard/index.js +52 -0
  110. package/dist/node/docs/index.js +93 -0
  111. package/dist/node/docs/saas-boilerplate.docblock.js +93 -0
  112. package/dist/node/example.js +39 -0
  113. package/dist/node/handlers/index.js +358 -0
  114. package/dist/node/handlers/saas.handlers.js +134 -0
  115. package/dist/node/index.js +3340 -0
  116. package/dist/node/presentations/index.js +290 -0
  117. package/dist/node/project/index.js +790 -0
  118. package/dist/node/project/project.entity.js +77 -0
  119. package/dist/node/project/project.enum.js +18 -0
  120. package/dist/node/project/project.event.js +103 -0
  121. package/dist/node/project/project.handler.js +178 -0
  122. package/dist/node/project/project.operations.js +372 -0
  123. package/dist/node/project/project.presentation.js +177 -0
  124. package/dist/node/project/project.schema.js +134 -0
  125. package/dist/node/saas-boilerplate.feature.js +88 -0
  126. package/dist/node/seeders/index.js +20 -0
  127. package/dist/node/settings/index.js +75 -0
  128. package/dist/node/settings/settings.entity.js +74 -0
  129. package/dist/node/settings/settings.enum.js +11 -0
  130. package/dist/node/shared/mock-data.js +104 -0
  131. package/dist/node/shared/overlay-types.js +0 -0
  132. package/dist/node/tests/operations.test-spec.js +112 -0
  133. package/dist/node/ui/SaasDashboard.js +988 -0
  134. package/dist/node/ui/SaasProjectList.js +162 -0
  135. package/dist/node/ui/SaasSettingsPanel.js +145 -0
  136. package/dist/node/ui/hooks/index.js +159 -0
  137. package/dist/node/ui/hooks/useProjectList.js +66 -0
  138. package/dist/node/ui/hooks/useProjectMutations.js +91 -0
  139. package/dist/node/ui/index.js +1808 -0
  140. package/dist/node/ui/modals/CreateProjectModal.js +153 -0
  141. package/dist/node/ui/modals/ProjectActionsModal.js +335 -0
  142. package/dist/node/ui/modals/index.js +487 -0
  143. package/dist/node/ui/overlays/demo-overlays.js +61 -0
  144. package/dist/node/ui/overlays/index.js +61 -0
  145. package/dist/node/ui/renderers/index.js +675 -0
  146. package/dist/node/ui/renderers/project-list.markdown.js +499 -0
  147. package/dist/node/ui/renderers/project-list.renderer.js +177 -0
  148. package/dist/presentations/index.d.ts +13 -15
  149. package/dist/presentations/index.d.ts.map +1 -1
  150. package/dist/presentations/index.js +289 -15
  151. package/dist/project/index.d.ts +11 -8
  152. package/dist/project/index.d.ts.map +1 -0
  153. package/dist/project/index.js +791 -9
  154. package/dist/project/project.entity.d.ts +23 -28
  155. package/dist/project/project.entity.d.ts.map +1 -1
  156. package/dist/project/project.entity.js +75 -82
  157. package/dist/project/project.enum.d.ts +2 -8
  158. package/dist/project/project.enum.d.ts.map +1 -1
  159. package/dist/project/project.enum.js +16 -23
  160. package/dist/project/project.event.d.ts +69 -75
  161. package/dist/project/project.event.d.ts.map +1 -1
  162. package/dist/project/project.event.js +95 -156
  163. package/dist/project/project.handler.d.ts +44 -47
  164. package/dist/project/project.handler.d.ts.map +1 -1
  165. package/dist/project/project.handler.js +168 -71
  166. package/dist/project/project.operations.d.ts +341 -347
  167. package/dist/project/project.operations.d.ts.map +1 -1
  168. package/dist/project/project.operations.js +366 -253
  169. package/dist/project/project.presentation.d.ts +2 -7
  170. package/dist/project/project.presentation.d.ts.map +1 -1
  171. package/dist/project/project.presentation.js +174 -61
  172. package/dist/project/project.schema.d.ts +191 -196
  173. package/dist/project/project.schema.d.ts.map +1 -1
  174. package/dist/project/project.schema.js +125 -205
  175. package/dist/saas-boilerplate.feature.d.ts +1 -7
  176. package/dist/saas-boilerplate.feature.d.ts.map +1 -1
  177. package/dist/saas-boilerplate.feature.js +87 -206
  178. package/dist/seeders/index.d.ts +4 -8
  179. package/dist/seeders/index.d.ts.map +1 -1
  180. package/dist/seeders/index.js +18 -16
  181. package/dist/settings/index.d.ts +6 -3
  182. package/dist/settings/index.d.ts.map +1 -0
  183. package/dist/settings/index.js +75 -3
  184. package/dist/settings/settings.entity.d.ts +23 -28
  185. package/dist/settings/settings.entity.d.ts.map +1 -1
  186. package/dist/settings/settings.entity.js +72 -75
  187. package/dist/settings/settings.enum.d.ts +1 -6
  188. package/dist/settings/settings.enum.d.ts.map +1 -1
  189. package/dist/settings/settings.enum.js +10 -19
  190. package/dist/shared/mock-data.d.ts +74 -77
  191. package/dist/shared/mock-data.d.ts.map +1 -1
  192. package/dist/shared/mock-data.js +102 -135
  193. package/dist/shared/overlay-types.d.ts +25 -28
  194. package/dist/shared/overlay-types.d.ts.map +1 -1
  195. package/dist/shared/overlay-types.js +1 -0
  196. package/dist/tests/operations.test-spec.d.ts +4 -9
  197. package/dist/tests/operations.test-spec.d.ts.map +1 -1
  198. package/dist/tests/operations.test-spec.js +108 -118
  199. package/dist/ui/SaasDashboard.d.ts +1 -6
  200. package/dist/ui/SaasDashboard.d.ts.map +1 -1
  201. package/dist/ui/SaasDashboard.js +977 -286
  202. package/dist/ui/SaasProjectList.d.ts +4 -11
  203. package/dist/ui/SaasProjectList.d.ts.map +1 -1
  204. package/dist/ui/SaasProjectList.js +159 -72
  205. package/dist/ui/SaasSettingsPanel.d.ts +1 -6
  206. package/dist/ui/SaasSettingsPanel.d.ts.map +1 -1
  207. package/dist/ui/SaasSettingsPanel.js +142 -134
  208. package/dist/ui/hooks/index.d.ts +3 -3
  209. package/dist/ui/hooks/index.d.ts.map +1 -0
  210. package/dist/ui/hooks/index.js +158 -4
  211. package/dist/ui/hooks/useProjectList.d.ts +26 -30
  212. package/dist/ui/hooks/useProjectList.d.ts.map +1 -1
  213. package/dist/ui/hooks/useProjectList.js +63 -71
  214. package/dist/ui/hooks/useProjectMutations.d.ts +20 -24
  215. package/dist/ui/hooks/useProjectMutations.d.ts.map +1 -1
  216. package/dist/ui/hooks/useProjectMutations.js +88 -142
  217. package/dist/ui/index.d.ts +8 -14
  218. package/dist/ui/index.d.ts.map +1 -0
  219. package/dist/ui/index.js +1809 -15
  220. package/dist/ui/modals/CreateProjectModal.d.ts +10 -19
  221. package/dist/ui/modals/CreateProjectModal.d.ts.map +1 -1
  222. package/dist/ui/modals/CreateProjectModal.js +150 -135
  223. package/dist/ui/modals/ProjectActionsModal.d.ts +20 -33
  224. package/dist/ui/modals/ProjectActionsModal.d.ts.map +1 -1
  225. package/dist/ui/modals/ProjectActionsModal.js +333 -289
  226. package/dist/ui/modals/index.d.ts +3 -3
  227. package/dist/ui/modals/index.d.ts.map +1 -0
  228. package/dist/ui/modals/index.js +487 -3
  229. package/dist/ui/overlays/demo-overlays.d.ts +10 -9
  230. package/dist/ui/overlays/demo-overlays.d.ts.map +1 -1
  231. package/dist/ui/overlays/demo-overlays.js +60 -68
  232. package/dist/ui/overlays/index.d.ts +2 -2
  233. package/dist/ui/overlays/index.d.ts.map +1 -0
  234. package/dist/ui/overlays/index.js +62 -3
  235. package/dist/ui/renderers/index.d.ts +3 -3
  236. package/dist/ui/renderers/index.d.ts.map +1 -0
  237. package/dist/ui/renderers/index.js +675 -3
  238. package/dist/ui/renderers/project-list.markdown.d.ts +15 -15
  239. package/dist/ui/renderers/project-list.markdown.d.ts.map +1 -1
  240. package/dist/ui/renderers/project-list.markdown.js +496 -144
  241. package/dist/ui/renderers/project-list.renderer.d.ts +6 -8
  242. package/dist/ui/renderers/project-list.renderer.d.ts.map +1 -1
  243. package/dist/ui/renderers/project-list.renderer.js +176 -15
  244. package/package.json +509 -99
  245. package/src/ui/renderers/project-list.markdown.ts +1 -1
  246. package/tsdown.config.js +1 -2
  247. package/.turbo/turbo-build$colon$bundle.log +0 -188
  248. package/dist/billing/billing.entity.js.map +0 -1
  249. package/dist/billing/billing.enum.js.map +0 -1
  250. package/dist/billing/billing.event.js.map +0 -1
  251. package/dist/billing/billing.handler.js.map +0 -1
  252. package/dist/billing/billing.operations.js.map +0 -1
  253. package/dist/billing/billing.presentation.js.map +0 -1
  254. package/dist/billing/billing.schema.js.map +0 -1
  255. package/dist/dashboard/dashboard.presentation.js.map +0 -1
  256. package/dist/docs/saas-boilerplate.docblock.js.map +0 -1
  257. package/dist/example.js.map +0 -1
  258. package/dist/handlers/saas.handlers.js.map +0 -1
  259. package/dist/index.js.map +0 -1
  260. package/dist/presentations/index.js.map +0 -1
  261. package/dist/project/project.entity.js.map +0 -1
  262. package/dist/project/project.enum.js.map +0 -1
  263. package/dist/project/project.event.js.map +0 -1
  264. package/dist/project/project.handler.js.map +0 -1
  265. package/dist/project/project.operations.js.map +0 -1
  266. package/dist/project/project.presentation.js.map +0 -1
  267. package/dist/project/project.schema.js.map +0 -1
  268. package/dist/saas-boilerplate.feature.js.map +0 -1
  269. package/dist/seeders/index.js.map +0 -1
  270. package/dist/settings/settings.entity.js.map +0 -1
  271. package/dist/settings/settings.enum.js.map +0 -1
  272. package/dist/shared/mock-data.js.map +0 -1
  273. package/dist/tests/operations.test-spec.js.map +0 -1
  274. package/dist/ui/SaasDashboard.js.map +0 -1
  275. package/dist/ui/SaasProjectList.js.map +0 -1
  276. package/dist/ui/SaasSettingsPanel.js.map +0 -1
  277. package/dist/ui/hooks/useProjectList.js.map +0 -1
  278. package/dist/ui/hooks/useProjectMutations.js.map +0 -1
  279. package/dist/ui/modals/CreateProjectModal.js.map +0 -1
  280. package/dist/ui/modals/ProjectActionsModal.js.map +0 -1
  281. package/dist/ui/overlays/demo-overlays.js.map +0 -1
  282. package/dist/ui/renderers/project-list.markdown.js.map +0 -1
  283. package/dist/ui/renderers/project-list.renderer.js.map +0 -1
  284. package/tsconfig.tsbuildinfo +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"project.operations.d.ts","names":[],"sources":["../../src/project/project.operations.ts"],"sourcesContent":[],"mappings":";;;;;;;cAqBa,qDAAqB,0CAAA;EAArB,IAAA,EAAA;IA4DX,IAAA,EAAA,2BAAA,CAAA,SAAA,CAAA,MAAA,EAAA,MAAA,CAAA;;;;;;EA5DgC,CAAA;;;;;;;;;;;;;;;;UAAA,2BAAA,CAAA;;;;;;;;;;;;+CAAA,CAAA,MAAA,EAAA,MAAA,CAAA;IAAA,UAAA,EAAA,IAAA;EAiErB,CAAA;EA2CX,cAAA,EAAA;+CA3C6B,CAAA,MAAA,EAAA,MAAA,CAAA;IAAA,UAAA,EAAA,KAAA;;;;;;;;;;;;;;;IAAA,IAAA,uCAAA,CAAA,MAAA,EAAA,MAAA,CAAA;IAgDlB,OAAA,EAAA,IAAA;IA8CX,UAAA,EAAA,KAAA;;;;;;;+CA9CgC,KAAA,EAAA,MAAA,CAAA;IAAA,UAAA,EAAA,KAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;iDAAA,CAAA,MAAA,EAAA,MAAA,CAAA;MAAA,UAAA,EAAA,KAAA;IAmDrB,CAAA;IA8CX,MAAA,EAAA;gDA9CgC,CAAA,CAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,CAAA,CAAA;MAAA,UAAA,EAAA,KAAA;;;;;IAAA,CAAA;IAmDrB,IAAA,EAAA;MAmCX,IAAA,uCAAA,CAAA,MAAA,EAAA,MAAA,CAAA;;;;;MAnC+B,IAAA,uCAAA,KAAA,EAAA,MAAA,CAAA;;;;;;;;;;;;cAtJpB,kDAAkB,0CAAA;;UA2C7B,2BAAA,CAAA;;;CA2G+B,CAAA,yCAAA,CAAA;;UAtJF,2BAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAgDlB,qDAAqB,0CAAA;;UA8ChC,2BAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UA9CgC,2BAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAmDrB,qDAAqB,0CAAA;;UA8ChC,2BAAA,CAAA;;;;;UA9CgC,2BAAA,CAAA;;;;;;;;;;;;;;;;;cAmDrB,oDAAoB,0CAAA;;UAmC/B,2BAAA,CAAA;;;;;;;;;;;;;;;;;;;;;cAnC+B,2BAAA,CAAA"}
1
+ {"version":3,"file":"project.operations.d.ts","sourceRoot":"","sources":["../../src/project/project.operations.ts"],"names":[],"mappings":"AAkBA;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA4DhC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA2C7B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA8ChC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;IA8ChC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAmC/B,CAAC"}
@@ -1,260 +1,373 @@
1
- import { CreateProjectInputModel, DeleteProjectInputModel, DeleteProjectOutputModel, GetProjectInputModel, ListProjectsInputModel, ListProjectsOutputModel, ProjectDeletedPayloadModel, ProjectModel, UpdateProjectInputModel } from "./project.schema.js";
2
- import { defineCommand, defineQuery } from "@contractspec/lib.contracts/operations";
1
+ // @bun
2
+ // src/project/project.enum.ts
3
+ import { defineEnum } from "@contractspec/lib.schema";
4
+ var ProjectStatusSchemaEnum = defineEnum("ProjectStatus", [
5
+ "DRAFT",
6
+ "ACTIVE",
7
+ "ARCHIVED",
8
+ "DELETED"
9
+ ]);
10
+ var ProjectStatusFilterEnum = defineEnum("ProjectStatusFilter", [
11
+ "DRAFT",
12
+ "ACTIVE",
13
+ "ARCHIVED",
14
+ "all"
15
+ ]);
3
16
 
4
- //#region src/project/project.operations.ts
5
- const OWNERS = ["example.saas-boilerplate"];
6
- /**
7
- * Create a new project.
8
- */
9
- const CreateProjectContract = defineCommand({
10
- meta: {
11
- key: "saas.project.create",
12
- version: "1.0.0",
13
- stability: "stable",
14
- owners: [...OWNERS],
15
- tags: [
16
- "saas",
17
- "project",
18
- "create"
19
- ],
20
- description: "Create a new project in the organization.",
21
- goal: "Allow users to create projects for organizing work.",
22
- context: "Called from project creation UI or API."
23
- },
24
- io: {
25
- input: CreateProjectInputModel,
26
- output: ProjectModel,
27
- errors: {
28
- SLUG_EXISTS: {
29
- description: "A project with this slug already exists",
30
- http: 409,
31
- gqlCode: "SLUG_EXISTS",
32
- when: "Slug is already taken in the organization"
33
- },
34
- LIMIT_REACHED: {
35
- description: "Project limit reached for this plan",
36
- http: 403,
37
- gqlCode: "LIMIT_REACHED",
38
- when: "Organization has reached project limit"
39
- }
40
- }
41
- },
42
- policy: { auth: "user" },
43
- sideEffects: {
44
- emits: [{
45
- key: "project.created",
46
- version: "1.0.0",
47
- when: "Project is created",
48
- payload: ProjectModel
49
- }],
50
- audit: ["project.created"]
51
- },
52
- acceptance: {
53
- scenarios: [{
54
- key: "create-project-happy-path",
55
- given: ["User is authenticated"],
56
- when: ["User creates project"],
57
- then: ["Project is created", "ProjectCreated event is emitted"]
58
- }],
59
- examples: [{
60
- key: "create-basic",
61
- input: {
62
- name: "Website Redesign",
63
- slug: "website-redesign"
64
- },
65
- output: {
66
- id: "proj-123",
67
- name: "Website Redesign",
68
- isArchived: false
69
- }
70
- }]
71
- }
17
+ // src/project/project.schema.ts
18
+ import { defineSchemaModel, ScalarTypeEnum } from "@contractspec/lib.schema";
19
+ var ProjectModel = defineSchemaModel({
20
+ name: "Project",
21
+ description: "A project within an organization",
22
+ fields: {
23
+ id: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
24
+ name: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
25
+ description: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
26
+ slug: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
27
+ organizationId: {
28
+ type: ScalarTypeEnum.String_unsecure(),
29
+ isOptional: false
30
+ },
31
+ createdBy: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
32
+ status: { type: ProjectStatusSchemaEnum, isOptional: false },
33
+ isPublic: { type: ScalarTypeEnum.Boolean(), isOptional: false },
34
+ tags: {
35
+ type: ScalarTypeEnum.String_unsecure(),
36
+ isArray: true,
37
+ isOptional: false
38
+ },
39
+ createdAt: { type: ScalarTypeEnum.DateTime(), isOptional: false },
40
+ updatedAt: { type: ScalarTypeEnum.DateTime(), isOptional: false }
41
+ }
72
42
  });
73
- /**
74
- * Get project by ID.
75
- */
76
- const GetProjectContract = defineQuery({
77
- meta: {
78
- key: "saas.project.get",
79
- version: "1.0.0",
80
- stability: "stable",
81
- owners: [...OWNERS],
82
- tags: [
83
- "saas",
84
- "project",
85
- "get"
86
- ],
87
- description: "Get a project by ID.",
88
- goal: "Retrieve project details.",
89
- context: "Project detail page, API calls."
90
- },
91
- io: {
92
- input: GetProjectInputModel,
93
- output: ProjectModel,
94
- errors: { NOT_FOUND: {
95
- description: "Project not found",
96
- http: 404,
97
- gqlCode: "NOT_FOUND",
98
- when: "Project ID is invalid or user lacks access"
99
- } }
100
- },
101
- policy: { auth: "user" },
102
- acceptance: {
103
- scenarios: [{
104
- key: "get-project-happy-path",
105
- given: ["Project exists"],
106
- when: ["User requests project"],
107
- then: ["Project details are returned"]
108
- }],
109
- examples: [{
110
- key: "get-existing",
111
- input: { projectId: "proj-123" },
112
- output: {
113
- id: "proj-123",
114
- name: "Website Redesign"
115
- }
116
- }]
117
- }
43
+ var CreateProjectInputModel = defineSchemaModel({
44
+ name: "CreateProjectInput",
45
+ description: "Input for creating a project",
46
+ fields: {
47
+ name: { type: ScalarTypeEnum.NonEmptyString(), isOptional: false },
48
+ description: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
49
+ slug: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
50
+ isPublic: { type: ScalarTypeEnum.Boolean(), isOptional: true },
51
+ tags: {
52
+ type: ScalarTypeEnum.String_unsecure(),
53
+ isArray: true,
54
+ isOptional: true
55
+ }
56
+ }
118
57
  });
119
- /**
120
- * Update a project.
121
- */
122
- const UpdateProjectContract = defineCommand({
123
- meta: {
124
- key: "saas.project.update",
125
- version: "1.0.0",
126
- stability: "stable",
127
- owners: [...OWNERS],
128
- tags: [
129
- "saas",
130
- "project",
131
- "update"
132
- ],
133
- description: "Update project details.",
134
- goal: "Allow project owners/editors to modify project.",
135
- context: "Project settings page."
136
- },
137
- io: {
138
- input: UpdateProjectInputModel,
139
- output: ProjectModel
140
- },
141
- policy: { auth: "user" },
142
- sideEffects: {
143
- emits: [{
144
- key: "project.updated",
145
- version: "1.0.0",
146
- when: "Project is updated",
147
- payload: ProjectModel
148
- }],
149
- audit: ["project.updated"]
150
- },
151
- acceptance: {
152
- scenarios: [{
153
- key: "update-project-happy-path",
154
- given: ["Project exists"],
155
- when: ["User updates description"],
156
- then: ["Project is updated", "ProjectUpdated event is emitted"]
157
- }],
158
- examples: [{
159
- key: "update-desc",
160
- input: {
161
- projectId: "proj-123",
162
- description: "New description"
163
- },
164
- output: {
165
- id: "proj-123",
166
- description: "New description"
167
- }
168
- }]
169
- }
58
+ var UpdateProjectInputModel = defineSchemaModel({
59
+ name: "UpdateProjectInput",
60
+ description: "Input for updating a project",
61
+ fields: {
62
+ projectId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
63
+ name: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
64
+ description: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
65
+ slug: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
66
+ isPublic: { type: ScalarTypeEnum.Boolean(), isOptional: true },
67
+ tags: {
68
+ type: ScalarTypeEnum.String_unsecure(),
69
+ isArray: true,
70
+ isOptional: true
71
+ },
72
+ status: { type: ProjectStatusSchemaEnum, isOptional: true }
73
+ }
170
74
  });
171
- /**
172
- * Delete a project.
173
- */
174
- const DeleteProjectContract = defineCommand({
175
- meta: {
176
- key: "saas.project.delete",
177
- version: "1.0.0",
178
- stability: "stable",
179
- owners: [...OWNERS],
180
- tags: [
181
- "saas",
182
- "project",
183
- "delete"
184
- ],
185
- description: "Delete a project (soft delete).",
186
- goal: "Allow project owners to remove projects.",
187
- context: "Project settings page."
188
- },
189
- io: {
190
- input: DeleteProjectInputModel,
191
- output: DeleteProjectOutputModel
192
- },
193
- policy: { auth: "user" },
194
- sideEffects: {
195
- emits: [{
196
- key: "project.deleted",
197
- version: "1.0.0",
198
- when: "Project is deleted",
199
- payload: ProjectDeletedPayloadModel
200
- }],
201
- audit: ["project.deleted"]
202
- },
203
- acceptance: {
204
- scenarios: [{
205
- key: "delete-project-happy-path",
206
- given: ["Project exists"],
207
- when: ["User deletes project"],
208
- then: ["Project is deleted", "ProjectDeleted event is emitted"]
209
- }],
210
- examples: [{
211
- key: "delete-existing",
212
- input: { projectId: "proj-123" },
213
- output: { success: true }
214
- }]
215
- }
75
+ var GetProjectInputModel = defineSchemaModel({
76
+ name: "GetProjectInput",
77
+ fields: {
78
+ projectId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false }
79
+ }
216
80
  });
217
- /**
218
- * List organization projects.
219
- */
220
- const ListProjectsContract = defineQuery({
221
- meta: {
222
- key: "saas.project.list",
223
- version: "1.0.0",
224
- stability: "stable",
225
- owners: [...OWNERS],
226
- tags: [
227
- "saas",
228
- "project",
229
- "list"
230
- ],
231
- description: "List projects in the organization.",
232
- goal: "Show all projects user has access to.",
233
- context: "Project list page, dashboard."
234
- },
235
- io: {
236
- input: ListProjectsInputModel,
237
- output: ListProjectsOutputModel
238
- },
239
- policy: { auth: "user" },
240
- acceptance: {
241
- scenarios: [{
242
- key: "list-projects-happy-path",
243
- given: ["Projects exist"],
244
- when: ["User lists projects"],
245
- then: ["List of projects is returned"]
246
- }],
247
- examples: [{
248
- key: "list-all",
249
- input: { limit: 10 },
250
- output: {
251
- items: [],
252
- total: 5
253
- }
254
- }]
255
- }
81
+ var DeleteProjectInputModel = defineSchemaModel({
82
+ name: "DeleteProjectInput",
83
+ fields: {
84
+ projectId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false }
85
+ }
86
+ });
87
+ var DeleteProjectOutputModel = defineSchemaModel({
88
+ name: "DeleteProjectOutput",
89
+ fields: {
90
+ success: { type: ScalarTypeEnum.Boolean(), isOptional: false }
91
+ }
92
+ });
93
+ var ProjectDeletedPayloadModel = defineSchemaModel({
94
+ name: "ProjectDeletedPayload",
95
+ fields: {
96
+ projectId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false }
97
+ }
98
+ });
99
+ var ListProjectsInputModel = defineSchemaModel({
100
+ name: "ListProjectsInput",
101
+ description: "Input for listing projects",
102
+ fields: {
103
+ status: { type: ProjectStatusFilterEnum, isOptional: true },
104
+ search: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
105
+ limit: {
106
+ type: ScalarTypeEnum.Int_unsecure(),
107
+ isOptional: true,
108
+ defaultValue: 20
109
+ },
110
+ offset: {
111
+ type: ScalarTypeEnum.Int_unsecure(),
112
+ isOptional: true,
113
+ defaultValue: 0
114
+ }
115
+ }
116
+ });
117
+ var ListProjectsOutputModel = defineSchemaModel({
118
+ name: "ListProjectsOutput",
119
+ description: "Output for listing projects",
120
+ fields: {
121
+ projects: { type: ProjectModel, isArray: true, isOptional: false },
122
+ total: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false }
123
+ }
256
124
  });
257
125
 
258
- //#endregion
259
- export { CreateProjectContract, DeleteProjectContract, GetProjectContract, ListProjectsContract, UpdateProjectContract };
260
- //# sourceMappingURL=project.operations.js.map
126
+ // src/project/project.operations.ts
127
+ import {
128
+ defineCommand,
129
+ defineQuery
130
+ } from "@contractspec/lib.contracts/operations";
131
+ var OWNERS = ["example.saas-boilerplate"];
132
+ var CreateProjectContract = defineCommand({
133
+ meta: {
134
+ key: "saas.project.create",
135
+ version: "1.0.0",
136
+ stability: "stable",
137
+ owners: [...OWNERS],
138
+ tags: ["saas", "project", "create"],
139
+ description: "Create a new project in the organization.",
140
+ goal: "Allow users to create projects for organizing work.",
141
+ context: "Called from project creation UI or API."
142
+ },
143
+ io: {
144
+ input: CreateProjectInputModel,
145
+ output: ProjectModel,
146
+ errors: {
147
+ SLUG_EXISTS: {
148
+ description: "A project with this slug already exists",
149
+ http: 409,
150
+ gqlCode: "SLUG_EXISTS",
151
+ when: "Slug is already taken in the organization"
152
+ },
153
+ LIMIT_REACHED: {
154
+ description: "Project limit reached for this plan",
155
+ http: 403,
156
+ gqlCode: "LIMIT_REACHED",
157
+ when: "Organization has reached project limit"
158
+ }
159
+ }
160
+ },
161
+ policy: {
162
+ auth: "user"
163
+ },
164
+ sideEffects: {
165
+ emits: [
166
+ {
167
+ key: "project.created",
168
+ version: "1.0.0",
169
+ when: "Project is created",
170
+ payload: ProjectModel
171
+ }
172
+ ],
173
+ audit: ["project.created"]
174
+ },
175
+ acceptance: {
176
+ scenarios: [
177
+ {
178
+ key: "create-project-happy-path",
179
+ given: ["User is authenticated"],
180
+ when: ["User creates project"],
181
+ then: ["Project is created", "ProjectCreated event is emitted"]
182
+ }
183
+ ],
184
+ examples: [
185
+ {
186
+ key: "create-basic",
187
+ input: { name: "Website Redesign", slug: "website-redesign" },
188
+ output: { id: "proj-123", name: "Website Redesign", isArchived: false }
189
+ }
190
+ ]
191
+ }
192
+ });
193
+ var GetProjectContract = defineQuery({
194
+ meta: {
195
+ key: "saas.project.get",
196
+ version: "1.0.0",
197
+ stability: "stable",
198
+ owners: [...OWNERS],
199
+ tags: ["saas", "project", "get"],
200
+ description: "Get a project by ID.",
201
+ goal: "Retrieve project details.",
202
+ context: "Project detail page, API calls."
203
+ },
204
+ io: {
205
+ input: GetProjectInputModel,
206
+ output: ProjectModel,
207
+ errors: {
208
+ NOT_FOUND: {
209
+ description: "Project not found",
210
+ http: 404,
211
+ gqlCode: "NOT_FOUND",
212
+ when: "Project ID is invalid or user lacks access"
213
+ }
214
+ }
215
+ },
216
+ policy: {
217
+ auth: "user"
218
+ },
219
+ acceptance: {
220
+ scenarios: [
221
+ {
222
+ key: "get-project-happy-path",
223
+ given: ["Project exists"],
224
+ when: ["User requests project"],
225
+ then: ["Project details are returned"]
226
+ }
227
+ ],
228
+ examples: [
229
+ {
230
+ key: "get-existing",
231
+ input: { projectId: "proj-123" },
232
+ output: { id: "proj-123", name: "Website Redesign" }
233
+ }
234
+ ]
235
+ }
236
+ });
237
+ var UpdateProjectContract = defineCommand({
238
+ meta: {
239
+ key: "saas.project.update",
240
+ version: "1.0.0",
241
+ stability: "stable",
242
+ owners: [...OWNERS],
243
+ tags: ["saas", "project", "update"],
244
+ description: "Update project details.",
245
+ goal: "Allow project owners/editors to modify project.",
246
+ context: "Project settings page."
247
+ },
248
+ io: {
249
+ input: UpdateProjectInputModel,
250
+ output: ProjectModel
251
+ },
252
+ policy: {
253
+ auth: "user"
254
+ },
255
+ sideEffects: {
256
+ emits: [
257
+ {
258
+ key: "project.updated",
259
+ version: "1.0.0",
260
+ when: "Project is updated",
261
+ payload: ProjectModel
262
+ }
263
+ ],
264
+ audit: ["project.updated"]
265
+ },
266
+ acceptance: {
267
+ scenarios: [
268
+ {
269
+ key: "update-project-happy-path",
270
+ given: ["Project exists"],
271
+ when: ["User updates description"],
272
+ then: ["Project is updated", "ProjectUpdated event is emitted"]
273
+ }
274
+ ],
275
+ examples: [
276
+ {
277
+ key: "update-desc",
278
+ input: { projectId: "proj-123", description: "New description" },
279
+ output: { id: "proj-123", description: "New description" }
280
+ }
281
+ ]
282
+ }
283
+ });
284
+ var DeleteProjectContract = defineCommand({
285
+ meta: {
286
+ key: "saas.project.delete",
287
+ version: "1.0.0",
288
+ stability: "stable",
289
+ owners: [...OWNERS],
290
+ tags: ["saas", "project", "delete"],
291
+ description: "Delete a project (soft delete).",
292
+ goal: "Allow project owners to remove projects.",
293
+ context: "Project settings page."
294
+ },
295
+ io: {
296
+ input: DeleteProjectInputModel,
297
+ output: DeleteProjectOutputModel
298
+ },
299
+ policy: {
300
+ auth: "user"
301
+ },
302
+ sideEffects: {
303
+ emits: [
304
+ {
305
+ key: "project.deleted",
306
+ version: "1.0.0",
307
+ when: "Project is deleted",
308
+ payload: ProjectDeletedPayloadModel
309
+ }
310
+ ],
311
+ audit: ["project.deleted"]
312
+ },
313
+ acceptance: {
314
+ scenarios: [
315
+ {
316
+ key: "delete-project-happy-path",
317
+ given: ["Project exists"],
318
+ when: ["User deletes project"],
319
+ then: ["Project is deleted", "ProjectDeleted event is emitted"]
320
+ }
321
+ ],
322
+ examples: [
323
+ {
324
+ key: "delete-existing",
325
+ input: { projectId: "proj-123" },
326
+ output: { success: true }
327
+ }
328
+ ]
329
+ }
330
+ });
331
+ var ListProjectsContract = defineQuery({
332
+ meta: {
333
+ key: "saas.project.list",
334
+ version: "1.0.0",
335
+ stability: "stable",
336
+ owners: [...OWNERS],
337
+ tags: ["saas", "project", "list"],
338
+ description: "List projects in the organization.",
339
+ goal: "Show all projects user has access to.",
340
+ context: "Project list page, dashboard."
341
+ },
342
+ io: {
343
+ input: ListProjectsInputModel,
344
+ output: ListProjectsOutputModel
345
+ },
346
+ policy: {
347
+ auth: "user"
348
+ },
349
+ acceptance: {
350
+ scenarios: [
351
+ {
352
+ key: "list-projects-happy-path",
353
+ given: ["Projects exist"],
354
+ when: ["User lists projects"],
355
+ then: ["List of projects is returned"]
356
+ }
357
+ ],
358
+ examples: [
359
+ {
360
+ key: "list-all",
361
+ input: { limit: 10 },
362
+ output: { items: [], total: 5 }
363
+ }
364
+ ]
365
+ }
366
+ });
367
+ export {
368
+ UpdateProjectContract,
369
+ ListProjectsContract,
370
+ GetProjectContract,
371
+ DeleteProjectContract,
372
+ CreateProjectContract
373
+ };
@@ -1,14 +1,9 @@
1
- import * as _contractspec_lib_contracts14 from "@contractspec/lib.contracts";
2
-
3
- //#region src/project/project.presentation.d.ts
4
1
  /**
5
2
  * Presentation for displaying a list of projects.
6
3
  */
7
- declare const ProjectListPresentation: _contractspec_lib_contracts14.PresentationSpec;
4
+ export declare const ProjectListPresentation: import("@contractspec/lib.contracts").PresentationSpec;
8
5
  /**
9
6
  * Presentation for project detail view.
10
7
  */
11
- declare const ProjectDetailPresentation: _contractspec_lib_contracts14.PresentationSpec;
12
- //#endregion
13
- export { ProjectDetailPresentation, ProjectListPresentation };
8
+ export declare const ProjectDetailPresentation: import("@contractspec/lib.contracts").PresentationSpec;
14
9
  //# sourceMappingURL=project.presentation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"project.presentation.d.ts","names":[],"sources":["../../src/project/project.presentation.ts"],"sourcesContent":[],"mappings":";;;;;;AAMa,cAAA,uBAwBX,EAAA,6BAAA,CAxBkC,gBAwBlC;AAKF;;;cAAa,2BAsBX,6BAAA,CAtBoC"}
1
+ {"version":3,"file":"project.presentation.d.ts","sourceRoot":"","sources":["../../src/project/project.presentation.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,eAAO,MAAM,uBAAuB,wDAwBlC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,yBAAyB,wDAsBpC,CAAC"}