af-db-ts 2.0.19 → 2.0.73

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (307) hide show
  1. package/dist/cjs/__tests__/db/ms/@gen-types/test-table_schema.js +3 -0
  2. package/dist/cjs/__tests__/db/ms/@gen-types/test-table_schema.js.map +1 -0
  3. package/dist/cjs/__tests__/db/ms/ddl/column-schema-for-test-table-schema-ms.json +216 -0
  4. package/dist/cjs/__tests__/db/ms/ms-get-sql.spec.js +190 -0
  5. package/dist/cjs/__tests__/db/ms/ms-get-sql.spec.js.map +1 -0
  6. package/dist/cjs/__tests__/db/ms/ms-prepare-sql-value.spec.js +584 -0
  7. package/dist/cjs/__tests__/db/ms/ms-prepare-sql-value.spec.js.map +1 -0
  8. package/dist/cjs/__tests__/db/ms/ms-table-schema.spec.js +107 -0
  9. package/dist/cjs/__tests__/db/ms/ms-table-schema.spec.js.map +1 -0
  10. package/dist/cjs/__tests__/db/pg/@gen-types/test-hard_case.js +3 -0
  11. package/dist/cjs/__tests__/db/pg/@gen-types/test-hard_case.js.map +1 -0
  12. package/dist/cjs/__tests__/db/pg/@gen-types/test-only_one_serial.js +3 -0
  13. package/dist/cjs/__tests__/db/pg/@gen-types/test-only_one_serial.js.map +1 -0
  14. package/dist/cjs/__tests__/db/pg/@gen-types/test-only_one_uniq.js +3 -0
  15. package/dist/cjs/__tests__/db/pg/@gen-types/test-only_one_uniq.js.map +1 -0
  16. package/dist/cjs/__tests__/db/pg/@gen-types/test-serial_and_uniq.js +3 -0
  17. package/dist/cjs/__tests__/db/pg/@gen-types/test-serial_and_uniq.js.map +1 -0
  18. package/dist/cjs/__tests__/db/pg/@gen-types/test-table_schema.js +3 -0
  19. package/dist/cjs/__tests__/db/pg/@gen-types/test-table_schema.js.map +1 -0
  20. package/dist/cjs/__tests__/db/pg/ddl/column-schema-for-test-table-schema-pg.json +170 -0
  21. package/dist/cjs/__tests__/db/pg/gen-table-interfaces-4-test-pg.js +36 -0
  22. package/dist/cjs/__tests__/db/pg/gen-table-interfaces-4-test-pg.js.map +1 -0
  23. package/dist/cjs/__tests__/db/pg/pg-get-sql.spec.js +261 -0
  24. package/dist/cjs/__tests__/db/pg/pg-get-sql.spec.js.map +1 -0
  25. package/dist/cjs/__tests__/db/pg/pg-insert.spec.js +294 -0
  26. package/dist/cjs/__tests__/db/pg/pg-insert.spec.js.map +1 -0
  27. package/dist/cjs/__tests__/db/pg/pg-prepare-sql-value.spec.js +575 -0
  28. package/dist/cjs/__tests__/db/pg/pg-prepare-sql-value.spec.js.map +1 -0
  29. package/dist/cjs/__tests__/db/pg/pg-table-schema.spec.js +117 -0
  30. package/dist/cjs/__tests__/db/pg/pg-table-schema.spec.js.map +1 -0
  31. package/dist/cjs/src/@types/i-data-types-ms.js +3 -0
  32. package/dist/cjs/src/@types/i-data-types-ms.js.map +1 -0
  33. package/dist/cjs/src/@types/i-data-types-pg.js +7 -0
  34. package/dist/cjs/src/@types/i-data-types-pg.js.map +1 -0
  35. package/dist/cjs/src/@types/i-pg.js +0 -21
  36. package/dist/cjs/src/@types/i-pg.js.map +1 -1
  37. package/dist/cjs/src/common.js +6 -5
  38. package/dist/cjs/src/common.js.map +1 -1
  39. package/dist/cjs/src/index.js +75 -54
  40. package/dist/cjs/src/index.js.map +1 -1
  41. package/dist/cjs/src/ms/gen-table-interfaces-ms.js +64 -0
  42. package/dist/cjs/src/ms/gen-table-interfaces-ms.js.map +1 -0
  43. package/dist/cjs/src/ms/get-sql/insert.js +37 -0
  44. package/dist/cjs/src/ms/get-sql/insert.js.map +1 -0
  45. package/dist/cjs/src/ms/get-sql/merge.js +93 -0
  46. package/dist/cjs/src/ms/get-sql/merge.js.map +1 -0
  47. package/dist/cjs/src/ms/get-sql/update.js +32 -0
  48. package/dist/cjs/src/ms/get-sql/update.js.map +1 -0
  49. package/dist/cjs/src/{mssql → ms}/pool-ms.js +6 -23
  50. package/dist/cjs/src/ms/pool-ms.js.map +1 -0
  51. package/dist/cjs/src/ms/prepare-value.js +178 -0
  52. package/dist/cjs/src/ms/prepare-value.js.map +1 -0
  53. package/dist/cjs/src/{mssql → ms}/query-ms.js +1 -1
  54. package/dist/cjs/src/ms/query-ms.js.map +1 -0
  55. package/dist/cjs/src/ms/table-schema-ms.js +241 -0
  56. package/dist/cjs/src/ms/table-schema-ms.js.map +1 -0
  57. package/dist/cjs/src/ms/utils-ms.js +92 -0
  58. package/dist/cjs/src/ms/utils-ms.js.map +1 -0
  59. package/dist/cjs/src/ms/wrap-transaction-ms.js +32 -0
  60. package/dist/cjs/src/ms/wrap-transaction-ms.js.map +1 -0
  61. package/dist/cjs/src/pg/gen-table-interfaces-pg.js +83 -0
  62. package/dist/cjs/src/pg/gen-table-interfaces-pg.js.map +1 -0
  63. package/dist/cjs/src/pg/get-sql/insert.js +38 -0
  64. package/dist/cjs/src/pg/get-sql/insert.js.map +1 -0
  65. package/dist/cjs/src/pg/get-sql/merge.js +60 -0
  66. package/dist/cjs/src/pg/get-sql/merge.js.map +1 -0
  67. package/dist/cjs/src/pg/get-sql/update.js +32 -0
  68. package/dist/cjs/src/pg/get-sql/update.js.map +1 -0
  69. package/dist/cjs/src/pg/{insert.js → insert-pg.js} +10 -10
  70. package/dist/cjs/src/pg/insert-pg.js.map +1 -0
  71. package/dist/cjs/src/pg/is-table-or-view-exists.js +1 -2
  72. package/dist/cjs/src/pg/is-table-or-view-exists.js.map +1 -1
  73. package/dist/cjs/src/pg/{pg-pool.js → pool-pg.js} +6 -7
  74. package/dist/cjs/src/pg/pool-pg.js.map +1 -0
  75. package/dist/cjs/src/pg/prepare-value.js +116 -69
  76. package/dist/cjs/src/pg/prepare-value.js.map +1 -1
  77. package/dist/cjs/src/pg/query-pg.js +2 -2
  78. package/dist/cjs/src/pg/query-pg.js.map +1 -1
  79. package/dist/cjs/src/pg/table-schema-pg.js +183 -0
  80. package/dist/cjs/src/pg/table-schema-pg.js.map +1 -0
  81. package/dist/cjs/src/pg/utils-pg.js +99 -0
  82. package/dist/cjs/src/pg/utils-pg.js.map +1 -0
  83. package/dist/cjs/src/utils/utils-array.js +152 -0
  84. package/dist/cjs/src/utils/utils-array.js.map +1 -0
  85. package/dist/cjs/src/utils/utils-dt.js +121 -0
  86. package/dist/cjs/src/utils/utils-dt.js.map +1 -0
  87. package/dist/cjs/src/utils/utils-num.js +127 -0
  88. package/dist/cjs/src/utils/utils-num.js.map +1 -0
  89. package/dist/cjs/src/utils/utils.js +66 -0
  90. package/dist/cjs/src/utils/utils.js.map +1 -0
  91. package/dist/esm/src/@types/i-data-types-ms.js +2 -0
  92. package/dist/esm/src/@types/i-data-types-ms.js.map +1 -0
  93. package/dist/esm/src/@types/i-data-types-pg.js +6 -0
  94. package/dist/esm/src/@types/i-data-types-pg.js.map +1 -0
  95. package/dist/esm/src/@types/i-pg.js +1 -20
  96. package/dist/esm/src/@types/i-pg.js.map +1 -1
  97. package/dist/esm/src/common.js +3 -2
  98. package/dist/esm/src/common.js.map +1 -1
  99. package/dist/esm/src/index.js +24 -15
  100. package/dist/esm/src/index.js.map +1 -1
  101. package/dist/esm/src/ms/gen-table-interfaces-ms.js +36 -0
  102. package/dist/esm/src/ms/gen-table-interfaces-ms.js.map +1 -0
  103. package/dist/esm/src/ms/get-sql/insert.js +33 -0
  104. package/dist/esm/src/ms/get-sql/insert.js.map +1 -0
  105. package/dist/esm/src/ms/get-sql/merge.js +89 -0
  106. package/dist/esm/src/ms/get-sql/merge.js.map +1 -0
  107. package/dist/esm/src/ms/get-sql/update.js +28 -0
  108. package/dist/esm/src/ms/get-sql/update.js.map +1 -0
  109. package/dist/esm/src/{mssql → ms}/pool-ms.js +5 -20
  110. package/dist/esm/src/ms/pool-ms.js.map +1 -0
  111. package/dist/esm/src/ms/prepare-value.js +149 -0
  112. package/dist/esm/src/ms/prepare-value.js.map +1 -0
  113. package/dist/esm/src/{mssql → ms}/query-ms.js +1 -1
  114. package/dist/esm/src/ms/query-ms.js.map +1 -0
  115. package/dist/esm/src/ms/table-schema-ms.js +213 -0
  116. package/dist/esm/src/ms/table-schema-ms.js.map +1 -0
  117. package/dist/esm/src/ms/utils-ms.js +65 -0
  118. package/dist/esm/src/ms/utils-ms.js.map +1 -0
  119. package/dist/esm/src/ms/wrap-transaction-ms.js +28 -0
  120. package/dist/esm/src/ms/wrap-transaction-ms.js.map +1 -0
  121. package/dist/esm/src/pg/gen-table-interfaces-pg.js +55 -0
  122. package/dist/esm/src/pg/gen-table-interfaces-pg.js.map +1 -0
  123. package/dist/esm/src/pg/get-sql/insert.js +34 -0
  124. package/dist/esm/src/pg/get-sql/insert.js.map +1 -0
  125. package/dist/esm/src/pg/get-sql/merge.js +56 -0
  126. package/dist/esm/src/pg/get-sql/merge.js.map +1 -0
  127. package/dist/esm/src/pg/get-sql/update.js +28 -0
  128. package/dist/esm/src/pg/get-sql/update.js.map +1 -0
  129. package/dist/esm/src/pg/{insert.js → insert-pg.js} +10 -10
  130. package/dist/esm/src/pg/insert-pg.js.map +1 -0
  131. package/dist/esm/src/pg/is-table-or-view-exists.js +1 -2
  132. package/dist/esm/src/pg/is-table-or-view-exists.js.map +1 -1
  133. package/dist/esm/src/pg/{pg-pool.js → pool-pg.js} +6 -7
  134. package/dist/esm/src/pg/pool-pg.js.map +1 -0
  135. package/dist/esm/src/pg/prepare-value.js +113 -67
  136. package/dist/esm/src/pg/prepare-value.js.map +1 -1
  137. package/dist/esm/src/pg/query-pg.js +1 -1
  138. package/dist/esm/src/pg/query-pg.js.map +1 -1
  139. package/dist/esm/src/pg/table-schema-pg.js +178 -0
  140. package/dist/esm/src/pg/table-schema-pg.js.map +1 -0
  141. package/dist/esm/src/pg/utils-pg.js +93 -0
  142. package/dist/esm/src/pg/utils-pg.js.map +1 -0
  143. package/dist/esm/src/utils/utils-array.js +125 -0
  144. package/dist/esm/src/utils/utils-array.js.map +1 -0
  145. package/dist/esm/src/utils/utils-dt.js +114 -0
  146. package/dist/esm/src/utils/utils-dt.js.map +1 -0
  147. package/dist/esm/src/utils/utils-num.js +117 -0
  148. package/dist/esm/src/utils/utils-num.js.map +1 -0
  149. package/dist/esm/src/utils/utils.js +58 -0
  150. package/dist/esm/src/utils/utils.js.map +1 -0
  151. package/dist/types/src/@types/i-common.d.ts +35 -3
  152. package/dist/types/src/@types/i-common.d.ts.map +1 -1
  153. package/dist/types/src/@types/i-data-types-ms.d.ts +3 -0
  154. package/dist/types/src/@types/i-data-types-ms.d.ts.map +1 -0
  155. package/dist/types/src/@types/i-data-types-pg.d.ts +35 -0
  156. package/dist/types/src/@types/i-data-types-pg.d.ts.map +1 -0
  157. package/dist/types/src/@types/i-ms.d.ts +26 -126
  158. package/dist/types/src/@types/i-ms.d.ts.map +1 -1
  159. package/dist/types/src/@types/i-pg.d.ts +11 -35
  160. package/dist/types/src/@types/i-pg.d.ts.map +1 -1
  161. package/dist/types/src/common.d.ts +1 -0
  162. package/dist/types/src/common.d.ts.map +1 -1
  163. package/dist/types/src/index.d.ts +28 -16
  164. package/dist/types/src/index.d.ts.map +1 -1
  165. package/dist/types/src/ms/gen-table-interfaces-ms.d.ts +3 -0
  166. package/dist/types/src/ms/gen-table-interfaces-ms.d.ts.map +1 -0
  167. package/dist/types/src/ms/get-sql/insert.d.ts +9 -0
  168. package/dist/types/src/ms/get-sql/insert.d.ts.map +1 -0
  169. package/dist/types/src/ms/get-sql/merge.d.ts +14 -0
  170. package/dist/types/src/ms/get-sql/merge.d.ts.map +1 -0
  171. package/dist/types/src/ms/get-sql/update.d.ts +9 -0
  172. package/dist/types/src/ms/get-sql/update.d.ts.map +1 -0
  173. package/dist/types/src/{mssql → ms}/pool-ms.d.ts +0 -8
  174. package/dist/types/src/ms/pool-ms.d.ts.map +1 -0
  175. package/dist/types/src/ms/prepare-value.d.ts +12 -0
  176. package/dist/types/src/ms/prepare-value.d.ts.map +1 -0
  177. package/dist/types/src/ms/query-ms.d.ts +3 -0
  178. package/dist/types/src/ms/query-ms.d.ts.map +1 -0
  179. package/dist/types/src/ms/table-schema-ms.d.ts +9 -0
  180. package/dist/types/src/ms/table-schema-ms.d.ts.map +1 -0
  181. package/dist/types/src/ms/utils-ms.d.ts +3 -0
  182. package/dist/types/src/ms/utils-ms.d.ts.map +1 -0
  183. package/dist/types/src/ms/wrap-transaction-ms.d.ts +5 -0
  184. package/dist/types/src/ms/wrap-transaction-ms.d.ts.map +1 -0
  185. package/dist/types/src/pg/gen-table-interfaces-pg.d.ts +3 -0
  186. package/dist/types/src/pg/gen-table-interfaces-pg.d.ts.map +1 -0
  187. package/dist/types/src/pg/get-sql/insert.d.ts +9 -0
  188. package/dist/types/src/pg/get-sql/insert.d.ts.map +1 -0
  189. package/dist/types/src/pg/get-sql/merge.d.ts +10 -0
  190. package/dist/types/src/pg/get-sql/merge.d.ts.map +1 -0
  191. package/dist/types/src/pg/get-sql/update.d.ts +9 -0
  192. package/dist/types/src/pg/get-sql/update.d.ts.map +1 -0
  193. package/dist/types/src/pg/{insert.d.ts → insert-pg.d.ts} +3 -3
  194. package/dist/types/src/pg/insert-pg.d.ts.map +1 -0
  195. package/dist/types/src/pg/{pg-pool.d.ts → pool-pg.d.ts} +1 -1
  196. package/dist/types/src/pg/{pg-pool.d.ts.map → pool-pg.d.ts.map} +1 -1
  197. package/dist/types/src/pg/prepare-value.d.ts +3 -1
  198. package/dist/types/src/pg/prepare-value.d.ts.map +1 -1
  199. package/dist/types/src/pg/query-pg.d.ts +3 -2
  200. package/dist/types/src/pg/query-pg.d.ts.map +1 -1
  201. package/dist/types/src/pg/table-schema-pg.d.ts +12 -0
  202. package/dist/types/src/pg/table-schema-pg.d.ts.map +1 -0
  203. package/dist/types/src/pg/utils-pg.d.ts +5 -0
  204. package/dist/types/src/pg/utils-pg.d.ts.map +1 -0
  205. package/dist/types/src/utils/utils-array.d.ts +5 -0
  206. package/dist/types/src/utils/utils-array.d.ts.map +1 -0
  207. package/dist/types/src/utils/utils-dt.d.ts +15 -0
  208. package/dist/types/src/utils/utils-dt.d.ts.map +1 -0
  209. package/dist/types/src/utils/utils-num.d.ts +9 -0
  210. package/dist/types/src/utils/utils-num.d.ts.map +1 -0
  211. package/dist/types/src/utils/utils.d.ts +18 -0
  212. package/dist/types/src/utils/utils.d.ts.map +1 -0
  213. package/package.json +13 -13
  214. package/src/@types/i-common.ts +42 -4
  215. package/src/@types/i-data-types-ms.ts +81 -0
  216. package/src/@types/i-data-types-pg.ts +120 -0
  217. package/src/@types/i-ms.ts +29 -153
  218. package/src/@types/i-pg.ts +11 -36
  219. package/src/common.ts +4 -2
  220. package/src/index.ts +101 -59
  221. package/src/ms/gen-table-interfaces-ms.ts +52 -0
  222. package/src/ms/get-sql/insert.ts +45 -0
  223. package/src/ms/get-sql/merge.ts +118 -0
  224. package/src/ms/get-sql/update.ts +46 -0
  225. package/src/{mssql → ms}/pool-ms.ts +0 -16
  226. package/src/ms/prepare-value.ts +175 -0
  227. package/src/{mssql → ms}/query-ms.ts +2 -2
  228. package/src/ms/table-schema-ms.ts +231 -0
  229. package/src/ms/utils-ms.ts +72 -0
  230. package/src/ms/wrap-transaction-ms.ts +27 -0
  231. package/src/pg/gen-table-interfaces-pg.ts +74 -0
  232. package/src/pg/get-sql/insert.ts +46 -0
  233. package/src/pg/get-sql/merge.ts +70 -0
  234. package/src/pg/get-sql/update.ts +46 -0
  235. package/src/pg/{insert.ts → insert-pg.ts} +9 -9
  236. package/src/pg/prepare-value.ts +129 -67
  237. package/src/pg/query-pg.ts +4 -3
  238. package/src/pg/table-schema-pg.ts +196 -0
  239. package/src/pg/utils-pg.ts +97 -0
  240. package/src/utils/utils-array.ts +133 -0
  241. package/src/utils/utils-dt.ts +123 -0
  242. package/src/utils/utils-num.ts +131 -0
  243. package/src/utils/utils.ts +64 -0
  244. package/dist/cjs/__tests__/02_getValueForSqlMs.spec.js +0 -50
  245. package/dist/cjs/__tests__/02_getValueForSqlMs.spec.js.map +0 -1
  246. package/dist/cjs/src/mssql/get-value-for-sql.js +0 -277
  247. package/dist/cjs/src/mssql/get-value-for-sql.js.map +0 -1
  248. package/dist/cjs/src/mssql/pool-ms.js.map +0 -1
  249. package/dist/cjs/src/mssql/query-ms.js.map +0 -1
  250. package/dist/cjs/src/mssql/sql.js +0 -427
  251. package/dist/cjs/src/mssql/sql.js.map +0 -1
  252. package/dist/cjs/src/mssql/utils.js +0 -36
  253. package/dist/cjs/src/mssql/utils.js.map +0 -1
  254. package/dist/cjs/src/pg/get-merge-sql.js +0 -52
  255. package/dist/cjs/src/pg/get-merge-sql.js.map +0 -1
  256. package/dist/cjs/src/pg/get-update-sql.js +0 -30
  257. package/dist/cjs/src/pg/get-update-sql.js.map +0 -1
  258. package/dist/cjs/src/pg/insert.js.map +0 -1
  259. package/dist/cjs/src/pg/pg-pool.js.map +0 -1
  260. package/dist/cjs/src/pg/table-schema.js +0 -179
  261. package/dist/cjs/src/pg/table-schema.js.map +0 -1
  262. package/dist/cjs/src/utils.js +0 -17
  263. package/dist/cjs/src/utils.js.map +0 -1
  264. package/dist/esm/src/mssql/get-value-for-sql.js +0 -272
  265. package/dist/esm/src/mssql/get-value-for-sql.js.map +0 -1
  266. package/dist/esm/src/mssql/pool-ms.js.map +0 -1
  267. package/dist/esm/src/mssql/query-ms.js.map +0 -1
  268. package/dist/esm/src/mssql/sql.js +0 -390
  269. package/dist/esm/src/mssql/sql.js.map +0 -1
  270. package/dist/esm/src/mssql/utils.js +0 -31
  271. package/dist/esm/src/mssql/utils.js.map +0 -1
  272. package/dist/esm/src/pg/get-merge-sql.js +0 -48
  273. package/dist/esm/src/pg/get-merge-sql.js.map +0 -1
  274. package/dist/esm/src/pg/get-update-sql.js +0 -26
  275. package/dist/esm/src/pg/get-update-sql.js.map +0 -1
  276. package/dist/esm/src/pg/insert.js.map +0 -1
  277. package/dist/esm/src/pg/pg-pool.js.map +0 -1
  278. package/dist/esm/src/pg/table-schema.js +0 -174
  279. package/dist/esm/src/pg/table-schema.js.map +0 -1
  280. package/dist/esm/src/utils.js +0 -14
  281. package/dist/esm/src/utils.js.map +0 -1
  282. package/dist/types/src/mssql/get-value-for-sql.d.ts +0 -11
  283. package/dist/types/src/mssql/get-value-for-sql.d.ts.map +0 -1
  284. package/dist/types/src/mssql/pool-ms.d.ts.map +0 -1
  285. package/dist/types/src/mssql/query-ms.d.ts +0 -3
  286. package/dist/types/src/mssql/query-ms.d.ts.map +0 -1
  287. package/dist/types/src/mssql/sql.d.ts +0 -57
  288. package/dist/types/src/mssql/sql.d.ts.map +0 -1
  289. package/dist/types/src/mssql/utils.d.ts +0 -10
  290. package/dist/types/src/mssql/utils.d.ts.map +0 -1
  291. package/dist/types/src/pg/get-merge-sql.d.ts +0 -9
  292. package/dist/types/src/pg/get-merge-sql.d.ts.map +0 -1
  293. package/dist/types/src/pg/get-update-sql.d.ts +0 -3
  294. package/dist/types/src/pg/get-update-sql.d.ts.map +0 -1
  295. package/dist/types/src/pg/insert.d.ts.map +0 -1
  296. package/dist/types/src/pg/table-schema.d.ts +0 -12
  297. package/dist/types/src/pg/table-schema.d.ts.map +0 -1
  298. package/dist/types/src/utils.d.ts +0 -9
  299. package/dist/types/src/utils.d.ts.map +0 -1
  300. package/src/mssql/get-value-for-sql.ts +0 -325
  301. package/src/mssql/sql.ts +0 -430
  302. package/src/mssql/utils.ts +0 -31
  303. package/src/pg/get-merge-sql.ts +0 -62
  304. package/src/pg/get-update-sql.ts +0 -32
  305. package/src/pg/table-schema.ts +0 -189
  306. package/src/utils.ts +0 -14
  307. /package/src/pg/{pg-pool.ts → pool-pg.ts} +0 -0
