@restforgejs/platform 4.1.1 → 4.3.1

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 (340) hide show
  1. package/SECURITY.md +83 -4
  2. package/bin/sdf-tools.exe +0 -0
  3. package/build-info.json +2 -2
  4. package/cli/consumer-deploy.js +1 -1
  5. package/cli/consumer.js +1 -1
  6. package/generators/cli/dashboard/create.js +4 -1
  7. package/generators/cli/endpoint/create.js +43 -4
  8. package/generators/cli/key/generate.js +2 -1
  9. package/generators/cli/key/revoke.js +2 -1
  10. package/generators/cli/payload/diff.js +3 -2
  11. package/generators/cli/payload/generate.js +3 -2
  12. package/generators/cli/payload/sync.js +3 -2
  13. package/generators/cli/payload/validate.js +3 -2
  14. package/generators/cli/processor/create.js +14 -3
  15. package/generators/cli/project/delete.js +2 -1
  16. package/generators/cli/query/validate.js +3 -2
  17. package/generators/cli/schema/apply.js +526 -0
  18. package/generators/cli/schema/describe.js +3 -2
  19. package/generators/cli/schema/diff.js +322 -0
  20. package/generators/cli/schema/generate-ddl.js +7 -10
  21. package/generators/cli/schema/init.js +95 -172
  22. package/generators/cli/schema/introspect.js +3 -2
  23. package/generators/cli/schema/list.js +3 -2
  24. package/generators/cli/schema/migrate.js +13 -18
  25. package/generators/cli/schema/models.js +8 -12
  26. package/generators/cli/schema/template.js +222 -0
  27. package/generators/cli/schema/validate.js +8 -12
  28. package/generators/cli-entry.js +17 -2
  29. package/generators/lib/dbschema-kit/apply-engine.js +582 -0
  30. package/generators/lib/dbschema-kit/diff-engine.js +703 -0
  31. package/generators/lib/dbschema-kit/diff-reporter.js +272 -0
  32. package/generators/lib/dbschema-kit/emitters/alter-table.js +275 -0
  33. package/generators/lib/migration/audit-table-runner.js +213 -215
  34. package/generators/lib/payload/endpoint-schema-validator.js +171 -0
  35. package/generators/lib/payload/payload-runner.js +137 -220
  36. package/generators/lib/payload/schema-diff.js +277 -0
  37. package/generators/lib/templates/dashboard-catalog.js +1 -437
  38. package/generators/lib/templates/db-connection-env.js +1 -212
  39. package/generators/lib/templates/dbschema-catalog.js +1 -489
  40. package/generators/lib/templates/field-validation-catalog.js +1 -531
  41. package/generators/lib/templates/mysql-template.js +1 -3863
  42. package/generators/lib/templates/oracle-template.js +1 -3915
  43. package/generators/lib/templates/postgres-template.js +1 -5838
  44. package/generators/lib/templates/query-declarative-catalog.js +1 -199
  45. package/generators/lib/templates/sqlite-template.js +1 -3440
  46. package/generators/lib/utils/audit-columns.js +181 -0
  47. package/generators/lib/utils/cli-output.js +17 -0
  48. package/generators/lib/utils/database-introspector.js +16 -13
  49. package/generators/lib/utils/env-manager.js +6 -0
  50. package/generators/lib/utils/path-validator.js +71 -0
  51. package/generators/lib/validators/payload-validator.js +1 -2
  52. package/integrity-manifest.json +28 -10
  53. package/package.json +11 -3
  54. package/scripts/verify-integrity.js +1 -1
  55. package/server.js +1 -1
  56. package/src/components/handlers/adjust_handler.js +1 -1
  57. package/src/components/handlers/audit_handler.js +1 -1
  58. package/src/components/handlers/delete_handler.js +1 -1
  59. package/src/components/handlers/export_handler.js +1 -1
  60. package/src/components/handlers/import_handler.js +1 -1
  61. package/src/components/handlers/insert_handler.js +1 -1
  62. package/src/components/handlers/update_handler.js +1 -1
  63. package/src/components/handlers/upload_handler.js +1 -1
  64. package/src/components/handlers/workflow_handler.js +1 -1
  65. package/src/components/integrations/webhook.js +1 -1
  66. package/src/consumers/baseConsumer.js +1 -1
  67. package/src/consumers/declarativeMapper.js +1 -1
  68. package/src/consumers/handlers/apiHandler.js +1 -1
  69. package/src/consumers/handlers/consoleHandler.js +1 -1
  70. package/src/consumers/handlers/databaseHandler.js +1 -1
  71. package/src/consumers/handlers/index.js +1 -1
  72. package/src/consumers/handlers/kafkaHandler.js +1 -1
  73. package/src/consumers/index.js +1 -1
  74. package/src/consumers/messageTransformer.js +1 -1
  75. package/src/consumers/validator.js +1 -1
  76. package/src/core/db/dialect/base-dialect.js +1 -1
  77. package/src/core/db/dialect/index.js +1 -1
  78. package/src/core/db/dialect/mysql-dialect.js +1 -1
  79. package/src/core/db/dialect/oracle-dialect.js +1 -1
  80. package/src/core/db/dialect/postgres-dialect.js +1 -1
  81. package/src/core/db/dialect/sqlite-dialect.js +1 -1
  82. package/src/core/db/flatten-helper.js +1 -1
  83. package/src/core/db/query-builder-error.js +1 -1
  84. package/src/core/db/query-builder.js +1 -1
  85. package/src/core/db/relation-helper.js +1 -1
  86. package/src/core/handlers/delete_handler.js +1 -1
  87. package/src/core/handlers/insert_handler.js +1 -1
  88. package/src/core/handlers/update_handler.js +1 -1
  89. package/src/core/models/base-model.js +1 -1
  90. package/src/core/utils/cache-manager.js +1 -1
  91. package/src/core/utils/component-engine.js +1 -1
  92. package/src/core/utils/context-builder.js +1 -1
  93. package/src/core/utils/datetime-formatter.js +1 -1
  94. package/src/core/utils/datetime-parser.js +1 -1
  95. package/src/core/utils/db.js +1 -1
  96. package/src/core/utils/logger.js +1 -1
  97. package/src/core/utils/payload-loader.js +1 -1
  98. package/src/core/utils/security-checks.js +1 -1
  99. package/src/middleware/body-options.js +1 -1
  100. package/src/middleware/cors.js +1 -1
  101. package/src/middleware/idempotency.js +1 -1
  102. package/src/middleware/rate-limiter.js +1 -1
  103. package/src/middleware/request-logger.js +1 -1
  104. package/src/middleware/security-headers.js +1 -1
  105. package/src/models/base-model-mysql.js +1 -1
  106. package/src/models/base-model-oracle.js +1 -1
  107. package/src/models/base-model-sqlite.js +1 -1
  108. package/src/models/base-model.js +1 -1
  109. package/src/pro/caching/redis-client.js +1 -1
  110. package/src/pro/caching/redis-helper.js +1 -1
  111. package/src/pro/consumers/baseConsumer.js +1 -1
  112. package/src/pro/consumers/declarativeMapper.js +1 -1
  113. package/src/pro/consumers/handlers/apiHandler.js +1 -1
  114. package/src/pro/consumers/handlers/consoleHandler.js +1 -1
  115. package/src/pro/consumers/handlers/databaseHandler.js +1 -1
  116. package/src/pro/consumers/handlers/index.js +1 -1
  117. package/src/pro/consumers/handlers/kafkaHandler.js +1 -1
  118. package/src/pro/consumers/index.js +1 -1
  119. package/src/pro/consumers/messageTransformer.js +1 -1
  120. package/src/pro/consumers/validator.js +1 -1
  121. package/src/pro/database/base-model-mysql.js +1 -1
  122. package/src/pro/database/base-model-oracle.js +1 -1
  123. package/src/pro/database/base-model-sqlite.js +1 -1
  124. package/src/pro/database/db-mysql.js +1 -1
  125. package/src/pro/database/db-oracle.js +1 -1
  126. package/src/pro/database/db-sqlite.js +1 -1
  127. package/src/pro/excel/excel-generator.js +1 -1
  128. package/src/pro/excel/excel-parser.js +1 -1
  129. package/src/pro/excel/export-service.js +1 -1
  130. package/src/pro/excel/export_handler.js +1 -1
  131. package/src/pro/excel/import-service.js +1 -1
  132. package/src/pro/excel/import-validator.js +1 -1
  133. package/src/pro/excel/import_handler.js +1 -1
  134. package/src/pro/excel/upsert-builder.js +1 -1
  135. package/src/pro/idgen/idgen-routes.js +1 -1
  136. package/src/pro/integrations/lookup-resolver.js +1 -1
  137. package/src/pro/integrations/upload-handler-v2.js +1 -1
  138. package/src/pro/integrations/upload-handler.js +1 -1
  139. package/src/pro/integrations/webhook.js +1 -1
  140. package/src/pro/locking/lock-routes.js +1 -1
  141. package/src/pro/locking/resource-lock-manager.js +1 -1
  142. package/src/pro/messaging/kafkaConsumerService.js +1 -1
  143. package/src/pro/messaging/kafkaService.js +1 -1
  144. package/src/pro/messaging/messagehubService.js +1 -1
  145. package/src/pro/messaging/rabbitmqService.js +1 -1
  146. package/src/pro/scheduler/job-manager.js +1 -1
  147. package/src/pro/scheduler/job-routes.js +1 -1
  148. package/src/pro/scheduler/job-validator.js +1 -1
  149. package/src/pro/storage/base-storage-provider.js +1 -1
  150. package/src/pro/storage/file-metadata-helper.js +1 -1
  151. package/src/pro/storage/index.js +1 -1
  152. package/src/pro/storage/local-storage-provider.js +1 -1
  153. package/src/pro/storage/s3-storage-provider.js +1 -1
  154. package/src/pro/storage/upload-cleanup-job.js +1 -1
  155. package/src/pro/storage/upload-cleanup-scheduler.js +1 -1
  156. package/src/pro/storage/upload-pending-tracker.js +1 -1
  157. package/src/pro/websocket/broadcast-helper.js +1 -1
  158. package/src/pro/websocket/index.js +1 -1
  159. package/src/pro/websocket/livesync-server.js +1 -1
  160. package/src/pro/websocket/ws-broadcaster.js +1 -1
  161. package/src/services/export-service.js +1 -1
  162. package/src/services/import-service.js +1 -1
  163. package/src/services/kafkaConsumerService.js +1 -1
  164. package/src/services/kafkaService.js +1 -1
  165. package/src/services/messagehubService.js +1 -1
  166. package/src/services/rabbitmqService.js +1 -1
  167. package/src/utils/cache-invalidation-registry.js +1 -1
  168. package/src/utils/cache-manager.js +1 -1
  169. package/src/utils/component-engine.js +1 -1
  170. package/src/utils/config-extractor.js +1 -1
  171. package/src/utils/consumerLogger.js +1 -1
  172. package/src/utils/context-builder.js +1 -1
  173. package/src/utils/dashboard-helpers.js +1 -1
  174. package/src/utils/dateHelper.js +1 -1
  175. package/src/utils/datetime-formatter.js +1 -1
  176. package/src/utils/datetime-parser.js +1 -1
  177. package/src/utils/db-bootstrap.js +1 -1
  178. package/src/utils/db-mysql.js +1 -1
  179. package/src/utils/db-oracle.js +1 -1
  180. package/src/utils/db-sqlite.js +1 -1
  181. package/src/utils/db.js +1 -1
  182. package/src/utils/demo-generator.js +1 -1
  183. package/src/utils/excel-generator.js +1 -1
  184. package/src/utils/excel-parser.js +1 -1
  185. package/src/utils/file-watcher.js +1 -1
  186. package/src/utils/id-generator.js +1 -1
  187. package/src/utils/idempotency-manager.js +1 -1
  188. package/src/utils/import-validator.js +1 -1
  189. package/src/utils/license-client.js +1 -1
  190. package/src/utils/lock-manager.js +1 -1
  191. package/src/utils/logger.js +1 -1
  192. package/src/utils/lookup-resolver.js +1 -1
  193. package/src/utils/payload-loader.js +1 -1
  194. package/src/utils/processor-response.js +1 -1
  195. package/src/utils/rabbitmq.js +1 -1
  196. package/src/utils/redis-client.js +1 -1
  197. package/src/utils/redis-helper.js +1 -1
  198. package/src/utils/request-scope.js +1 -1
  199. package/src/utils/security-checks.js +1 -1
  200. package/src/utils/service-resolver.js +1 -1
  201. package/src/utils/shutdown-coordinator.js +1 -1
  202. package/src/utils/trusted-keys.js +1 -1
  203. package/src/utils/upload-handler.js +1 -1
  204. package/src/utils/upsert-builder.js +1 -1
  205. package/src/utils/workflow-hook-executor.js +1 -1
  206. package/generators/metadata/global.json +0 -58
  207. package/generators/metadata/test-mysql-workbench.json +0 -118
  208. package/generators/metadata/test-mysql.json +0 -56
  209. package/generators/metadata/test-oracle-workbench.json +0 -118
  210. package/generators/metadata/test-oracle.json +0 -56
  211. package/generators/metadata/test-pg-workbench.json +0 -118
  212. package/generators/metadata/test-pg.json +0 -56
  213. package/generators/scripts/obfuscate-source.js +0 -356
  214. package/generators/scripts/validate-catalog.js +0 -430
  215. package/generators/scripts/validate-dbschema-catalog.js +0 -708
  216. package/generators/tests/baseline/mysql/mini_inventory_item/src/models/mini-inventory/item.js +0 -944
  217. package/generators/tests/baseline/mysql/mini_inventory_item/src/modules/mini-inventory/item.js +0 -740
  218. package/generators/tests/baseline/mysql/mini_inventory_item/src/modules/mini-inventory.js +0 -336
  219. package/generators/tests/baseline/oracle/mini_inventory_item/src/models/mini-inventory/item.js +0 -1002
  220. package/generators/tests/baseline/oracle/mini_inventory_item/src/modules/mini-inventory/item.js +0 -740
  221. package/generators/tests/baseline/oracle/mini_inventory_item/src/modules/mini-inventory.js +0 -336
  222. package/generators/tests/baseline/postgres/mini_inventory_item/src/models/mini-inventory/item.js +0 -1333
  223. package/generators/tests/baseline/postgres/mini_inventory_item/src/modules/mini-inventory/item.js +0 -1173
  224. package/generators/tests/baseline/postgres/mini_inventory_item/src/modules/mini-inventory.js +0 -496
  225. package/generators/tests/fixtures/payloads/custom-sensitive.json +0 -27
  226. package/generators/tests/fixtures/payloads/dynamic-search-optout.json +0 -23
  227. package/generators/tests/fixtures/payloads/login-with-password.json +0 -22
  228. package/generators/tests/fixtures/payloads/order-process.json +0 -52
  229. package/generators/tests/fixtures/payloads/with-inline-sql.json +0 -26
  230. package/generators/tests/integration-tahap4b/README.md +0 -145
  231. package/generators/tests/integration-tahap4b/run-concurrent.js +0 -77
  232. package/generators/tests/integration-tahap4b/seed.sql +0 -53
  233. package/generators/tests/integration-tahap4b/verify.sql +0 -110
  234. package/generators/tests/unit/cli/create-dashboard.test.js +0 -505
  235. package/generators/tests/unit/cli/create-processor.test.js +0 -319
  236. package/generators/tests/unit/cli/dispatch-dashboard.test.js +0 -149
  237. package/generators/tests/unit/lib/dashboard-generator.test.js +0 -895
  238. package/generators/tests/unit/lib/dashboard-validator.test.js +0 -354
  239. package/generators/tests/unit/lib/dbschema-kit/apply-executor.test.js +0 -437
  240. package/generators/tests/unit/lib/dbschema-kit/cli/dbschema-introspect.test.js +0 -393
  241. package/generators/tests/unit/lib/dbschema-kit/cli/dbschema-kit-generate-ddl.test.js +0 -104
  242. package/generators/tests/unit/lib/dbschema-kit/cli/dbschema-kit-init.test.js +0 -119
  243. package/generators/tests/unit/lib/dbschema-kit/cli/dbschema-kit-list.test.js +0 -48
  244. package/generators/tests/unit/lib/dbschema-kit/cli/dbschema-kit-migrate.test.js +0 -175
  245. package/generators/tests/unit/lib/dbschema-kit/cli/dbschema-kit-validate.test.js +0 -102
  246. package/generators/tests/unit/lib/dbschema-kit/cli/dbschema-models.test.js +0 -43
  247. package/generators/tests/unit/lib/dbschema-kit/cli/fixtures/introspect-stubs/all-schemas-listing.js +0 -84
  248. package/generators/tests/unit/lib/dbschema-kit/cli/fixtures/introspect-stubs/connection-error.js +0 -13
  249. package/generators/tests/unit/lib/dbschema-kit/cli/fixtures/introspect-stubs/empty.js +0 -12
  250. package/generators/tests/unit/lib/dbschema-kit/cli/fixtures/introspect-stubs/multi-schema.js +0 -124
  251. package/generators/tests/unit/lib/dbschema-kit/cli/fixtures/introspect-stubs/single-schema-inventory.js +0 -64
  252. package/generators/tests/unit/lib/dbschema-kit/cli/fixtures/introspect-stubs/two-tables.js +0 -66
  253. package/generators/tests/unit/lib/dbschema-kit/cli/fixtures/migrate-stubs/connection-error.js +0 -9
  254. package/generators/tests/unit/lib/dbschema-kit/cli/fixtures/migrate-stubs/partial.js +0 -29
  255. package/generators/tests/unit/lib/dbschema-kit/cli/fixtures/migrate-stubs/rollback.js +0 -26
  256. package/generators/tests/unit/lib/dbschema-kit/cli/fixtures/migrate-stubs/success.js +0 -43
  257. package/generators/tests/unit/lib/dbschema-kit/cli/fixtures/multi-schema/audit/events.js +0 -18
  258. package/generators/tests/unit/lib/dbschema-kit/cli/fixtures/multi-schema/inventory/products.js +0 -9
  259. package/generators/tests/unit/lib/dbschema-kit/cli/fixtures/multi-schema/users.js +0 -8
  260. package/generators/tests/unit/lib/dbschema-kit/connection.test.js +0 -112
  261. package/generators/tests/unit/lib/dbschema-kit/ddl-generator.test.js +0 -205
  262. package/generators/tests/unit/lib/dbschema-kit/define-model.test.js +0 -56
  263. package/generators/tests/unit/lib/dbschema-kit/dialect/index.test.js +0 -46
  264. package/generators/tests/unit/lib/dbschema-kit/dialect/mysql.test.js +0 -126
  265. package/generators/tests/unit/lib/dbschema-kit/dialect/oracle.test.js +0 -126
  266. package/generators/tests/unit/lib/dbschema-kit/dialect/postgres.test.js +0 -131
  267. package/generators/tests/unit/lib/dbschema-kit/dialect/sqlite.test.js +0 -126
  268. package/generators/tests/unit/lib/dbschema-kit/driver-loader.test.js +0 -93
  269. package/generators/tests/unit/lib/dbschema-kit/emitters/create-index.test.js +0 -173
  270. package/generators/tests/unit/lib/dbschema-kit/emitters/create-table.test.js +0 -376
  271. package/generators/tests/unit/lib/dbschema-kit/emitters/drop-table.test.js +0 -78
  272. package/generators/tests/unit/lib/dbschema-kit/fixtures/connection/invalid-dialect.env +0 -6
  273. package/generators/tests/unit/lib/dbschema-kit/fixtures/connection/missing-dialect.env +0 -5
  274. package/generators/tests/unit/lib/dbschema-kit/fixtures/connection/missing-host.env +0 -5
  275. package/generators/tests/unit/lib/dbschema-kit/fixtures/connection/oracle-valid.env +0 -6
  276. package/generators/tests/unit/lib/dbschema-kit/fixtures/connection/postgres-valid.env +0 -7
  277. package/generators/tests/unit/lib/dbschema-kit/fixtures/connection/sqlite-valid.env +0 -2
  278. package/generators/tests/unit/lib/dbschema-kit/fixtures/integration/mini-inventory/category.js +0 -11
  279. package/generators/tests/unit/lib/dbschema-kit/fixtures/integration/mini-inventory/item_product.js +0 -11
  280. package/generators/tests/unit/lib/dbschema-kit/fixtures/integration/mini-inventory/stock_inbound.js +0 -24
  281. package/generators/tests/unit/lib/dbschema-kit/fixtures/integration/mini-inventory/stock_inbound_item.js +0 -28
  282. package/generators/tests/unit/lib/dbschema-kit/fixtures/integration/mini-inventory/supplier.js +0 -9
  283. package/generators/tests/unit/lib/dbschema-kit/fixtures/integration/mini-inventory/warehouse.js +0 -9
  284. package/generators/tests/unit/lib/dbschema-kit/fixtures/integration/mini-inventory-invalid/orphan.js +0 -17
  285. package/generators/tests/unit/lib/dbschema-kit/fixtures/integration/mini-inventory-multifolder/master/category.js +0 -11
  286. package/generators/tests/unit/lib/dbschema-kit/fixtures/integration/mini-inventory-multifolder/master/item_product.js +0 -11
  287. package/generators/tests/unit/lib/dbschema-kit/fixtures/integration/mini-inventory-multifolder/master/supplier.js +0 -9
  288. package/generators/tests/unit/lib/dbschema-kit/fixtures/integration/mini-inventory-multifolder/master/warehouse.js +0 -9
  289. package/generators/tests/unit/lib/dbschema-kit/fixtures/integration/mini-inventory-multifolder/transactions/stock_inbound.js +0 -24
  290. package/generators/tests/unit/lib/dbschema-kit/fixtures/integration/mini-inventory-multifolder/transactions/stock_inbound_item.js +0 -28
  291. package/generators/tests/unit/lib/dbschema-kit/fixtures/integration/multi-schema/audit/events.js +0 -18
  292. package/generators/tests/unit/lib/dbschema-kit/fixtures/integration/multi-schema/inventory/products.js +0 -9
  293. package/generators/tests/unit/lib/dbschema-kit/fixtures/integration/multi-schema/public/users.js +0 -9
  294. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/duplicate-subfolder/extra/category.js +0 -8
  295. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/duplicate-subfolder/master/category.js +0 -8
  296. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/duplicate-tablename/bar.js +0 -8
  297. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/duplicate-tablename/foo.js +0 -8
  298. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/empty-folder/README.md +0 -1
  299. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/invalid-export/plain.js +0 -3
  300. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/invalid-schema/bad.js +0 -6
  301. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/legacy-pattern/legacy.js +0 -12
  302. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/multi-schema-distinct/audit/products.js +0 -9
  303. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/multi-schema-distinct/inventory/products.js +0 -9
  304. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/multi-schema-duplicate/a/products.js +0 -8
  305. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/multi-schema-duplicate/b/products.js +0 -8
  306. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/nested-deep/a/b/c/deep_table.js +0 -8
  307. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/recursive-multi-folder/.hidden/ignored.js +0 -7
  308. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/recursive-multi-folder/master/category.js +0 -8
  309. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/recursive-multi-folder/master/supplier.js +0 -8
  310. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/recursive-multi-folder/transactions/stock_inbound.js +0 -8
  311. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/recursive-multi-folder/transactions/stock_inbound_item.js +0 -8
  312. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/valid-multiple/category.js +0 -8
  313. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/valid-multiple/item_product.js +0 -9
  314. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/valid-single/category.js +0 -8
  315. package/generators/tests/unit/lib/dbschema-kit/integration.test.js +0 -217
  316. package/generators/tests/unit/lib/dbschema-kit/introspect-mapper.test.js +0 -403
  317. package/generators/tests/unit/lib/dbschema-kit/ir-builder.test.js +0 -390
  318. package/generators/tests/unit/lib/dbschema-kit/loader.test.js +0 -128
  319. package/generators/tests/unit/lib/dbschema-kit/naming.test.js +0 -170
  320. package/generators/tests/unit/lib/dbschema-kit/parser/shorthand-parser.test.js +0 -237
  321. package/generators/tests/unit/lib/dbschema-kit/schema-printer.test.js +0 -251
  322. package/generators/tests/unit/lib/dbschema-kit/statement-modifier.test.js +0 -105
  323. package/generators/tests/unit/lib/dbschema-kit/statement-splitter.test.js +0 -165
  324. package/generators/tests/unit/lib/dbschema-kit/topological-sort.test.js +0 -135
  325. package/generators/tests/unit/lib/dbschema-kit/validator/check-compatibility-validator.test.js +0 -373
  326. package/generators/tests/unit/lib/dbschema-kit/validator/circular-relation-validator.test.js +0 -454
  327. package/generators/tests/unit/lib/dbschema-kit/validator/cross-model-validator.test.js +0 -512
  328. package/generators/tests/unit/lib/dbschema-kit/validator/enhanced-validate-integration.test.js +0 -390
  329. package/generators/tests/unit/lib/dbschema-kit/validator/naming-convention-validator.test.js +0 -306
  330. package/generators/tests/unit/lib/dbschema-kit/validator/schema-validator.test.js +0 -443
  331. package/generators/tests/unit/lib/dbschema-kit/validator/type-compatibility-validator.test.js +0 -440
  332. package/generators/tests/unit/lib/dbschema-kit/validator/validator-reporter.test.js +0 -172
  333. package/generators/tests/unit/lib/metadata-manager-dashboard.test.js +0 -256
  334. package/generators/tests/unit/lib/payload-validator-fieldpolicy.test.js +0 -240
  335. package/generators/tests/unit/lib/processor-validation-generator.test.js +0 -300
  336. package/generators/tests/unit/lib/sensitive-field-masker.test.js +0 -170
  337. package/generators/tests/unit/lib/sql-table-extractor.test.js +0 -119
  338. package/scripts/generate-integrity-manifest.js +0 -124
  339. package/scripts/snapshot-cli-contracts.js +0 -194
  340. package/scripts/verify-publish.js +0 -56
