@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,404 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import {
3
- Aggregate,
4
- ArrayExpression,
5
- CheckConstraint,
6
- ColumnDefault,
7
- CreateIndexStatement,
8
- CreateTableStatement,
9
- CreateTableStatementTextRenderer,
10
- DeleteStatement,
11
- ForeignKey,
12
- Identifier,
13
- InsertStatement,
14
- Join,
15
- Literal,
16
- NotNull,
17
- Operator,
18
- OrderBy,
19
- PrimaryKey,
20
- SelectStatement,
21
- ReferentialAction,
22
- ExpressionEvaluator,
23
- StatementEvaluator,
24
- ParameterDirection,
25
- ReturnStatement,
26
- UniqueConstraint,
27
- ExecuteStoredProcedureStatement,
28
- UpdateStatement,
29
- WhereText,
30
- Where,
31
- eq,
32
- ne,
33
- gt,
34
- lt,
35
- ge,
36
- le,
37
- DefaultStatementTextRenderer,
38
- } from "../index.ts";
39
- import type { ITableConstraint, TableConstraintKind } from "../index.ts";
40
- import type { Parameter } from "../index.ts";
41
-
42
- describe("Query and Where", () => {
43
- it("keeps optional where on the query", () => {
44
- const select = new SelectStatement({ table: "dual", fields: ["1"] });
45
- const where = new WhereText("id = 1");
46
- const withWhere = new SelectStatement({ table: "dual", fields: ["1"], where });
47
- expect(DefaultStatementTextRenderer.instance.render(select)).toBe("SELECT 1 FROM dual");
48
- expect(select.where).toBeUndefined();
49
- expect(withWhere.where).toBe(where);
50
- expect(DefaultStatementTextRenderer.instance.render(where)).toBe("id = 1");
51
- });
52
- });
53
-
54
- describe("Where", () => {
55
- it("renders compare, groups, and not", () => {
56
- const where = new Where(
57
- new Operator.And(new Operator.Equals("id", 1), new Operator.GreaterThan("age", 18)),
58
- );
59
- expect(DefaultStatementTextRenderer.instance.render(where)).toBe("id = $id AND age > $age");
60
- expect(where.parameters).toEqual([
61
- { name: "id", value: 1 },
62
- { name: "age", value: 18 },
63
- ]);
64
- expect(DefaultStatementTextRenderer.instance.render(new Where(new Operator.NotEquals("id", 2)))).toBe("id <> $id");
65
- expect(DefaultStatementTextRenderer.instance.render(new Where(new Operator.LessThan("n", 0)))).toBe("n < $n");
66
- expect(DefaultStatementTextRenderer.instance.render(new Where(new Operator.GreaterThanOrEqual("n", 0)))).toBe("n >= $n");
67
- expect(DefaultStatementTextRenderer.instance.render(new Where(new Operator.LessThanOrEqual("n", 0)))).toBe("n <= $n");
68
- expect(DefaultStatementTextRenderer.instance.render(new Where(new Operator.Equals(new Literal(1), new Literal(1))))).toBe("1 = 1");
69
- expect(DefaultStatementTextRenderer.instance.render(new Where(new Operator.Equals(new Literal(1), new Literal(0))))).toBe("1 = 0");
70
- expect(DefaultStatementTextRenderer.instance.render(new Where(new Operator.Equals("id", 1)))).toBe("id = $id");
71
- expect(DefaultStatementTextRenderer.instance.render(new Where(new Operator.Or(where, new Operator.Equals("name", "a"))))).toBe(
72
- "(id = $id AND age > $age) OR name = $name",
73
- );
74
- expect(
75
- DefaultStatementTextRenderer.instance.render(new Where(
76
- new Operator.And(
77
- new Operator.Or(new Operator.Equals("id", 1), new Operator.Equals("id", 2)),
78
- new Operator.Equals("age", 18),
79
- ),
80
- )),
81
- ).toBe("(id = $id OR id = $id) AND age = $age");
82
- expect(DefaultStatementTextRenderer.instance.render(new Where(new Operator.Not(new Where(new Operator.Equals("id", 1)))))).toBe(
83
- "NOT (id = $id)",
84
- );
85
- expect(new Where(new Operator.Not(new Where(new Operator.Equals("id", 1)))).parameters).toEqual([
86
- { name: "id", value: 1 },
87
- ]);
88
- expect(DefaultStatementTextRenderer.instance.render(new Where(new Operator.In("id", [])))).toBe("1 = 0");
89
- expect(new Where(new Operator.In("id", [])).parameters).toEqual([]);
90
- expect(DefaultStatementTextRenderer.instance.render(new Where(new Operator.In("id", [1, 2])))).toBe("id IN ($id_0, $id_1)");
91
- expect(new Where(new Operator.In("id", [1, 2])).parameters).toEqual([
92
- { name: "id_0", value: 1 },
93
- { name: "id_1", value: 2 },
94
- ]);
95
- const and = where.condition;
96
- expect(and).toBeInstanceOf(Operator.And);
97
- if (!(and instanceof Operator.And)) throw new Error("and");
98
- expect(and.left).toBeInstanceOf(Operator.Equals);
99
- if (!(and.left instanceof Operator.Equals)) throw new Error("left");
100
- expect(and.left.left).toBeInstanceOf(Identifier);
101
- if (!(and.left.left instanceof Identifier)) throw new Error("id");
102
- expect(and.left.left.name).toBe("id");
103
- expect(and.left.right).toBeInstanceOf(Literal);
104
- if (!(and.left.right instanceof Literal)) throw new Error("lit");
105
- expect(and.left.right.value).toBe(1);
106
- });
107
- });
108
-
109
- describe("ExpressionEvaluator", () => {
110
- it("evaluates compare, groups, not, and in", () => {
111
- expect(new StatementEvaluator().evaluate(new SelectStatement({ table: "dual", fields: ["1"] }))).toBeUndefined();
112
- const evaluator = new ExpressionEvaluator();
113
- const row = { id: 1, age: 21, name: "a" };
114
- expect(evaluator.evaluate(new Where(new Operator.Equals("id", 1)), row)).toBe(true);
115
- expect(evaluator.evaluate(new Where(new Operator.Equals("id", 2)), row)).toBe(false);
116
- expect(evaluator.evaluate(new Where(new Operator.NotEquals("id", 2)), row)).toBe(true);
117
- expect(evaluator.evaluate(new Where(new Operator.GreaterThan("age", 18)), row)).toBe(true);
118
- expect(evaluator.evaluate(new Where(new Operator.LessThan("age", 30)), row)).toBe(true);
119
- expect(evaluator.evaluate(new Where(new Operator.GreaterThanOrEqual("age", 21)), row)).toBe(true);
120
- expect(evaluator.evaluate(new Where(new Operator.LessThanOrEqual("age", 21)), row)).toBe(true);
121
- expect(
122
- evaluator.evaluate(
123
- new Where(new Operator.And(new Operator.Equals("id", 1), new Operator.GreaterThan("age", 18))),
124
- row,
125
- ),
126
- ).toBe(true);
127
- expect(
128
- evaluator.evaluate(
129
- new Where(new Operator.Or(new Operator.Equals("id", 0), new Operator.Equals("name", "a"))),
130
- row,
131
- ),
132
- ).toBe(true);
133
- expect(evaluator.evaluate(new Where(new Operator.Not(new Operator.Equals("id", 1))), row)).toBe(false);
134
- expect(evaluator.evaluate(new Where(new Operator.In("id", [1, 2])), row)).toBe(true);
135
- expect(evaluator.evaluate(new Where(new Operator.Equals(new Literal(1), new Literal(1))), row)).toBe(true);
136
- expect(evaluator.evaluate(new Where(new Operator.Equals(new Literal(1), new Literal(0))), row)).toBe(false);
137
- expect(() => evaluator.evaluate(new WhereText("id = 1"), row)).toThrow("text where is not evaluable");
138
- expect(() => evaluator.evaluate(new ArrayExpression([]), row)).toThrow("array is not a scalar");
139
- expect(() =>
140
- evaluator.evaluate(new Operator.GreaterThan(new Literal(true), new Literal(1)), row),
141
- ).toThrow("empty compare");
142
- expect(() =>
143
- evaluator.evaluate(new Operator.In(new Identifier("id"), new Literal(1)), row),
144
- ).toThrow("empty in");
145
- expect(evaluator.evaluate(new Where(new Operator.LessThan("name", "b")), row)).toBe(true);
146
- expect(evaluator.evaluate(new Where(new Operator.GreaterThanOrEqual("name", "a")), row)).toBe(true);
147
- expect(evaluator.evaluate(new Where(new Operator.GreaterThan("name", "Z")), row)).toBe(true);
148
- expect(
149
- DefaultStatementTextRenderer.instance.render(new Where(new Operator.In(new Identifier("id"), new ArrayExpression([])))),
150
- ).toBe("1 = 0");
151
- expect(new Where(new Identifier("id")).parameters).toEqual([]);
152
- expect(new Where(new ArrayExpression([new Literal(1)])).parameters).toEqual([]);
153
- expect(() => new Where(new WhereText("x")).parameters).toThrow("empty expression");
154
- expect(
155
- evaluator.evaluate(new Operator.GreaterThan(new Literal(2n), new Literal(1n)), row),
156
- ).toBe(true);
157
- expect(
158
- DefaultStatementTextRenderer.instance.render(new Where(new Operator.Equals(new Identifier("a"), new Identifier("b")))),
159
- ).toBe("a = b");
160
- expect(
161
- new Where(new Operator.Equals(new Identifier("a"), new Identifier("b"))).parameters,
162
- ).toEqual([]);
163
- expect(DefaultStatementTextRenderer.instance.render(new Where(new Operator.In(new Literal(1), new Literal(2))))).toBe("1 IN 2");
164
- expect(() => DefaultStatementTextRenderer.instance.render(new Where(new WhereText("x")))).toThrow("empty expression");
165
- expect(evaluator.evaluate(new Identifier("missing"), row)).toBeNull();
166
- expect(evaluator.evaluate(new Literal(null), row)).toBeNull();
167
- expect(() => evaluator.evaluate(new WhereText("x"), row)).toThrow("text where is not evaluable");
168
- expect(
169
- DefaultStatementTextRenderer.instance.render(new Where(new Operator.Equals(new Literal(true), new Literal(false)))),
170
- ).toBe("true = false");
171
- expect(
172
- DefaultStatementTextRenderer.instance.render(new Where(new Operator.Equals(new Literal(null), new Literal(null)))),
173
- ).toBe("null = null");
174
- expect(
175
- new Where(new Operator.Equals(new Literal(true), new Literal(false))).parameters,
176
- ).toEqual([]);
177
- class Ghost extends Operator {}
178
- expect(() => evaluator.evaluate(new Ghost(), row)).toThrow("empty expression");
179
- expect(() => DefaultStatementTextRenderer.instance.render(new Where(new Ghost()))).toThrow("empty expression");
180
- expect(() => new Where(new Ghost()).parameters).toThrow("empty expression");
181
- expect(DefaultStatementTextRenderer.instance.render(new Where(new ArrayExpression([new Literal(1)])))).toBe("1");
182
- expect(
183
- () =>
184
- new Where(
185
- new Operator.In(new Identifier("id"), new ArrayExpression([new Identifier("x")])),
186
- ).parameters,
187
- ).toThrow("empty in");
188
- });
189
- });
190
-
191
- describe("statements", () => {
192
- const fields = [
193
- { name: "id", value: 1 },
194
- { name: "name", value: "a" },
195
- ] as const;
196
-
197
- it("creates write and ddl statements", () => {
198
- const where = new Where(new Operator.Equals("id", 1));
199
- const query = new SelectStatement({ table: "users", fields: ["id", "name"], where });
200
- expect(DefaultStatementTextRenderer.instance.render(query)).toBe(
201
- "SELECT id, name FROM users WHERE id = $id",
202
- );
203
- expect(query.where).toBe(where);
204
- expect(DefaultStatementTextRenderer.instance.render(new SelectStatement({ table: "users", fields: [] }))).toBe(
205
- "SELECT * FROM users",
206
- );
207
- expect(new SelectStatement({ table: "users", fields: [] }).where).toBeUndefined();
208
- expect(DefaultStatementTextRenderer.instance.render(new SelectStatement({ table: "users", fields: ["id", "name"] }))).toBe(
209
- "SELECT id, name FROM users",
210
- );
211
- expect(
212
- DefaultStatementTextRenderer.instance.render(new SelectStatement({
213
- table: "users",
214
- fields: ["users.id", "orders.total"],
215
- joins: [Join.inner("orders", "users.id", "orders.user_id")],
216
- })),
217
- ).toBe(
218
- "SELECT users.id, orders.total FROM users INNER JOIN orders ON users.id = orders.user_id",
219
- );
220
- expect(
221
- DefaultStatementTextRenderer.instance.render(new SelectStatement({
222
- table: "users",
223
- fields: ["users.id"],
224
- where: new Where(new Operator.Equals("users.id", 1)),
225
- joins: [
226
- Join.inner("orders", "users.id", "orders.user_id"),
227
- Join.left("payments", "orders.id", "payments.order_id"),
228
- Join.right("profiles", "users.id", "profiles.user_id"),
229
- ],
230
- })),
231
- ).toBe(
232
- "SELECT users.id FROM users INNER JOIN orders ON users.id = orders.user_id LEFT JOIN payments ON orders.id = payments.order_id RIGHT JOIN profiles ON users.id = profiles.user_id WHERE users.id = $users.id",
233
- );
234
- expect(DefaultStatementTextRenderer.instance.render(new SelectStatement({ table: "users", fields: ["id"], joins: [] }))).toBe(
235
- "SELECT id FROM users",
236
- );
237
- const grouped = new SelectStatement({
238
- table: "orders",
239
- fields: ["status", Aggregate.count("*", "n"), Aggregate.sum("amount", "total")],
240
- where: new Where(new Operator.Equals("status", "open")),
241
- joins: [Join.inner("customers", "orders.customer_id", "customers.id")],
242
- groupBy: ["status"],
243
- orderBy: [OrderBy.desc("total"), OrderBy.asc("status")],
244
- limit: 10,
245
- });
246
- expect(DefaultStatementTextRenderer.instance.render(grouped)).toBe(
247
- "SELECT status, COUNT(*) AS n, SUM(amount) AS total FROM orders INNER JOIN customers ON orders.customer_id = customers.id WHERE status = $status GROUP BY status ORDER BY total DESC, status ASC LIMIT 10",
248
- );
249
- const byStatus = new SelectStatement({ table: "users", fields: ["id"], groupBy: ["id"] });
250
- expect(DefaultStatementTextRenderer.instance.render(byStatus)).toBe("SELECT id FROM users GROUP BY id");
251
- const bounds = new SelectStatement({ table: "users", fields: [Aggregate.min("n"), Aggregate.max("n")] });
252
- expect(DefaultStatementTextRenderer.instance.render(bounds)).toBe("SELECT MIN(n), MAX(n) FROM users");
253
- const ordered = new SelectStatement({
254
- table: "users",
255
- fields: ["id"],
256
- orderBy: [OrderBy.asc("id"), OrderBy.desc("name")],
257
- });
258
- expect(DefaultStatementTextRenderer.instance.render(ordered)).toBe("SELECT id FROM users ORDER BY id ASC, name DESC");
259
- const limited = new SelectStatement({ table: "users", fields: ["id"], limit: 10 });
260
- expect(DefaultStatementTextRenderer.instance.render(limited)).toBe("SELECT id FROM users LIMIT 10");
261
- expect(DefaultStatementTextRenderer.instance.render(new SelectStatement({ table: "users", fields: ["id"], limit: 0 }))).toBe(
262
- "SELECT id FROM users LIMIT 0",
263
- );
264
- expect(() =>
265
- DefaultStatementTextRenderer.instance.render(
266
- new SelectStatement({ table: "users", fields: ["id"], limit: -1 }),
267
- ),
268
- ).toThrow("negative limit");
269
- const insert = new InsertStatement("users", [...fields]);
270
- expect(DefaultStatementTextRenderer.instance.render(insert)).toBe(
271
- "INSERT INTO users (id, name) VALUES ($id, $name)",
272
- );
273
- const update = new UpdateStatement("users", [...fields], where);
274
- expect(DefaultStatementTextRenderer.instance.render(update)).toBe(
275
- "UPDATE users SET id = $id, name = $name WHERE id = $id",
276
- );
277
- expect(update.where).toBe(where);
278
- expect(DefaultStatementTextRenderer.instance.render(new UpdateStatement("users", [...fields]))).toBe(
279
- "UPDATE users SET id = $id, name = $name",
280
- );
281
- const del = new DeleteStatement("users", where);
282
- expect(DefaultStatementTextRenderer.instance.render(del)).toBe("DELETE FROM users WHERE id = $id");
283
- expect(del.where).toBe(where);
284
- expect(DefaultStatementTextRenderer.instance.render(new DeleteStatement("users"))).toBe(
285
- "DELETE FROM users",
286
- );
287
- const createTable = new CreateTableStatement("users", [
288
- { name: "id", type: "INTEGER" },
289
- { name: "name", type: "TEXT" },
290
- ]);
291
- expect(DefaultStatementTextRenderer.instance.render(createTable)).toBe("CREATE TABLE users (id INTEGER, name TEXT)");
292
- expect(new class extends CreateTableStatementTextRenderer {
293
- override render(_statement: CreateTableStatement): string {
294
- return "CREATE TABLE replaced";
295
- }
296
- }().render(createTable)).toBe("CREATE TABLE replaced");
297
- const namedTable = new CreateTableStatement(
298
- "orders",
299
- [
300
- { name: "id", type: "INTEGER", default: new ColumnDefault("0", "df_id"), notNull: new NotNull("nn_id") },
301
- { name: "tenant_id", type: "INTEGER" },
302
- { name: "user_id", type: "INTEGER" },
303
- { name: "qty", type: "INTEGER" },
304
- ],
305
- [
306
- new PrimaryKey("pk_orders", ["id", "tenant_id"]),
307
- new ForeignKey("fk_orders_user", ["user_id"], "users", ["id"], ReferentialAction.Cascade),
308
- new UniqueConstraint("uq_orders_user", ["user_id"]),
309
- new CheckConstraint("chk_orders_qty", "qty > 0"),
310
- ],
311
- );
312
- expect(DefaultStatementTextRenderer.instance.render(namedTable)).toBe(
313
- "CREATE TABLE orders (id INTEGER CONSTRAINT df_id DEFAULT 0 CONSTRAINT nn_id NOT NULL, tenant_id INTEGER, user_id INTEGER, qty INTEGER, CONSTRAINT pk_orders PRIMARY KEY (id, tenant_id), CONSTRAINT fk_orders_user FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE, CONSTRAINT uq_orders_user UNIQUE (user_id), CONSTRAINT chk_orders_qty CHECK (qty > 0))",
314
- );
315
- expect(
316
- DefaultStatementTextRenderer.instance.render(new CreateTableStatement(
317
- "items",
318
- [
319
- { name: "id", type: "INTEGER", default: new ColumnDefault("0") },
320
- { name: "name", type: "TEXT", notNull: new NotNull() },
321
- ],
322
- [new ForeignKey("fk_items_user", ["id"], "users", ["id"])],
323
- )),
324
- ).toBe(
325
- "CREATE TABLE items (id INTEGER DEFAULT 0, name TEXT NOT NULL, CONSTRAINT fk_items_user FOREIGN KEY (id) REFERENCES users (id))",
326
- );
327
- expect(DefaultStatementTextRenderer.instance.render(new CreateTableStatement("users", [{ name: "id", type: "INTEGER" }], []))).toBe(
328
- "CREATE TABLE users (id INTEGER)",
329
- );
330
- expect(
331
- DefaultStatementTextRenderer.instance.render(new CreateTableStatement(
332
- "t",
333
- [{ name: "id", type: "INTEGER" }],
334
- [new ForeignKey("fk_set_null", ["id"], "u", ["id"], ReferentialAction.SetNull, ReferentialAction.SetDefault)],
335
- )),
336
- ).toBe(
337
- "CREATE TABLE t (id INTEGER, CONSTRAINT fk_set_null FOREIGN KEY (id) REFERENCES u (id) ON DELETE SET NULL ON UPDATE SET DEFAULT)",
338
- );
339
- expect(
340
- DefaultStatementTextRenderer.instance.render(new CreateTableStatement(
341
- "t",
342
- [{ name: "id", type: "INTEGER" }],
343
- [new ForeignKey("fk_restrict", ["id"], "u", ["id"], ReferentialAction.Restrict, ReferentialAction.NoAction)],
344
- )),
345
- ).toBe(
346
- "CREATE TABLE t (id INTEGER, CONSTRAINT fk_restrict FOREIGN KEY (id) REFERENCES u (id) ON DELETE RESTRICT ON UPDATE NO ACTION)",
347
- );
348
- expect(() =>
349
- DefaultStatementTextRenderer.instance.render(new CreateTableStatement("t", [{ name: "id", type: "INTEGER" }], [
350
- { kind: "nope" as TableConstraintKind, name: "x" } as ITableConstraint,
351
- ])),
352
- ).toThrow("empty constraint");
353
- const createIndex = new CreateIndexStatement("idx_orders_user", "orders", ["user_id"]);
354
- expect(DefaultStatementTextRenderer.instance.render(createIndex)).toBe("CREATE INDEX idx_orders_user ON orders (user_id)");
355
- expect(DefaultStatementTextRenderer.instance.render(new CreateIndexStatement("uq_orders_code", "orders", ["code"], true))).toBe(
356
- "CREATE UNIQUE INDEX uq_orders_code ON orders (code)",
357
- );
358
- const call = new ExecuteStoredProcedureStatement("save", [...fields]);
359
- expect(DefaultStatementTextRenderer.instance.render(call)).toBe("CALL save($id, $name)");
360
- expect(DefaultStatementTextRenderer.instance.render(new ExecuteStoredProcedureStatement("save", []))).toBe(
361
- "CALL save()",
362
- );
363
- const ret = new ReturnStatement("add", [...fields]);
364
- expect(DefaultStatementTextRenderer.instance.render(ret)).toBe("SELECT add($id, $name)");
365
- expect(DefaultStatementTextRenderer.instance.render(new ReturnStatement("add", []))).toBe("SELECT add()");
366
- expect(
367
- DefaultStatementTextRenderer.instance.render(new ExecuteStoredProcedureStatement("save", [
368
- { name: "id", value: 1 },
369
- { name: "ret", direction: ParameterDirection.ReturnValue },
370
- ])),
371
- ).toBe("CALL save($id)");
372
- expect(
373
- DefaultStatementTextRenderer.instance.render(new ReturnStatement("add", [
374
- { name: "id", value: 1 },
375
- { name: "ret", direction: ParameterDirection.ReturnValue },
376
- ])),
377
- ).toBe("SELECT add($id)");
378
- const input: Parameter = { name: "id", value: 1 };
379
- const output: Parameter = { name: "count", direction: ParameterDirection.Output };
380
- expect(input.direction).toBeUndefined();
381
- expect(output.direction).toBe(ParameterDirection.Output);
382
- });
383
- });
384
-
385
- describe("comparison aliases", () => {
386
- it("renders comparison symbols", () => {
387
- const equals = new Where("username", eq, "grace");
388
- const notEquals = new Where("id", ne, 2);
389
- const greater = new Where("n", gt, 0);
390
- const less = new Where("n", lt, 0);
391
- const greaterOrEqual = new Where("n", ge, 0);
392
- const lessOrEqual = new Where("n", le, 0);
393
- const both = equals.and("is_enabled", eq, 0);
394
- const either = equals.or("is_enabled", eq, 0);
395
- expect(DefaultStatementTextRenderer.instance.render(equals)).toBe("username = $username");
396
- expect(DefaultStatementTextRenderer.instance.render(notEquals)).toBe("id <> $id");
397
- expect(DefaultStatementTextRenderer.instance.render(greater)).toBe("n > $n");
398
- expect(DefaultStatementTextRenderer.instance.render(less)).toBe("n < $n");
399
- expect(DefaultStatementTextRenderer.instance.render(greaterOrEqual)).toBe("n >= $n");
400
- expect(DefaultStatementTextRenderer.instance.render(lessOrEqual)).toBe("n <= $n");
401
- expect(DefaultStatementTextRenderer.instance.render(both)).toBe("username = $username AND is_enabled = $is_enabled");
402
- expect(DefaultStatementTextRenderer.instance.render(either)).toBe("username = $username OR is_enabled = $is_enabled");
403
- });
404
- });
@@ -1,2 +0,0 @@
1
- export type { Field } from "./Field.ts";
2
- export type { Scalar } from "./Scalar.ts";
@@ -1,7 +0,0 @@
1
- export async function collectAsync<T>(items: AsyncIterable<T>): Promise<T[]> {
2
- const collected: T[] = [];
3
- for await (const item of items) {
4
- collected.push(item);
5
- }
6
- return collected;
7
- }
@@ -1,10 +0,0 @@
1
- export type Cell =
2
- | string
3
- | number
4
- | boolean
5
- | bigint
6
- | Date
7
- | Uint8Array
8
- | null;
9
-
10
- export type Cells = Record<string, Cell>;
@@ -1,34 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { ChangeCasingConverter, type Casing } from "./ChangeCasingConverter.ts";
3
-
4
- describe("ChangeCasingConverter", () => {
5
- it("changes every casing variation", () => {
6
- const forms: [Casing, string][] = [
7
- ["camelCase", "twoWords"],
8
- ["capitalCase", "Two Words"],
9
- ["constantCase", "TWO_WORDS"],
10
- ["dotCase", "two.words"],
11
- ["kebabCase", "two-words"],
12
- ["noCase", "two words"],
13
- ["pascalCase", "TwoWords"],
14
- ["pascalSnakeCase", "Two_Words"],
15
- ["pathCase", "two/words"],
16
- ["sentenceCase", "Two words"],
17
- ["snakeCase", "two_words"],
18
- ["trainCase", "Two-Words"],
19
- ];
20
- for (const [, from] of forms) {
21
- for (const [casing, expected] of forms)
22
- expect(new ChangeCasingConverter(casing).convert(from)).toBe(expected);
23
- expect(new ChangeCasingConverter("snakeCase").reverseConvert(from)).toBe(from);
24
- }
25
- expect(new ChangeCasingConverter("camelCase").convert("XMLParser")).toBe("xmlParser");
26
- expect(new ChangeCasingConverter("camelCase").convert("html5")).toBe("html5");
27
- expect(new ChangeCasingConverter("camelCase").convert("v2Name")).toBe("v2Name");
28
- expect(new ChangeCasingConverter("snakeCase").convert("")).toBe("");
29
- expect(new ChangeCasingConverter("snakeCase").convert("___")).toBe("");
30
- expect(new ChangeCasingConverter("snakeCase").convert(" two words\t")).toBe("two_words");
31
- expect(new ChangeCasingConverter("camelCase").convert("")).toBe("");
32
- expect(() => new ChangeCasingConverter("nope" as Casing).convert("a")).toThrow();
33
- });
34
- });
@@ -1,59 +0,0 @@
1
- export type Casing =
2
- | "camelCase"
3
- | "capitalCase"
4
- | "constantCase"
5
- | "dotCase"
6
- | "kebabCase"
7
- | "noCase"
8
- | "pascalCase"
9
- | "pascalSnakeCase"
10
- | "pathCase"
11
- | "sentenceCase"
12
- | "snakeCase"
13
- | "trainCase";
14
-
15
- const cap = (word: string) => word[0].toUpperCase() + word.slice(1);
16
- const sep = (c: string) => c === "_" || c === "." || c === "-" || c === "/" || /\s/.test(c);
17
- const upper = (c: string) => c !== c.toLowerCase();
18
- const lower = (c: string) => c !== c.toUpperCase();
19
- const letter = (c: string) => upper(c) || lower(c);
20
- const digit = (c: string) => c >= "0" && c <= "9";
21
-
22
- const words = (text: string): string[] => {
23
- const parts: string[] = [];
24
- let start = 0;
25
- for (let i = 0; i < text.length; i++) {
26
- const split =
27
- sep(text[i]) ||
28
- (i > 0 && lower(text[i - 1]) && upper(text[i])) ||
29
- (i > 0 && i + 1 < text.length && upper(text[i - 1]) && upper(text[i]) && lower(text[i + 1])) ||
30
- (i > 0 && letter(text[i - 1]) !== letter(text[i]) && (letter(text[i - 1]) || digit(text[i - 1])) && (letter(text[i]) || digit(text[i])));
31
- if (!split) continue;
32
- if (i > start) parts.push(text.slice(start, i));
33
- start = sep(text[i]) ? i + 1 : i;
34
- }
35
- if (start < text.length) parts.push(text.slice(start));
36
- return parts.map((word) => word.toLowerCase()).filter((word) => word.length > 0);
37
- };
38
-
39
- const join = (parts: string[], casing: Casing): string =>
40
- ({
41
- camelCase: () => parts.map((word, i) => (i === 0 ? word : cap(word))).join(""),
42
- capitalCase: () => parts.map(cap).join(" "),
43
- constantCase: () => parts.map((word) => word.toUpperCase()).join("_"),
44
- dotCase: () => parts.join("."),
45
- kebabCase: () => parts.join("-"),
46
- noCase: () => parts.join(" "),
47
- pascalCase: () => parts.map(cap).join(""),
48
- pascalSnakeCase: () => parts.map(cap).join("_"),
49
- pathCase: () => parts.join("/"),
50
- sentenceCase: () => parts.map((word, i) => (i === 0 ? cap(word) : word)).join(" "),
51
- snakeCase: () => parts.join("_"),
52
- trainCase: () => parts.map(cap).join("-"),
53
- }[casing]());
54
-
55
- export class ChangeCasingConverter {
56
- constructor(private readonly casing: Casing) {}
57
- convert = (from: string) => join(words(from), this.casing);
58
- reverseConvert = (to: string) => to;
59
- }
@@ -1 +0,0 @@
1
- export type Constructable<T> = new () => T;
@@ -1,80 +0,0 @@
1
- import type { Cell, Cells } from "./Cell.ts";
2
- import { TypeConverter } from "./TypeConverter.ts";
3
- import type { Constructable } from "./Constructable.ts";
4
- import type { IMapper } from "../mappers/IMapper.ts";
5
- import { IdentityMapper } from "../mappers/IdentityMapper.ts";
6
-
7
- const scalarId = (value: Cell | object | undefined): Cell | undefined => {
8
- if (value === undefined || value === null || typeof value !== "object" || value instanceof Date || value instanceof Uint8Array)
9
- return value === undefined ? undefined : (value as Cell);
10
- const record = value as Record<string, Cell | undefined>;
11
- return record.Id !== undefined ? record.Id : record.id;
12
- };
13
-
14
- export class MetaDataRowTypeConverter<T = Cells> extends TypeConverter<T, Cells> {
15
- fields: Record<string, TypeConverter<Cell, Cell>>;
16
- references = new Set<string>();
17
- referenceColumns: IMapper<string, string> = new IdentityMapper<string>();
18
- shouldCoerceId = false;
19
-
20
- constructor(fields: Record<string, TypeConverter<Cell, Cell>> = {}) {
21
- super();
22
- this.fields = { ...fields };
23
- }
24
-
25
- convert = (row: Cells, type?: Constructable<T>): T => {
26
- const blank = type ? new type() : {};
27
- const cells = Object.fromEntries(
28
- Object.entries(row).filter(([key, value]) => {
29
- if (this.references.has(key)) return false;
30
- const current = (blank as Cells)[key];
31
- return !(typeof current === "string" && typeof value !== "string" && value !== null);
32
- }),
33
- );
34
- const dest = Object.assign(blank, cells) as T;
35
- const record = dest as Record<string, Cell | object>;
36
- for (const [key, value] of Object.entries(row)) {
37
- if (this.references.has(key)) {
38
- const current = record[key];
39
- const target = current !== null && typeof current === "object" && !Array.isArray(current)
40
- ? current as Record<string, Cell>
41
- : {};
42
- const id = "Id" in target ? "Id" : "id";
43
- target[id] = value;
44
- record[key] = target;
45
- continue;
46
- }
47
- const converter = this.fields[key];
48
- if (converter) record[key] = converter.convert(value);
49
- }
50
- return dest;
51
- };
52
-
53
- reverseConvert = (row: T): Cells => {
54
- const cells: Cells = {};
55
- for (const [key, value] of Object.entries(row as Record<string, Cell | object>)) {
56
- if (Array.isArray(value)) continue;
57
- if (
58
- value !== null &&
59
- typeof value === "object" &&
60
- !(value instanceof Date) &&
61
- !(value instanceof Uint8Array) &&
62
- !this.references.has(key)
63
- )
64
- continue;
65
- if (this.references.has(key)) {
66
- const id = scalarId(value);
67
- if (id !== undefined && id !== null) cells[this.referenceColumns.map(key)] = this.converted(key, id);
68
- continue;
69
- }
70
- const converter = this.fields[key];
71
- cells[key] = converter ? converter.reverseConvert(value as Cell) : (value as Cell);
72
- }
73
- return cells;
74
- };
75
-
76
- private converted = (key: string, value: Cell): Cell => {
77
- const converter = this.fields[key];
78
- return converter ? converter.reverseConvert(value) : value;
79
- };
80
- }
@@ -1,43 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { PluralizerConverter } from "./PluralizerConverter.ts";
3
-
4
- describe("PluralizerConverter", () => {
5
- it("pluralizes and singularizes", () => {
6
- const pairs: [string, string][] = [
7
- ["person", "people"],
8
- ["child", "children"],
9
- ["man", "men"],
10
- ["woman", "women"],
11
- ["mouse", "mice"],
12
- ["goose", "geese"],
13
- ["tooth", "teeth"],
14
- ["foot", "feet"],
15
- ["ox", "oxen"],
16
- ["sheep", "sheep"],
17
- ["fish", "fish"],
18
- ["series", "series"],
19
- ["species", "species"],
20
- ["deer", "deer"],
21
- ["news", "news"],
22
- ["box", "boxes"],
23
- ["dish", "dishes"],
24
- ["church", "churches"],
25
- ["quiz", "quizes"],
26
- ["kiss", "kisses"],
27
- ["bus", "buses"],
28
- ["city", "cities"],
29
- ["cat", "cats"],
30
- ["toy", "toys"],
31
- ["2y", "2ys"],
32
- ["Person", "People"],
33
- ["", ""],
34
- ];
35
- const converter = new PluralizerConverter();
36
- for (const [singular, plural] of pairs) {
37
- expect(converter.convert(singular)).toBe(plural);
38
- expect(converter.convert(plural)).toBe(plural);
39
- expect(converter.reverseConvert(plural)).toBe(singular);
40
- expect(converter.reverseConvert(singular)).toBe(singular);
41
- }
42
- });
43
- });