@@ -0,0 +1,97 @@
1
+ import { TDataTypePg, TArrayTypesPg } from '../@types/i-data-types-pg';
2
+
3
+ export const getJsTypeByTypePg = (dataType?: TDataTypePg, arrayType?: TDataTypePg): string => {
4
+ switch (dataType) {
5
+ case 'boolean':
6
+ return 'boolean';
7
+ case 'bigint':
8
+ return 'string | number';
9
+ case 'integer':
10
+ case 'numeric':
11
+ case 'real':
12
+ case 'smallint':
13
+ return 'number';
14
+ case 'text':
15
+ case 'character':
16
+ case 'varchar':
17
+ case 'uuid':
18
+ return 'string';
19
+ case 'json':
20
+ case 'jsonb':
21
+ return 'any';
22
+ case 'date':
23
+ case 'timestamptz':
24
+ case 'timestamp':
25
+ return 'string | Date | number';
26
+ case 'USER_DEFINED':
27
+ return 'string';
28
+ case 'ARRAY': {
29
+ const jsType = getJsTypeByTypePg(arrayType);
30
+ return `${jsType}[]`;
31
+ }
32
+ default:
33
+ return 'string';
34
+ }
35
+ };
36
+
37
+ const udtNames2TypeMap: { [udtName: string]: TDataTypePg } = {
38
+ _bit: 'bit',
39
+ _bool: 'bool',
40
+ _box: 'box',
41
+ _bytea: 'bytea',
42
+ _char: 'char',
43
+ _circle: 'circle',
44
+ _date: 'date',
45
+ _float4: 'real',
46
+ _float8: 'double precision',
47
+ _inet: 'inet',
48
+ _int2: 'smallint',
49
+ _int4: 'int',
50
+ _int8: 'bigint',
51
+ _interval: 'interval',
52
+ _lseg: 'lseg',
53
+ _macaddr: 'macaddr',
54
+ _money: 'money',
55
+ _numeric: 'numeric',
56
+ _path: 'path',
57
+ _point: 'point',
58
+ _polygon: 'polygon',
59
+ _text: 'text',
60
+ _time: 'time',
61
+ _timestamp: 'timestamp',
62
+ _timestamptz: 'timestamptz',
63
+ _timetz: 'timetz',
64
+ _uuid: 'uuid',
65
+ _varchar: 'varchar',
66
+ _xml: 'xml',
67
+ // _oid: 'oid',
68
+ // _abstime: 'abstime',
69
+ // _name: 'name',
70
+ };
71
+ export const getTypeByUdtNamePg = (udtName: TArrayTypesPg): TDataTypePg => {
72
+ const dataType = udtNames2TypeMap[udtName];
73
+ return dataType || 'varchar';
74
+ };
75
+
76
+ const typeNormalizationMap: { [pgDataType: string]: TDataTypePg } = {
77
+ bool: 'boolean',
78
+ int2: 'smallint',
79
+ integer: 'int',
80
+ int4: 'int',
81
+ int8: 'bigint',
82
+ serial2: 'smallserial',
83
+ serial4: 'serial',
84
+ serial8: 'bigserial',
85
+ decimal: 'numeric',
86
+ float4: 'real',
87
+ float8: 'double precision',
88
+ character: 'char',
89
+ 'character varying': 'varchar',
90
+ 'timestamp with time zone': 'timestamptz',
91
+ 'timestamp without time zone': 'timestamp',
92
+ 'time without time zone': 'time',
93
+ 'time with time zone': 'timetz',
94
+ 'bit varying': 'varbit',
95
+ };
96
+
97
+ export const getNormalizedTypePg = (pgDataType: TDataTypePg): TDataTypePg => typeNormalizationMap[pgDataType] || pgDataType;
@@ -0,0 +1,133 @@
1
+ import * as sql from 'mssql';
2
+ import { getBool } from 'af-tools-ts';
3
+ import { NULL } from '../common';
4
+ import { parseFloatNumber, parseIntNumberS, prepareBigIntNumber } from './utils-num';
5
+ import { TDataTypeMs } from '../@types/i-data-types-ms';
6
+ import { TDataTypePg } from '../@types/i-data-types-pg';
7
+ import { prepareUUID } from './utils';
8
+
9
+ const elementString = (value: any[]): string[] => {
10
+ // noinspection UnnecessaryLocalVariableJS
11
+ const arr: string[] = value.map((v) => {
12
+ if (v === '') {
13
+ return '';
14
+ }
15
+ return v == null ? null : v;
16
+ }).map((v) => (v == null ? NULL : `"${v}"`));
17
+ return arr;
18
+ };
19
+
20
+ const elementUuid = (
21
+ value: any[],
22
+ toLower: boolean = false,
23
+ ): string[] => value.map((v) => prepareUUID(v, toLower, true)).map((v) => (v === NULL ? NULL : `"${v}"`));
24
+
25
+ export const arrayToJsonList = (value: any, arrayType?: TDataTypeMs | TDataTypePg): string | typeof NULL => {
26
+ if (value == null) {
27
+ return NULL;
28
+ }
29
+ if (!Array.isArray(value)) {
30
+ return NULL;
31
+ }
32
+ let arr: any[] = [];
33
+ if (Array.isArray(value) && value.length) {
34
+ switch (arrayType) {
35
+ case 'bool':
36
+ case 'boolean': // VVQ
37
+ arr = value.map((v) => (v == null ? NULL : getBool(v)));
38
+ break;
39
+ case sql.Bit:
40
+ // eslint-disable-next-line no-nested-ternary
41
+ arr = value.map((v) => (v == null ? NULL : (getBool(v) ? 1 : 0)));
42
+ break;
43
+ case 'tinyint':
44
+ case sql.TinyInt:
45
+ arr = value.map((v) => parseIntNumberS(v, 'tinyint'));
46
+ break;
47
+ case 'smallint':
48
+ case sql.SmallInt:
49
+ arr = value.map((v) => parseIntNumberS(v, 'smallint'));
50
+ break;
51
+ case 'bigint':
52
+ case sql.BigInt:
53
+ arr = value.map((v) => prepareBigIntNumber(v));
54
+ break;
55
+ case 'int':
56
+ case 'integer':
57
+ case sql.Int:
58
+ arr = value.map((v) => parseIntNumberS(v, 'int'));
59
+ break;
60
+ case 'number':
61
+ case 'decimal':
62
+ case 'numeric':
63
+ case 'real':
64
+ case 'money':
65
+ case 'smallmoney':
66
+ case 'float':
67
+ case sql.SmallMoney:
68
+ case sql.Money:
69
+ case sql.Float:
70
+ case sql.Numeric:
71
+ case sql.Decimal:
72
+ case sql.Real:
73
+ arr = value.map((v) => parseFloatNumber(v));
74
+ break;
75
+ case 'uid':
76
+ case 'uuid': // VVQ
77
+ arr = elementUuid(value, true);
78
+ break;
79
+ case 'uniqueIdentifier':
80
+ case sql.UniqueIdentifier:
81
+ arr = elementUuid(value, false);
82
+ break;
83
+
84
+ case 'string':
85
+ case 'char':
86
+ case 'nchar':
87
+ case 'text':
88
+ case 'ntext':
89
+ case 'varchar':
90
+ case 'nvarchar':
91
+ case 'xml':
92
+ case sql.Char:
93
+ case sql.NChar:
94
+ case sql.NText:
95
+ case sql.VarChar:
96
+ case sql.NVarChar:
97
+ case sql.Text:
98
+ arr = elementString(value);
99
+ break;
100
+
101
+ case 'date':
102
+ case sql.Date:
103
+ case 'time':
104
+ case sql.Time:
105
+ case 'datetime':
106
+ case sql.DateTime:
107
+ case 'datetime2':
108
+ case sql.DateTime2:
109
+ case 'smalldatetime':
110
+ case sql.SmallDateTime:
111
+ case 'datetimeoffset':
112
+ case sql.DateTimeOffset:
113
+ arr = elementString(value);
114
+ break;
115
+ // 'binary'
116
+ // 'varbinary'
117
+ // 'image'
118
+ // 'udt'
119
+ // 'geography'
120
+ // 'geometry'
121
+ // 'variant'
122
+ // 'array'
123
+ default: {
124
+ try {
125
+ return JSON.stringify(value.map((v) => (v == null ? null : v))).replace(/^\[(.+?)]$/, '$1');
126
+ } catch (err) {
127
+ return NULL;
128
+ }
129
+ }
130
+ }
131
+ }
132
+ return arr.join(',');
133
+ };
@@ -0,0 +1,123 @@
1
+ import { DateTime } from 'luxon';
2
+ import { IFieldDefMs } from '../@types/i-ms';
3
+ import { IFieldDefPg } from '../@types/i-pg';
4
+ import { IFieldDef } from '../@types/i-common';
5
+ import { NULL } from '../common';
6
+ import { q } from './utils';
7
+
8
+ export const getTypeOfDateInput = (v: any): 'string' | 'number' | 'date' | 'luxon' | 'moment' | 'any' | 'null' => {
9
+ const type = typeof v;
10
+ if (type === 'string' || type === 'number') {
11
+ return type;
12
+ }
13
+ if (type === 'boolean' || !v) {
14
+ return 'null';
15
+ }
16
+ if (type === 'object') {
17
+ if (Object.prototype.toString.call(v) === '[object Date]') {
18
+ return 'date';
19
+ }
20
+ if (v.isLuxonDateTime) {
21
+ return 'luxon';
22
+ }
23
+ if (v._isAMomentObject) {
24
+ return 'moment';
25
+ }
26
+ }
27
+ return 'any';
28
+ };
29
+
30
+ export const getLuxonDT = (value: any, fieldDef: IFieldDefMs | IFieldDefPg): DateTime | null => {
31
+ const { inputDateFormat, dateTimeOptions } = fieldDef;
32
+ const { fromZone, setZone, correctionMillis = 0 } = dateTimeOptions || {};
33
+
34
+ let v: any;
35
+ let millis: number | null = null;
36
+ const inputType = getTypeOfDateInput(value); // 'number' | 'string' | 'date' | 'luxon' | 'moment' | 'any' | 'null'
37
+
38
+ if (inputType === 'null') {
39
+ millis = null;
40
+ } else if (inputType === 'number' || inputType === 'date') {
41
+ millis = +value;
42
+ } else if (inputType === 'string' || inputType === 'any') {
43
+ v = String(value);
44
+ let dt: DateTime;
45
+
46
+ const zoneOpts = fromZone ? { zone: fromZone } : undefined;
47
+ if (inputDateFormat) {
48
+ dt = DateTime.fromFormat(v, inputDateFormat, zoneOpts);
49
+ } else {
50
+ v = v
51
+ .replace(/^(\d{4}-\d\d-\d\d) (\d)/, '$1T$2')
52
+ .replace(/(\d) +Z/, '$1Z')
53
+ .replace(/(\d) +([+-])/, '$1$2');
54
+ dt = DateTime.fromISO(v, zoneOpts);
55
+ }
56
+ millis = dt.isValid ? dt.toMillis() : null;
57
+ } else if (inputType === 'luxon') {
58
+ millis = value.isValid ? value.toMillis() : null;
59
+ } else if (inputType === 'moment') {
60
+ millis = value.isValid() ? +value : null;
61
+ }
62
+ if (millis == null) {
63
+ return null;
64
+ }
65
+ if (correctionMillis) {
66
+ millis += correctionMillis;
67
+ }
68
+ let ld = DateTime.fromMillis(millis);
69
+ if (setZone) {
70
+ ld = ld.setZone(setZone);
71
+ }
72
+ return ld;
73
+ };
74
+
75
+ export const dateTimeValue = (value: any, fieldDef: IFieldDef, fn: Function): string | typeof NULL => {
76
+ const luxonDate = getLuxonDT(value, fieldDef);
77
+ if (!luxonDate) {
78
+ return NULL;
79
+ }
80
+ const v = fn(luxonDate);
81
+ return q(v, fieldDef.noQuotes);
82
+ };
83
+
84
+ export const getDatetimeWithPrecisionAndOffset = (arg: {
85
+ value: any,
86
+ fieldDef: IFieldDef,
87
+ defaultDtPrecision?: number,
88
+ stripTrailingZeros?: boolean,
89
+ }): string | typeof NULL => {
90
+ const { value, fieldDef, defaultDtPrecision = 3, stripTrailingZeros = false } = arg;
91
+ const dt = getLuxonDT(value, fieldDef);
92
+ if (!dt) {
93
+ return NULL;
94
+ }
95
+ const isoZ = dt.toISO({ includeOffset: true }) || ''; // 2000-01-22T14:59:59.123+03:00
96
+ const iso = isoZ.substring(0, 19); // 2000-01-22T14:59:59
97
+
98
+ // Миллисекунды
99
+ let sss = '';
100
+ if (typeof value === 'string') {
101
+ // Если во входных данных строка с миллисекундами, то берем их с той же точностью.
102
+ const re = /\.(\d+)(?=[^.]*$)/;
103
+ const [, fracSeconds = ''] = re.exec(value) || [];
104
+ sss = `${fracSeconds}0000000`.substring(0, 7);
105
+ } else {
106
+ sss = `${isoZ.substring(20, 23)}0000`;
107
+ }
108
+ const dtPrecision = fieldDef.dtPrecision == null ? defaultDtPrecision : fieldDef.dtPrecision;
109
+ let dotMillis = !dtPrecision ? '' : `.${sss}`.substring(0, dtPrecision + 1);
110
+ if (dotMillis && stripTrailingZeros) {
111
+ dotMillis = dotMillis.replace(/([^0])0+$/, '$1');
112
+ if (dotMillis === '.') {
113
+ dotMillis = '';
114
+ } else if (dotMillis.length < 4) {
115
+ dotMillis = (`${dotMillis}000`).substring(0, 4);
116
+ }
117
+ }
118
+ const { includeOffset = true } = fieldDef.dateTimeOptions || {};
119
+ const offset = includeOffset ? isoZ.substring(23, isoZ.length) : ''; // +03:00
120
+
121
+ const str = `${iso}${dotMillis}${offset}`;
122
+ return q(str, fieldDef.noQuotes);
123
+ };
@@ -0,0 +1,131 @@
1
+ import { rn } from 'af-tools-ts';
2
+ import { NULL } from '../common';
3
+
4
+ export const parseFloatNumber = (value: any): number | null => {
5
+ if (value == null) {
6
+ return null;
7
+ }
8
+ if (typeof value === 'number') {
9
+ return value;
10
+ }
11
+ if (typeof value === 'object') {
12
+ try {
13
+ value = JSON.stringify(value);
14
+ } catch (err) {
15
+ //
16
+ }
17
+ }
18
+ value = String(value).trim();
19
+ if (!value) {
20
+ return null;
21
+ }
22
+ const v: any = parseFloat(value);
23
+ if (Number.isNaN(v)) {
24
+ return null;
25
+ }
26
+ return v;
27
+ };
28
+
29
+ export const prepareFloatNumber = (value: any): string | typeof NULL => `${parseFloatNumber(value)}`;
30
+
31
+ export const parseIntNumber = (value: any, min: number, max: number): number | typeof NULL => {
32
+ if (value == null) {
33
+ return NULL;
34
+ }
35
+ let v: any = parseFloatNumber(value);
36
+ if (v == null) {
37
+ return NULL;
38
+ }
39
+ v = Math.round(v);
40
+ if (v < min) {
41
+ v = min;
42
+ }
43
+ if (v > max) {
44
+ v = max;
45
+ }
46
+ return Math.floor(v);
47
+ };
48
+
49
+ export const parseIntNumberS = (
50
+ value: any,
51
+ type: 'tinyint' |
52
+ 'smallint' | '_int2' |
53
+ 'int' | 'integer' | '_int4' |
54
+ 'bigint' | '_int8',
55
+ ): number | typeof NULL => {
56
+ switch (type) {
57
+ case 'tinyint':
58
+ return parseIntNumber(value, 0, 255);
59
+ case 'smallint':
60
+ case '_int2':
61
+ return parseIntNumber(value, -32768, 32767);
62
+ case 'int':
63
+ case 'integer':
64
+ case '_int4':
65
+ return parseIntNumber(value, -2147483648, 2147483647);
66
+ case 'bigint':
67
+ case '_int8':
68
+ return parseIntNumber(value, -2147483648, 2147483647);
69
+ default:
70
+ return parseIntNumber(value, -2147483648, 2147483647);
71
+ }
72
+ };
73
+
74
+ export const prepareIntNumber = (
75
+ value: any,
76
+ min: number,
77
+ max: number,
78
+ ): string | typeof NULL => `${parseIntNumber(value, min, max)}`;
79
+
80
+ export const prepareBigIntNumber = (value: any): string | typeof NULL => {
81
+ if (value == null) {
82
+ return NULL;
83
+ }
84
+ if (typeof value === 'bigint') {
85
+ return `${value}`;
86
+ }
87
+ let bi: BigInt;
88
+ try {
89
+ if (typeof value === 'number') {
90
+ const v = Math.floor(value);
91
+ bi = BigInt(v);
92
+ return `${bi}`;
93
+ }
94
+ if (typeof value === 'string') {
95
+ const v = value.replace(/^\++/, '').split(/[^\d-]/)[0].trim();
96
+ return v ? `${BigInt(v)}` : NULL;
97
+ }
98
+ } catch (err) {
99
+ //
100
+ }
101
+ return NULL;
102
+ };
103
+
104
+ export const prepareNumeric = (value: any, precision?: number, scale?: number): string | typeof NULL => {
105
+ if (value == null) {
106
+ return NULL;
107
+ }
108
+ if (!precision) {
109
+ if (typeof value === 'bigint') {
110
+ return `${value}`;
111
+ }
112
+ return prepareFloatNumber(value);
113
+ }
114
+ if (typeof value === 'bigint') {
115
+ return `${value}`.substring(0, precision);
116
+ }
117
+ let vn = parseFloatNumber(value);
118
+ if (vn == null) {
119
+ return NULL;
120
+ }
121
+ const maxValue = (10 ** precision - 1) / (10 ** (scale || 0));
122
+ const minValue = -maxValue;
123
+ if (vn > maxValue) {
124
+ return `${maxValue}`;
125
+ }
126
+ if (vn < minValue) {
127
+ return `${minValue}`;
128
+ }
129
+ vn = rn(vn, scale);
130
+ return `${vn}`;
131
+ };
@@ -0,0 +1,64 @@
1
+ /* eslint-disable no-restricted-syntax */
2
+
3
+ import { NULL } from '../common';
4
+
5
+ const toSchemaTableCommon = (s: string): string => s.replace(/["[\]]/g, '');
6
+ const toSchemaTableSpec = (s: string, dbType: 'mssql' | 'ms' | 'pg'): string => {
7
+ const [schema, table] = toSchemaTableCommon(s).split('.');
8
+ return dbType === 'pg' ? `"${schema}"."${table}"` : `[${schema}].[${table}]`;
9
+ };
10
+
11
+ export const schemaTable = {
12
+ to: {
13
+ common: toSchemaTableCommon,
14
+ spec: toSchemaTableSpec,
15
+ pg: (s: string): string => toSchemaTableSpec(s, 'pg'),
16
+ ms: (s: string): string => toSchemaTableSpec(s, 'ms'),
17
+ },
18
+ };
19
+
20
+ export const removePairBrackets = (s: string): string => {
21
+ if (!s) {
22
+ return s;
23
+ }
24
+ s = s.trim().replace(/\s*\(\s*/sg, '(');
25
+ s = s.replace(/\s*\)s*/sg, ')');
26
+ const [, leadB = ''] = /^(\(+)/.exec(s) || [];
27
+ if (!leadB) {
28
+ return s;
29
+ }
30
+ const [, trailB = ''] = /(\)+)$/.exec(s) || [];
31
+ const cnt = Math.min(leadB.length, trailB.length);
32
+ for (let c = 0; c < cnt; c++) {
33
+ s = s.substring(1, s.length - 1);
34
+ }
35
+ return s;
36
+ };
37
+
38
+ /**
39
+ * Оборачивает строку в одинарные кавычки, если второй аргумент не true
40
+ */
41
+ export const q = (val: string, noQuotes?: boolean): string => (noQuotes ? val : `'${val}'`);
42
+
43
+ export const prepareJSON = (value: any): string | typeof NULL => {
44
+ if (value == null) {
45
+ return NULL;
46
+ }
47
+ try {
48
+ value = JSON.stringify(value);
49
+ } catch (err) {
50
+ return NULL;
51
+ }
52
+ return value;
53
+ };
54
+
55
+ export const binToHexString = (value: any): string | null => (value ? `0x${value.toString('hex').toUpperCase()}` : null);
56
+
57
+ export const prepareUUID = (v: any, toLower: boolean = false, noQuotes: boolean = false): string | typeof NULL => {
58
+ if (v && typeof v === 'string' && /^[A-F\d]{8}(-[A-F\d]{4}){4}[A-F\d]{8}/i.test(v)) {
59
+ v = v.substring(0, 36);
60
+ v = toLower ? v.toLowerCase() : v.toUpperCase();
61
+ return q(v, noQuotes);
62
+ }
63
+ return NULL;
64
+ };
@@ -1,50 +0,0 @@
1
- "use strict";
2
- /* eslint-disable max-len */
3
- /* eslint-disable no-console */
4
- Object.defineProperty(exports, "__esModule", { value: true });
5
- // "America/Toronto" -05:00
6
- // "Europe/Berlin" +01:00
7
- // "Europe/Moscow" +03:00
8
- const src_1 = require("../src");
9
- describe('sql.getValueForSqlMs() should work properly', () => {
10
- describe('should parse date properly', () => {
11
- const testArr = [
12
- ['2000-01-22T11:59:59.123', '2000-01-22T11:59:59.123'],
13
- ['2000-01-22T11:59:59.12', '2000-01-22T11:59:59.120'],
14
- ['2000-01-22T11:59:59', '2000-01-22T11:59:59.000'],
15
- ['2000-01-22T11:59', '2000-01-22T11:59:00.000'],
16
- ['2000-01-22 11:59:59.123', '2000-01-22T11:59:59.123'],
17
- ['2000-01-22 11:59:59.12', '2000-01-22T11:59:59.120'],
18
- ['2000-01-22 11:59:59.1', '2000-01-22T11:59:59.100'],
19
- ['2000-01-22 11:59:59', '2000-01-22T11:59:59.000'],
20
- ['2000-01-22 11:59', '2000-01-22T11:59:00.000'],
21
- ['2000-01-22 11:2', '2000-01-22T11:02:00.000'],
22
- ['2000-01-22 2:2', '2000-01-22T02:02:00.000'],
23
- ['2000-1-2 02:02', '2000-01-02T02:02:00.000'],
24
- ['2019-8-9 5:16:14 AM', '2019-08-09T05:16:14.000'],
25
- ['2019-8-9 5:16:14 PM', '2019-08-09T17:16:14.000'],
26
- ];
27
- testArr.forEach((pair) => {
28
- test(`- like '${pair[0]}'`, () => {
29
- const dateStrOut = (0, src_1.getValueForSqlMs)({ value: pair[0], fieldSchema: 'datetime' });
30
- expect(dateStrOut).toBe(`'${pair[1]}'`);
31
- });
32
- });
33
- });
34
- describe('should work with timezone properly', () => {
35
- describe('should parse date properly', () => {
36
- const testArr = [
37
- ['2000-01-22T11:59:59.123Z', '2000-01-22T14:59:59.123'],
38
- ['2000-01-22T11:59:59.123+0300', '2000-01-22T11:59:59.123'],
39
- ['Thu Aug 08 2019 05:16:14 GMT+0300 (GMT+03:00)', '2019-08-08T05:16:14.000'],
40
- ];
41
- testArr.forEach((pair) => {
42
- test(`- like '${pair[0]}'`, () => {
43
- const dateStrOut = (0, src_1.getValueForSqlMs)({ value: pair[0], fieldSchema: 'datetime' });
44
- expect(dateStrOut).toBe(`'${pair[1]}'`);
45
- });
46
- });
47
- });
48
- });
49
- });
50
- //# sourceMappingURL=02_getValueForSqlMs.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"02_getValueForSqlMs.spec.js","sourceRoot":"","sources":["../../../__tests__/02_getValueForSqlMs.spec.ts"],"names":[],"mappings":";AAAA,4BAA4B;AAC5B,+BAA+B;;AAE/B,4BAA4B;AAC5B,4BAA4B;AAC5B,4BAA4B;AAE5B,gCAA0C;AAE1C,QAAQ,CAAC,6CAA6C,EAAE,GAAG,EAAE;IAC3D,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;QAC1C,MAAM,OAAO,GAAG;YACd,CAAC,yBAAyB,EAAE,yBAAyB,CAAC;YACtD,CAAC,wBAAwB,EAAE,yBAAyB,CAAC;YACrD,CAAC,qBAAqB,EAAE,yBAAyB,CAAC;YAClD,CAAC,kBAAkB,EAAE,yBAAyB,CAAC;YAC/C,CAAC,yBAAyB,EAAE,yBAAyB,CAAC;YACtD,CAAC,wBAAwB,EAAE,yBAAyB,CAAC;YACrD,CAAC,uBAAuB,EAAE,yBAAyB,CAAC;YACpD,CAAC,qBAAqB,EAAE,yBAAyB,CAAC;YAClD,CAAC,kBAAkB,EAAE,yBAAyB,CAAC;YAC/C,CAAC,iBAAiB,EAAE,yBAAyB,CAAC;YAC9C,CAAC,gBAAgB,EAAE,yBAAyB,CAAC;YAC7C,CAAC,gBAAgB,EAAE,yBAAyB,CAAC;YAC7C,CAAC,qBAAqB,EAAE,yBAAyB,CAAC;YAClD,CAAC,qBAAqB,EAAE,yBAAyB,CAAC;SACnD,CAAC;QACF,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACvB,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE;gBAC/B,MAAM,UAAU,GAAG,IAAA,sBAAgB,EAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC;gBACjF,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAC1C,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAClD,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;YAC1C,MAAM,OAAO,GAAG;gBACd,CAAC,0BAA0B,EAAE,yBAAyB,CAAC;gBACvD,CAAC,8BAA8B,EAAE,yBAAyB,CAAC;gBAC3D,CAAC,+CAA+C,EAAE,yBAAyB,CAAC;aAC7E,CAAC;YACF,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;gBACvB,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE;oBAC/B,MAAM,UAAU,GAAG,IAAA,sBAAgB,EAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC;oBACjF,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC1C,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}