@deterministic-code/datasources 0.1.1 → 0.1.3

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 (613) hide show
  1. package/dist/ArrayReader.js +27 -0
  2. package/dist/BatchCommandIBulkWriteStrategy.js +150 -0
  3. package/dist/BuiltRepository.js +1 -0
  4. package/dist/BulkCRUDRepository.js +48 -0
  5. package/dist/BulkCommand.js +1 -0
  6. package/dist/BulkWriteEnrichment.js +11 -0
  7. package/dist/CRUDRepository.js +182 -0
  8. package/dist/CRUDRepositoryBuilder.js +30 -0
  9. package/dist/CRUDRepositoryOptions.js +1 -0
  10. package/dist/CRUDRepositoryStatements.js +19 -0
  11. package/dist/CascadeDeleteEnrichmentStrategy.js +28 -0
  12. package/dist/CascadeDeleteUpdateEnrichmentStrategy.js +25 -0
  13. package/dist/CommandMiddlewareHost.js +73 -0
  14. package/dist/ConsoleCommandMiddleware.js +45 -0
  15. package/dist/CreateEnrichmentStrategy.js +64 -0
  16. package/dist/Datasource.js +98 -0
  17. package/dist/DatasourceError.js +6 -0
  18. package/dist/DatasourceFactory.js +76 -0
  19. package/dist/DatasourceOptions.js +1 -0
  20. package/dist/DatasourceUrl.js +28 -0
  21. package/dist/DatasourceUrlParser.js +168 -0
  22. package/dist/DefaultCreateEnrichmentStrategy.js +18 -0
  23. package/dist/DefaultReadonlyEnrichmentStrategy.js +107 -0
  24. package/dist/DefaultUpdateEnrichmentStrategy.js +41 -0
  25. package/dist/DefaultWriteEnrichmentStrategy.js +135 -0
  26. package/dist/DeleteEnrichmentStrategy.js +28 -0
  27. package/dist/DriverLoader.js +87 -0
  28. package/dist/Enrichment.js +1 -0
  29. package/dist/EnrichmentPropertyType.js +6 -0
  30. package/dist/ExpectConsoleMiddleware.js +30 -0
  31. package/dist/FirstResultReader.js +43 -0
  32. package/dist/HashsetOptimizedReadonlyEnrichmentStrategy.js +58 -0
  33. package/dist/IBulkWriteStrategy.js +1 -0
  34. package/dist/ICRUDRepository.js +1 -0
  35. package/dist/ICRUDRepositoryFactory.js +1 -0
  36. package/dist/ICommand.js +6 -0
  37. package/dist/ICommandMiddleware.js +1 -0
  38. package/dist/IConnection.js +1 -0
  39. package/dist/IDatasource.js +1 -0
  40. package/dist/IDatasourceFactory.js +1 -0
  41. package/dist/IDriver.d.ts +4 -0
  42. package/dist/IDriver.js +1 -0
  43. package/dist/IEnriched.js +1 -0
  44. package/dist/IReader.js +1 -0
  45. package/dist/IReadonlyEnrichmentStrategy.js +1 -0
  46. package/dist/IReadonlyRepository.js +1 -0
  47. package/dist/IRepository.js +1 -0
  48. package/dist/IRepositoryFactory.js +1 -0
  49. package/dist/IRepositoryTree.js +1 -0
  50. package/dist/IRepositoryTreeNode.js +1 -0
  51. package/dist/ITransaction.js +1 -0
  52. package/dist/IUnitOfWork.js +1 -0
  53. package/dist/IWriteEnrichmentStrategy.js +1 -0
  54. package/dist/Information.js +1 -0
  55. package/dist/IsolationLevel.js +6 -0
  56. package/dist/LazyWriteEnrichmentStrategy.js +4 -0
  57. package/dist/NestedToObjectEnrichmentStrategy.js +20 -0
  58. package/dist/Parameter.js +1 -0
  59. package/dist/ParameterDirection.js +6 -0
  60. package/dist/ProviderCatalog.js +23 -0
  61. package/dist/ProviderNotImplementedError.js +8 -0
  62. package/dist/ProviderNotInstalledError.js +8 -0
  63. package/dist/ReadonlyRepository.js +150 -0
  64. package/dist/ReadonlyRepositoryBuilder.js +43 -0
  65. package/dist/ReadonlyRepositoryMappingOptions.js +1 -0
  66. package/dist/ReadonlyRepositoryStatements.js +10 -0
  67. package/dist/RepositoryAccess.js +12 -0
  68. package/dist/RepositoryFactory.js +71 -0
  69. package/dist/RepositoryNotRegisteredError.js +8 -0
  70. package/dist/RepositoryTree.js +6 -0
  71. package/dist/RepositoryTreeNode.js +12 -0
  72. package/dist/Response.js +13 -0
  73. package/dist/Row.js +1 -0
  74. package/dist/SingleCommandIBulkWriteStrategy.js +21 -0
  75. package/dist/StatementMappers.js +88 -0
  76. package/dist/StoredEnrichment.js +12 -0
  77. package/dist/StoredProcedureBulkWriteStrategy.js +143 -0
  78. package/dist/StreamingReader.js +53 -0
  79. package/dist/UnitOfWorkTransaction.js +51 -0
  80. package/dist/UpdateEnrichmentStrategy.js +61 -0
  81. package/dist/WriteMode.js +1 -0
  82. package/dist/builders/Field.js +1 -0
  83. package/dist/builders/Scalar.js +1 -0
  84. package/dist/builders/index.js +1 -0
  85. package/dist/collectAsync.js +7 -0
  86. package/dist/converters/Cell.js +1 -0
  87. package/dist/converters/ChangeCasingConverter.js +46 -0
  88. package/dist/converters/Constructable.js +1 -0
  89. package/dist/converters/DefaultValueConverter.d.ts +25 -0
  90. package/dist/converters/DefaultValueConverter.js +183 -0
  91. package/dist/converters/DefaultValueOptions.d.ts +9 -0
  92. package/dist/converters/DefaultValueOptions.js +1 -0
  93. package/dist/converters/DeterministicTypeConverter.d.ts +11 -0
  94. package/dist/converters/DeterministicTypeConverter.js +74 -0
  95. package/dist/converters/IMapping.d.ts +4 -0
  96. package/dist/converters/IMapping.js +1 -0
  97. package/dist/converters/MetaDataRowTypeConverter.js +71 -0
  98. package/dist/converters/PluralizerConverter.js +54 -0
  99. package/dist/converters/RegexConverter.js +12 -0
  100. package/dist/converters/ReplaceConverter.js +10 -0
  101. package/dist/converters/RowTypeConverter.js +25 -0
  102. package/dist/converters/SpecField.d.ts +7 -0
  103. package/dist/converters/SpecField.js +1 -0
  104. package/dist/converters/SpecFieldRules.d.ts +17 -0
  105. package/dist/converters/SpecFieldRules.js +1 -0
  106. package/dist/converters/ToLowerCaseConverter.js +4 -0
  107. package/dist/converters/ToUpperCaseConverter.js +4 -0
  108. package/dist/converters/TypeConverter.js +2 -0
  109. package/dist/createCRUDRepositoryOptions.js +7 -0
  110. package/dist/createReadonlyRepositoryMappingOptions.js +16 -0
  111. package/dist/dotEnv.js +9 -0
  112. package/dist/index.d.ts +9 -2
  113. package/dist/index.js +83 -0
  114. package/dist/mappers/ChangeCasingMapper.js +11 -0
  115. package/dist/mappers/DictionaryMapper.js +13 -0
  116. package/dist/mappers/FlatToNestedMapper.js +105 -0
  117. package/dist/mappers/IFlatToNestedMapper.js +1 -0
  118. package/dist/mappers/IMapper.js +1 -0
  119. package/dist/mappers/IdentityMapper.js +4 -0
  120. package/dist/mappers/PluralizerMapper.js +6 -0
  121. package/dist/mappers/RowTypeMapper.js +7 -0
  122. package/dist/mappers/TransformConverterMapper.js +6 -0
  123. package/dist/mappers/TransformMapper.js +8 -0
  124. package/dist/mappers/TypeMap.js +1 -0
  125. package/dist/mappers/TypeMapGroup.js +1 -0
  126. package/dist/mocks/index.js +9 -0
  127. package/dist/mocks/mock-command.js +42 -0
  128. package/dist/mocks/mock-connection.js +48 -0
  129. package/dist/mocks/mock-datasource.js +44 -0
  130. package/dist/mocks/mock-driver.js +15 -0
  131. package/dist/mocks/mock-reader.js +33 -0
  132. package/dist/mocks/mock-repository.js +61 -0
  133. package/dist/mocks/mock-select-statement.js +13 -0
  134. package/dist/mocks/mock-transaction.js +28 -0
  135. package/dist/mocks/mock-where.js +11 -0
  136. package/dist/parametersToRecord.js +9 -0
  137. package/dist/readerToAsyncIterable.js +7 -0
  138. package/dist/splitStatements.js +106 -0
  139. package/dist/statementParameters.js +25 -0
  140. package/dist/statementUsesParameter.js +2 -0
  141. package/dist/statements/Aggregate.js +7 -0
  142. package/dist/statements/AlterTableStatement.d.ts +33 -0
  143. package/dist/statements/AlterTableStatement.js +9 -0
  144. package/dist/statements/AlterTableStatementTextRenderer.d.ts +9 -0
  145. package/dist/statements/AlterTableStatementTextRenderer.js +33 -0
  146. package/dist/statements/ArrayExpression.js +6 -0
  147. package/dist/statements/BulkDeleteStatement.js +15 -0
  148. package/dist/statements/BulkDeleteStatementTextRenderer.js +15 -0
  149. package/dist/statements/BulkInsertStatement.js +29 -0
  150. package/dist/statements/BulkInsertStatementTextRenderer.js +6 -0
  151. package/dist/statements/BulkUpdateStatement.js +17 -0
  152. package/dist/statements/BulkUpdateStatementTextRenderer.js +20 -0
  153. package/dist/statements/CheckConstraint.js +9 -0
  154. package/dist/statements/Cmp.js +7 -0
  155. package/dist/statements/Column.js +1 -0
  156. package/dist/statements/ColumnDefault.js +8 -0
  157. package/dist/statements/Condition.js +2 -0
  158. package/dist/statements/ConditionRenderer.js +11 -0
  159. package/dist/statements/CreateBulkCreateStoredProcedureStatement.d.ts +13 -0
  160. package/dist/statements/CreateBulkCreateStoredProcedureStatement.js +17 -0
  161. package/dist/statements/CreateBulkCreateStoredProcedureStatementTextRenderer.d.ts +4 -0
  162. package/dist/statements/CreateBulkCreateStoredProcedureStatementTextRenderer.js +5 -0
  163. package/dist/statements/CreateBulkDeleteStoredProcedureStatement.d.ts +13 -0
  164. package/dist/statements/CreateBulkDeleteStoredProcedureStatement.js +17 -0
  165. package/dist/statements/CreateBulkDeleteStoredProcedureStatementTextRenderer.d.ts +4 -0
  166. package/dist/statements/CreateBulkDeleteStoredProcedureStatementTextRenderer.js +5 -0
  167. package/dist/statements/CreateBulkUpdateStoredProcedureStatement.d.ts +13 -0
  168. package/dist/statements/CreateBulkUpdateStoredProcedureStatement.js +17 -0
  169. package/dist/statements/CreateBulkUpdateStoredProcedureStatementTextRenderer.d.ts +4 -0
  170. package/dist/statements/CreateBulkUpdateStoredProcedureStatementTextRenderer.js +5 -0
  171. package/dist/statements/CreateCreateStoredProcedureStatement.d.ts +16 -0
  172. package/dist/statements/CreateCreateStoredProcedureStatement.js +23 -0
  173. package/dist/statements/CreateCreateStoredProcedureStatementTextRenderer.d.ts +4 -0
  174. package/dist/statements/CreateCreateStoredProcedureStatementTextRenderer.js +5 -0
  175. package/dist/statements/CreateDeleteStoredProcedureStatement.d.ts +17 -0
  176. package/dist/statements/CreateDeleteStoredProcedureStatement.js +25 -0
  177. package/dist/statements/CreateDeleteStoredProcedureStatementTextRenderer.d.ts +4 -0
  178. package/dist/statements/CreateDeleteStoredProcedureStatementTextRenderer.js +5 -0
  179. package/dist/statements/CreateIndexStatement.js +13 -0
  180. package/dist/statements/CreateIndexStatementTextRenderer.js +8 -0
  181. package/dist/statements/CreateReadStoredProcedureStatement.d.ts +17 -0
  182. package/dist/statements/CreateReadStoredProcedureStatement.js +25 -0
  183. package/dist/statements/CreateReadStoredProcedureStatementTextRenderer.d.ts +4 -0
  184. package/dist/statements/CreateReadStoredProcedureStatementTextRenderer.js +5 -0
  185. package/dist/statements/CreateRoutineStatement.d.ts +22 -0
  186. package/dist/statements/CreateRoutineStatementTextRenderer.d.ts +4 -0
  187. package/dist/statements/CreateTableStatement.js +11 -0
  188. package/dist/statements/CreateTableStatementTextRenderer.js +65 -0
  189. package/dist/statements/CreateTriggerStatement.d.ts +11 -0
  190. package/dist/statements/CreateTriggerStatement.js +15 -0
  191. package/dist/statements/CreateTriggerStatementTextRenderer.d.ts +4 -0
  192. package/dist/statements/CreateTriggerStatementTextRenderer.js +5 -0
  193. package/dist/statements/CreateUpdateStoredProcedureStatement.d.ts +17 -0
  194. package/dist/statements/CreateUpdateStoredProcedureStatement.js +25 -0
  195. package/dist/statements/CreateUpdateStoredProcedureStatementTextRenderer.d.ts +4 -0
  196. package/dist/statements/CreateUpdateStoredProcedureStatementTextRenderer.js +5 -0
  197. package/dist/statements/DefaultStatementTextRenderer.js +7 -0
  198. package/dist/statements/DeleteStatement.js +9 -0
  199. package/dist/statements/DeleteStatementTextRenderer.js +11 -0
  200. package/dist/statements/DropIndexStatement.d.ts +8 -0
  201. package/dist/statements/DropIndexStatement.js +9 -0
  202. package/dist/statements/DropIndexStatementTextRenderer.d.ts +5 -0
  203. package/dist/statements/DropIndexStatementTextRenderer.js +8 -0
  204. package/dist/statements/DropRoutineStatement.d.ts +7 -0
  205. package/dist/statements/DropRoutineStatement.js +7 -0
  206. package/dist/statements/DropRoutineStatementTextRenderer.d.ts +4 -0
  207. package/dist/statements/DropRoutineStatementTextRenderer.js +5 -0
  208. package/dist/statements/DropTableStatement.d.ts +7 -0
  209. package/dist/statements/DropTableStatement.js +7 -0
  210. package/dist/statements/DropTableStatementTextRenderer.d.ts +5 -0
  211. package/dist/statements/DropTableStatementTextRenderer.js +8 -0
  212. package/dist/statements/DropTriggerStatement.d.ts +8 -0
  213. package/dist/statements/DropTriggerStatement.js +9 -0
  214. package/dist/statements/DropTriggerStatementTextRenderer.d.ts +5 -0
  215. package/dist/statements/DropTriggerStatementTextRenderer.js +8 -0
  216. package/dist/statements/ExecuteStoredProcedureStatement.js +9 -0
  217. package/dist/statements/ExecuteStoredProcedureStatementTextRenderer.js +10 -0
  218. package/dist/statements/ExpressionEvaluator.js +122 -0
  219. package/dist/statements/ExpressionRenderer.js +141 -0
  220. package/dist/statements/ForeignKey.js +24 -0
  221. package/dist/statements/IAlterTableStatement.d.ts +3 -0
  222. package/dist/statements/IAlterTableStatement.js +1 -0
  223. package/dist/statements/IBulkDeleteStatement.js +1 -0
  224. package/dist/statements/IBulkInsertStatement.js +1 -0
  225. package/dist/statements/IBulkUpdateStatement.js +1 -0
  226. package/dist/statements/ICondition.js +1 -0
  227. package/dist/statements/IConditionVisitor.js +1 -0
  228. package/dist/statements/ICreateBulkCreateStoredProcedureStatement.d.ts +3 -0
  229. package/dist/statements/ICreateBulkCreateStoredProcedureStatement.js +1 -0
  230. package/dist/statements/ICreateBulkDeleteStoredProcedureStatement.d.ts +3 -0
  231. package/dist/statements/ICreateBulkDeleteStoredProcedureStatement.js +1 -0
  232. package/dist/statements/ICreateBulkUpdateStoredProcedureStatement.d.ts +3 -0
  233. package/dist/statements/ICreateBulkUpdateStoredProcedureStatement.js +1 -0
  234. package/dist/statements/ICreateCreateStoredProcedureStatement.d.ts +3 -0
  235. package/dist/statements/ICreateCreateStoredProcedureStatement.js +1 -0
  236. package/dist/statements/ICreateDeleteStoredProcedureStatement.d.ts +3 -0
  237. package/dist/statements/ICreateDeleteStoredProcedureStatement.js +1 -0
  238. package/dist/statements/ICreateIndexStatement.js +1 -0
  239. package/dist/statements/ICreateReadStoredProcedureStatement.d.ts +3 -0
  240. package/dist/statements/ICreateReadStoredProcedureStatement.js +1 -0
  241. package/dist/statements/ICreateRoutineStatement.d.ts +3 -0
  242. package/dist/statements/ICreateTableStatement.js +1 -0
  243. package/dist/statements/ICreateTriggerStatement.d.ts +3 -0
  244. package/dist/statements/ICreateTriggerStatement.js +1 -0
  245. package/dist/statements/ICreateUpdateStoredProcedureStatement.d.ts +3 -0
  246. package/dist/statements/ICreateUpdateStoredProcedureStatement.js +1 -0
  247. package/dist/statements/IDeleteStatement.js +1 -0
  248. package/dist/statements/IDropIndexStatement.d.ts +3 -0
  249. package/dist/statements/IDropIndexStatement.js +1 -0
  250. package/dist/statements/IDropRoutineStatement.d.ts +3 -0
  251. package/dist/statements/IDropRoutineStatement.js +1 -0
  252. package/dist/statements/IDropTableStatement.d.ts +3 -0
  253. package/dist/statements/IDropTableStatement.js +1 -0
  254. package/dist/statements/IDropTriggerStatement.d.ts +3 -0
  255. package/dist/statements/IDropTriggerStatement.js +1 -0
  256. package/dist/statements/IExecuteStoredProcedureStatement.js +1 -0
  257. package/dist/statements/IExpression.js +1 -0
  258. package/dist/statements/IIdentityInsertStatement.d.ts +3 -0
  259. package/dist/statements/IIdentityInsertStatement.js +1 -0
  260. package/dist/statements/IInsertStatement.js +1 -0
  261. package/dist/statements/IReturnStatement.js +1 -0
  262. package/dist/statements/ISelectStatement.js +1 -0
  263. package/dist/statements/IStatement.js +1 -0
  264. package/dist/statements/IStatementVisitor.d.ts +28 -0
  265. package/dist/statements/IStatementVisitor.js +1 -0
  266. package/dist/statements/ITableConstraint.js +1 -0
  267. package/dist/statements/IUpdateStatement.js +1 -0
  268. package/dist/statements/IWhere.js +1 -0
  269. package/dist/statements/Identifier.js +6 -0
  270. package/dist/statements/IdentityInsertStatement.d.ts +11 -0
  271. package/dist/statements/IdentityInsertStatement.js +13 -0
  272. package/dist/statements/IdentityInsertStatementTextRenderer.d.ts +6 -0
  273. package/dist/statements/IdentityInsertStatementTextRenderer.js +8 -0
  274. package/dist/statements/InsertStatement.js +9 -0
  275. package/dist/statements/InsertStatementTextRenderer.js +5 -0
  276. package/dist/statements/Join.js +10 -0
  277. package/dist/statements/Literal.js +6 -0
  278. package/dist/statements/Native.js +7 -0
  279. package/dist/statements/NotNull.js +6 -0
  280. package/dist/statements/Operator.js +207 -0
  281. package/dist/statements/OrderBy.js +9 -0
  282. package/dist/statements/PrimaryKey.js +9 -0
  283. package/dist/statements/ReturnStatement.js +9 -0
  284. package/dist/statements/ReturnStatementTextRenderer.js +10 -0
  285. package/dist/statements/RoutineParameter.d.ts +4 -0
  286. package/dist/statements/RoutineParameter.js +1 -0
  287. package/dist/statements/SelectInsertedIdStatement.js +9 -0
  288. package/dist/statements/SelectInsertedIdStatementTextRenderer.js +5 -0
  289. package/dist/statements/SelectStatement.js +25 -0
  290. package/dist/statements/SelectStatementOptions.js +1 -0
  291. package/dist/statements/SelectStatementTextRenderer.js +54 -0
  292. package/dist/statements/StatementEvaluator.js +3 -0
  293. package/dist/statements/StatementParser.js +454 -0
  294. package/dist/statements/StatementRenderer.d.ts +42 -0
  295. package/dist/statements/StatementRenderer.js +140 -0
  296. package/dist/statements/StatementTextRenderer.js +27 -0
  297. package/dist/statements/Subquery.js +6 -0
  298. package/dist/statements/UniqueConstraint.js +9 -0
  299. package/dist/statements/UpdateStatement.js +19 -0
  300. package/dist/statements/UpdateStatementTextRenderer.js +51 -0
  301. package/dist/statements/Where.js +182 -0
  302. package/dist/statements/WhereText.js +10 -0
  303. package/dist/statements/index.d.ts +44 -0
  304. package/dist/statements/index.js +79 -0
  305. package/dist/stubs/StubCommand.js +13 -0
  306. package/dist/stubs/StubConnection.js +14 -0
  307. package/dist/stubs/StubDatasource.js +34 -0
  308. package/dist/stubs/StubReader.js +20 -0
  309. package/dist/stubs/StubRepository.js +17 -0
  310. package/dist/stubs/StubTransaction.js +13 -0
  311. package/dist/stubs/createStubDatasource.js +2 -0
  312. package/dist/stubs/index.js +7 -0
  313. package/dist/stubs/notImplemented.js +4 -0
  314. package/package.json +10 -11
  315. package/src/ArrayReader.test.ts +0 -23
  316. package/src/ArrayReader.ts +0 -32
  317. package/src/BatchCommandIBulkWriteStrategy.ts +0 -228
  318. package/src/BuiltRepository.ts +0 -17
  319. package/src/BulkCRUDRepository.test.ts +0 -183
  320. package/src/BulkCRUDRepository.ts +0 -84
  321. package/src/BulkCommand.ts +0 -6
  322. package/src/BulkWriteEnrichment.ts +0 -19
  323. package/src/BulkWriteStrategy.test.ts +0 -293
  324. package/src/CRUDRepository.test.ts +0 -420
  325. package/src/CRUDRepository.ts +0 -264
  326. package/src/CRUDRepositoryBuilder.ts +0 -53
  327. package/src/CRUDRepositoryOptions.test.ts +0 -76
  328. package/src/CRUDRepositoryOptions.ts +0 -8
  329. package/src/CRUDRepositoryStatements.ts +0 -43
  330. package/src/CascadeDeleteEnrichmentStrategy.ts +0 -51
  331. package/src/CascadeDeleteUpdateEnrichmentStrategy.ts +0 -28
  332. package/src/Command.test.ts +0 -105
  333. package/src/CommandMiddlewareHost.test.ts +0 -98
  334. package/src/CommandMiddlewareHost.ts +0 -113
  335. package/src/Connection.test.ts +0 -34
  336. package/src/ConsoleCommandMiddleware.test.ts +0 -149
  337. package/src/ConsoleCommandMiddleware.ts +0 -64
  338. package/src/CreateEnrichmentStrategy.ts +0 -82
  339. package/src/Datasource.test.ts +0 -63
  340. package/src/Datasource.ts +0 -152
  341. package/src/DatasourceError.test.ts +0 -10
  342. package/src/DatasourceError.ts +0 -6
  343. package/src/DatasourceFactory.test.ts +0 -159
  344. package/src/DatasourceFactory.ts +0 -86
  345. package/src/DatasourceOptions.ts +0 -1
  346. package/src/DatasourceUrl.ts +0 -37
  347. package/src/DatasourceUrlParser.test.ts +0 -173
  348. package/src/DatasourceUrlParser.ts +0 -188
  349. package/src/DefaultCreateEnrichmentStrategy.ts +0 -21
  350. package/src/DefaultReadonlyEnrichmentStrategy.ts +0 -164
  351. package/src/DefaultUpdateEnrichmentStrategy.ts +0 -40
  352. package/src/DefaultWriteEnrichmentStrategy.ts +0 -151
  353. package/src/DeleteEnrichmentStrategy.ts +0 -56
  354. package/src/DriverLoader.ts +0 -97
  355. package/src/Enrichment.ts +0 -15
  356. package/src/EnrichmentPropertyType.ts +0 -9
  357. package/src/ExpectConsoleMiddleware.test.ts +0 -79
  358. package/src/ExpectConsoleMiddleware.ts +0 -47
  359. package/src/FirstResultReader.test.ts +0 -43
  360. package/src/FirstResultReader.ts +0 -49
  361. package/src/HashsetOptimizedReadonlyEnrichmentStrategy.ts +0 -80
  362. package/src/IBulkWriteStrategy.ts +0 -13
  363. package/src/ICRUDRepository.ts +0 -13
  364. package/src/ICRUDRepositoryFactory.ts +0 -8
  365. package/src/ICommand.ts +0 -45
  366. package/src/ICommandMiddleware.ts +0 -20
  367. package/src/IConnection.ts +0 -13
  368. package/src/IDatasource.ts +0 -27
  369. package/src/IDatasourceFactory.ts +0 -6
  370. package/src/IDriver.ts +0 -24
  371. package/src/IEnriched.ts +0 -11
  372. package/src/IReader.ts +0 -8
  373. package/src/IReadonlyEnrichmentStrategy.ts +0 -19
  374. package/src/IReadonlyRepository.ts +0 -21
  375. package/src/IRepository.ts +0 -5
  376. package/src/IRepositoryFactory.ts +0 -8
  377. package/src/IRepositoryTree.ts +0 -5
  378. package/src/IRepositoryTreeNode.ts +0 -8
  379. package/src/ITransaction.ts +0 -9
  380. package/src/IUnitOfWork.ts +0 -5
  381. package/src/IWriteEnrichmentStrategy.ts +0 -8
  382. package/src/Information.ts +0 -5
  383. package/src/IsolationLevel.test.ts +0 -13
  384. package/src/IsolationLevel.ts +0 -8
  385. package/src/LazyWriteEnrichmentStrategy.ts +0 -5
  386. package/src/NestedToObjectEnrichmentStrategy.ts +0 -33
  387. package/src/Parameter.ts +0 -8
  388. package/src/ParameterDirection.ts +0 -9
  389. package/src/ProviderCatalog.test.ts +0 -110
  390. package/src/ProviderCatalog.ts +0 -21
  391. package/src/ProviderNotImplementedError.test.ts +0 -11
  392. package/src/ProviderNotImplementedError.ts +0 -9
  393. package/src/ProviderNotInstalledError.test.ts +0 -11
  394. package/src/ProviderNotInstalledError.ts +0 -9
  395. package/src/ReadonlyRepository.test.ts +0 -406
  396. package/src/ReadonlyRepository.ts +0 -276
  397. package/src/ReadonlyRepositoryBuilder.ts +0 -53
  398. package/src/ReadonlyRepositoryMappingOptions.ts +0 -15
  399. package/src/ReadonlyRepositoryStatements.ts +0 -13
  400. package/src/RepositoryAccess.ts +0 -14
  401. package/src/RepositoryFactory.test.ts +0 -94
  402. package/src/RepositoryFactory.ts +0 -115
  403. package/src/RepositoryNotRegisteredError.ts +0 -9
  404. package/src/RepositoryTree.ts +0 -6
  405. package/src/RepositoryTreeNode.ts +0 -11
  406. package/src/Response.ts +0 -15
  407. package/src/Row.ts +0 -3
  408. package/src/SingleCommandIBulkWriteStrategy.ts +0 -35
  409. package/src/StatementMappers.test.ts +0 -221
  410. package/src/StatementMappers.ts +0 -110
  411. package/src/StoredEnrichment.ts +0 -25
  412. package/src/StoredProcedureBulkWriteStrategy.ts +0 -164
  413. package/src/StreamingReader.test.ts +0 -126
  414. package/src/StreamingReader.ts +0 -64
  415. package/src/Transaction.test.ts +0 -37
  416. package/src/UnitOfWorkTransaction.test.ts +0 -43
  417. package/src/UnitOfWorkTransaction.ts +0 -50
  418. package/src/UpdateEnrichmentStrategy.ts +0 -97
  419. package/src/UserViewCRUDRepository.test.ts +0 -323
  420. package/src/WriteMode.ts +0 -1
  421. package/src/builders/Field.ts +0 -6
  422. package/src/builders/Scalar.ts +0 -1
  423. package/src/builders/builders.test.ts +0 -404
  424. package/src/builders/index.ts +0 -2
  425. package/src/collectAsync.ts +0 -7
  426. package/src/converters/Cell.ts +0 -10
  427. package/src/converters/ChangeCasingConverter.test.ts +0 -34
  428. package/src/converters/ChangeCasingConverter.ts +0 -59
  429. package/src/converters/Constructable.ts +0 -1
  430. package/src/converters/MetaDataRowTypeConverter.ts +0 -80
  431. package/src/converters/PluralizerConverter.test.ts +0 -43
  432. package/src/converters/PluralizerConverter.ts +0 -67
  433. package/src/converters/RegexConverter.test.ts +0 -11
  434. package/src/converters/RegexConverter.ts +0 -14
  435. package/src/converters/ReplaceConverter.test.ts +0 -9
  436. package/src/converters/ReplaceConverter.ts +0 -6
  437. package/src/converters/RowTypeConverter.test.ts +0 -79
  438. package/src/converters/RowTypeConverter.ts +0 -33
  439. package/src/converters/ToLowerCaseConverter.test.ts +0 -9
  440. package/src/converters/ToLowerCaseConverter.ts +0 -4
  441. package/src/converters/ToUpperCaseConverter.test.ts +0 -9
  442. package/src/converters/ToUpperCaseConverter.ts +0 -4
  443. package/src/converters/TypeConverter.ts +0 -6
  444. package/src/createCRUDRepositoryOptions.ts +0 -21
  445. package/src/createReadonlyRepositoryMappingOptions.ts +0 -26
  446. package/src/dotEnv.test.ts +0 -21
  447. package/src/dotEnv.ts +0 -16
  448. package/src/edgeCases.test.ts +0 -485
  449. package/src/index.ts +0 -222
  450. package/src/mappers/ChangeCasingMapper.test.ts +0 -32
  451. package/src/mappers/ChangeCasingMapper.ts +0 -15
  452. package/src/mappers/DictionaryMapper.test.ts +0 -69
  453. package/src/mappers/DictionaryMapper.ts +0 -16
  454. package/src/mappers/FlatToNestedMapper.test.ts +0 -269
  455. package/src/mappers/FlatToNestedMapper.ts +0 -127
  456. package/src/mappers/IFlatToNestedMapper.ts +0 -7
  457. package/src/mappers/IMapper.ts +0 -4
  458. package/src/mappers/IdentityMapper.test.ts +0 -12
  459. package/src/mappers/IdentityMapper.ts +0 -6
  460. package/src/mappers/PluralizerMapper.test.ts +0 -40
  461. package/src/mappers/PluralizerMapper.ts +0 -9
  462. package/src/mappers/RowTypeMapper.test.ts +0 -12
  463. package/src/mappers/RowTypeMapper.ts +0 -13
  464. package/src/mappers/TransformConverterMapper.test.ts +0 -181
  465. package/src/mappers/TransformConverterMapper.ts +0 -11
  466. package/src/mappers/TransformMapper.ts +0 -8
  467. package/src/mappers/TypeMap.ts +0 -10
  468. package/src/mappers/TypeMapGroup.ts +0 -6
  469. package/src/mappers/transformMapper.test.ts +0 -66
  470. package/src/mocks/MockCommand.test.ts +0 -75
  471. package/src/mocks/MockConnection.test.ts +0 -34
  472. package/src/mocks/MockDatasource.test.ts +0 -40
  473. package/src/mocks/MockReader.test.ts +0 -17
  474. package/src/mocks/MockRepository.test.ts +0 -32
  475. package/src/mocks/MockSelectStatement.test.ts +0 -11
  476. package/src/mocks/MockTransaction.test.ts +0 -17
  477. package/src/mocks/MockWhere.test.ts +0 -11
  478. package/src/mocks/index.ts +0 -9
  479. package/src/mocks/mock-command.ts +0 -66
  480. package/src/mocks/mock-connection.ts +0 -57
  481. package/src/mocks/mock-datasource.ts +0 -65
  482. package/src/mocks/mock-driver.ts +0 -27
  483. package/src/mocks/mock-reader.ts +0 -38
  484. package/src/mocks/mock-repository.ts +0 -91
  485. package/src/mocks/mock-select-statement.ts +0 -17
  486. package/src/mocks/mock-transaction.ts +0 -31
  487. package/src/mocks/mock-where.ts +0 -13
  488. package/src/parametersToRecord.test.ts +0 -19
  489. package/src/parametersToRecord.ts +0 -11
  490. package/src/public-surface.test.ts +0 -23
  491. package/src/readWithWhereClauseAndCustomFlatToNestedObjectMappingOptions.test.ts +0 -126
  492. package/src/readerToAsyncIterable.test.ts +0 -39
  493. package/src/readerToAsyncIterable.ts +0 -11
  494. package/src/repository.test.ts +0 -410
  495. package/src/repository.type.test.ts +0 -29
  496. package/src/splitStatements.ts +0 -99
  497. package/src/statementParameters.ts +0 -22
  498. package/src/statementUsesParameter.ts +0 -4
  499. package/src/statements/Aggregate.ts +0 -9
  500. package/src/statements/ArrayExpression.ts +0 -5
  501. package/src/statements/BulkDeleteStatement.ts +0 -18
  502. package/src/statements/BulkDeleteStatementTextRenderer.ts +0 -16
  503. package/src/statements/BulkInsertStatement.ts +0 -37
  504. package/src/statements/BulkInsertStatementTextRenderer.ts +0 -10
  505. package/src/statements/BulkUpdateStatement.ts +0 -24
  506. package/src/statements/BulkUpdateStatementTextRenderer.ts +0 -29
  507. package/src/statements/CheckConstraint.ts +0 -9
  508. package/src/statements/Cmp.ts +0 -12
  509. package/src/statements/Column.ts +0 -10
  510. package/src/statements/ColumnDefault.ts +0 -6
  511. package/src/statements/Condition.ts +0 -3
  512. package/src/statements/ConditionRenderer.ts +0 -17
  513. package/src/statements/CreateIndexStatement.ts +0 -18
  514. package/src/statements/CreateIndexStatementTextRenderer.ts +0 -11
  515. package/src/statements/CreateTableStatement.ts +0 -18
  516. package/src/statements/CreateTableStatementTextRenderer.ts +0 -92
  517. package/src/statements/DefaultStatementTextRenderer.ts +0 -9
  518. package/src/statements/DeleteStatement.ts +0 -15
  519. package/src/statements/DeleteStatementTextRenderer.ts +0 -12
  520. package/src/statements/ExecuteStoredProcedureStatement.ts +0 -15
  521. package/src/statements/ExecuteStoredProcedureStatementTextRenderer.ts +0 -15
  522. package/src/statements/ExpressionEvaluator.ts +0 -166
  523. package/src/statements/ExpressionRenderer.ts +0 -161
  524. package/src/statements/ForeignKey.ts +0 -23
  525. package/src/statements/IBulkDeleteStatement.ts +0 -3
  526. package/src/statements/IBulkInsertStatement.ts +0 -3
  527. package/src/statements/IBulkUpdateStatement.ts +0 -3
  528. package/src/statements/ICondition.ts +0 -5
  529. package/src/statements/IConditionVisitor.ts +0 -7
  530. package/src/statements/ICreateIndexStatement.ts +0 -3
  531. package/src/statements/ICreateTableStatement.ts +0 -3
  532. package/src/statements/IDeleteStatement.ts +0 -6
  533. package/src/statements/IExecuteStoredProcedureStatement.ts +0 -3
  534. package/src/statements/IExpression.ts +0 -1
  535. package/src/statements/IInsertStatement.ts +0 -3
  536. package/src/statements/IReturnStatement.ts +0 -3
  537. package/src/statements/ISelectStatement.ts +0 -6
  538. package/src/statements/IStatement.ts +0 -5
  539. package/src/statements/IStatementVisitor.ts +0 -27
  540. package/src/statements/ITableConstraint.ts +0 -6
  541. package/src/statements/IUpdateStatement.ts +0 -6
  542. package/src/statements/IWhere.ts +0 -7
  543. package/src/statements/Identifier.ts +0 -5
  544. package/src/statements/InsertStatement.ts +0 -15
  545. package/src/statements/InsertStatementTextRenderer.ts +0 -7
  546. package/src/statements/Join.ts +0 -26
  547. package/src/statements/Literal.ts +0 -6
  548. package/src/statements/Native.ts +0 -5
  549. package/src/statements/NotNull.ts +0 -3
  550. package/src/statements/Operator.ts +0 -234
  551. package/src/statements/OrderBy.ts +0 -19
  552. package/src/statements/PrimaryKey.ts +0 -9
  553. package/src/statements/ReturnStatement.ts +0 -15
  554. package/src/statements/ReturnStatementTextRenderer.ts +0 -15
  555. package/src/statements/SelectInsertedIdStatement.test.ts +0 -11
  556. package/src/statements/SelectInsertedIdStatement.ts +0 -11
  557. package/src/statements/SelectInsertedIdStatementTextRenderer.ts +0 -7
  558. package/src/statements/SelectStatement.ts +0 -34
  559. package/src/statements/SelectStatementOptions.ts +0 -16
  560. package/src/statements/SelectStatementTextRenderer.ts +0 -71
  561. package/src/statements/StatementCompile.test.ts +0 -231
  562. package/src/statements/StatementEvaluator.ts +0 -5
  563. package/src/statements/StatementParser.test.ts +0 -304
  564. package/src/statements/StatementParser.ts +0 -461
  565. package/src/statements/StatementRenderer.ts +0 -120
  566. package/src/statements/StatementTextRenderer.ts +0 -60
  567. package/src/statements/Subquery.ts +0 -6
  568. package/src/statements/UniqueConstraint.ts +0 -9
  569. package/src/statements/UpdateStatement.ts +0 -34
  570. package/src/statements/UpdateStatementTextRenderer.ts +0 -63
  571. package/src/statements/Where.ts +0 -250
  572. package/src/statements/WhereText.ts +0 -10
  573. package/src/statements/index.ts +0 -75
  574. package/src/stubs/StubCommand.ts +0 -30
  575. package/src/stubs/StubConnection.ts +0 -21
  576. package/src/stubs/StubDatasource.test.ts +0 -99
  577. package/src/stubs/StubDatasource.ts +0 -60
  578. package/src/stubs/StubReader.ts +0 -25
  579. package/src/stubs/StubRepository.ts +0 -42
  580. package/src/stubs/StubTransaction.ts +0 -17
  581. package/src/stubs/createStubDatasource.ts +0 -4
  582. package/src/stubs/index.ts +0 -7
  583. package/src/stubs/notImplemented.ts +0 -5
  584. package/src/tests/contact/Address.ts +0 -14
  585. package/src/tests/contact/AddressType.ts +0 -6
  586. package/src/tests/contact/Base.ts +0 -7
  587. package/src/tests/contact/Contact.ts +0 -12
  588. package/src/tests/contact/ContactBase.ts +0 -8
  589. package/src/tests/contact/ContactChangeLog.ts +0 -8
  590. package/src/tests/contact/ContactGroup.ts +0 -6
  591. package/src/tests/contact/ContactGroupBase.ts +0 -6
  592. package/src/tests/contact/ContactGroupMember.ts +0 -6
  593. package/src/tests/contact/ContactSource.ts +0 -6
  594. package/src/tests/contact/ContactType.ts +0 -6
  595. package/src/tests/contact/ContactsService.test.ts +0 -118
  596. package/src/tests/contact/ContactsService.ts +0 -32
  597. package/src/tests/contact/ImportContactRequest.ts +0 -4
  598. package/src/tests/contact/ImportContactResult.ts +0 -5
  599. package/src/tests/contact/LegacyContact.ts +0 -7
  600. package/src/tests/contact/LegacyMigrationResult.ts +0 -5
  601. package/src/tests/contact/Phone.ts +0 -9
  602. package/src/tests/contact/PhoneType.ts +0 -6
  603. package/src/tests/contact/asContactsView.ts +0 -63
  604. package/src/tests/contact/contactColumns.ts +0 -40
  605. package/src/tests/contact/contactLookupIds.ts +0 -32
  606. package/src/tests/contact/contactLookups.ts +0 -6
  607. package/src/tests/contact/contactsParity.ts +0 -63
  608. package/src/tests/contact/contactsServiceOf.ts +0 -38
  609. package/src/tests/contact/contactsView.ts +0 -31
  610. package/src/tests/contact/expectContactsView.ts +0 -23
  611. package/src/tests/contact/extraContact.ts +0 -61
  612. package/src/tests/contact/logMapped.ts +0 -5
  613. package/src/tests/contact/seedContacts.ts +0 -31