@@ -1,437 +0,0 @@
1
- 'use strict';
2
-
3
- const test = require('node:test');
4
- const assert = require('node:assert');
5
-
6
- const { applyStatements } = require('../../../../lib/dbschema-kit/apply-executor');
7
-
8
- function makeMockPgDriver({ failOnQuery } = {}) {
9
- const calls = [];
10
- let connected = false;
11
- let ended = false;
12
-
13
- class MockClient {
14
- constructor(config) {
15
- this.config = config;
16
- }
17
- async connect() {
18
- connected = true;
19
- }
20
- async query(sql) {
21
- calls.push(sql);
22
- if (failOnQuery && failOnQuery.match.test(sql)) {
23
- throw new Error(failOnQuery.message);
24
- }
25
- return { rows: [] };
26
- }
27
- async end() {
28
- ended = true;
29
- }
30
- }
31
-
32
- return {
33
- driver: { Client: MockClient },
34
- state: () => ({ calls, connected, ended })
35
- };
36
- }
37
-
38
- function makeMockMysqlDriver({ failOnQuery } = {}) {
39
- const calls = [];
40
- let ended = false;
41
-
42
- return {
43
- driver: {
44
- createConnection: async (config) => ({
45
- config,
46
- query: async (sql) => {
47
- calls.push(sql);
48
- if (failOnQuery && failOnQuery.match.test(sql)) {
49
- throw new Error(failOnQuery.message);
50
- }
51
- return [[], []];
52
- },
53
- end: async () => {
54
- ended = true;
55
- }
56
- })
57
- },
58
- state: () => ({ calls, ended: () => ended })
59
- };
60
- }
61
-
62
- function makeMockOracleDriver({ failOnQuery } = {}) {
63
- const calls = [];
64
- let closed = false;
65
-
66
- return {
67
- driver: {
68
- getConnection: async (config) => ({
69
- config,
70
- execute: async (sql) => {
71
- calls.push(sql);
72
- if (failOnQuery && failOnQuery.match.test(sql)) {
73
- throw new Error(failOnQuery.message);
74
- }
75
- return { rowsAffected: 1 };
76
- },
77
- close: async () => {
78
- closed = true;
79
- }
80
- })
81
- },
82
- state: () => ({ calls, closed: () => closed })
83
- };
84
- }
85
-
86
- function makeMockSqliteDriver({ failOnQuery } = {}) {
87
- const calls = [];
88
- let closed = false;
89
-
90
- function MockDb(file) {
91
- this.file = file;
92
- }
93
- MockDb.prototype.exec = function exec(sql) {
94
- calls.push(sql);
95
- if (failOnQuery && failOnQuery.match.test(sql)) {
96
- throw new Error(failOnQuery.message);
97
- }
98
- };
99
- MockDb.prototype.close = function close() {
100
- closed = true;
101
- };
102
-
103
- return {
104
- driver: MockDb,
105
- state: () => ({ calls, closed: () => closed })
106
- };
107
- }
108
-
109
- const PG_CONFIG = {
110
- dialect: 'postgres',
111
- host: 'localhost',
112
- port: 5432,
113
- database: 'test',
114
- user: 'postgres',
115
- password: 'secret'
116
- };
117
-
118
- const MYSQL_CONFIG = {
119
- dialect: 'mysql',
120
- host: 'localhost',
121
- port: 3306,
122
- database: 'test',
123
- user: 'root',
124
- password: 'secret'
125
- };
126
-
127
- const ORACLE_CONFIG = {
128
- dialect: 'oracle',
129
- host: 'localhost',
130
- port: 1521,
131
- serviceName: 'XEPDB1',
132
- user: 'system',
133
- password: 'secret'
134
- };
135
-
136
- const SQLITE_CONFIG = {
137
- dialect: 'sqlite',
138
- file: ':memory:'
139
- };
140
-
141
- test('apply-executor: dryRun=true return summary tanpa connect', async () => {
142
- const mock = makeMockPgDriver();
143
- const result = await applyStatements({
144
- statements: ['CREATE TABLE a()', 'CREATE TABLE b()'],
145
- dialect: 'postgres',
146
- config: PG_CONFIG,
147
- dryRun: true,
148
- _driver: mock.driver
149
- });
150
-
151
- assert.strictEqual(result.status, 'DRY_RUN');
152
- assert.strictEqual(result.applied, 2);
153
- assert.strictEqual(result.failed, 0);
154
- assert.strictEqual(typeof result.durationMs, 'number');
155
- assert.strictEqual(mock.state().connected, false, 'driver tidak boleh dipakai saat dryRun');
156
- });
157
-
158
- test('apply-executor: PG happy path BEGIN → execute → COMMIT, status SUCCESS', async () => {
159
- const mock = makeMockPgDriver();
160
- const result = await applyStatements({
161
- statements: ['CREATE TABLE a()', 'CREATE TABLE b()'],
162
- dialect: 'postgres',
163
- config: PG_CONFIG,
164
- _driver: mock.driver
165
- });
166
-
167
- assert.strictEqual(result.status, 'SUCCESS');
168
- assert.strictEqual(result.applied, 2);
169
- assert.strictEqual(result.failed, 0);
170
-
171
- const state = mock.state();
172
- assert.strictEqual(state.connected, true);
173
- assert.strictEqual(state.ended, true, 'connection harus ditutup di finally');
174
- assert.deepStrictEqual(state.calls, [
175
- 'BEGIN',
176
- 'CREATE TABLE a()',
177
- 'CREATE TABLE b()',
178
- 'COMMIT'
179
- ]);
180
- });
181
-
182
- test('apply-executor: PG error mid-way → ROLLBACK, throw error, status ROLLBACK', async () => {
183
- const mock = makeMockPgDriver({
184
- failOnQuery: { match: /CREATE TABLE b/, message: 'duplicate table b' }
185
- });
186
-
187
- let caught;
188
- try {
189
- await applyStatements({
190
- statements: ['CREATE TABLE a()', 'CREATE TABLE b()', 'CREATE TABLE c()'],
191
- dialect: 'postgres',
192
- config: PG_CONFIG,
193
- _driver: mock.driver
194
- });
195
- } catch (err) {
196
- caught = err;
197
- }
198
-
199
- assert.ok(caught, 'harus throw error');
200
- assert.strictEqual(caught.status, 'ROLLBACK');
201
- assert.strictEqual(caught.applied, 1);
202
- assert.strictEqual(caught.failed, 1);
203
- assert.strictEqual(caught.failedIndex, 2);
204
- assert.match(caught.message, /duplicate table b/);
205
-
206
- const state = mock.state();
207
- assert.ok(state.calls.includes('ROLLBACK'), 'ROLLBACK harus dipanggil');
208
- assert.ok(!state.calls.includes('COMMIT'), 'COMMIT tidak boleh dipanggil');
209
- assert.ok(!state.calls.includes('CREATE TABLE c()'), 'statement berikut harus skip');
210
- assert.strictEqual(state.ended, true, 'connection tetap ditutup walau error');
211
- });
212
-
213
- test('apply-executor: SQLite happy path transaction wrap, status SUCCESS', async () => {
214
- const mock = makeMockSqliteDriver();
215
- const result = await applyStatements({
216
- statements: ['CREATE TABLE a(id INT)', 'CREATE TABLE b(id INT)'],
217
- dialect: 'sqlite',
218
- config: SQLITE_CONFIG,
219
- _driver: mock.driver
220
- });
221
-
222
- assert.strictEqual(result.status, 'SUCCESS');
223
- assert.strictEqual(result.applied, 2);
224
-
225
- const state = mock.state();
226
- assert.deepStrictEqual(state.calls, [
227
- 'BEGIN',
228
- 'CREATE TABLE a(id INT)',
229
- 'CREATE TABLE b(id INT)',
230
- 'COMMIT'
231
- ]);
232
- assert.strictEqual(state.closed(), true);
233
- });
234
-
235
- test('apply-executor: SQLite error mid-way → ROLLBACK, throw, status ROLLBACK', async () => {
236
- const mock = makeMockSqliteDriver({
237
- failOnQuery: { match: /CREATE TABLE b/, message: 'sqlite syntax error' }
238
- });
239
-
240
- let caught;
241
- try {
242
- await applyStatements({
243
- statements: ['CREATE TABLE a(id INT)', 'CREATE TABLE b(id INT)'],
244
- dialect: 'sqlite',
245
- config: SQLITE_CONFIG,
246
- _driver: mock.driver
247
- });
248
- } catch (err) {
249
- caught = err;
250
- }
251
-
252
- assert.ok(caught, 'harus throw');
253
- assert.strictEqual(caught.status, 'ROLLBACK');
254
- assert.strictEqual(caught.applied, 1);
255
- assert.ok(mock.state().calls.includes('ROLLBACK'));
256
- assert.strictEqual(mock.state().closed(), true);
257
- });
258
-
259
- test('apply-executor: MySQL happy path no transaction, sequential execute', async () => {
260
- const mock = makeMockMysqlDriver();
261
- const result = await applyStatements({
262
- statements: ['CREATE TABLE a(id INT)', 'CREATE TABLE b(id INT)'],
263
- dialect: 'mysql',
264
- config: MYSQL_CONFIG,
265
- _driver: mock.driver
266
- });
267
-
268
- assert.strictEqual(result.status, 'SUCCESS');
269
- assert.strictEqual(result.applied, 2);
270
-
271
- const state = mock.state();
272
- assert.deepStrictEqual(state.calls, ['CREATE TABLE a(id INT)', 'CREATE TABLE b(id INT)']);
273
- assert.ok(!state.calls.some((s) => /^BEGIN$|^COMMIT$/.test(s)),
274
- 'MySQL non-transactional: tidak ada BEGIN/COMMIT');
275
- assert.strictEqual(state.ended(), true);
276
- });
277
-
278
- test('apply-executor: MySQL error mid-way → stop, return PARTIAL dengan applied count', async () => {
279
- const mock = makeMockMysqlDriver({
280
- failOnQuery: { match: /CREATE TABLE b/, message: 'Table already exists' }
281
- });
282
-
283
- const result = await applyStatements({
284
- statements: ['CREATE TABLE a(id INT)', 'CREATE TABLE b(id INT)', 'CREATE TABLE c(id INT)'],
285
- dialect: 'mysql',
286
- config: MYSQL_CONFIG,
287
- _driver: mock.driver
288
- });
289
-
290
- assert.strictEqual(result.status, 'PARTIAL');
291
- assert.strictEqual(result.applied, 1);
292
- assert.strictEqual(result.failed, 1);
293
- assert.strictEqual(result.failedIndex, 2);
294
- assert.match(result.error.message, /Table already exists/);
295
-
296
- const state = mock.state();
297
- assert.ok(!state.calls.includes('CREATE TABLE c(id INT)'),
298
- 'statement setelah error tidak boleh dieksekusi');
299
- assert.strictEqual(state.ended(), true);
300
- });
301
-
302
- test('apply-executor: Oracle error mid-way → status PARTIAL (non-transactional)', async () => {
303
- const mock = makeMockOracleDriver({
304
- failOnQuery: { match: /CREATE TABLE b/, message: 'ORA-00955 name already used' }
305
- });
306
-
307
- const result = await applyStatements({
308
- statements: ['CREATE TABLE a(id INT)', 'CREATE TABLE b(id INT)'],
309
- dialect: 'oracle',
310
- config: ORACLE_CONFIG,
311
- _driver: mock.driver
312
- });
313
-
314
- assert.strictEqual(result.status, 'PARTIAL');
315
- assert.strictEqual(result.applied, 1);
316
- assert.strictEqual(mock.state().closed(), true);
317
- });
318
-
319
- test('apply-executor: onProgress callback dipanggil per statement (running → success)', async () => {
320
- const mock = makeMockPgDriver();
321
- const events = [];
322
-
323
- await applyStatements({
324
- statements: ['CREATE TABLE a()', 'CREATE TABLE b()'],
325
- dialect: 'postgres',
326
- config: PG_CONFIG,
327
- onProgress: (evt) => events.push({ ...evt, error: undefined }),
328
- _driver: mock.driver
329
- });
330
-
331
- // 2 statement × 2 event (running, success) = 4 event
332
- assert.strictEqual(events.length, 4);
333
- assert.deepStrictEqual(
334
- events.map((e) => `${e.index}:${e.status}`),
335
- ['1:running', '1:success', '2:running', '2:success']
336
- );
337
- assert.strictEqual(events[0].total, 2);
338
- assert.strictEqual(events[0].statement, 'CREATE TABLE a()');
339
- });
340
-
341
- test('apply-executor: onProgress menerima event status:error saat statement gagal', async () => {
342
- const mock = makeMockPgDriver({
343
- failOnQuery: { match: /CREATE TABLE bad/, message: 'syntax error' }
344
- });
345
- const events = [];
346
-
347
- try {
348
- await applyStatements({
349
- statements: ['CREATE TABLE bad()'],
350
- dialect: 'postgres',
351
- config: PG_CONFIG,
352
- onProgress: (evt) => events.push(evt),
353
- _driver: mock.driver
354
- });
355
- } catch (_err) {
356
- // expected
357
- }
358
-
359
- const errorEvent = events.find((e) => e.status === 'error');
360
- assert.ok(errorEvent, 'harus ada event status: error');
361
- assert.match(errorEvent.error.message, /syntax error/);
362
- });
363
-
364
- test('apply-executor: connection.close selalu dipanggil walau error sebelum loop', async () => {
365
- const mock = makeMockPgDriver({
366
- failOnQuery: { match: /^BEGIN$/, message: 'cannot start transaction' }
367
- });
368
-
369
- try {
370
- await applyStatements({
371
- statements: ['CREATE TABLE a()'],
372
- dialect: 'postgres',
373
- config: PG_CONFIG,
374
- _driver: mock.driver
375
- });
376
- } catch (_err) {
377
- // expected
378
- }
379
-
380
- assert.strictEqual(mock.state().ended, true, 'finally harus tetap close connection');
381
- });
382
-
383
- test('apply-executor: throw bila statements bukan array atau kosong', async () => {
384
- await assert.rejects(
385
- () => applyStatements({
386
- statements: [],
387
- dialect: 'postgres',
388
- config: PG_CONFIG
389
- }),
390
- /statements must be a non-empty array/
391
- );
392
- await assert.rejects(
393
- () => applyStatements({
394
- statements: 'CREATE TABLE a()',
395
- dialect: 'postgres',
396
- config: PG_CONFIG
397
- }),
398
- /statements must be a non-empty array/
399
- );
400
- });
401
-
402
- test('apply-executor: throw bila dialect invalid', async () => {
403
- await assert.rejects(
404
- () => applyStatements({
405
- statements: ['CREATE TABLE a()'],
406
- dialect: 'mssql',
407
- config: PG_CONFIG
408
- }),
409
- /invalid dialect 'mssql'/
410
- );
411
- });
412
-
413
- test('apply-executor: throw bila config tidak ada', async () => {
414
- await assert.rejects(
415
- () => applyStatements({
416
- statements: ['CREATE TABLE a()'],
417
- dialect: 'postgres'
418
- }),
419
- /config object is required/
420
- );
421
- });
422
-
423
- test('apply-executor: progress callback yang throw tidak menggagalkan migration', async () => {
424
- const mock = makeMockPgDriver();
425
- const result = await applyStatements({
426
- statements: ['CREATE TABLE a()'],
427
- dialect: 'postgres',
428
- config: PG_CONFIG,
429
- onProgress: () => {
430
- throw new Error('reporter bug');
431
- },
432
- _driver: mock.driver
433
- });
434
-
435
- assert.strictEqual(result.status, 'SUCCESS');
436
- assert.strictEqual(result.applied, 1);
437
- });