@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,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 };