@@ -1,127 +0,0 @@
1
- import type { Cell, Cells } from "../converters/Cell.ts";
2
- import type { IFlatToNestedMapper } from "./IFlatToNestedMapper.ts";
3
- import type { TypeMap, TypeMapFields } from "./TypeMap.ts";
4
- import type { TypeMapGroup } from "./TypeMapGroup.ts";
5
-
6
- type GroupPlan = { key: string; fields: Record<string, string>; destKey: string };
7
-
8
- const stringFields = (fields: TypeMapFields<object>): Record<string, string> =>
9
- Object.fromEntries(
10
- Object.entries(fields).filter((entry): entry is [string, string] => typeof entry[1] === "string"),
11
- );
12
-
13
- const destOf = (fields: Record<string, string>, column: string) =>
14
- Object.entries(fields).find(([, source]) => source === column)?.[0] ?? column;
15
-
16
- const cellKey = (value: Cell | undefined) => (value == null ? null : String(value));
17
-
18
- export class FlatToNestedMapper<T> implements IFlatToNestedMapper<T> {
19
- readonly spec: TypeMap<T>;
20
- private readonly scalars: Record<string, string>;
21
- private readonly groups: Record<string, GroupPlan>;
22
- private readonly parentDest: string;
23
-
24
- constructor(spec: TypeMap<T>) {
25
- this.spec = spec;
26
- this.scalars = {};
27
- this.groups = {};
28
- for (const [name, value] of Object.entries(spec.fields) as [string, string | TypeMapGroup<object>][]) {
29
- if (typeof value === "string") this.scalars[name] = value;
30
- else {
31
- const fields = stringFields(value.fields);
32
- this.groups[name] = { key: value.key, fields, destKey: destOf(fields, value.key) };
33
- }
34
- }
35
- this.parentDest = destOf(this.scalars, spec.key);
36
- }
37
-
38
- map = (rows: Iterable<T | Cells>): T[] => this._collapse(rows);
39
-
40
- reverseMap = (values: T[]): Cells[] => [...values].flatMap((value) => this.explode(value));
41
-
42
- private _map = (row: Cells): T => {
43
- const dest = {} as Record<string, Cell | Cells[]>;
44
- for (const [name, column] of Object.entries(this.scalars)) dest[name] = row[column] ?? null;
45
- for (const [name, group] of Object.entries(this.groups)) {
46
- const key = row[group.key];
47
- dest[name] =
48
- key == null
49
- ? []
50
- : [
51
- Object.fromEntries(
52
- Object.entries(group.fields).map(([field, column]) => [field, row[column] ?? null]),
53
- ),
54
- ];
55
- }
56
- return dest as T;
57
- };
58
-
59
- private _collapse = (rows: Iterable<T | Cells>): T[] => {
60
- const byParent = new Map<string, T>();
61
- const seen = new Set<string>();
62
- for (const raw of rows) {
63
- const item = this.mapped(raw) ? raw : this._map(raw);
64
- const parent = cellKey((item as Record<string, Cell>)[this.parentDest]);
65
- if (parent == null) continue;
66
- const existing = byParent.get(parent);
67
- if (!existing) {
68
- byParent.set(parent, item);
69
- this.mark(seen, parent, item);
70
- continue;
71
- }
72
- this.merge(existing, item, parent, seen);
73
- }
74
- return [...byParent.values()];
75
- };
76
-
77
- private explode = (value: T): Cells[] => {
78
- const record = value as Record<string, Cell | Cells[]>;
79
- let rows: Cells[] = [this.scalarsOf(record)];
80
- for (const [name, group] of Object.entries(this.groups)) {
81
- const children = (record[name] as Cells[] | undefined)?.length
82
- ? (record[name] as Cells[])
83
- : [undefined];
84
- rows = rows.flatMap((row) => children.map((child) => this.withChild(row, group, child)));
85
- }
86
- return rows;
87
- };
88
-
89
- private scalarsOf = (record: Record<string, Cell | Cells[]>): Cells => {
90
- const row: Cells = {};
91
- for (const [name, column] of Object.entries(this.scalars))
92
- row[column] = (record[name] as Cell | undefined) ?? null;
93
- return row;
94
- };
95
-
96
- private withChild = (row: Cells, group: GroupPlan, child: Cells | undefined): Cells => {
97
- const next = { ...row };
98
- for (const [field, column] of Object.entries(group.fields)) next[column] = child?.[field] ?? null;
99
- return next;
100
- };
101
-
102
- private mapped = (row: T | Cells): row is T =>
103
- Object.keys(this.groups).every((name) => Array.isArray((row as Record<string, unknown>)[name]));
104
-
105
- private mark = (seen: Set<string>, parent: string, item: T) => {
106
- const record = item as Record<string, Cells[]>;
107
- for (const [name, group] of Object.entries(this.groups))
108
- for (const child of record[name]) {
109
- const key = cellKey(child[group.destKey]);
110
- if (key != null) seen.add(`${parent}:${name}:${key}`);
111
- }
112
- };
113
-
114
- private merge = (into: T, from: T, parent: string, seen: Set<string>) => {
115
- const dest = into as Record<string, Cells[]>;
116
- const source = from as Record<string, Cells[]>;
117
- for (const [name, group] of Object.entries(this.groups)) {
118
- const children = dest[name];
119
- for (const child of source[name]) {
120
- const key = cellKey(child[group.destKey]);
121
- if (key == null || seen.has(`${parent}:${name}:${key}`)) continue;
122
- seen.add(`${parent}:${name}:${key}`);
123
- children.push(child);
124
- }
125
- }
126
- };
127
- }
@@ -1,7 +0,0 @@
1
- import type { Cells } from "../converters/Cell.ts";
2
- import type { IMapper } from "./IMapper.ts";
3
- import type { TypeMap } from "./TypeMap.ts";
4
-
5
- export interface IFlatToNestedMapper<T> extends IMapper<Iterable<T | Cells>, T[]> {
6
- readonly spec: TypeMap<T>;
7
- }
@@ -1,4 +0,0 @@
1
- export interface IMapper<TFrom, TTo> {
2
- map(value: TFrom): TTo;
3
- reverseMap(value: TTo): TFrom;
4
- }
@@ -1,12 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { IdentityMapper } from "./IdentityMapper.ts";
3
-
4
- describe("IdentityMapper", () => {
5
- it("maps and reverses the same value", () => {
6
- const mapper = new IdentityMapper<string>();
7
- const mapped = mapper.map("contact");
8
- const reversed = mapper.reverseMap("contact");
9
- expect(mapped).toBe("contact");
10
- expect(reversed).toBe("contact");
11
- });
12
- });
@@ -1,6 +0,0 @@
1
- import type { IMapper } from "./IMapper.ts";
2
-
3
- export class IdentityMapper<T> implements IMapper<T, T> {
4
- map = (value: T): T => value;
5
- reverseMap = (value: T): T => value;
6
- }
@@ -1,40 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { ChangeCasingMapper } from "./ChangeCasingMapper.ts";
3
- import { PluralizerMapper } from "./PluralizerMapper.ts";
4
-
5
- describe("PluralizerMapper", () => {
6
- it("pluralizes and lowercases the table name", () => {
7
- const mapper = new PluralizerMapper();
8
- expect(mapper.map("User")).toBe("Users");
9
- expect(mapper.reverseMap("Users")).toBe("User");
10
- });
11
-
12
- it("maps contacts", () => {
13
- const mapper = new PluralizerMapper();
14
- const contact = mapper.map("Contact");
15
- const address = mapper.map("Address");
16
- expect(contact).toBe("Contacts");
17
- expect(address).toBe("Addresses");
18
- });
19
-
20
- it("reverse maps contacts", () => {
21
- const mapper = new PluralizerMapper();
22
- const contact = mapper.reverseMap("Contacts");
23
- const address = mapper.reverseMap("Addresses");
24
- expect(contact).toBe("Contact");
25
- expect(address).toBe("Address");
26
- });
27
-
28
- it("lowercases then pluralizes", () => {
29
- const casing = new ChangeCasingMapper("pascalCase", "snakeCase");
30
- const pluralizer = new PluralizerMapper();
31
- const contact = pluralizer.map(casing.map("Contact"));
32
- const address = pluralizer.map(casing.map("Address"));
33
- const contactName = casing.reverseMap(pluralizer.reverseMap(contact));
34
- const addressName = casing.reverseMap(pluralizer.reverseMap(address));
35
- expect(contact).toBe("contacts");
36
- expect(address).toBe("addresses");
37
- expect(contactName).toBe("Contact");
38
- expect(addressName).toBe("Address");
39
- });
40
- });
@@ -1,9 +0,0 @@
1
- import { PluralizerConverter } from "../converters/PluralizerConverter.ts";
2
- import type { IMapper } from "./IMapper.ts";
3
-
4
- export class PluralizerMapper implements IMapper<string, string> {
5
- private readonly pluralizer = new PluralizerConverter();
6
-
7
- map = (value: string): string => this.pluralizer.convert(value);
8
- reverseMap = (value: string): string => this.pluralizer.reverseConvert(value);
9
- }
@@ -1,12 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { MetaDataRowTypeConverter } from "../converters/MetaDataRowTypeConverter.ts";
3
- import { RowTypeMapper } from "./RowTypeMapper.ts";
4
-
5
- describe("RowTypeMapper", () => {
6
- it("maps a flat row to T and back", () => {
7
- const mapper = new RowTypeMapper<{ id: number; name: string }>(new MetaDataRowTypeConverter());
8
- const row = { id: 1, name: "ada" };
9
- expect(mapper.map(row)).toEqual(row);
10
- expect(mapper.reverseMap(row)).toEqual(row);
11
- });
12
- });
@@ -1,13 +0,0 @@
1
- import type { Cells } from "../converters/Cell.ts";
2
- import { MetaDataRowTypeConverter as RowTypeConverter } from "../converters/MetaDataRowTypeConverter.ts";
3
- import type { TypeConverter } from "../converters/TypeConverter.ts";
4
- import { TransformMapper } from "./TransformMapper.ts";
5
-
6
- export class RowTypeMapper<T> extends TransformMapper<Cells, T> {
7
- constructor(converter: TypeConverter<T, Cells> = new RowTypeConverter()) {
8
- super(
9
- (row) => converter.convert(row),
10
- (item) => converter.reverseConvert(item),
11
- );
12
- }
13
- }
@@ -1,181 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { TypeConverter } from "../converters/TypeConverter.ts";
3
- import { TransformConverterMapper } from "./TransformConverterMapper.ts";
4
-
5
- class Wrap extends TypeConverter<string, string> {
6
- convert = (from: string) => `[${from}]`;
7
- reverseConvert = (to: string) => to.replace(/^\[|\]$/g, "");
8
- }
9
-
10
- describe("TransformConverterMapper", () => {
11
- it("converts both ways without a filter", () => {
12
- const mapper = new TransformConverterMapper(new Wrap());
13
- expect(mapper.map("ab")).toBe("[ab]");
14
- expect(mapper.reverseMap("[ab]")).toBe("ab");
15
- });
16
-
17
- it("converts when the filter is true", () => {
18
- const mapper = new TransformConverterMapper(new Wrap(), (s) => s.includes("ab"));
19
- expect(mapper.map("ab")).toBe("[ab]");
20
- expect(mapper.reverseMap("[ab]")).toBe("ab");
21
- });
22
-
23
- it("is identity when the filter is false", () => {
24
- const mapper = new TransformConverterMapper(new Wrap(), (s) => s.includes("ab"));
25
- expect(mapper.map("a")).toBe("a");
26
- expect(mapper.reverseMap("[a]")).toBe("[a]");
27
- });
28
-
29
- type Address = { street: string; city: string; country: string };
30
- type Contact = { email: string; phone: string; address: Address };
31
- type User = { username: string; displayName: string; contact: Contact };
32
- type Payload = string[] | User;
33
-
34
- class UserFromCells extends TypeConverter<Payload, Payload> {
35
- convert = (from: Payload): Payload => {
36
- if (!Array.isArray(from)) return from;
37
- const [username, displayName, email, phone, street, city, country] = from;
38
- if (from.length !== 7) throw new Error("expected 7 cells");
39
- return {
40
- username,
41
- displayName,
42
- contact: { email, phone, address: { street, city, country } },
43
- };
44
- };
45
- reverseConvert = (to: Payload): Payload =>
46
- Array.isArray(to)
47
- ? to
48
- : [
49
- to.username,
50
- to.displayName,
51
- to.contact.email,
52
- to.contact.phone,
53
- to.contact.address.street,
54
- to.contact.address.city,
55
- to.contact.address.country,
56
- ];
57
- }
58
-
59
- it("expands flat cells into a nested user", () => {
60
- const cells = [
61
- "ada",
62
- "Ada Lovelace",
63
- "ada@example.com",
64
- "+44 20 7946 0958",
65
- "10 Downing St",
66
- "London",
67
- "UK",
68
- ];
69
- const expected: User = {
70
- username: "ada",
71
- displayName: "Ada Lovelace",
72
- contact: {
73
- email: "ada@example.com",
74
- phone: "+44 20 7946 0958",
75
- address: { street: "10 Downing St", city: "London", country: "UK" },
76
- },
77
- };
78
- const mapper = new TransformConverterMapper(new UserFromCells());
79
- expect(mapper.map(cells)).toEqual(expected);
80
- expect(mapper.reverseMap(expected)).toEqual(cells);
81
- });
82
-
83
- type Account = {
84
- id: number;
85
- username: string;
86
- displayName: string;
87
- isEnabled: boolean;
88
- created: Date;
89
- contact: Contact;
90
- };
91
- type AccountPayload = string[] | Account;
92
-
93
- class AccountFromCells extends TypeConverter<AccountPayload, AccountPayload> {
94
- convert = (from: AccountPayload): AccountPayload => {
95
- if (!Array.isArray(from)) return from;
96
- const [id, username, displayName, enabled, created, email, phone, street, city] = from;
97
- if (from.length !== 10) throw new Error("expected 10 cells");
98
- return {
99
- id: Number(id),
100
- username,
101
- displayName,
102
- isEnabled: enabled === "1",
103
- created: new Date(created),
104
- contact: { email, phone, address: { street, city, country: "" } },
105
- };
106
- };
107
- reverseConvert = (to: AccountPayload): AccountPayload =>
108
- Array.isArray(to)
109
- ? to
110
- : [
111
- String(to.id),
112
- to.username,
113
- to.displayName,
114
- to.isEnabled ? "1" : "0",
115
- to.created.toISOString(),
116
- to.contact.email,
117
- to.contact.phone,
118
- to.contact.address.street,
119
- to.contact.address.city,
120
- "",
121
- ];
122
- }
123
-
124
- const isEnabled = (payload: AccountPayload) =>
125
- Array.isArray(payload) ? payload[3] === "1" : payload.isEnabled;
126
-
127
- it("converts types and filters rows", () => {
128
- const ada = [
129
- "7",
130
- "ada",
131
- "Ada Lovelace",
132
- "1",
133
- "2020-01-02T03:04:05.000Z",
134
- "ada@example.com",
135
- "+44",
136
- "10 Downing St",
137
- "London",
138
- "secret-note",
139
- ];
140
- const guest = [
141
- "0",
142
- "guest",
143
- "Guest",
144
- "0",
145
- "2020-01-01T00:00:00.000Z",
146
- "guest@example.com",
147
- "",
148
- "1 Road",
149
- "Paris",
150
- "ignore-me",
151
- ];
152
- const expected: Account = {
153
- id: 7,
154
- username: "ada",
155
- displayName: "Ada Lovelace",
156
- isEnabled: true,
157
- created: new Date("2020-01-02T03:04:05.000Z"),
158
- contact: {
159
- email: "ada@example.com",
160
- phone: "+44",
161
- address: { street: "10 Downing St", city: "London", country: "" },
162
- },
163
- };
164
- const mapper = new TransformConverterMapper(new AccountFromCells(), isEnabled);
165
- expect(mapper.map(ada)).toEqual(expected);
166
- expect(mapper.reverseMap(expected)).toEqual([
167
- "7",
168
- "ada",
169
- "Ada Lovelace",
170
- "1",
171
- "2020-01-02T03:04:05.000Z",
172
- "ada@example.com",
173
- "+44",
174
- "10 Downing St",
175
- "London",
176
- "",
177
- ]);
178
- expect(mapper.map(guest)).toBe(guest);
179
- expect(mapper.reverseMap(guest)).toBe(guest);
180
- });
181
- });
@@ -1,11 +0,0 @@
1
- import type { TypeConverter } from "../converters/TypeConverter.ts";
2
- import { TransformMapper } from "./TransformMapper.ts";
3
-
4
- export class TransformConverterMapper<T> extends TransformMapper<T, T> {
5
- constructor(converter: TypeConverter<T, T>, filter?: (value: T) => boolean) {
6
- super(
7
- (value) => (filter?.(value) !== false ? converter.convert(value) : value),
8
- (value) => (filter?.(value) !== false ? converter.reverseConvert(value) : value),
9
- );
10
- }
11
- }
@@ -1,8 +0,0 @@
1
- import type { IMapper } from "./IMapper.ts";
2
-
3
- export class TransformMapper<TFrom, TTo> implements IMapper<TFrom, TTo> {
4
- constructor(
5
- readonly map: (value: TFrom) => TTo,
6
- readonly reverseMap: (value: TTo) => TFrom,
7
- ) {}
8
- }
@@ -1,10 +0,0 @@
1
- import type { TypeMapGroup } from "./TypeMapGroup.ts";
2
-
3
- export type TypeMapFields<T> = {
4
- [K in keyof T]?: T[K] extends readonly (infer E)[] ? TypeMapGroup<E> : string;
5
- };
6
-
7
- export type TypeMap<T> = {
8
- key: string;
9
- fields: TypeMapFields<T>;
10
- };
@@ -1,6 +0,0 @@
1
- import type { TypeMapFields } from "./TypeMap.ts";
2
-
3
- export type TypeMapGroup<E> = {
4
- key: string;
5
- fields: TypeMapFields<E>;
6
- };
@@ -1,66 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { TransformMapper } from "./TransformMapper.ts";
3
-
4
- type User = { id: number; name: string };
5
- type Contacts = { email: string; phone: string };
6
- type Nested = { user: User; contacts: Contacts };
7
- type Flat = {
8
- userId: number;
9
- userName: string;
10
- contactEmail: string;
11
- contactPhone: string;
12
- };
13
- type Contact = { name: string; email: string };
14
- type ContactRow = { contactName: string; contactEmail: string };
15
-
16
- describe("TransformMapper", () => {
17
- it("flattens and unflattens user and contacts", () => {
18
- const nested: Nested = {
19
- user: { id: 1, name: "Ada" },
20
- contacts: { email: "ada@x.dev", phone: "555" },
21
- };
22
- const mapper = new TransformMapper<Nested, Flat>(
23
- (n) => ({
24
- userId: n.user.id,
25
- userName: n.user.name,
26
- contactEmail: n.contacts.email,
27
- contactPhone: n.contacts.phone,
28
- }),
29
- (f) => ({
30
- user: { id: f.userId, name: f.userName },
31
- contacts: { email: f.contactEmail, phone: f.contactPhone },
32
- }),
33
- );
34
- const flat = mapper.map(nested);
35
- expect(flat).toEqual({
36
- userId: 1,
37
- userName: "Ada",
38
- contactEmail: "ada@x.dev",
39
- contactPhone: "555",
40
- });
41
- expect(mapper.reverseMap(flat)).toEqual(nested);
42
- });
43
-
44
- it("prefixes a contact field", () => {
45
- const mapper = new TransformMapper<string, string>(
46
- (name) => `contact_${name}`,
47
- (name) => name.slice("contact_".length),
48
- );
49
- const mapped = mapper.map("email");
50
- const reversed = mapper.reverseMap(mapped);
51
- expect(mapped).toBe("contact_email");
52
- expect(reversed).toBe("email");
53
- });
54
-
55
- it("maps a contact name and email", () => {
56
- const contact: Contact = { name: "Ada", email: "ada@x.dev" };
57
- const mapper = new TransformMapper<Contact, ContactRow>(
58
- (item) => ({ contactName: item.name, contactEmail: item.email }),
59
- (row) => ({ name: row.contactName, email: row.contactEmail }),
60
- );
61
- const mapped = mapper.map(contact);
62
- const reversed = mapper.reverseMap(mapped);
63
- expect(mapped).toEqual({ contactName: "Ada", contactEmail: "ada@x.dev" });
64
- expect(reversed).toEqual(contact);
65
- });
66
- });
@@ -1,75 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import {
3
- execute,
4
- executeReader,
5
- ExecuteStoredProcedureStatement,
6
- Native,
7
- MockCommand,
8
- MockConnection,
9
- MockReader,
10
- } from "../index.ts";
11
-
12
- describe("MockCommand", () => {
13
- it("records command execute paths", async () => {
14
- const connection = new MockConnection();
15
- const command = new MockCommand(connection);
16
- command.response = { result: 1, rowsAffected: 2 };
17
- command.reader = new MockReader([{ id: 1 }]);
18
- expect(await command.executeNative(new Native("insert"), [{ name: "id", value: 1 }])).toEqual({
19
- result: 1,
20
- rowsAffected: 2,
21
- });
22
- expect(command.executeCalls).toHaveLength(1);
23
- const reader = await command.executeReaderNative(new Native(""));
24
- expect(reader).toBe(command.reader);
25
-
26
- command.reader = {
27
- current: undefined,
28
- next: async () => false,
29
- nextResult: async () => false,
30
- async *read() {
31
- while (await this.next()) {
32
- if (this.current !== undefined) yield this.current;
33
- }
34
- },
35
- dispose: async () => {},
36
- };
37
- expect(await command.executeReaderNative(new Native("plain"))).toBe(command.reader);
38
-
39
- command.executeError = new Error("exec");
40
- await expect(command.executeNative(new Native(""))).rejects.toThrow("exec");
41
- command.executeReaderError = new Error("read");
42
- await expect(command.executeReaderNative(new Native("x"))).rejects.toThrow("read");
43
-
44
- command.executeError = undefined;
45
- command.executeReaderError = undefined;
46
- const fields = [{ name: "id", value: 1 }];
47
- const statement = new ExecuteStoredProcedureStatement("save", fields);
48
- await execute(command, statement, fields);
49
- expect(command.executeCalls.at(-1)).toEqual({
50
- text: "CALL save($id)",
51
- parameters: fields,
52
- });
53
- await executeReader(command, statement, fields);
54
- expect(command.executeReaderCalls.at(-1)).toEqual({
55
- text: "CALL save($id)",
56
- parameters: fields,
57
- });
58
- });
59
-
60
- it("runs command middleware on mock commands", async () => {
61
- const connection = new MockConnection();
62
- const command = new MockCommand(connection);
63
- const seen: string[] = [];
64
- command.addMiddleware({
65
- beforeCommand: (text) => {
66
- seen.push(`before:${text}`);
67
- },
68
- afterCommand: (text) => {
69
- seen.push(`after:${text}`);
70
- },
71
- });
72
- await command.executeNative(new Native("insert"));
73
- expect(seen).toEqual(["before:insert", "after:insert"]);
74
- });
75
- });
@@ -1,34 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { IsolationLevel, MockCommand, MockConnection, MockTransaction } from "../index.ts";
3
-
4
- describe("MockConnection", () => {
5
- it("records connection operations and errors", async () => {
6
- const connection = new MockConnection();
7
- await connection.open();
8
- expect(connection.openCalls).toBe(1);
9
- expect(connection.isOpen).toBe(true);
10
- const txn = await connection.startTransaction(IsolationLevel.ReadUncommitted);
11
- expect(txn).toBe(connection.transaction);
12
- expect(txn.isolation).toBe(IsolationLevel.ReadUncommitted);
13
- await connection.close();
14
- expect(connection.isOpen).toBe(false);
15
-
16
- connection.openError = new Error("open-fail");
17
- await expect(connection.open()).rejects.toThrow("open-fail");
18
- connection.closeError = new Error("close-fail");
19
- await expect(connection.close()).rejects.toThrow("close-fail");
20
- connection.startTransactionError = new Error("tx-fail");
21
- await expect(connection.startTransaction()).rejects.toThrow("tx-fail");
22
-
23
- const customTxn = new MockTransaction(connection);
24
- const withTxn = new MockConnection(customTxn);
25
- expect(withTxn.transaction).toBe(customTxn);
26
- const opened = new MockConnection();
27
- await opened.open();
28
- await expect(opened.open()).rejects.toThrow("already open");
29
- });
30
-
31
- it("creates a command when none is assigned", () => {
32
- expect(new MockConnection().createCommand()).toBeInstanceOf(MockCommand);
33
- });
34
- });