@danielfgray/pg-sourcerer 0.2.2 → 0.4.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 (307) hide show
  1. package/bin/pgsourcerer +2 -0
  2. package/dist/__tests__/fixtures/index.d.ts +15 -0
  3. package/dist/__tests__/fixtures/index.d.ts.map +1 -0
  4. package/dist/__tests__/fixtures/index.js +19 -0
  5. package/dist/__tests__/fixtures/index.js.map +1 -0
  6. package/dist/__tests__/fixtures/introspection.json +40522 -0
  7. package/dist/cli.d.ts +0 -1
  8. package/dist/cli.js +7 -46
  9. package/dist/cli.js.map +1 -1
  10. package/dist/config.d.ts +38 -5
  11. package/dist/config.d.ts.map +1 -1
  12. package/dist/config.js +13 -2
  13. package/dist/config.js.map +1 -1
  14. package/dist/{lib/conjure.d.ts → conjure/index.d.ts} +62 -3
  15. package/dist/conjure/index.d.ts.map +1 -0
  16. package/dist/{lib/conjure.js → conjure/index.js} +124 -3
  17. package/dist/conjure/index.js.map +1 -0
  18. package/dist/conjure/signature.d.ts +85 -0
  19. package/dist/conjure/signature.d.ts.map +1 -0
  20. package/dist/conjure/signature.js +130 -0
  21. package/dist/conjure/signature.js.map +1 -0
  22. package/dist/conjure/types.d.ts +97 -0
  23. package/dist/conjure/types.d.ts.map +1 -0
  24. package/dist/conjure/types.js +206 -0
  25. package/dist/conjure/types.js.map +1 -0
  26. package/dist/errors.d.ts +114 -139
  27. package/dist/errors.d.ts.map +1 -1
  28. package/dist/errors.js +82 -36
  29. package/dist/errors.js.map +1 -1
  30. package/dist/generate.d.ts +45 -46
  31. package/dist/generate.d.ts.map +1 -1
  32. package/dist/generate.js +86 -59
  33. package/dist/generate.js.map +1 -1
  34. package/dist/hex/builder.d.ts +12 -0
  35. package/dist/hex/builder.d.ts.map +1 -0
  36. package/dist/hex/builder.js +64 -0
  37. package/dist/hex/builder.js.map +1 -0
  38. package/dist/hex/ddl.d.ts +53 -0
  39. package/dist/hex/ddl.d.ts.map +1 -0
  40. package/dist/hex/ddl.js +306 -0
  41. package/dist/hex/ddl.js.map +1 -0
  42. package/dist/hex/index.d.ts +105 -0
  43. package/dist/hex/index.d.ts.map +1 -0
  44. package/dist/hex/index.js +81 -0
  45. package/dist/hex/index.js.map +1 -0
  46. package/dist/hex/primitives.d.ts +23 -0
  47. package/dist/hex/primitives.d.ts.map +1 -0
  48. package/dist/hex/primitives.js +38 -0
  49. package/dist/hex/primitives.js.map +1 -0
  50. package/dist/hex/query.d.ts +116 -0
  51. package/dist/hex/query.d.ts.map +1 -0
  52. package/dist/hex/query.js +219 -0
  53. package/dist/hex/query.js.map +1 -0
  54. package/dist/hex/types.d.ts +287 -0
  55. package/dist/hex/types.d.ts.map +1 -0
  56. package/dist/hex/types.js +431 -0
  57. package/dist/hex/types.js.map +1 -0
  58. package/dist/index.d.ts +17 -25
  59. package/dist/index.d.ts.map +1 -1
  60. package/dist/index.js +33 -44
  61. package/dist/index.js.map +1 -1
  62. package/dist/init.d.ts.map +1 -1
  63. package/dist/init.js +76 -140
  64. package/dist/init.js.map +1 -1
  65. package/dist/ir/extensions/queries.d.ts +6 -6
  66. package/dist/ir/extensions/queries.d.ts.map +1 -1
  67. package/dist/ir/extensions/queries.js +6 -4
  68. package/dist/ir/extensions/queries.js.map +1 -1
  69. package/dist/ir/extensions/schema-builder.d.ts.map +1 -1
  70. package/dist/ir/extensions/schema-builder.js.map +1 -1
  71. package/dist/ir/index.d.ts.map +1 -1
  72. package/dist/ir/index.js.map +1 -1
  73. package/dist/ir/relation-graph.d.ts.map +1 -1
  74. package/dist/ir/relation-graph.js +8 -8
  75. package/dist/ir/relation-graph.js.map +1 -1
  76. package/dist/ir/semantic-ir.d.ts +38 -0
  77. package/dist/ir/semantic-ir.d.ts.map +1 -1
  78. package/dist/ir/semantic-ir.js +50 -2
  79. package/dist/ir/semantic-ir.js.map +1 -1
  80. package/dist/ir/smart-tags.d.ts.map +1 -1
  81. package/dist/ir/smart-tags.js.map +1 -1
  82. package/dist/lib/field-utils.d.ts.map +1 -1
  83. package/dist/lib/field-utils.js +7 -7
  84. package/dist/lib/field-utils.js.map +1 -1
  85. package/dist/lib/join-graph.d.ts +95 -0
  86. package/dist/lib/join-graph.d.ts.map +1 -0
  87. package/dist/lib/join-graph.js +305 -0
  88. package/dist/lib/join-graph.js.map +1 -0
  89. package/dist/lib/picker.d.ts +60 -0
  90. package/dist/lib/picker.d.ts.map +1 -0
  91. package/dist/lib/picker.js +325 -0
  92. package/dist/lib/picker.js.map +1 -0
  93. package/dist/plugins/arktype.d.ts +20 -24
  94. package/dist/plugins/arktype.d.ts.map +1 -1
  95. package/dist/plugins/arktype.js +462 -386
  96. package/dist/plugins/arktype.js.map +1 -1
  97. package/dist/plugins/effect/http.d.ts +7 -0
  98. package/dist/plugins/effect/http.d.ts.map +1 -0
  99. package/dist/plugins/effect/http.js +460 -0
  100. package/dist/plugins/effect/http.js.map +1 -0
  101. package/dist/plugins/effect/index.d.ts +22 -0
  102. package/dist/plugins/effect/index.d.ts.map +1 -0
  103. package/dist/plugins/effect/index.js +65 -0
  104. package/dist/plugins/effect/index.js.map +1 -0
  105. package/dist/plugins/effect/models.d.ts +6 -0
  106. package/dist/plugins/effect/models.d.ts.map +1 -0
  107. package/dist/plugins/effect/models.js +116 -0
  108. package/dist/plugins/effect/models.js.map +1 -0
  109. package/dist/plugins/effect/repos.d.ts +21 -0
  110. package/dist/plugins/effect/repos.d.ts.map +1 -0
  111. package/dist/plugins/effect/repos.js +131 -0
  112. package/dist/plugins/effect/repos.js.map +1 -0
  113. package/dist/plugins/effect/schemas.d.ts +7 -0
  114. package/dist/plugins/effect/schemas.d.ts.map +1 -0
  115. package/dist/plugins/effect/schemas.js +75 -0
  116. package/dist/plugins/effect/schemas.js.map +1 -0
  117. package/dist/plugins/effect/shared.d.ts +116 -0
  118. package/dist/plugins/effect/shared.d.ts.map +1 -0
  119. package/dist/plugins/effect/shared.js +164 -0
  120. package/dist/plugins/effect/shared.js.map +1 -0
  121. package/dist/plugins/http-elysia.d.ts +20 -27
  122. package/dist/plugins/http-elysia.d.ts.map +1 -1
  123. package/dist/plugins/http-elysia.js +350 -475
  124. package/dist/plugins/http-elysia.js.map +1 -1
  125. package/dist/plugins/http-express.d.ts +20 -31
  126. package/dist/plugins/http-express.d.ts.map +1 -1
  127. package/dist/plugins/http-express.js +281 -268
  128. package/dist/plugins/http-express.js.map +1 -1
  129. package/dist/plugins/http-hono.d.ts +17 -33
  130. package/dist/plugins/http-hono.d.ts.map +1 -1
  131. package/dist/plugins/http-hono.js +317 -341
  132. package/dist/plugins/http-hono.js.map +1 -1
  133. package/dist/plugins/http-orpc.d.ts +34 -33
  134. package/dist/plugins/http-orpc.d.ts.map +1 -1
  135. package/dist/plugins/http-orpc.js +345 -257
  136. package/dist/plugins/http-orpc.js.map +1 -1
  137. package/dist/plugins/http-trpc.d.ts +33 -35
  138. package/dist/plugins/http-trpc.d.ts.map +1 -1
  139. package/dist/plugins/http-trpc.js +337 -241
  140. package/dist/plugins/http-trpc.js.map +1 -1
  141. package/dist/plugins/kysely.d.ts +54 -59
  142. package/dist/plugins/kysely.d.ts.map +1 -1
  143. package/dist/plugins/kysely.js +826 -687
  144. package/dist/plugins/kysely.js.map +1 -1
  145. package/dist/plugins/sql-queries.d.ts +38 -44
  146. package/dist/plugins/sql-queries.d.ts.map +1 -1
  147. package/dist/plugins/sql-queries.js +497 -897
  148. package/dist/plugins/sql-queries.js.map +1 -1
  149. package/dist/plugins/types.d.ts +12 -20
  150. package/dist/plugins/types.d.ts.map +1 -1
  151. package/dist/plugins/types.js +84 -227
  152. package/dist/plugins/types.js.map +1 -1
  153. package/dist/plugins/valibot.d.ts +7 -44
  154. package/dist/plugins/valibot.d.ts.map +1 -1
  155. package/dist/plugins/valibot.js +376 -382
  156. package/dist/plugins/valibot.js.map +1 -1
  157. package/dist/plugins/zod.d.ts +20 -24
  158. package/dist/plugins/zod.d.ts.map +1 -1
  159. package/dist/plugins/zod.js +370 -367
  160. package/dist/plugins/zod.js.map +1 -1
  161. package/dist/runtime/emit.d.ts +64 -0
  162. package/dist/runtime/emit.d.ts.map +1 -0
  163. package/dist/runtime/emit.js +445 -0
  164. package/dist/runtime/emit.js.map +1 -0
  165. package/dist/runtime/errors.d.ts +36 -0
  166. package/dist/runtime/errors.d.ts.map +1 -0
  167. package/dist/runtime/errors.js +29 -0
  168. package/dist/runtime/errors.js.map +1 -0
  169. package/dist/runtime/file-assignment.d.ts +161 -0
  170. package/dist/runtime/file-assignment.d.ts.map +1 -0
  171. package/dist/runtime/file-assignment.js +195 -0
  172. package/dist/runtime/file-assignment.js.map +1 -0
  173. package/dist/runtime/orchestrator.d.ts +62 -0
  174. package/dist/runtime/orchestrator.d.ts.map +1 -0
  175. package/dist/runtime/orchestrator.js +99 -0
  176. package/dist/runtime/orchestrator.js.map +1 -0
  177. package/dist/runtime/registry.d.ts +268 -0
  178. package/dist/runtime/registry.d.ts.map +1 -0
  179. package/dist/runtime/registry.js +436 -0
  180. package/dist/runtime/registry.js.map +1 -0
  181. package/dist/runtime/types.d.ts +182 -0
  182. package/dist/runtime/types.d.ts.map +1 -0
  183. package/dist/runtime/types.js +2 -0
  184. package/dist/runtime/types.js.map +1 -0
  185. package/dist/runtime/validation.d.ts +41 -0
  186. package/dist/runtime/validation.d.ts.map +1 -0
  187. package/dist/runtime/validation.js +70 -0
  188. package/dist/runtime/validation.js.map +1 -0
  189. package/dist/services/config-loader.d.ts.map +1 -1
  190. package/dist/services/config-loader.js +15 -6
  191. package/dist/services/config-loader.js.map +1 -1
  192. package/dist/services/config.d.ts +55 -25
  193. package/dist/services/config.d.ts.map +1 -1
  194. package/dist/services/config.js +60 -34
  195. package/dist/services/config.js.map +1 -1
  196. package/dist/services/file-writer.d.ts +3 -3
  197. package/dist/services/file-writer.d.ts.map +1 -1
  198. package/dist/services/file-writer.js +6 -8
  199. package/dist/services/file-writer.js.map +1 -1
  200. package/dist/services/inflection.d.ts +126 -27
  201. package/dist/services/inflection.d.ts.map +1 -1
  202. package/dist/services/inflection.js +300 -72
  203. package/dist/services/inflection.js.map +1 -1
  204. package/dist/services/introspection.d.ts.map +1 -1
  205. package/dist/services/introspection.js +6 -6
  206. package/dist/services/introspection.js.map +1 -1
  207. package/dist/services/ir-builder.d.ts.map +1 -1
  208. package/dist/services/ir-builder.js +73 -77
  209. package/dist/services/ir-builder.js.map +1 -1
  210. package/dist/services/ir.d.ts.map +1 -1
  211. package/dist/services/ir.js.map +1 -1
  212. package/dist/services/pg-types.d.ts.map +1 -1
  213. package/dist/services/pg-types.js +3 -3
  214. package/dist/services/pg-types.js.map +1 -1
  215. package/dist/services/smart-tags-parser.d.ts.map +1 -1
  216. package/dist/services/smart-tags-parser.js +4 -4
  217. package/dist/services/smart-tags-parser.js.map +1 -1
  218. package/dist/services/type-hints.d.ts.map +1 -1
  219. package/dist/services/type-hints.js +1 -1
  220. package/dist/services/type-hints.js.map +1 -1
  221. package/dist/services/user-module-parser.d.ts +46 -0
  222. package/dist/services/user-module-parser.d.ts.map +1 -0
  223. package/dist/services/user-module-parser.js +181 -0
  224. package/dist/services/user-module-parser.js.map +1 -0
  225. package/dist/shared/converters.d.ts +60 -0
  226. package/dist/shared/converters.d.ts.map +1 -0
  227. package/dist/shared/converters.js +168 -0
  228. package/dist/shared/converters.js.map +1 -0
  229. package/dist/shared/query-types.d.ts +95 -0
  230. package/dist/shared/query-types.d.ts.map +1 -0
  231. package/dist/shared/query-types.js +9 -0
  232. package/dist/shared/query-types.js.map +1 -0
  233. package/dist/testing.d.ts +125 -37
  234. package/dist/testing.d.ts.map +1 -1
  235. package/dist/testing.js +134 -42
  236. package/dist/testing.js.map +1 -1
  237. package/dist/user-module.d.ts +86 -0
  238. package/dist/user-module.d.ts.map +1 -0
  239. package/dist/user-module.js +55 -0
  240. package/dist/user-module.js.map +1 -0
  241. package/package.json +10 -6
  242. package/dist/lib/conjure.d.ts.map +0 -1
  243. package/dist/lib/conjure.js.map +0 -1
  244. package/dist/lib/hex.d.ts +0 -119
  245. package/dist/lib/hex.d.ts.map +0 -1
  246. package/dist/lib/hex.js +0 -188
  247. package/dist/lib/hex.js.map +0 -1
  248. package/dist/plugins/effect.d.ts +0 -53
  249. package/dist/plugins/effect.d.ts.map +0 -1
  250. package/dist/plugins/effect.js +0 -1074
  251. package/dist/plugins/effect.js.map +0 -1
  252. package/dist/plugins/kysely/queries.d.ts +0 -92
  253. package/dist/plugins/kysely/queries.d.ts.map +0 -1
  254. package/dist/plugins/kysely/queries.js +0 -1169
  255. package/dist/plugins/kysely/queries.js.map +0 -1
  256. package/dist/plugins/kysely/shared.d.ts +0 -59
  257. package/dist/plugins/kysely/shared.d.ts.map +0 -1
  258. package/dist/plugins/kysely/shared.js +0 -247
  259. package/dist/plugins/kysely/shared.js.map +0 -1
  260. package/dist/plugins/kysely/types.d.ts +0 -22
  261. package/dist/plugins/kysely/types.d.ts.map +0 -1
  262. package/dist/plugins/kysely/types.js +0 -428
  263. package/dist/plugins/kysely/types.js.map +0 -1
  264. package/dist/services/artifact-store.d.ts +0 -65
  265. package/dist/services/artifact-store.d.ts.map +0 -1
  266. package/dist/services/artifact-store.js +0 -57
  267. package/dist/services/artifact-store.js.map +0 -1
  268. package/dist/services/core-providers.d.ts +0 -15
  269. package/dist/services/core-providers.d.ts.map +0 -1
  270. package/dist/services/core-providers.js +0 -23
  271. package/dist/services/core-providers.js.map +0 -1
  272. package/dist/services/emissions.d.ts +0 -103
  273. package/dist/services/emissions.d.ts.map +0 -1
  274. package/dist/services/emissions.js +0 -241
  275. package/dist/services/emissions.js.map +0 -1
  276. package/dist/services/execution.d.ts +0 -35
  277. package/dist/services/execution.d.ts.map +0 -1
  278. package/dist/services/execution.js +0 -86
  279. package/dist/services/execution.js.map +0 -1
  280. package/dist/services/file-builder.d.ts +0 -85
  281. package/dist/services/file-builder.d.ts.map +0 -1
  282. package/dist/services/file-builder.js +0 -112
  283. package/dist/services/file-builder.js.map +0 -1
  284. package/dist/services/plugin-meta.d.ts +0 -33
  285. package/dist/services/plugin-meta.d.ts.map +0 -1
  286. package/dist/services/plugin-meta.js +0 -24
  287. package/dist/services/plugin-meta.js.map +0 -1
  288. package/dist/services/plugin-runner.d.ts +0 -42
  289. package/dist/services/plugin-runner.d.ts.map +0 -1
  290. package/dist/services/plugin-runner.js +0 -84
  291. package/dist/services/plugin-runner.js.map +0 -1
  292. package/dist/services/plugin.d.ts +0 -421
  293. package/dist/services/plugin.d.ts.map +0 -1
  294. package/dist/services/plugin.js +0 -197
  295. package/dist/services/plugin.js.map +0 -1
  296. package/dist/services/resolution.d.ts +0 -38
  297. package/dist/services/resolution.d.ts.map +0 -1
  298. package/dist/services/resolution.js +0 -242
  299. package/dist/services/resolution.js.map +0 -1
  300. package/dist/services/service-registry.d.ts +0 -74
  301. package/dist/services/service-registry.d.ts.map +0 -1
  302. package/dist/services/service-registry.js +0 -61
  303. package/dist/services/service-registry.js.map +0 -1
  304. package/dist/services/symbols.d.ts +0 -144
  305. package/dist/services/symbols.d.ts.map +0 -1
  306. package/dist/services/symbols.js +0 -144
  307. package/dist/services/symbols.js.map +0 -1
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Effect Plugin Preset
3
+ *
4
+ * Generates @effect/sql Model classes, Effect Schema for enums,
5
+ * and Model.makeRepository for tables with single-column primary keys.
6
+ *
7
+ * This is a preset that returns multiple focused plugins:
8
+ * - effect-schemas: S.Union(S.Literal(...)) for enums
9
+ * - effect-models: Model.Class for table entities
10
+ * - effect-repos: Model.makeRepository for tables with single-col PKs
11
+ */
12
+ import { Schema as S } from "effect";
13
+ import { normalizeFileNaming } from "../../runtime/file-assignment.js";
14
+ import { EffectConfigSchema } from "./shared.js";
15
+ import { effectSchemas } from "./schemas.js";
16
+ import { effectModels } from "./models.js";
17
+ import { effectRepos } from "./repos.js";
18
+ import { effectHttp } from "./http.js";
19
+ const DEFAULT_SERVER_FILE = "server.ts";
20
+ /**
21
+ * Effect plugin preset for @effect/sql code generation.
22
+ *
23
+ * Generates:
24
+ * - Model.Class for table/view entities
25
+ * - S.Union(S.Literal(...)) for enum entities
26
+ * - Model.makeRepository for tables with single-column primary keys
27
+ *
28
+ * @example
29
+ * ```typescript
30
+ * import { defineConfig, effect } from "pg-sourcerer"
31
+ *
32
+ * export default defineConfig({
33
+ * plugins: [effect()],
34
+ * })
35
+ * ```
36
+ */
37
+ export function effect(config) {
38
+ const schemaValidated = S.decodeSync(EffectConfigSchema)(config ?? {});
39
+ // Resolve FileNaming for HTTP config (Schema can't validate functions)
40
+ const parsed = {
41
+ ...schemaValidated,
42
+ http: schemaValidated.http === false
43
+ ? false
44
+ : {
45
+ ...schemaValidated.http,
46
+ serverFile: normalizeFileNaming(config?.http !== false ? config?.http?.serverFile : undefined, DEFAULT_SERVER_FILE),
47
+ },
48
+ };
49
+ const plugins = [
50
+ // Schemas first - models depend on enum schemas
51
+ effectSchemas(parsed),
52
+ // Models - table entities as Model.Class
53
+ effectModels(),
54
+ ];
55
+ // Optionally add repos
56
+ if (parsed.repos) {
57
+ plugins.push(effectRepos());
58
+ }
59
+ // HTTP requires repos - only add if repos are enabled and http is not disabled
60
+ if (parsed.repos && parsed.http !== false && parsed.http.enabled) {
61
+ plugins.push(effectHttp(parsed));
62
+ }
63
+ return plugins;
64
+ }
65
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/effect/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAC;AAGrC,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAqE,MAAM,aAAa,CAAC;AACpH,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAKvC,MAAM,mBAAmB,GAAG,WAAW,CAAC;AAExC;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,MAAM,CAAC,MAAqB;IAC1C,MAAM,eAAe,GAAG,CAAC,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;IAEvE,uEAAuE;IACvE,MAAM,MAAM,GAAuB;QACjC,GAAG,eAAe;QAClB,IAAI,EAAE,eAAe,CAAC,IAAI,KAAK,KAAK;YAClC,CAAC,CAAC,KAAK;YACP,CAAC,CAAC;gBACE,GAAG,eAAe,CAAC,IAAI;gBACvB,UAAU,EAAE,mBAAmB,CAAC,MAAM,EAAE,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,SAAS,EAAE,mBAAmB,CAAC;aACpH;KACN,CAAC;IAEF,MAAM,OAAO,GAAa;QACxB,gDAAgD;QAChD,aAAa,CAAC,MAAM,CAAC;QACrB,yCAAyC;QACzC,YAAY,EAAE;KACf,CAAC;IAEF,uBAAuB;IACvB,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IAC9B,CAAC;IAED,+EAA+E;IAC/E,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,IAAK,MAAM,CAAC,IAAyB,CAAC,OAAO,EAAE,CAAC;QACvF,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IACnC,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { Plugin } from "../../runtime/types.js";
2
+ /**
3
+ * Effect Models plugin - generates Model.Class for table entities
4
+ */
5
+ export declare function effectModels(): Plugin;
6
+ //# sourceMappingURL=models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../../src/plugins/effect/models.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,MAAM,EAAqC,MAAM,wBAAwB,CAAC;AA+FxF;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,CA4DrC"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Effect Models Plugin
3
+ *
4
+ * Generates Model.Class for table entities using @effect/sql
5
+ */
6
+ import { Effect } from "effect";
7
+ import { SymbolRegistry } from "../../runtime/registry.js";
8
+ import { IR } from "../../services/ir.js";
9
+ import { isTableEntity, isEnumEntity } from "../../ir/semantic-ir.js";
10
+ import { conjure, cast } from "../../conjure/index.js";
11
+ import { fieldToEffectMapping, isDbGenerated, getAutoTimestamp, toExpr, } from "./shared.js";
12
+ const b = conjure.b;
13
+ function buildModelClass(entity, enums, registry) {
14
+ const entityName = entity.name;
15
+ const tableName = entity.pgName;
16
+ const shape = entity.shapes.row;
17
+ const properties = shape.fields.map(field => {
18
+ // Check for auto-timestamp patterns first
19
+ const autoTs = getAutoTimestamp(field);
20
+ if (autoTs === "insert") {
21
+ return b.objectProperty(b.identifier(field.name), toExpr(conjure.id("Model").prop("DateTimeInsertFromDate").build()));
22
+ }
23
+ if (autoTs === "update") {
24
+ return b.objectProperty(b.identifier(field.name), toExpr(conjure.id("Model").prop("DateTimeUpdateFromDate").build()));
25
+ }
26
+ const mapping = fieldToEffectMapping(field, enums);
27
+ let value;
28
+ if (mapping.kind === "enumRef") {
29
+ const enumHandle = registry.import(`effect:schema:${mapping.enumRef}`);
30
+ value = enumHandle.ref();
31
+ // S.Array(elementType) - static method
32
+ if (field.isArray) {
33
+ value = conjure.id("S").method("Array", [value]).build();
34
+ }
35
+ if (field.nullable) {
36
+ value = conjure.id("S").method("NullOr", [value]).build();
37
+ }
38
+ }
39
+ else {
40
+ value = mapping.schema;
41
+ }
42
+ // Wrap in Model.Generated if field is auto-generated
43
+ if (isDbGenerated(field, entity)) {
44
+ value = conjure.id("Model").method("Generated", [value]).build();
45
+ }
46
+ return b.objectProperty(b.identifier(field.name), toExpr(value));
47
+ });
48
+ const fieldsObj = b.objectExpression(properties);
49
+ // Build: Model.Class<ClassName>("table_name")
50
+ const modelClassRef = b.memberExpression(b.identifier("Model"), b.identifier("Class"));
51
+ const modelClassWithType = b.callExpression(modelClassRef, [
52
+ conjure.str(tableName),
53
+ ]);
54
+ // Add type parameters: Model.Class<ClassName>
55
+ modelClassWithType.typeParameters =
56
+ b.tsTypeParameterInstantiation([
57
+ b.tsTypeReference(b.identifier(entityName)),
58
+ ]);
59
+ // Call with fields: Model.Class<ClassName>("table_name")({ ... })
60
+ const modelExpr = b.callExpression(modelClassWithType, [fieldsObj]);
61
+ const classDecl = b.classDeclaration(b.identifier(entityName), b.classBody([]), cast.toExpr(modelExpr));
62
+ return b.exportNamedDeclaration(classDecl, []);
63
+ }
64
+ /**
65
+ * Effect Models plugin - generates Model.Class for table entities
66
+ */
67
+ export function effectModels() {
68
+ return {
69
+ name: "effect-models",
70
+ provides: ["effect:models"],
71
+ consumes: ["effect:schemas"], // Need enum schemas for references
72
+ fileDefaults: [
73
+ {
74
+ pattern: "effect:model:",
75
+ fileNaming: ({ folderName }) => `${folderName}.ts`,
76
+ },
77
+ ],
78
+ declare: Effect.gen(function* () {
79
+ const ir = yield* IR;
80
+ const declarations = [];
81
+ for (const entity of ir.entities.values()) {
82
+ if (isTableEntity(entity)) {
83
+ declarations.push({
84
+ name: entity.name,
85
+ capability: `effect:model:${entity.name}`,
86
+ baseEntityName: entity.name,
87
+ });
88
+ }
89
+ }
90
+ return declarations;
91
+ }),
92
+ render: Effect.gen(function* () {
93
+ const ir = yield* IR;
94
+ const registry = yield* SymbolRegistry;
95
+ const enums = [...ir.entities.values()].filter(isEnumEntity);
96
+ const rendered = [];
97
+ for (const entity of ir.entities.values()) {
98
+ if (isTableEntity(entity)) {
99
+ const classDecl = buildModelClass(entity, enums, registry);
100
+ rendered.push({
101
+ name: entity.name,
102
+ capability: `effect:model:${entity.name}`,
103
+ node: classDecl,
104
+ exports: "named",
105
+ externalImports: [
106
+ { from: "@effect/sql", names: ["Model"] },
107
+ { from: "effect", names: ["Schema as S"] },
108
+ ],
109
+ });
110
+ }
111
+ }
112
+ return rendered;
113
+ }),
114
+ };
115
+ }
116
+ //# sourceMappingURL=models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../../src/plugins/effect/models.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { Plugin } from "../../runtime/types.js";
2
+ /**
3
+ * Effect Repos plugin - generates Effect.Service wrappers around Model.makeRepository
4
+ *
5
+ * Output:
6
+ * ```typescript
7
+ * export class UserRepo extends Effect.Service<UserRepo>()("UserRepo", {
8
+ * effect: Effect.gen(function*() {
9
+ * const repo = yield* Model.makeRepository(User, {
10
+ * tableName: "app_public.users",
11
+ * spanPrefix: "UserRepo",
12
+ * idColumn: "id",
13
+ * })
14
+ * return { ...repo }
15
+ * }),
16
+ * dependencies: [SqlClient.SqlClient]
17
+ * }) {}
18
+ * ```
19
+ */
20
+ export declare function effectRepos(): Plugin;
21
+ //# sourceMappingURL=repos.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repos.d.ts","sourceRoot":"","sources":["../../../src/plugins/effect/repos.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,MAAM,EAAqC,MAAM,wBAAwB,CAAC;AASxF;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,WAAW,IAAI,MAAM,CAyIpC"}
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Effect Repos Plugin
3
+ *
4
+ * Generates Effect.Service wrappers around Model.makeRepository for table entities with single-column PKs
5
+ */
6
+ import { Effect } from "effect";
7
+ import { SymbolRegistry } from "../../runtime/registry.js";
8
+ import { IR } from "../../services/ir.js";
9
+ import { isTableEntity } from "../../ir/semantic-ir.js";
10
+ import { conjure, cast } from "../../conjure/index.js";
11
+ import { hasSingleColumnPrimaryKey, getPrimaryKeyColumn } from "./shared.js";
12
+ const b = conjure.b;
13
+ /**
14
+ * Effect Repos plugin - generates Effect.Service wrappers around Model.makeRepository
15
+ *
16
+ * Output:
17
+ * ```typescript
18
+ * export class UserRepo extends Effect.Service<UserRepo>()("UserRepo", {
19
+ * effect: Effect.gen(function*() {
20
+ * const repo = yield* Model.makeRepository(User, {
21
+ * tableName: "app_public.users",
22
+ * spanPrefix: "UserRepo",
23
+ * idColumn: "id",
24
+ * })
25
+ * return { ...repo }
26
+ * }),
27
+ * dependencies: [SqlClient.SqlClient]
28
+ * }) {}
29
+ * ```
30
+ */
31
+ export function effectRepos() {
32
+ return {
33
+ name: "effect-repos",
34
+ provides: ["effect:repos"],
35
+ consumes: ["effect:models"], // Need model classes to reference
36
+ fileDefaults: [
37
+ {
38
+ pattern: "effect:repo:",
39
+ fileNaming: ({ folderName }) => `${folderName}.ts`,
40
+ },
41
+ ],
42
+ declare: Effect.gen(function* () {
43
+ const ir = yield* IR;
44
+ const declarations = [];
45
+ for (const entity of ir.entities.values()) {
46
+ if (isTableEntity(entity) && hasSingleColumnPrimaryKey(entity)) {
47
+ declarations.push({
48
+ name: `${entity.name}Repo`,
49
+ capability: `effect:repo:${entity.name}`,
50
+ baseEntityName: entity.name,
51
+ });
52
+ }
53
+ }
54
+ return declarations;
55
+ }),
56
+ render: Effect.gen(function* () {
57
+ const ir = yield* IR;
58
+ const registry = yield* SymbolRegistry;
59
+ const rendered = [];
60
+ for (const entity of ir.entities.values()) {
61
+ if (isTableEntity(entity) && hasSingleColumnPrimaryKey(entity)) {
62
+ const repoName = `${entity.name}Repo`;
63
+ const qualifiedTableName = `${entity.schemaName}.${entity.pgName}`;
64
+ const idColumn = getPrimaryKeyColumn(entity);
65
+ // Get reference to the model class
66
+ const modelHandle = registry.import(`effect:model:${entity.name}`);
67
+ const modelRef = modelHandle.ref();
68
+ // Build: Model.makeRepository(Entity, { tableName, spanPrefix, idColumn })
69
+ const makeRepoCall = conjure.id("Model")
70
+ .method("makeRepository", [
71
+ modelRef,
72
+ conjure.obj()
73
+ .prop("tableName", conjure.str(qualifiedTableName))
74
+ .prop("spanPrefix", conjure.str(repoName))
75
+ .prop("idColumn", conjure.str(idColumn))
76
+ .build(),
77
+ ])
78
+ .build();
79
+ // Build: const repo = yield* Model.makeRepository(...)
80
+ const repoVarDecl = b.variableDeclaration("const", [
81
+ b.variableDeclarator(b.identifier("repo"), b.yieldExpression(cast.toExpr(makeRepoCall), true) // true = delegate (yield*)
82
+ ),
83
+ ]);
84
+ // Build: return { ...repo }
85
+ const returnStmt = b.returnStatement(b.objectExpression([b.spreadElement(b.identifier("repo"))]));
86
+ // Build: function*() { const repo = yield* ...; return { ...repo } }
87
+ const generatorFn = b.functionExpression(null, [], b.blockStatement([cast.toStmt(repoVarDecl), returnStmt]), true // generator
88
+ );
89
+ // Build: Effect.gen(function*() { ... })
90
+ const effectGenCall = conjure.id("Effect")
91
+ .method("gen", [generatorFn])
92
+ .build();
93
+ // Build: { effect: Effect.gen(...), dependencies: [SqlClient.SqlClient] }
94
+ const serviceConfig = conjure.obj()
95
+ .prop("effect", effectGenCall)
96
+ .prop("dependencies", b.arrayExpression([
97
+ cast.toExpr(conjure.id("SqlClient").prop("SqlClient").build()),
98
+ ]))
99
+ .build();
100
+ // Build: Effect.Service<RepoName>()
101
+ const serviceRef = b.memberExpression(b.identifier("Effect"), b.identifier("Service"));
102
+ const serviceWithType = b.callExpression(serviceRef, []);
103
+ serviceWithType.typeParameters =
104
+ b.tsTypeParameterInstantiation([
105
+ b.tsTypeReference(b.identifier(repoName)),
106
+ ]);
107
+ // Build: Effect.Service<RepoName>()("RepoName", { ... })
108
+ const serviceCall = b.callExpression(serviceWithType, [
109
+ conjure.str(repoName),
110
+ cast.toExpr(serviceConfig),
111
+ ]);
112
+ // Build: class RepoName extends Effect.Service<RepoName>()(...) {}
113
+ const classDecl = b.classDeclaration(b.identifier(repoName), b.classBody([]), cast.toExpr(serviceCall));
114
+ const exportedClass = b.exportNamedDeclaration(classDecl, []);
115
+ rendered.push({
116
+ name: repoName,
117
+ capability: `effect:repo:${entity.name}`,
118
+ node: exportedClass,
119
+ exports: "named",
120
+ externalImports: [
121
+ { from: "effect", names: ["Effect"] },
122
+ { from: "@effect/sql", names: ["Model", "SqlClient"] },
123
+ ],
124
+ });
125
+ }
126
+ }
127
+ return rendered;
128
+ }),
129
+ };
130
+ }
131
+ //# sourceMappingURL=repos.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repos.js","sourceRoot":"","sources":["../../../src/plugins/effect/repos.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { Plugin } from "../../runtime/types.js";
2
+ import type { ParsedEffectConfig } from "./shared.js";
3
+ /**
4
+ * Effect Schemas plugin - generates S.Union(S.Literal(...)) for enums
5
+ */
6
+ export declare function effectSchemas(config: ParsedEffectConfig): Plugin;
7
+ //# sourceMappingURL=schemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../../src/plugins/effect/schemas.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAqC,MAAM,wBAAwB,CAAC;AAIxF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEtD;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAiFhE"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Effect Schemas Plugin
3
+ *
4
+ * Generates Effect Schema unions for enum entities
5
+ */
6
+ import { Effect } from "effect";
7
+ import { IR } from "../../services/ir.js";
8
+ import { isEnumEntity } from "../../ir/semantic-ir.js";
9
+ import { conjure } from "../../conjure/index.js";
10
+ /**
11
+ * Effect Schemas plugin - generates S.Union(S.Literal(...)) for enums
12
+ */
13
+ export function effectSchemas(config) {
14
+ return {
15
+ name: "effect-schemas",
16
+ provides: ["effect:schemas"],
17
+ fileDefaults: [
18
+ {
19
+ pattern: "effect:schema:",
20
+ fileNaming: ({ folderName }) => `${folderName}.ts`,
21
+ },
22
+ ],
23
+ declare: Effect.gen(function* () {
24
+ const ir = yield* IR;
25
+ const declarations = [];
26
+ for (const entity of ir.entities.values()) {
27
+ if (isEnumEntity(entity)) {
28
+ declarations.push({
29
+ name: entity.name,
30
+ capability: `effect:schema:${entity.name}`,
31
+ baseEntityName: entity.name,
32
+ });
33
+ }
34
+ }
35
+ return declarations;
36
+ }),
37
+ render: Effect.gen(function* () {
38
+ const ir = yield* IR;
39
+ const rendered = [];
40
+ for (const entity of ir.entities.values()) {
41
+ if (isEnumEntity(entity)) {
42
+ const literals = entity.values.map(v => conjure.id("S").method("Literal", [conjure.str(v)]).build());
43
+ const schemaNode = conjure.id("S")
44
+ .method("Union", literals)
45
+ .build();
46
+ const schemaDecl = conjure.export.const(entity.name, schemaNode);
47
+ rendered.push({
48
+ name: entity.name,
49
+ capability: `effect:schema:${entity.name}`,
50
+ node: schemaDecl,
51
+ exports: "named",
52
+ externalImports: [
53
+ { from: "effect", names: ["Schema as S"] },
54
+ ],
55
+ });
56
+ // Optionally export inferred type with "Type" suffix to avoid collision
57
+ if (config.exportTypes) {
58
+ const typeName = `${entity.name}Type`;
59
+ const inferType = conjure.ts.qualifiedRefWithParams(["S", "Schema", "Type"], [conjure.ts.typeof(entity.name)]);
60
+ const typeDecl = conjure.export.type(typeName, inferType);
61
+ rendered.push({
62
+ name: typeName,
63
+ capability: `effect:schema:${entity.name}:type`,
64
+ node: typeDecl,
65
+ exports: "named",
66
+ externalImports: [{ from: "effect", names: ["Schema as S"] }],
67
+ });
68
+ }
69
+ }
70
+ }
71
+ return rendered;
72
+ }),
73
+ };
74
+ }
75
+ //# sourceMappingURL=schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../../src/plugins/effect/schemas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Shared utilities for Effect plugin suite
3
+ */
4
+ import { Schema as S } from "effect";
5
+ import type { namedTypes as n } from "ast-types";
6
+ import type { ExpressionKind } from "ast-types/lib/gen/kinds.js";
7
+ import type { TableEntity, Field, EnumEntity } from "../../ir/semantic-ir.js";
8
+ import type { FileNaming } from "../../runtime/file-assignment.js";
9
+ /**
10
+ * HTTP API configuration schema (for Schema validation - simple types only)
11
+ */
12
+ export declare const HttpConfigSchema: S.Struct<{
13
+ /** Enable HTTP API generation. Default: true */
14
+ enabled: S.optionalWith<typeof S.Boolean, {
15
+ default: () => true;
16
+ }>;
17
+ /** Base path for all routes. Default: "/api" */
18
+ basePath: S.optionalWith<typeof S.String, {
19
+ default: () => string;
20
+ }>;
21
+ }>;
22
+ export type ParsedHttpConfig = S.Schema.Type<typeof HttpConfigSchema> & {
23
+ /** Output file for server aggregator. Resolved separately. */
24
+ serverFile: FileNaming;
25
+ };
26
+ export declare const EffectConfigSchema: S.Struct<{
27
+ /** Export inferred TypeScript types alongside schemas. Default: true */
28
+ exportTypes: S.optionalWith<typeof S.Boolean, {
29
+ default: () => true;
30
+ }>;
31
+ /** Generate Model.makeRepository for tables with single-column PKs. Default: true */
32
+ repos: S.optionalWith<typeof S.Boolean, {
33
+ default: () => true;
34
+ }>;
35
+ /** HTTP API generation config. Set to false to disable. Default: enabled */
36
+ http: S.optionalWith<S.Union<[S.Literal<[false]>, S.Struct<{
37
+ /** Enable HTTP API generation. Default: true */
38
+ enabled: S.optionalWith<typeof S.Boolean, {
39
+ default: () => true;
40
+ }>;
41
+ /** Base path for all routes. Default: "/api" */
42
+ basePath: S.optionalWith<typeof S.String, {
43
+ default: () => string;
44
+ }>;
45
+ }>]>, {
46
+ default: () => {
47
+ enabled: true;
48
+ basePath: string;
49
+ };
50
+ }>;
51
+ }>;
52
+ export type ParsedEffectConfig = Omit<S.Schema.Type<typeof EffectConfigSchema>, "http"> & {
53
+ http: false | ParsedHttpConfig;
54
+ };
55
+ /**
56
+ * HTTP API configuration
57
+ */
58
+ export interface HttpConfig {
59
+ /** Enable HTTP API generation. Default: true */
60
+ enabled?: boolean;
61
+ /** Base path for all routes. Default: "/api" */
62
+ basePath?: string;
63
+ /**
64
+ * Output file for the server aggregator (ServerLive layer).
65
+ * Can be a static string or a function receiving FileNamingContext.
66
+ * @default "server.ts" (in root output dir)
67
+ * @example "api/server.ts" - server in api subfolder
68
+ * @example ({ folderName }) => `${folderName}/server.ts` - dynamic path
69
+ */
70
+ serverFile?: string | FileNaming;
71
+ }
72
+ /**
73
+ * Configuration for the Effect plugin.
74
+ */
75
+ export interface EffectConfig {
76
+ /** Export inferred TypeScript types alongside schemas. Default: true */
77
+ exportTypes?: boolean;
78
+ /** Generate Model.makeRepository for tables with single-column PKs. Default: true */
79
+ repos?: boolean;
80
+ /** HTTP API generation config. Set to false to disable. */
81
+ http?: false | HttpConfig;
82
+ }
83
+ export declare const PG_STRING_TYPES: Set<string>;
84
+ export declare const PG_NUMBER_TYPES: Set<string>;
85
+ export declare const PG_BOOLEAN_TYPES: Set<string>;
86
+ export declare const PG_DATE_TYPES: Set<string>;
87
+ export declare const PG_JSON_TYPES: Set<string>;
88
+ export type EffectMapping = {
89
+ kind: "schema";
90
+ schema: n.Expression;
91
+ enumRef?: undefined;
92
+ } | {
93
+ kind: "enumRef";
94
+ enumRef: string;
95
+ schema?: undefined;
96
+ };
97
+ export declare function fieldToEffectMapping(field: Field, enums: EnumEntity[]): EffectMapping;
98
+ /**
99
+ * Check if entity has a single-column primary key (required for makeRepository)
100
+ */
101
+ export declare function hasSingleColumnPrimaryKey(entity: TableEntity): boolean;
102
+ /**
103
+ * Get the primary key column name
104
+ */
105
+ export declare function getPrimaryKeyColumn(entity: TableEntity): string | undefined;
106
+ /**
107
+ * Check if a field should be treated as DB-generated.
108
+ * Includes GENERATED ALWAYS, IDENTITY, and PK fields with defaults.
109
+ */
110
+ export declare function isDbGenerated(field: Field, entity: TableEntity): boolean;
111
+ /**
112
+ * Check for auto-timestamp patterns (created_at, updated_at)
113
+ */
114
+ export declare function getAutoTimestamp(field: Field): "insert" | "update" | undefined;
115
+ export declare function toExpr(node: n.Expression): ExpressionKind;
116
+ //# sourceMappingURL=shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/plugins/effect/shared.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,KAAK,EAAE,UAAU,IAAI,CAAC,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEjE,OAAO,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAE9E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAMnE;;GAEG;AACH,eAAO,MAAM,gBAAgB;IAC3B,gDAAgD;;;;IAEhD,gDAAgD;;;;EAEhD,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,gBAAgB,CAAC,GAAG;IACtE,8DAA8D;IAC9D,UAAU,EAAE,UAAU,CAAC;CACxB,CAAC;AAEF,eAAO,MAAM,kBAAkB;IAC7B,wEAAwE;;;;IAExE,qFAAqF;;;;IAErF,4EAA4E;;QAhB5E,gDAAgD;;;;QAEhD,gDAAgD;;;;;;;;;;EAmBhD,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,kBAAkB,CAAC,EAAE,MAAM,CAAC,GAAG;IACxF,IAAI,EAAE,KAAK,GAAG,gBAAgB,CAAC;CAChC,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,gDAAgD;IAChD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gDAAgD;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,wEAAwE;IACxE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,qFAAqF;IACrF,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,2DAA2D;IAC3D,IAAI,CAAC,EAAE,KAAK,GAAG,UAAU,CAAC;CAC3B;AAMD,eAAO,MAAM,eAAe,aAS1B,CAAC;AAEH,eAAO,MAAM,eAAe,aAa1B,CAAC;AAEH,eAAO,MAAM,gBAAgB,aAA+B,CAAC;AAE7D,eAAO,MAAM,aAAa,aAAkE,CAAC;AAE7F,eAAO,MAAM,aAAa,aAA6B,CAAC;AAMxD,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,CAAC,CAAC,UAAU,CAAC;IAAC,OAAO,CAAC,EAAE,SAAS,CAAA;CAAE,GAC7D;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,SAAS,CAAA;CAAE,CAAC;AAE7D,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,aAAa,CAuCrF;AAkDD;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAEtE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS,CAE3E;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAMxE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAM9E;AAMD,wBAAgB,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,UAAU,GAAG,cAAc,CAEzD"}