@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
@@ -44,7 +44,7 @@ export function parseSmartTags(comment, context) {
44
44
  // Parse JSON
45
45
  Effect.try({
46
46
  try: () => JSON.parse(jsonPart),
47
- catch: (error) => new TagParseError({
47
+ catch: error => new TagParseError({
48
48
  message: `Invalid JSON in comment: ${error instanceof Error ? error.message : String(error)}`,
49
49
  objectType: context.objectType,
50
50
  objectName: context.objectName,
@@ -53,7 +53,7 @@ export function parseSmartTags(comment, context) {
53
53
  }),
54
54
  }),
55
55
  // Validate wrapper structure and extract sourcerer
56
- Effect.flatMap((parsed) => S.decodeUnknown(CommentJson)(parsed).pipe(Effect.mapError((error) => new TagParseError({
56
+ Effect.flatMap(parsed => S.decodeUnknown(CommentJson)(parsed).pipe(Effect.mapError(error => new TagParseError({
57
57
  message: `Invalid comment structure: ${error.message}`,
58
58
  objectType: context.objectType,
59
59
  objectName: context.objectName,
@@ -61,13 +61,13 @@ export function parseSmartTags(comment, context) {
61
61
  cause: error,
62
62
  })))),
63
63
  // Check for sourcerer key
64
- Effect.flatMap((wrapper) => {
64
+ Effect.flatMap(wrapper => {
65
65
  if (wrapper.sourcerer === undefined) {
66
66
  // Valid JSON but no sourcerer key - other tool's namespace
67
67
  return Effect.succeed({ tags: {}, description: descriptionPart });
68
68
  }
69
69
  // Validate sourcerer against SmartTags schema
70
- return S.decodeUnknown(SmartTags)(wrapper.sourcerer).pipe(Effect.map((tags) => ({ tags, description: descriptionPart })), Effect.mapError((error) => new TagParseError({
70
+ return S.decodeUnknown(SmartTags)(wrapper.sourcerer).pipe(Effect.map(tags => ({ tags, description: descriptionPart })), Effect.mapError(error => new TagParseError({
71
71
  message: `Invalid sourcerer tags: ${error.message}`,
72
72
  objectType: context.objectType,
73
73
  objectName: context.objectName,
@@ -1 +1 @@
1
- {"version":3,"file":"smart-tags-parser.js","sourceRoot":"","sources":["../../src/services/smart-tags-parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"smart-tags-parser.js","sourceRoot":"","sources":["../../src/services/smart-tags-parser.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"type-hints.d.ts","sourceRoot":"","sources":["../../src/services/type-hints.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAA6B,MAAM,QAAQ,CAAA;AAC1E,OAAO,KAAK,EAAE,QAAQ,EAAiB,MAAM,cAAc,CAAA;AAE3D;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAEzE;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;CAClF;;AAED;;GAEG;AACH,qBAAa,SAAU,SAAQ,cAG5B;CAAG;AA6DN;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,GAAG,gBAAgB,CAqCnF;AAED;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,gBAGnC,CAAA;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,wCAEvD"}
1
+ {"version":3,"file":"type-hints.d.ts","sourceRoot":"","sources":["../../src/services/type-hints.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAA6B,MAAM,QAAQ,CAAC;AAC3E,OAAO,KAAK,EAAE,QAAQ,EAAiB,MAAM,cAAc,CAAC;AAE5D;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE1E;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;CACnF;;AAED;;GAEG;AACH,qBAAa,SAAU,SAAQ,cAAuD;CAAG;AA6DzF;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,GAAG,gBAAgB,CAqCnF;AAED;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,gBAGnC,CAAC;AAEF;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,wCAEvD"}
@@ -83,7 +83,7 @@ export function createTypeHintRegistry(hints) {
83
83
  })));
84
84
  const getHintsImpl = (field) => {
85
85
  // Find all matching hints
86
- const matching = pipe(scoredHints, Arr.filter((sh) => matchesField(sh.hint.match, field)));
86
+ const matching = pipe(scoredHints, Arr.filter(sh => matchesField(sh.hint.match, field)));
87
87
  // Sort by score (ascending), then by index (ascending)
88
88
  // Lower score/index first, so later ones override
89
89
  const sorted = Arr.sort(matching, scoredHintOrder);
@@ -1 +1 @@
1
- {"version":3,"file":"type-hints.js","sourceRoot":"","sources":["../../src/services/type-hints.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"type-hints.js","sourceRoot":"","sources":["../../src/services/type-hints.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import { Context, Effect, Layer } from "effect";
2
+ import { FileSystem } from "@effect/platform";
3
+ import { UserModuleParseError, ExportNotFoundError, UserModuleNotFoundError } from "../errors.js";
4
+ import type { UserModuleRef } from "../user-module.js";
5
+ /**
6
+ * Information about exports found in a module.
7
+ */
8
+ export interface UserModuleExports {
9
+ /** Named exports: export const foo, export { bar }, export function baz */
10
+ readonly named: readonly string[];
11
+ /** Whether the module has a default export */
12
+ readonly hasDefault: boolean;
13
+ }
14
+ /**
15
+ * Service for parsing user modules and extracting export information.
16
+ */
17
+ export interface UserModuleParser {
18
+ /**
19
+ * Parse a TypeScript/JavaScript file and extract its exports.
20
+ *
21
+ * @param absolutePath - Absolute path to the file to parse
22
+ * @returns Export information for the module
23
+ */
24
+ readonly parseExports: (absolutePath: string) => Effect.Effect<UserModuleExports, UserModuleParseError | UserModuleNotFoundError, FileSystem.FileSystem>;
25
+ /**
26
+ * Validate that a UserModuleRef's requested imports exist in the module.
27
+ *
28
+ * @param absolutePath - Absolute path to the module file
29
+ * @param ref - The UserModuleRef specifying what to import
30
+ * @returns void on success, fails with ExportNotFoundError if any import is missing
31
+ */
32
+ readonly validateImports: (absolutePath: string, ref: UserModuleRef) => Effect.Effect<void, UserModuleParseError | UserModuleNotFoundError | ExportNotFoundError, FileSystem.FileSystem>;
33
+ }
34
+ declare const UserModuleParserService_base: Context.TagClass<UserModuleParserService, "UserModuleParser", UserModuleParser>;
35
+ export declare class UserModuleParserService extends UserModuleParserService_base {
36
+ }
37
+ /**
38
+ * Create a UserModuleParser implementation.
39
+ */
40
+ export declare function createUserModuleParser(): UserModuleParser;
41
+ /**
42
+ * Live layer for UserModuleParser service.
43
+ */
44
+ export declare const UserModuleParserLive: Layer.Layer<UserModuleParserService, never, never>;
45
+ export {};
46
+ //# sourceMappingURL=user-module-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-module-parser.d.ts","sourceRoot":"","sources":["../../src/services/user-module-parser.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAsB,MAAM,QAAQ,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,uBAAuB,EACxB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAMvD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,2EAA2E;IAC3E,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,8CAA8C;IAC9C,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAC9B;AAMD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;;OAKG;IACH,QAAQ,CAAC,YAAY,EAAE,CACrB,YAAY,EAAE,MAAM,KACjB,MAAM,CAAC,MAAM,CAChB,iBAAiB,EACjB,oBAAoB,GAAG,uBAAuB,EAC9C,UAAU,CAAC,UAAU,CACtB,CAAC;IAEF;;;;;;OAMG;IACH,QAAQ,CAAC,eAAe,EAAE,CACxB,YAAY,EAAE,MAAM,EACpB,GAAG,EAAE,aAAa,KACf,MAAM,CAAC,MAAM,CAChB,IAAI,EACJ,oBAAoB,GAAG,uBAAuB,GAAG,mBAAmB,EACpE,UAAU,CAAC,UAAU,CACtB,CAAC;CACH;;AAED,qBAAa,uBAAwB,SAAQ,4BAG1C;CAAG;AAoGN;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,gBAAgB,CAwGzD;AAMD;;GAEG;AACH,eAAO,MAAM,oBAAoB,oDAGhC,CAAC"}
@@ -0,0 +1,181 @@
1
+ /**
2
+ * User Module Parser Service
3
+ *
4
+ * Parses TypeScript/JavaScript files to extract export information.
5
+ * Used to validate that userModule() references point to valid exports.
6
+ */
7
+ import { parse } from "@babel/parser";
8
+ import { Context, Effect, Layer, pipe, Array as Arr } from "effect";
9
+ import { FileSystem } from "@effect/platform";
10
+ import { UserModuleParseError, ExportNotFoundError, UserModuleNotFoundError, } from "../errors.js";
11
+ export class UserModuleParserService extends Context.Tag("UserModuleParser")() {
12
+ }
13
+ // =============================================================================
14
+ // Implementation
15
+ // =============================================================================
16
+ /**
17
+ * Determine babel parser plugins based on file extension.
18
+ */
19
+ function getParserPlugins(filePath) {
20
+ const ext = filePath.split(".").pop()?.toLowerCase();
21
+ const plugins = [];
22
+ if (ext === "ts" || ext === "tsx") {
23
+ plugins.push("typescript");
24
+ }
25
+ if (ext === "tsx" || ext === "jsx") {
26
+ plugins.push("jsx");
27
+ }
28
+ return plugins;
29
+ }
30
+ /**
31
+ * Normalize a file path for lookup - try .ts first, then .js
32
+ */
33
+ function normalizeFilePath(filePath) {
34
+ // If already has extension, also try the other
35
+ if (filePath.endsWith(".js")) {
36
+ return [filePath.replace(/\.js$/, ".ts"), filePath];
37
+ }
38
+ if (filePath.endsWith(".ts")) {
39
+ return [filePath, filePath.replace(/\.ts$/, ".js")];
40
+ }
41
+ // No extension - try .ts first, then .js
42
+ return [`${filePath}.ts`, `${filePath}.js`, filePath];
43
+ }
44
+ /**
45
+ * Extract export names from parsed AST.
46
+ */
47
+ function extractExports(ast) {
48
+ const named = [];
49
+ let hasDefault = false;
50
+ for (const node of ast.program.body) {
51
+ switch (node.type) {
52
+ case "ExportNamedDeclaration": {
53
+ // export const foo = ..., export function bar() {}, export class Baz {}
54
+ if (node.declaration) {
55
+ const decl = node.declaration;
56
+ if (decl.type === "VariableDeclaration") {
57
+ for (const d of decl.declarations) {
58
+ if (d.id.type === "Identifier") {
59
+ named.push(d.id.name);
60
+ }
61
+ }
62
+ }
63
+ else if (decl.type === "FunctionDeclaration" ||
64
+ decl.type === "ClassDeclaration" ||
65
+ decl.type === "TSTypeAliasDeclaration" ||
66
+ decl.type === "TSInterfaceDeclaration" ||
67
+ decl.type === "TSEnumDeclaration") {
68
+ if (decl.id) {
69
+ named.push(decl.id.name);
70
+ }
71
+ }
72
+ }
73
+ // export { foo, bar } or export { foo, bar } from "./other"
74
+ if (node.specifiers) {
75
+ for (const spec of node.specifiers) {
76
+ if (spec.type === "ExportSpecifier") {
77
+ // Use the exported name (could be renamed: export { foo as bar })
78
+ const exportedName = spec.exported.type === "Identifier"
79
+ ? spec.exported.name
80
+ : spec.exported.value;
81
+ named.push(exportedName);
82
+ }
83
+ }
84
+ }
85
+ break;
86
+ }
87
+ case "ExportDefaultDeclaration": {
88
+ hasDefault = true;
89
+ break;
90
+ }
91
+ // Note: We explicitly don't follow ExportAllDeclaration (export * from "./other")
92
+ // as per design decision to only check direct exports
93
+ }
94
+ }
95
+ return { named, hasDefault };
96
+ }
97
+ /**
98
+ * Create a UserModuleParser implementation.
99
+ */
100
+ export function createUserModuleParser() {
101
+ return {
102
+ parseExports: absolutePath => Effect.gen(function* () {
103
+ const fs = yield* FileSystem.FileSystem;
104
+ // Try normalized paths (.ts first, then .js)
105
+ const pathsToTry = normalizeFilePath(absolutePath);
106
+ let content = null;
107
+ let resolvedPath = absolutePath;
108
+ for (const tryPath of pathsToTry) {
109
+ const exists = yield* pipe(fs.exists(tryPath), Effect.orElseSucceed(() => false));
110
+ if (exists) {
111
+ content = yield* pipe(fs.readFileString(tryPath), Effect.mapError(cause => new UserModuleParseError({
112
+ message: `Failed to read file: ${tryPath}`,
113
+ path: tryPath,
114
+ cause,
115
+ })));
116
+ resolvedPath = tryPath;
117
+ break;
118
+ }
119
+ }
120
+ if (content === null) {
121
+ return yield* Effect.fail(new UserModuleNotFoundError({
122
+ message: `User module not found: ${absolutePath}`,
123
+ configPath: absolutePath,
124
+ resolvedPath: pathsToTry[0] ?? absolutePath,
125
+ }));
126
+ }
127
+ // Parse the file
128
+ let ast;
129
+ try {
130
+ ast = parse(content, {
131
+ sourceType: "module",
132
+ plugins: getParserPlugins(resolvedPath),
133
+ // Be lenient with parsing errors for better UX
134
+ errorRecovery: true,
135
+ });
136
+ }
137
+ catch (error) {
138
+ return yield* Effect.fail(new UserModuleParseError({
139
+ message: `Failed to parse TypeScript/JavaScript: ${error instanceof Error ? error.message : String(error)}`,
140
+ path: resolvedPath,
141
+ cause: error,
142
+ }));
143
+ }
144
+ return extractExports(ast);
145
+ }),
146
+ validateImports: (absolutePath, ref) => Effect.gen(function* () {
147
+ const exports = yield* createUserModuleParser().parseExports(absolutePath);
148
+ // Check default import
149
+ if (ref.default && !exports.hasDefault) {
150
+ return yield* Effect.fail(new ExportNotFoundError({
151
+ message: `Module does not have a default export`,
152
+ modulePath: absolutePath,
153
+ exportName: "default",
154
+ availableExports: exports.named,
155
+ }));
156
+ }
157
+ // Check named imports
158
+ if (ref.named) {
159
+ const missing = pipe(ref.named, Arr.filter(name => !exports.named.includes(name)));
160
+ if (missing.length > 0) {
161
+ return yield* Effect.fail(new ExportNotFoundError({
162
+ message: `Export${missing.length > 1 ? "s" : ""} not found: ${missing.join(", ")}`,
163
+ modulePath: absolutePath,
164
+ exportName: missing[0],
165
+ availableExports: exports.named,
166
+ }));
167
+ }
168
+ }
169
+ // Namespace imports (import * as X) don't need validation -
170
+ // they always work as long as the file exists
171
+ }),
172
+ };
173
+ }
174
+ // =============================================================================
175
+ // Layer
176
+ // =============================================================================
177
+ /**
178
+ * Live layer for UserModuleParser service.
179
+ */
180
+ export const UserModuleParserLive = Layer.succeed(UserModuleParserService, createUserModuleParser());
181
+ //# sourceMappingURL=user-module-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-module-parser.js","sourceRoot":"","sources":["../../src/services/user-module-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Pure functions that convert QueryDescriptor to other representations
3
+ *
4
+ * These converters transform query metadata into AST representations for code generation.
5
+ * They are pure functions with no side effects, making them easy to test and compose.
6
+ */
7
+ import type { TSTypeKind, IdentifierKind } from "ast-types/lib/gen/kinds.js";
8
+ import type { QueryDescriptor, ParamDescriptor, ReturnDescriptor } from "./query-types.js";
9
+ /**
10
+ * Convert a QueryDescriptor's params to a TypeScript function parameter list.
11
+ * Returns AST nodes for function parameters.
12
+ *
13
+ * @example
14
+ * // Query with params: [{ name: "id", tsType: "string" }, { name: "limit", tsType: "number", hasDefault: true }]
15
+ * paramsToAst(query.params)
16
+ * // -> AST for: (id: string, limit?: number)
17
+ */
18
+ export declare function paramsToAst(params: readonly ParamDescriptor[]): IdentifierKind[];
19
+ /**
20
+ * Build an inline object type from fields.
21
+ *
22
+ * @example
23
+ * fieldsToObjectType([{ name: "id", tsType: "string", nullable: false }, { name: "count", tsType: "number", nullable: true }])
24
+ * // -> AST for: { id: string; count: number | null }
25
+ */
26
+ export declare function fieldsToObjectType(fields: readonly {
27
+ name: string;
28
+ tsType: string;
29
+ nullable: boolean;
30
+ }[]): TSTypeKind;
31
+ /**
32
+ * Convert a ReturnDescriptor to a TypeScript type.
33
+ *
34
+ * @example
35
+ * // mode: 'one', fields: [{ name: "id", tsType: "string" }, { name: "name", tsType: "string" }]
36
+ * returnToType(returns)
37
+ * // -> AST for: { id: string; name: string }
38
+ *
39
+ * // mode: 'oneOrNone'
40
+ * // -> AST for: { id: string; name: string } | null
41
+ *
42
+ * // mode: 'many'
43
+ * // -> AST for: { id: string; name: string }[]
44
+ *
45
+ * // mode: 'affected'
46
+ * // -> AST for: number
47
+ *
48
+ * // mode: 'void'
49
+ * // -> AST for: void
50
+ */
51
+ export declare function returnToType(returns: ReturnDescriptor): TSTypeKind;
52
+ /**
53
+ * Convert a QueryDescriptor to a complete function signature type.
54
+ *
55
+ * @example
56
+ * queryToSignature(findUserByIdQuery)
57
+ * // -> AST for: (id: string) => Promise<{ id: string; name: string } | null>
58
+ */
59
+ export declare function queryToSignature(query: QueryDescriptor): TSTypeKind;
60
+ //# sourceMappingURL=converters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"converters.d.ts","sourceRoot":"","sources":["../../src/shared/converters.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC7E,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AA0D3F;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,GAAG,cAAc,EAAE,CAShF;AAMD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,EAAE,GACrE,UAAU,CAgBZ;AAMD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,UAAU,CA4BlE;AAMD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,eAAe,GAAG,UAAU,CAWnE"}
@@ -0,0 +1,168 @@
1
+ /**
2
+ * Pure functions that convert QueryDescriptor to other representations
3
+ *
4
+ * These converters transform query metadata into AST representations for code generation.
5
+ * They are pure functions with no side effects, making them easy to test and compose.
6
+ */
7
+ import recast from "recast";
8
+ const b = recast.types.builders;
9
+ // =============================================================================
10
+ // Type string parser
11
+ // =============================================================================
12
+ /**
13
+ * Parse a TypeScript type string into an AST type node.
14
+ * Handles simple types and common patterns.
15
+ */
16
+ function parseTsTypeString(tsType) {
17
+ const trimmed = tsType.trim();
18
+ switch (trimmed) {
19
+ case "string":
20
+ return b.tsStringKeyword();
21
+ case "number":
22
+ return b.tsNumberKeyword();
23
+ case "boolean":
24
+ return b.tsBooleanKeyword();
25
+ case "void":
26
+ return b.tsVoidKeyword();
27
+ case "null":
28
+ return b.tsNullKeyword();
29
+ case "undefined":
30
+ return b.tsUndefinedKeyword();
31
+ case "unknown":
32
+ return b.tsUnknownKeyword();
33
+ case "any":
34
+ return b.tsAnyKeyword();
35
+ case "Date":
36
+ return b.tsTypeReference(b.identifier("Date"));
37
+ case "Array":
38
+ case "object":
39
+ return b.tsTypeReference(b.identifier(trimmed));
40
+ default:
41
+ if (trimmed.endsWith("[]")) {
42
+ const elementType = parseTsTypeString(trimmed.slice(0, -2));
43
+ return b.tsArrayType(elementType);
44
+ }
45
+ if (trimmed.includes("|")) {
46
+ const members = trimmed.split("|").map(s => parseTsTypeString(s.trim()));
47
+ return b.tsUnionType(members);
48
+ }
49
+ if (trimmed.includes("&")) {
50
+ const members = trimmed.split("&").map(s => parseTsTypeString(s.trim()));
51
+ return b.tsIntersectionType(members);
52
+ }
53
+ return b.tsTypeReference(b.identifier(trimmed));
54
+ }
55
+ }
56
+ // =============================================================================
57
+ // Parameter conversion
58
+ // =============================================================================
59
+ /**
60
+ * Convert a QueryDescriptor's params to a TypeScript function parameter list.
61
+ * Returns AST nodes for function parameters.
62
+ *
63
+ * @example
64
+ * // Query with params: [{ name: "id", tsType: "string" }, { name: "limit", tsType: "number", hasDefault: true }]
65
+ * paramsToAst(query.params)
66
+ * // -> AST for: (id: string, limit?: number)
67
+ */
68
+ export function paramsToAst(params) {
69
+ return params.map(param => {
70
+ const typeAnnotation = b.tsTypeAnnotation(parseTsTypeString(param.tsType));
71
+ return b.identifier.from({
72
+ name: param.name,
73
+ typeAnnotation,
74
+ optional: param.hasDefault ?? false,
75
+ });
76
+ });
77
+ }
78
+ // =============================================================================
79
+ // Object type building
80
+ // =============================================================================
81
+ /**
82
+ * Build an inline object type from fields.
83
+ *
84
+ * @example
85
+ * fieldsToObjectType([{ name: "id", tsType: "string", nullable: false }, { name: "count", tsType: "number", nullable: true }])
86
+ * // -> AST for: { id: string; count: number | null }
87
+ */
88
+ export function fieldsToObjectType(fields) {
89
+ const properties = fields.map(field => {
90
+ let fieldType = parseTsTypeString(field.tsType);
91
+ // Nullable means the value can be null, not that the property is optional
92
+ if (field.nullable) {
93
+ fieldType = b.tsUnionType([fieldType, b.tsNullKeyword()]);
94
+ }
95
+ return b.tsPropertySignature.from({
96
+ key: b.identifier(field.name),
97
+ typeAnnotation: b.tsTypeAnnotation(fieldType),
98
+ });
99
+ });
100
+ return b.tsTypeLiteral(properties);
101
+ }
102
+ // =============================================================================
103
+ // Return type conversion
104
+ // =============================================================================
105
+ /**
106
+ * Convert a ReturnDescriptor to a TypeScript type.
107
+ *
108
+ * @example
109
+ * // mode: 'one', fields: [{ name: "id", tsType: "string" }, { name: "name", tsType: "string" }]
110
+ * returnToType(returns)
111
+ * // -> AST for: { id: string; name: string }
112
+ *
113
+ * // mode: 'oneOrNone'
114
+ * // -> AST for: { id: string; name: string } | null
115
+ *
116
+ * // mode: 'many'
117
+ * // -> AST for: { id: string; name: string }[]
118
+ *
119
+ * // mode: 'affected'
120
+ * // -> AST for: number
121
+ *
122
+ * // mode: 'void'
123
+ * // -> AST for: void
124
+ */
125
+ export function returnToType(returns) {
126
+ switch (returns.mode) {
127
+ case "void":
128
+ return b.tsVoidKeyword();
129
+ case "affected":
130
+ return b.tsNumberKeyword();
131
+ case "one":
132
+ if (returns.fields.length === 0) {
133
+ return b.tsNeverKeyword();
134
+ }
135
+ return fieldsToObjectType(returns.fields);
136
+ case "oneOrNone":
137
+ if (returns.fields.length === 0) {
138
+ return b.tsNullKeyword();
139
+ }
140
+ const rowTypeOneOrNone = fieldsToObjectType(returns.fields);
141
+ return b.tsUnionType([rowTypeOneOrNone, b.tsNullKeyword()]);
142
+ case "many":
143
+ if (returns.fields.length === 0) {
144
+ return b.tsArrayType(b.tsNeverKeyword());
145
+ }
146
+ const rowTypeMany = fieldsToObjectType(returns.fields);
147
+ return b.tsArrayType(rowTypeMany);
148
+ }
149
+ }
150
+ // =============================================================================
151
+ // Query signature conversion
152
+ // =============================================================================
153
+ /**
154
+ * Convert a QueryDescriptor to a complete function signature type.
155
+ *
156
+ * @example
157
+ * queryToSignature(findUserByIdQuery)
158
+ * // -> AST for: (id: string) => Promise<{ id: string; name: string } | null>
159
+ */
160
+ export function queryToSignature(query) {
161
+ const returnType = returnToType(query.returns);
162
+ const promisedReturn = b.tsTypeReference(b.identifier("Promise"), b.tsTypeParameterInstantiation([returnType]));
163
+ return b.tsFunctionType.from({
164
+ parameters: paramsToAst(query.params),
165
+ typeAnnotation: b.tsTypeAnnotation(promisedReturn),
166
+ });
167
+ }
168
+ //# sourceMappingURL=converters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"converters.js","sourceRoot":"","sources":["../../src/shared/converters.ts"],"names":[],"mappings":"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"}