@restforgejs/platform 4.2.8 → 4.3.2

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 (325) 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 +1 -1
  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 +3 -2
  18. package/generators/cli/schema/describe.js +3 -2
  19. package/generators/cli/schema/diff.js +3 -2
  20. package/generators/cli/schema/introspect.js +3 -2
  21. package/generators/cli/schema/list.js +3 -2
  22. package/generators/cli/schema/migrate.js +3 -2
  23. package/generators/lib/migration/audit-table-runner.js +213 -215
  24. package/generators/lib/payload/payload-runner.js +1 -1
  25. package/generators/lib/templates/dashboard-catalog.js +1 -437
  26. package/generators/lib/templates/db-connection-env.js +1 -212
  27. package/generators/lib/templates/dbschema-catalog.js +1 -489
  28. package/generators/lib/templates/field-validation-catalog.js +1 -531
  29. package/generators/lib/templates/mysql-template.js +1 -3863
  30. package/generators/lib/templates/oracle-template.js +1 -3915
  31. package/generators/lib/templates/postgres-template.js +1 -5838
  32. package/generators/lib/templates/query-declarative-catalog.js +1 -199
  33. package/generators/lib/templates/sqlite-template.js +1 -3440
  34. package/generators/lib/utils/env-manager.js +6 -0
  35. package/generators/lib/utils/path-validator.js +71 -0
  36. package/generators/lib/validators/payload-validator.js +1 -2
  37. package/integrity-manifest.json +28 -10
  38. package/package.json +11 -3
  39. package/scripts/verify-integrity.js +1 -1
  40. package/server.js +1 -1
  41. package/src/components/handlers/adjust_handler.js +1 -1
  42. package/src/components/handlers/audit_handler.js +1 -1
  43. package/src/components/handlers/delete_handler.js +1 -1
  44. package/src/components/handlers/export_handler.js +1 -1
  45. package/src/components/handlers/import_handler.js +1 -1
  46. package/src/components/handlers/insert_handler.js +1 -1
  47. package/src/components/handlers/update_handler.js +1 -1
  48. package/src/components/handlers/upload_handler.js +1 -1
  49. package/src/components/handlers/workflow_handler.js +1 -1
  50. package/src/components/integrations/webhook.js +1 -1
  51. package/src/consumers/baseConsumer.js +1 -1
  52. package/src/consumers/declarativeMapper.js +1 -1
  53. package/src/consumers/handlers/apiHandler.js +1 -1
  54. package/src/consumers/handlers/consoleHandler.js +1 -1
  55. package/src/consumers/handlers/databaseHandler.js +1 -1
  56. package/src/consumers/handlers/index.js +1 -1
  57. package/src/consumers/handlers/kafkaHandler.js +1 -1
  58. package/src/consumers/index.js +1 -1
  59. package/src/consumers/messageTransformer.js +1 -1
  60. package/src/consumers/validator.js +1 -1
  61. package/src/core/db/dialect/base-dialect.js +1 -1
  62. package/src/core/db/dialect/index.js +1 -1
  63. package/src/core/db/dialect/mysql-dialect.js +1 -1
  64. package/src/core/db/dialect/oracle-dialect.js +1 -1
  65. package/src/core/db/dialect/postgres-dialect.js +1 -1
  66. package/src/core/db/dialect/sqlite-dialect.js +1 -1
  67. package/src/core/db/flatten-helper.js +1 -1
  68. package/src/core/db/query-builder-error.js +1 -1
  69. package/src/core/db/query-builder.js +1 -1
  70. package/src/core/db/relation-helper.js +1 -1
  71. package/src/core/handlers/delete_handler.js +1 -1
  72. package/src/core/handlers/insert_handler.js +1 -1
  73. package/src/core/handlers/update_handler.js +1 -1
  74. package/src/core/models/base-model.js +1 -1
  75. package/src/core/utils/cache-manager.js +1 -1
  76. package/src/core/utils/component-engine.js +1 -1
  77. package/src/core/utils/context-builder.js +1 -1
  78. package/src/core/utils/datetime-formatter.js +1 -1
  79. package/src/core/utils/datetime-parser.js +1 -1
  80. package/src/core/utils/db.js +1 -1
  81. package/src/core/utils/logger.js +1 -1
  82. package/src/core/utils/payload-loader.js +1 -1
  83. package/src/core/utils/security-checks.js +1 -1
  84. package/src/middleware/body-options.js +1 -1
  85. package/src/middleware/cors.js +1 -1
  86. package/src/middleware/idempotency.js +1 -1
  87. package/src/middleware/rate-limiter.js +1 -1
  88. package/src/middleware/request-logger.js +1 -1
  89. package/src/middleware/security-headers.js +1 -1
  90. package/src/models/base-model-mysql.js +1 -1
  91. package/src/models/base-model-oracle.js +1 -1
  92. package/src/models/base-model-sqlite.js +1 -1
  93. package/src/models/base-model.js +1 -1
  94. package/src/pro/caching/redis-client.js +1 -1
  95. package/src/pro/caching/redis-helper.js +1 -1
  96. package/src/pro/consumers/baseConsumer.js +1 -1
  97. package/src/pro/consumers/declarativeMapper.js +1 -1
  98. package/src/pro/consumers/handlers/apiHandler.js +1 -1
  99. package/src/pro/consumers/handlers/consoleHandler.js +1 -1
  100. package/src/pro/consumers/handlers/databaseHandler.js +1 -1
  101. package/src/pro/consumers/handlers/index.js +1 -1
  102. package/src/pro/consumers/handlers/kafkaHandler.js +1 -1
  103. package/src/pro/consumers/index.js +1 -1
  104. package/src/pro/consumers/messageTransformer.js +1 -1
  105. package/src/pro/consumers/validator.js +1 -1
  106. package/src/pro/database/base-model-mysql.js +1 -1
  107. package/src/pro/database/base-model-oracle.js +1 -1
  108. package/src/pro/database/base-model-sqlite.js +1 -1
  109. package/src/pro/database/db-mysql.js +1 -1
  110. package/src/pro/database/db-oracle.js +1 -1
  111. package/src/pro/database/db-sqlite.js +1 -1
  112. package/src/pro/excel/excel-generator.js +1 -1
  113. package/src/pro/excel/excel-parser.js +1 -1
  114. package/src/pro/excel/export-service.js +1 -1
  115. package/src/pro/excel/export_handler.js +1 -1
  116. package/src/pro/excel/import-service.js +1 -1
  117. package/src/pro/excel/import-validator.js +1 -1
  118. package/src/pro/excel/import_handler.js +1 -1
  119. package/src/pro/excel/upsert-builder.js +1 -1
  120. package/src/pro/idgen/idgen-routes.js +1 -1
  121. package/src/pro/integrations/lookup-resolver.js +1 -1
  122. package/src/pro/integrations/upload-handler-v2.js +1 -1
  123. package/src/pro/integrations/upload-handler.js +1 -1
  124. package/src/pro/integrations/webhook.js +1 -1
  125. package/src/pro/locking/lock-routes.js +1 -1
  126. package/src/pro/locking/resource-lock-manager.js +1 -1
  127. package/src/pro/messaging/kafkaConsumerService.js +1 -1
  128. package/src/pro/messaging/kafkaService.js +1 -1
  129. package/src/pro/messaging/messagehubService.js +1 -1
  130. package/src/pro/messaging/rabbitmqService.js +1 -1
  131. package/src/pro/scheduler/job-manager.js +1 -1
  132. package/src/pro/scheduler/job-routes.js +1 -1
  133. package/src/pro/scheduler/job-validator.js +1 -1
  134. package/src/pro/storage/base-storage-provider.js +1 -1
  135. package/src/pro/storage/file-metadata-helper.js +1 -1
  136. package/src/pro/storage/index.js +1 -1
  137. package/src/pro/storage/local-storage-provider.js +1 -1
  138. package/src/pro/storage/s3-storage-provider.js +1 -1
  139. package/src/pro/storage/upload-cleanup-job.js +1 -1
  140. package/src/pro/storage/upload-cleanup-scheduler.js +1 -1
  141. package/src/pro/storage/upload-pending-tracker.js +1 -1
  142. package/src/pro/websocket/broadcast-helper.js +1 -1
  143. package/src/pro/websocket/index.js +1 -1
  144. package/src/pro/websocket/livesync-server.js +1 -1
  145. package/src/pro/websocket/ws-broadcaster.js +1 -1
  146. package/src/services/export-service.js +1 -1
  147. package/src/services/import-service.js +1 -1
  148. package/src/services/kafkaConsumerService.js +1 -1
  149. package/src/services/kafkaService.js +1 -1
  150. package/src/services/messagehubService.js +1 -1
  151. package/src/services/rabbitmqService.js +1 -1
  152. package/src/utils/cache-invalidation-registry.js +1 -1
  153. package/src/utils/cache-manager.js +1 -1
  154. package/src/utils/component-engine.js +1 -1
  155. package/src/utils/config-extractor.js +1 -1
  156. package/src/utils/consumerLogger.js +1 -1
  157. package/src/utils/context-builder.js +1 -1
  158. package/src/utils/dashboard-helpers.js +1 -1
  159. package/src/utils/dateHelper.js +1 -1
  160. package/src/utils/datetime-formatter.js +1 -1
  161. package/src/utils/datetime-parser.js +1 -1
  162. package/src/utils/db-bootstrap.js +1 -1
  163. package/src/utils/db-mysql.js +1 -1
  164. package/src/utils/db-oracle.js +1 -1
  165. package/src/utils/db-sqlite.js +1 -1
  166. package/src/utils/db.js +1 -1
  167. package/src/utils/demo-generator.js +1 -1
  168. package/src/utils/excel-generator.js +1 -1
  169. package/src/utils/excel-parser.js +1 -1
  170. package/src/utils/file-watcher.js +1 -1
  171. package/src/utils/id-generator.js +1 -1
  172. package/src/utils/idempotency-manager.js +1 -1
  173. package/src/utils/import-validator.js +1 -1
  174. package/src/utils/license-client.js +1 -1
  175. package/src/utils/lock-manager.js +1 -1
  176. package/src/utils/logger.js +1 -1
  177. package/src/utils/lookup-resolver.js +1 -1
  178. package/src/utils/payload-loader.js +1 -1
  179. package/src/utils/processor-response.js +1 -1
  180. package/src/utils/rabbitmq.js +1 -1
  181. package/src/utils/redis-client.js +1 -1
  182. package/src/utils/redis-helper.js +1 -1
  183. package/src/utils/request-scope.js +1 -1
  184. package/src/utils/security-checks.js +1 -1
  185. package/src/utils/service-resolver.js +1 -1
  186. package/src/utils/shutdown-coordinator.js +1 -1
  187. package/src/utils/trusted-keys.js +1 -1
  188. package/src/utils/upload-handler.js +1 -1
  189. package/src/utils/upsert-builder.js +1 -1
  190. package/src/utils/workflow-hook-executor.js +1 -1
  191. package/generators/metadata/global.json +0 -58
  192. package/generators/metadata/test-mysql-workbench.json +0 -118
  193. package/generators/metadata/test-mysql.json +0 -56
  194. package/generators/metadata/test-oracle-workbench.json +0 -118
  195. package/generators/metadata/test-oracle.json +0 -56
  196. package/generators/metadata/test-pg-workbench.json +0 -118
  197. package/generators/metadata/test-pg.json +0 -56
  198. package/generators/scripts/obfuscate-source.js +0 -356
  199. package/generators/scripts/validate-catalog.js +0 -430
  200. package/generators/scripts/validate-dbschema-catalog.js +0 -708
  201. package/generators/tests/baseline/mysql/mini_inventory_item/src/models/mini-inventory/item.js +0 -944
  202. package/generators/tests/baseline/mysql/mini_inventory_item/src/modules/mini-inventory/item.js +0 -740
  203. package/generators/tests/baseline/mysql/mini_inventory_item/src/modules/mini-inventory.js +0 -336
  204. package/generators/tests/baseline/oracle/mini_inventory_item/src/models/mini-inventory/item.js +0 -1002
  205. package/generators/tests/baseline/oracle/mini_inventory_item/src/modules/mini-inventory/item.js +0 -740
  206. package/generators/tests/baseline/oracle/mini_inventory_item/src/modules/mini-inventory.js +0 -336
  207. package/generators/tests/baseline/postgres/mini_inventory_item/src/models/mini-inventory/item.js +0 -1333
  208. package/generators/tests/baseline/postgres/mini_inventory_item/src/modules/mini-inventory/item.js +0 -1173
  209. package/generators/tests/baseline/postgres/mini_inventory_item/src/modules/mini-inventory.js +0 -496
  210. package/generators/tests/fixtures/payloads/custom-sensitive.json +0 -27
  211. package/generators/tests/fixtures/payloads/dynamic-search-optout.json +0 -23
  212. package/generators/tests/fixtures/payloads/login-with-password.json +0 -22
  213. package/generators/tests/fixtures/payloads/order-process.json +0 -52
  214. package/generators/tests/fixtures/payloads/with-inline-sql.json +0 -26
  215. package/generators/tests/integration-tahap4b/README.md +0 -145
  216. package/generators/tests/integration-tahap4b/run-concurrent.js +0 -77
  217. package/generators/tests/integration-tahap4b/seed.sql +0 -53
  218. package/generators/tests/integration-tahap4b/verify.sql +0 -110
  219. package/generators/tests/unit/cli/create-dashboard.test.js +0 -505
  220. package/generators/tests/unit/cli/create-processor.test.js +0 -319
  221. package/generators/tests/unit/cli/dispatch-dashboard.test.js +0 -149
  222. package/generators/tests/unit/lib/dashboard-generator.test.js +0 -895
  223. package/generators/tests/unit/lib/dashboard-validator.test.js +0 -354
  224. package/generators/tests/unit/lib/dbschema-kit/apply-executor.test.js +0 -437
  225. package/generators/tests/unit/lib/dbschema-kit/cli/dbschema-introspect.test.js +0 -393
  226. package/generators/tests/unit/lib/dbschema-kit/cli/dbschema-kit-generate-ddl.test.js +0 -104
  227. package/generators/tests/unit/lib/dbschema-kit/cli/dbschema-kit-init.test.js +0 -119
  228. package/generators/tests/unit/lib/dbschema-kit/cli/dbschema-kit-list.test.js +0 -48
  229. package/generators/tests/unit/lib/dbschema-kit/cli/dbschema-kit-migrate.test.js +0 -175
  230. package/generators/tests/unit/lib/dbschema-kit/cli/dbschema-kit-validate.test.js +0 -102
  231. package/generators/tests/unit/lib/dbschema-kit/cli/dbschema-models.test.js +0 -43
  232. package/generators/tests/unit/lib/dbschema-kit/cli/fixtures/introspect-stubs/all-schemas-listing.js +0 -84
  233. package/generators/tests/unit/lib/dbschema-kit/cli/fixtures/introspect-stubs/connection-error.js +0 -13
  234. package/generators/tests/unit/lib/dbschema-kit/cli/fixtures/introspect-stubs/empty.js +0 -12
  235. package/generators/tests/unit/lib/dbschema-kit/cli/fixtures/introspect-stubs/multi-schema.js +0 -124
  236. package/generators/tests/unit/lib/dbschema-kit/cli/fixtures/introspect-stubs/single-schema-inventory.js +0 -64
  237. package/generators/tests/unit/lib/dbschema-kit/cli/fixtures/introspect-stubs/two-tables.js +0 -66
  238. package/generators/tests/unit/lib/dbschema-kit/cli/fixtures/migrate-stubs/connection-error.js +0 -9
  239. package/generators/tests/unit/lib/dbschema-kit/cli/fixtures/migrate-stubs/partial.js +0 -29
  240. package/generators/tests/unit/lib/dbschema-kit/cli/fixtures/migrate-stubs/rollback.js +0 -26
  241. package/generators/tests/unit/lib/dbschema-kit/cli/fixtures/migrate-stubs/success.js +0 -43
  242. package/generators/tests/unit/lib/dbschema-kit/cli/fixtures/multi-schema/audit/events.js +0 -18
  243. package/generators/tests/unit/lib/dbschema-kit/cli/fixtures/multi-schema/inventory/products.js +0 -9
  244. package/generators/tests/unit/lib/dbschema-kit/cli/fixtures/multi-schema/users.js +0 -8
  245. package/generators/tests/unit/lib/dbschema-kit/connection.test.js +0 -112
  246. package/generators/tests/unit/lib/dbschema-kit/ddl-generator.test.js +0 -205
  247. package/generators/tests/unit/lib/dbschema-kit/define-model.test.js +0 -56
  248. package/generators/tests/unit/lib/dbschema-kit/dialect/index.test.js +0 -46
  249. package/generators/tests/unit/lib/dbschema-kit/dialect/mysql.test.js +0 -126
  250. package/generators/tests/unit/lib/dbschema-kit/dialect/oracle.test.js +0 -126
  251. package/generators/tests/unit/lib/dbschema-kit/dialect/postgres.test.js +0 -131
  252. package/generators/tests/unit/lib/dbschema-kit/dialect/sqlite.test.js +0 -126
  253. package/generators/tests/unit/lib/dbschema-kit/driver-loader.test.js +0 -93
  254. package/generators/tests/unit/lib/dbschema-kit/emitters/create-index.test.js +0 -173
  255. package/generators/tests/unit/lib/dbschema-kit/emitters/create-table.test.js +0 -376
  256. package/generators/tests/unit/lib/dbschema-kit/emitters/drop-table.test.js +0 -78
  257. package/generators/tests/unit/lib/dbschema-kit/fixtures/connection/invalid-dialect.env +0 -6
  258. package/generators/tests/unit/lib/dbschema-kit/fixtures/connection/missing-dialect.env +0 -5
  259. package/generators/tests/unit/lib/dbschema-kit/fixtures/connection/missing-host.env +0 -5
  260. package/generators/tests/unit/lib/dbschema-kit/fixtures/connection/oracle-valid.env +0 -6
  261. package/generators/tests/unit/lib/dbschema-kit/fixtures/connection/postgres-valid.env +0 -7
  262. package/generators/tests/unit/lib/dbschema-kit/fixtures/connection/sqlite-valid.env +0 -2
  263. package/generators/tests/unit/lib/dbschema-kit/fixtures/integration/mini-inventory/category.js +0 -11
  264. package/generators/tests/unit/lib/dbschema-kit/fixtures/integration/mini-inventory/item_product.js +0 -11
  265. package/generators/tests/unit/lib/dbschema-kit/fixtures/integration/mini-inventory/stock_inbound.js +0 -24
  266. package/generators/tests/unit/lib/dbschema-kit/fixtures/integration/mini-inventory/stock_inbound_item.js +0 -28
  267. package/generators/tests/unit/lib/dbschema-kit/fixtures/integration/mini-inventory/supplier.js +0 -9
  268. package/generators/tests/unit/lib/dbschema-kit/fixtures/integration/mini-inventory/warehouse.js +0 -9
  269. package/generators/tests/unit/lib/dbschema-kit/fixtures/integration/mini-inventory-invalid/orphan.js +0 -17
  270. package/generators/tests/unit/lib/dbschema-kit/fixtures/integration/mini-inventory-multifolder/master/category.js +0 -11
  271. package/generators/tests/unit/lib/dbschema-kit/fixtures/integration/mini-inventory-multifolder/master/item_product.js +0 -11
  272. package/generators/tests/unit/lib/dbschema-kit/fixtures/integration/mini-inventory-multifolder/master/supplier.js +0 -9
  273. package/generators/tests/unit/lib/dbschema-kit/fixtures/integration/mini-inventory-multifolder/master/warehouse.js +0 -9
  274. package/generators/tests/unit/lib/dbschema-kit/fixtures/integration/mini-inventory-multifolder/transactions/stock_inbound.js +0 -24
  275. package/generators/tests/unit/lib/dbschema-kit/fixtures/integration/mini-inventory-multifolder/transactions/stock_inbound_item.js +0 -28
  276. package/generators/tests/unit/lib/dbschema-kit/fixtures/integration/multi-schema/audit/events.js +0 -18
  277. package/generators/tests/unit/lib/dbschema-kit/fixtures/integration/multi-schema/inventory/products.js +0 -9
  278. package/generators/tests/unit/lib/dbschema-kit/fixtures/integration/multi-schema/public/users.js +0 -9
  279. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/duplicate-subfolder/extra/category.js +0 -8
  280. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/duplicate-subfolder/master/category.js +0 -8
  281. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/duplicate-tablename/bar.js +0 -8
  282. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/duplicate-tablename/foo.js +0 -8
  283. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/empty-folder/README.md +0 -1
  284. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/invalid-export/plain.js +0 -3
  285. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/invalid-schema/bad.js +0 -6
  286. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/legacy-pattern/legacy.js +0 -12
  287. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/multi-schema-distinct/audit/products.js +0 -9
  288. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/multi-schema-distinct/inventory/products.js +0 -9
  289. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/multi-schema-duplicate/a/products.js +0 -8
  290. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/multi-schema-duplicate/b/products.js +0 -8
  291. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/nested-deep/a/b/c/deep_table.js +0 -8
  292. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/recursive-multi-folder/.hidden/ignored.js +0 -7
  293. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/recursive-multi-folder/master/category.js +0 -8
  294. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/recursive-multi-folder/master/supplier.js +0 -8
  295. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/recursive-multi-folder/transactions/stock_inbound.js +0 -8
  296. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/recursive-multi-folder/transactions/stock_inbound_item.js +0 -8
  297. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/valid-multiple/category.js +0 -8
  298. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/valid-multiple/item_product.js +0 -9
  299. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/valid-single/category.js +0 -8
  300. package/generators/tests/unit/lib/dbschema-kit/integration.test.js +0 -217
  301. package/generators/tests/unit/lib/dbschema-kit/introspect-mapper.test.js +0 -403
  302. package/generators/tests/unit/lib/dbschema-kit/ir-builder.test.js +0 -390
  303. package/generators/tests/unit/lib/dbschema-kit/loader.test.js +0 -128
  304. package/generators/tests/unit/lib/dbschema-kit/naming.test.js +0 -170
  305. package/generators/tests/unit/lib/dbschema-kit/parser/shorthand-parser.test.js +0 -237
  306. package/generators/tests/unit/lib/dbschema-kit/schema-printer.test.js +0 -251
  307. package/generators/tests/unit/lib/dbschema-kit/statement-modifier.test.js +0 -105
  308. package/generators/tests/unit/lib/dbschema-kit/statement-splitter.test.js +0 -165
  309. package/generators/tests/unit/lib/dbschema-kit/topological-sort.test.js +0 -135
  310. package/generators/tests/unit/lib/dbschema-kit/validator/check-compatibility-validator.test.js +0 -373
  311. package/generators/tests/unit/lib/dbschema-kit/validator/circular-relation-validator.test.js +0 -454
  312. package/generators/tests/unit/lib/dbschema-kit/validator/cross-model-validator.test.js +0 -512
  313. package/generators/tests/unit/lib/dbschema-kit/validator/enhanced-validate-integration.test.js +0 -390
  314. package/generators/tests/unit/lib/dbschema-kit/validator/naming-convention-validator.test.js +0 -306
  315. package/generators/tests/unit/lib/dbschema-kit/validator/schema-validator.test.js +0 -443
  316. package/generators/tests/unit/lib/dbschema-kit/validator/type-compatibility-validator.test.js +0 -440
  317. package/generators/tests/unit/lib/dbschema-kit/validator/validator-reporter.test.js +0 -172
  318. package/generators/tests/unit/lib/metadata-manager-dashboard.test.js +0 -256
  319. package/generators/tests/unit/lib/payload-validator-fieldpolicy.test.js +0 -240
  320. package/generators/tests/unit/lib/processor-validation-generator.test.js +0 -300
  321. package/generators/tests/unit/lib/sensitive-field-masker.test.js +0 -170
  322. package/generators/tests/unit/lib/sql-table-extractor.test.js +0 -119
  323. package/scripts/generate-integrity-manifest.js +0 -124
  324. package/scripts/snapshot-cli-contracts.js +0 -194
  325. package/scripts/verify-publish.js +0 -56
@@ -1,175 +0,0 @@
1
- 'use strict';
2
-
3
- const test = require('node:test');
4
- const assert = require('node:assert');
5
- const path = require('node:path');
6
- const fs = require('node:fs');
7
- const os = require('node:os');
8
- const { spawnSync } = require('node:child_process');
9
-
10
- const REPO_ROOT = path.resolve(__dirname, '..', '..', '..', '..', '..');
11
- const CLI_SCRIPT = path.join(REPO_ROOT, 'cli', 'dbschema-migrate.js');
12
-
13
- const FIXTURE_VALID = path.resolve(__dirname, '..', 'fixtures', 'integration', 'mini-inventory');
14
- const FIXTURE_INVALID = path.resolve(__dirname, '..', 'fixtures', 'integration', 'mini-inventory-invalid');
15
- const FIXTURE_FILE_WITH_FK = path.resolve(FIXTURE_VALID, 'item_product.js');
16
-
17
- const CONFIG_PG = path.resolve(__dirname, '..', 'fixtures', 'connection', 'postgres-valid.env');
18
-
19
- const STUB_DIR = path.resolve(__dirname, 'fixtures', 'migrate-stubs');
20
- const STUB_SUCCESS = path.join(STUB_DIR, 'success.js');
21
- const STUB_PARTIAL = path.join(STUB_DIR, 'partial.js');
22
- const STUB_ROLLBACK = path.join(STUB_DIR, 'rollback.js');
23
- const STUB_CONN_ERR = path.join(STUB_DIR, 'connection-error.js');
24
-
25
- function runMigrate(args, options = {}) {
26
- return spawnSync(process.execPath, [CLI_SCRIPT, ...args], {
27
- encoding: 'utf-8',
28
- env: { ...process.env, NO_COLOR: '1', ...(options.env || {}) },
29
- ...options
30
- });
31
- }
32
-
33
- test('migrate: --help → exit 0, stdout berisi usage + flags', () => {
34
- const result = runMigrate(['--help']);
35
- assert.strictEqual(result.status, 0, `stderr: ${result.stderr}`);
36
- assert.match(result.stdout, /dbschema Migrate/);
37
- assert.match(result.stdout, /--config=<file>/);
38
- assert.match(result.stdout, /--drop=true\|false/);
39
- assert.match(result.stdout, /--dry-run/);
40
- });
41
-
42
- test('migrate: tanpa --config → exit 1, stderr berisi "config" required', () => {
43
- const result = runMigrate([FIXTURE_VALID]);
44
- assert.strictEqual(result.status, 1, `expected exit 1, got ${result.status}`);
45
- assert.match(result.stderr, /--config=<file> is required/);
46
- });
47
-
48
- test('migrate: --config menunjuk file yang tidak ada → exit 1, stderr "Config file not found"', () => {
49
- const result = runMigrate([FIXTURE_VALID, '--config=does-not-exist.env']);
50
- assert.strictEqual(result.status, 1);
51
- assert.match(result.stderr, /Config file not found/);
52
- });
53
-
54
- test('migrate: schema path tidak exist → exit 1, stderr "Schema path not found"', () => {
55
- const tmpRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'dbsk-mig-'));
56
- const ghost = path.join(tmpRoot, 'no-such-folder');
57
- try {
58
- const result = runMigrate([ghost, `--config=${CONFIG_PG}`]);
59
- assert.strictEqual(result.status, 1, `expected exit 1, got ${result.status}`);
60
- assert.match(result.stderr, /Schema path not found/);
61
- } finally {
62
- fs.rmSync(tmpRoot, { recursive: true, force: true });
63
- }
64
- });
65
-
66
- test('migrate: cross-model validation gagal pada folder mode → exit 1, stderr berisi error', () => {
67
- const result = runMigrate([FIXTURE_INVALID, `--config=${CONFIG_PG}`]);
68
- assert.strictEqual(result.status, 1, `expected exit 1, got ${result.status}`);
69
- assert.match(result.stderr, /Cross-model validation/);
70
- });
71
-
72
- test('migrate: file mode skip cross-model validation (file dengan FK ke tabel external load sukses)', () => {
73
- const result = runMigrate(
74
- [FIXTURE_FILE_WITH_FK, `--config=${CONFIG_PG}`, '--dry-run'],
75
- { env: { DBSCHEMA_KIT_TEST_APPLY_STUB: STUB_SUCCESS } }
76
- );
77
- assert.strictEqual(result.status, 2, `expected exit 2 dry-run, got ${result.status}. stderr: ${result.stderr}`);
78
- assert.doesNotMatch(result.stderr, /Cross-model validation/);
79
- assert.match(result.stdout, /CREATE TABLE/);
80
- });
81
-
82
- test('migrate: --dry-run → exit 2, stdout berisi DDL preview + "Dry-run complete"', () => {
83
- const result = runMigrate([FIXTURE_VALID, `--config=${CONFIG_PG}`, '--dry-run']);
84
- assert.strictEqual(result.status, 2, `expected exit 2, got ${result.status}. stderr: ${result.stderr}`);
85
- assert.match(result.stdout, /-- DDL Preview --/);
86
- assert.match(result.stdout, /CREATE TABLE/);
87
- assert.match(result.stdout, /Dry-run complete\. No changes applied\./);
88
- });
89
-
90
- test('migrate: --drop=true langsung apply tanpa konfirmasi tambahan, warning tetap muncul di stderr', () => {
91
- const result = runMigrate(
92
- [FIXTURE_VALID, `--config=${CONFIG_PG}`, '--drop=true'],
93
- { env: { DBSCHEMA_KIT_TEST_APPLY_STUB: STUB_SUCCESS } }
94
- );
95
- assert.strictEqual(result.status, 0, `expected exit 0, got ${result.status}. stderr: ${result.stderr}`);
96
- assert.match(result.stdout, /Status: SUCCESS/);
97
- assert.match(result.stderr, /--drop=true will DROP/);
98
- });
99
-
100
- test('migrate: --drop=false → statement dimodifikasi pakai IF NOT EXISTS sebelum di-execute', () => {
101
- const tmpRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'dbsk-mig-rec-'));
102
- const recordFile = path.join(tmpRoot, 'record.json');
103
- try {
104
- const result = runMigrate(
105
- [FIXTURE_VALID, `--config=${CONFIG_PG}`, '--drop=false'],
106
- {
107
- env: {
108
- DBSCHEMA_KIT_TEST_APPLY_STUB: STUB_SUCCESS,
109
- DBSCHEMA_KIT_TEST_RECORD_FILE: recordFile
110
- }
111
- }
112
- );
113
- assert.strictEqual(result.status, 0, `expected exit 0, got ${result.status}. stderr: ${result.stderr}`);
114
- assert.ok(fs.existsSync(recordFile), 'recorder stub harus menulis statements ke file');
115
- const recorded = JSON.parse(fs.readFileSync(recordFile, 'utf-8'));
116
- assert.ok(Array.isArray(recorded.statements) && recorded.statements.length > 0);
117
- const hasIfNotExistsTable = recorded.statements.some((s) => /^CREATE TABLE IF NOT EXISTS/.test(s));
118
- const hasIfNotExistsIndex = recorded.statements.some((s) => /^CREATE INDEX IF NOT EXISTS/.test(s));
119
- assert.ok(hasIfNotExistsTable, 'minimal satu CREATE TABLE harus pakai IF NOT EXISTS');
120
- assert.ok(hasIfNotExistsIndex, 'minimal satu CREATE INDEX harus pakai IF NOT EXISTS');
121
- } finally {
122
- fs.rmSync(tmpRoot, { recursive: true, force: true });
123
- }
124
- });
125
-
126
- test('migrate: status SUCCESS → exit 0, stdout "Status: SUCCESS"', () => {
127
- const result = runMigrate(
128
- [FIXTURE_VALID, `--config=${CONFIG_PG}`],
129
- { env: { DBSCHEMA_KIT_TEST_APPLY_STUB: STUB_SUCCESS } }
130
- );
131
- assert.strictEqual(result.status, 0, `expected exit 0, got ${result.status}. stderr: ${result.stderr}`);
132
- assert.match(result.stdout, /Status: SUCCESS/);
133
- assert.match(result.stdout, /Statements applied: \d+/);
134
- assert.match(result.stdout, /Duration: \d+ms/);
135
- });
136
-
137
- test('migrate: status PARTIAL → exit 1, stderr "Partial apply detected"', () => {
138
- const result = runMigrate(
139
- [FIXTURE_VALID, `--config=${CONFIG_PG}`],
140
- { env: { DBSCHEMA_KIT_TEST_APPLY_STUB: STUB_PARTIAL } }
141
- );
142
- assert.strictEqual(result.status, 1, `expected exit 1, got ${result.status}. stdout: ${result.stdout}`);
143
- assert.match(result.stderr, /Partial apply detected/);
144
- assert.match(result.stderr, /Manual cleanup may be required/);
145
- });
146
-
147
- test('migrate: status ROLLBACK → exit 1, stderr "ROLLBACK applied"', () => {
148
- const result = runMigrate(
149
- [FIXTURE_VALID, `--config=${CONFIG_PG}`],
150
- { env: { DBSCHEMA_KIT_TEST_APPLY_STUB: STUB_ROLLBACK } }
151
- );
152
- assert.strictEqual(result.status, 1, `expected exit 1, got ${result.status}. stdout: ${result.stdout}`);
153
- assert.match(result.stderr, /ROLLBACK applied\. Database state unchanged\./);
154
- });
155
-
156
- test('migrate: connection error (ECONNREFUSED) → exit 1, stderr berisi "Cannot connect"', () => {
157
- const result = runMigrate(
158
- [FIXTURE_VALID, `--config=${CONFIG_PG}`],
159
- { env: { DBSCHEMA_KIT_TEST_APPLY_STUB: STUB_CONN_ERR } }
160
- );
161
- assert.strictEqual(result.status, 1, `expected exit 1, got ${result.status}. stdout: ${result.stdout}`);
162
- assert.match(result.stderr, /Cannot connect/);
163
- });
164
-
165
- test('migrate: invalid --drop value → exit 1, stderr menjelaskan error', () => {
166
- const result = runMigrate([FIXTURE_VALID, `--config=${CONFIG_PG}`, '--drop=maybe']);
167
- assert.strictEqual(result.status, 1);
168
- assert.match(result.stderr, /--drop must be 'true' or 'false'/);
169
- });
170
-
171
- test('migrate: unknown option → exit 1', () => {
172
- const result = runMigrate([FIXTURE_VALID, `--config=${CONFIG_PG}`, '--bogus']);
173
- assert.strictEqual(result.status, 1);
174
- assert.match(result.stderr, /Unknown option/);
175
- });
@@ -1,102 +0,0 @@
1
- 'use strict';
2
-
3
- const test = require('node:test');
4
- const assert = require('node:assert');
5
- const path = require('node:path');
6
- const fs = require('node:fs');
7
- const os = require('node:os');
8
- const { spawnSync } = require('node:child_process');
9
-
10
- const REPO_ROOT = path.resolve(__dirname, '..', '..', '..', '..', '..');
11
- const CLI_SCRIPT = path.join(REPO_ROOT, 'cli', 'dbschema-validate.js');
12
- const FIXTURE_VALID = path.resolve(__dirname, '..', 'fixtures', 'integration', 'mini-inventory');
13
- const FIXTURE_INVALID = path.resolve(__dirname, '..', 'fixtures', 'integration', 'mini-inventory-invalid');
14
-
15
- function runValidate(args, options = {}) {
16
- return spawnSync(process.execPath, [CLI_SCRIPT, ...args], {
17
- encoding: 'utf-8',
18
- env: { ...process.env, NO_COLOR: '1' },
19
- ...options
20
- });
21
- }
22
-
23
- test('validate: folder valid (mini-inventory) → exit 0 dengan ringkasan 6 model', () => {
24
- const result = runValidate([FIXTURE_VALID]);
25
- assert.strictEqual(result.status, 0, `expected exit 0, got ${result.status}. stderr: ${result.stderr}`);
26
- assert.match(result.stdout, /6 models loaded, 0 errors\./);
27
- // Pastikan setidaknya 1 baris success dengan tableName muncul
28
- assert.match(result.stdout, /✓ .+: category/);
29
- assert.match(result.stdout, /✓ .+: stock_inbound_item/);
30
- });
31
-
32
- test('validate: folder invalid (mini-inventory-invalid) → exit 1 dengan error cross-model', () => {
33
- const result = runValidate([FIXTURE_INVALID]);
34
- assert.strictEqual(result.status, 1, `expected exit 1, got ${result.status}`);
35
- assert.match(result.stderr, /✗ Table 'orphan': relation 'missing' targets unknown table 'nonexistent_table'/);
36
- assert.match(result.stderr, /1 model loaded, 1 error\./);
37
- });
38
-
39
- test('validate: path tidak exist → exit 1 dengan pesan "Schema path not found"', () => {
40
- const tmpRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'dbschema-kit-validate-'));
41
- const ghost = path.join(tmpRoot, 'does-not-exist');
42
- try {
43
- const result = runValidate([ghost]);
44
- assert.strictEqual(result.status, 1, `expected exit 1, got ${result.status}`);
45
- assert.match(result.stderr, /Schema path not found/);
46
- assert.match(result.stderr, /0 models loaded, 1 error\./);
47
- } finally {
48
- fs.rmSync(tmpRoot, { recursive: true, force: true });
49
- }
50
- });
51
-
52
- test('validate: --format json folder valid → exit 0 dengan JSON report', () => {
53
- const result = runValidate([FIXTURE_VALID, '--format', 'json']);
54
- assert.strictEqual(result.status, 0, `expected exit 0, got ${result.status}. stderr: ${result.stderr}`);
55
- const report = JSON.parse(result.stdout);
56
- assert.strictEqual(report.schemaVersion, '1.0');
57
- assert.strictEqual(report.summary.modelsLoaded, 6);
58
- assert.strictEqual(report.summary.errorCount, 0);
59
- assert.strictEqual(report.summary.warningCount, 0);
60
- assert.deepStrictEqual(report.issues, []);
61
- });
62
-
63
- test('validate: --format json folder invalid → exit 1 dengan issue terstruktur di JSON', () => {
64
- const result = runValidate([FIXTURE_INVALID, '--format=json']);
65
- assert.strictEqual(result.status, 1, `expected exit 1, got ${result.status}`);
66
- const report = JSON.parse(result.stdout);
67
- assert.strictEqual(report.summary.modelsLoaded, 1);
68
- assert.strictEqual(report.summary.errorCount, 1);
69
- assert.strictEqual(report.issues.length, 1);
70
- assert.strictEqual(report.issues[0].severity, 'error');
71
- assert.strictEqual(report.issues[0].code, 'relation-unknown-target');
72
- assert.strictEqual(report.issues[0].table, 'orphan');
73
- assert.strictEqual(report.issues[0].relation, 'missing');
74
- });
75
-
76
- test('validate: --format json path tidak exist → exit 1 dengan schema-load-error issue', () => {
77
- const tmpRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'dbschema-kit-validate-json-'));
78
- const ghost = path.join(tmpRoot, 'does-not-exist');
79
- try {
80
- const result = runValidate([ghost, '--format', 'json']);
81
- assert.strictEqual(result.status, 1);
82
- const report = JSON.parse(result.stdout);
83
- assert.strictEqual(report.summary.modelsLoaded, 0);
84
- assert.strictEqual(report.summary.errorCount, 1);
85
- assert.strictEqual(report.issues[0].code, 'schema-load-error');
86
- assert.match(report.issues[0].message, /Schema path not found/);
87
- } finally {
88
- fs.rmSync(tmpRoot, { recursive: true, force: true });
89
- }
90
- });
91
-
92
- test('validate: unknown flag → exit 2 dengan usage error', () => {
93
- const result = runValidate([FIXTURE_VALID, '--frobnicate']);
94
- assert.strictEqual(result.status, 2, `expected exit 2, got ${result.status}`);
95
- assert.match(result.stderr, /Unknown option '--frobnicate'/);
96
- });
97
-
98
- test('validate: --format invalid value → exit 2 dengan format error', () => {
99
- const result = runValidate([FIXTURE_VALID, '--format', 'xml']);
100
- assert.strictEqual(result.status, 2, `expected exit 2, got ${result.status}`);
101
- assert.match(result.stderr, /Invalid format 'xml'/);
102
- });
@@ -1,43 +0,0 @@
1
- 'use strict';
2
-
3
- const test = require('node:test');
4
- const assert = require('node:assert');
5
- const path = require('node:path');
6
- const { spawnSync } = require('node:child_process');
7
-
8
- const REPO_ROOT = path.resolve(__dirname, '..', '..', '..', '..', '..');
9
- const CLI_SCRIPT = path.join(REPO_ROOT, 'cli', 'dbschema-models.js');
10
- const FIXTURE_MULTI_SCHEMA = path.resolve(__dirname, 'fixtures', 'multi-schema');
11
- const FIXTURE_NO_SCHEMA = path.resolve(__dirname, '..', 'fixtures', 'integration', 'mini-inventory');
12
-
13
- function runCli(args, options = {}) {
14
- return spawnSync(process.execPath, [CLI_SCRIPT, ...args], {
15
- encoding: 'utf-8',
16
- env: { ...process.env, NO_COLOR: '1' },
17
- ...options
18
- });
19
- }
20
-
21
- test('dbschema:models: output kolom Schema, model dengan schema tampil di kolom tersebut', () => {
22
- const result = runCli([FIXTURE_MULTI_SCHEMA]);
23
- assert.strictEqual(result.status, 0, `expected exit 0, got ${result.status}. stderr: ${result.stderr}`);
24
- assert.match(result.stdout, /Schema\s+Table\s+Fields\s+PK\s+Indexes\s+Uniques\s+Relations/);
25
- assert.match(result.stdout, /inventory\s+products/);
26
- assert.match(result.stdout, /audit\s+events/);
27
- assert.match(result.stdout, /3 models loaded\./);
28
- });
29
-
30
- test('dbschema:models: model tanpa schema → kolom Schema menampilkan placeholder dash', () => {
31
- const result = runCli([FIXTURE_MULTI_SCHEMA]);
32
- assert.strictEqual(result.status, 0, `expected exit 0, got ${result.status}. stderr: ${result.stderr}`);
33
- // Row "users" model has no schema, kolom pertama harus berupa dash
34
- assert.match(result.stdout, /^-\s+users/m);
35
- });
36
-
37
- test('dbschema:models: backward compatibility — fixture tanpa schema (mini-inventory) tetap render dengan kolom Schema kosong', () => {
38
- const result = runCli([FIXTURE_NO_SCHEMA]);
39
- assert.strictEqual(result.status, 0);
40
- // Semua model di mini-inventory tanpa schema → kolom Schema = '-'
41
- assert.match(result.stdout, /-\s+category\s+/);
42
- assert.match(result.stdout, /6 models loaded\./);
43
- });
@@ -1,84 +0,0 @@
1
- 'use strict';
2
-
3
- /**
4
- * Stub introspector exposing three schemas (inventory, audit, public)
5
- * with assorted tables. Used by dbschema-introspect CLI tests to exercise
6
- * --all-schemas mode where the CLI calls listSchemas() then introspect()
7
- * with the resolved schema list.
8
- */
9
-
10
- const TABLES = [
11
- {
12
- schemaName: 'inventory',
13
- tableName: 'products',
14
- columns: [
15
- { column_name: 'product_id', data_type: 'uuid', udt_name: 'uuid',
16
- column_default: null, is_nullable: 'NO' },
17
- { column_name: 'name', data_type: 'character varying', udt_name: 'varchar',
18
- column_default: null, is_nullable: 'NO', character_maximum_length: 100 }
19
- ],
20
- primaryKey: ['product_id'],
21
- uniques: [],
22
- foreignKeys: [],
23
- indexes: [
24
- { name: 'pk_products', columns: ['product_id'], unique: true, primary: true }
25
- ],
26
- checks: []
27
- },
28
- {
29
- schemaName: 'audit',
30
- tableName: 'logs',
31
- columns: [
32
- { column_name: 'log_id', data_type: 'uuid', udt_name: 'uuid',
33
- column_default: null, is_nullable: 'NO' },
34
- { column_name: 'message', data_type: 'text', udt_name: 'text',
35
- column_default: null, is_nullable: 'YES' }
36
- ],
37
- primaryKey: ['log_id'],
38
- uniques: [],
39
- foreignKeys: [],
40
- indexes: [
41
- { name: 'pk_logs', columns: ['log_id'], unique: true, primary: true }
42
- ],
43
- checks: []
44
- },
45
- {
46
- schemaName: 'public',
47
- tableName: 'users',
48
- columns: [
49
- { column_name: 'user_id', data_type: 'uuid', udt_name: 'uuid',
50
- column_default: null, is_nullable: 'NO' },
51
- { column_name: 'email', data_type: 'character varying', udt_name: 'varchar',
52
- column_default: null, is_nullable: 'NO', character_maximum_length: 100 }
53
- ],
54
- primaryKey: ['user_id'],
55
- uniques: [{ name: 'uq_users_email', columns: ['email'] }],
56
- foreignKeys: [],
57
- indexes: [
58
- { name: 'pk_users', columns: ['user_id'], unique: true, primary: true }
59
- ],
60
- checks: []
61
- }
62
- ];
63
-
64
- async function listSchemas() {
65
- return Array.from(new Set(TABLES.map(t => t.schemaName))).sort();
66
- }
67
-
68
- async function introspect({ table, schemas }) {
69
- if (table) {
70
- if (table.includes('.')) {
71
- const meta = TABLES.find(t => `${t.schemaName}.${t.tableName}` === table);
72
- return { tables: meta ? [meta] : [] };
73
- }
74
- const meta = TABLES.find(t => t.tableName === table);
75
- return { tables: meta ? [meta] : [] };
76
- }
77
- if (Array.isArray(schemas) && schemas.length > 0) {
78
- const set = new Set(schemas);
79
- return { tables: TABLES.filter(t => set.has(t.schemaName)) };
80
- }
81
- return { tables: TABLES };
82
- }
83
-
84
- module.exports = { introspect, listSchemas };
@@ -1,13 +0,0 @@
1
- 'use strict';
2
-
3
- /**
4
- * Stub introspector that simulates a database connection failure.
5
- */
6
-
7
- async function introspect() {
8
- const err = new Error('connect ECONNREFUSED 127.0.0.1:5432');
9
- err.code = 'ECONNREFUSED';
10
- throw err;
11
- }
12
-
13
- module.exports = { introspect };
@@ -1,12 +0,0 @@
1
- 'use strict';
2
-
3
- /**
4
- * Stub introspector that returns no tables (simulates an empty database
5
- * or a missing single-table lookup).
6
- */
7
-
8
- async function introspect() {
9
- return { tables: [] };
10
- }
11
-
12
- module.exports = { introspect };
@@ -1,124 +0,0 @@
1
- 'use strict';
2
-
3
- /**
4
- * Stub introspector returning four tables across two schemas
5
- * (inventory.products, inventory.categories, audit.events, audit.logs).
6
- *
7
- * Used by dbschema-introspect CLI tests to exercise schema-aware bulk modes
8
- * (--schema=<list>, qualified --table) without touching a real database.
9
- */
10
-
11
- const TABLES = [
12
- {
13
- schemaName: 'inventory',
14
- tableName: 'products',
15
- columns: [
16
- { column_name: 'product_id', data_type: 'uuid', udt_name: 'uuid',
17
- column_default: null, is_nullable: 'NO' },
18
- { column_name: 'category_id', data_type: 'uuid', udt_name: 'uuid',
19
- column_default: null, is_nullable: 'NO' },
20
- { column_name: 'name', data_type: 'character varying', udt_name: 'varchar',
21
- column_default: null, is_nullable: 'NO', character_maximum_length: 100 }
22
- ],
23
- primaryKey: ['product_id'],
24
- uniques: [],
25
- foreignKeys: [{
26
- name: 'fk_products_category',
27
- columns: ['category_id'],
28
- references: { schema: 'inventory', table: 'categories', columns: ['category_id'] },
29
- onDelete: 'CASCADE',
30
- onUpdate: null
31
- }],
32
- indexes: [
33
- { name: 'pk_products', columns: ['product_id'], unique: true, primary: true }
34
- ],
35
- checks: []
36
- },
37
- {
38
- schemaName: 'inventory',
39
- tableName: 'categories',
40
- columns: [
41
- { column_name: 'category_id', data_type: 'uuid', udt_name: 'uuid',
42
- column_default: null, is_nullable: 'NO' },
43
- { column_name: 'name', data_type: 'character varying', udt_name: 'varchar',
44
- column_default: null, is_nullable: 'NO', character_maximum_length: 50 }
45
- ],
46
- primaryKey: ['category_id'],
47
- uniques: [],
48
- foreignKeys: [],
49
- indexes: [
50
- { name: 'pk_categories', columns: ['category_id'], unique: true, primary: true }
51
- ],
52
- checks: []
53
- },
54
- {
55
- schemaName: 'audit',
56
- tableName: 'events',
57
- columns: [
58
- { column_name: 'event_id', data_type: 'uuid', udt_name: 'uuid',
59
- column_default: null, is_nullable: 'NO' },
60
- { column_name: 'product_id', data_type: 'uuid', udt_name: 'uuid',
61
- column_default: null, is_nullable: 'NO' },
62
- { column_name: 'action', data_type: 'character varying', udt_name: 'varchar',
63
- column_default: null, is_nullable: 'NO', character_maximum_length: 50 }
64
- ],
65
- primaryKey: ['event_id'],
66
- uniques: [],
67
- foreignKeys: [{
68
- name: 'fk_events_product',
69
- columns: ['product_id'],
70
- references: { schema: 'inventory', table: 'products', columns: ['product_id'] },
71
- onDelete: 'CASCADE',
72
- onUpdate: null
73
- }],
74
- indexes: [
75
- { name: 'pk_events', columns: ['event_id'], unique: true, primary: true }
76
- ],
77
- checks: []
78
- },
79
- {
80
- schemaName: 'audit',
81
- tableName: 'logs',
82
- columns: [
83
- { column_name: 'log_id', data_type: 'uuid', udt_name: 'uuid',
84
- column_default: null, is_nullable: 'NO' },
85
- { column_name: 'message', data_type: 'text', udt_name: 'text',
86
- column_default: null, is_nullable: 'YES' }
87
- ],
88
- primaryKey: ['log_id'],
89
- uniques: [],
90
- foreignKeys: [],
91
- indexes: [
92
- { name: 'pk_logs', columns: ['log_id'], unique: true, primary: true }
93
- ],
94
- checks: []
95
- }
96
- ];
97
-
98
- function findByQualified(qualified) {
99
- return TABLES.find(t => `${t.schemaName}.${t.tableName}` === qualified);
100
- }
101
-
102
- async function introspect({ table, schemas }) {
103
- if (table) {
104
- // table arg may be qualified ('inventory.products') or bare ('products')
105
- if (table.includes('.')) {
106
- const meta = findByQualified(table);
107
- return { tables: meta ? [meta] : [] };
108
- }
109
- const meta = TABLES.find(t => t.tableName === table);
110
- return { tables: meta ? [meta] : [] };
111
- }
112
- if (Array.isArray(schemas) && schemas.length > 0) {
113
- const set = new Set(schemas);
114
- return { tables: TABLES.filter(t => set.has(t.schemaName)) };
115
- }
116
- // No filter → all tables
117
- return { tables: TABLES };
118
- }
119
-
120
- async function listSchemas() {
121
- return Array.from(new Set(TABLES.map(t => t.schemaName))).sort();
122
- }
123
-
124
- module.exports = { introspect, listSchemas };
@@ -1,64 +0,0 @@
1
- 'use strict';
2
-
3
- /**
4
- * Stub introspector containing only the `inventory` schema (2 tables).
5
- *
6
- * Used by dbschema-introspect CLI tests to exercise --schema=inventory bulk mode
7
- * (single-schema flat layout, schema: emitted in body).
8
- */
9
-
10
- const TABLES = [
11
- {
12
- schemaName: 'inventory',
13
- tableName: 'products',
14
- columns: [
15
- { column_name: 'product_id', data_type: 'uuid', udt_name: 'uuid',
16
- column_default: null, is_nullable: 'NO' },
17
- { column_name: 'name', data_type: 'character varying', udt_name: 'varchar',
18
- column_default: null, is_nullable: 'NO', character_maximum_length: 100 }
19
- ],
20
- primaryKey: ['product_id'],
21
- uniques: [],
22
- foreignKeys: [],
23
- indexes: [
24
- { name: 'pk_products', columns: ['product_id'], unique: true, primary: true }
25
- ],
26
- checks: []
27
- },
28
- {
29
- schemaName: 'inventory',
30
- tableName: 'categories',
31
- columns: [
32
- { column_name: 'category_id', data_type: 'uuid', udt_name: 'uuid',
33
- column_default: null, is_nullable: 'NO' },
34
- { column_name: 'name', data_type: 'character varying', udt_name: 'varchar',
35
- column_default: null, is_nullable: 'NO', character_maximum_length: 50 }
36
- ],
37
- primaryKey: ['category_id'],
38
- uniques: [],
39
- foreignKeys: [],
40
- indexes: [
41
- { name: 'pk_categories', columns: ['category_id'], unique: true, primary: true }
42
- ],
43
- checks: []
44
- }
45
- ];
46
-
47
- async function introspect({ table, schemas }) {
48
- if (table) {
49
- const lookupQualified = table.includes('.') ? table : `inventory.${table}`;
50
- const meta = TABLES.find(t => `${t.schemaName}.${t.tableName}` === lookupQualified);
51
- return { tables: meta ? [meta] : [] };
52
- }
53
- if (Array.isArray(schemas) && schemas.length > 0) {
54
- const set = new Set(schemas);
55
- return { tables: TABLES.filter(t => set.has(t.schemaName)) };
56
- }
57
- return { tables: TABLES };
58
- }
59
-
60
- async function listSchemas() {
61
- return ['inventory'];
62
- }
63
-
64
- module.exports = { introspect, listSchemas };