@restforgejs/platform 4.2.8 → 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 (324) 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/templates/dashboard-catalog.js +1 -437
  25. package/generators/lib/templates/db-connection-env.js +1 -212
  26. package/generators/lib/templates/dbschema-catalog.js +1 -489
  27. package/generators/lib/templates/field-validation-catalog.js +1 -531
  28. package/generators/lib/templates/mysql-template.js +1 -3863
  29. package/generators/lib/templates/oracle-template.js +1 -3915
  30. package/generators/lib/templates/postgres-template.js +1 -5838
  31. package/generators/lib/templates/query-declarative-catalog.js +1 -199
  32. package/generators/lib/templates/sqlite-template.js +1 -3440
  33. package/generators/lib/utils/env-manager.js +6 -0
  34. package/generators/lib/utils/path-validator.js +71 -0
  35. package/generators/lib/validators/payload-validator.js +1 -2
  36. package/integrity-manifest.json +28 -10
  37. package/package.json +11 -3
  38. package/scripts/verify-integrity.js +1 -1
  39. package/server.js +1 -1
  40. package/src/components/handlers/adjust_handler.js +1 -1
  41. package/src/components/handlers/audit_handler.js +1 -1
  42. package/src/components/handlers/delete_handler.js +1 -1
  43. package/src/components/handlers/export_handler.js +1 -1
  44. package/src/components/handlers/import_handler.js +1 -1
  45. package/src/components/handlers/insert_handler.js +1 -1
  46. package/src/components/handlers/update_handler.js +1 -1
  47. package/src/components/handlers/upload_handler.js +1 -1
  48. package/src/components/handlers/workflow_handler.js +1 -1
  49. package/src/components/integrations/webhook.js +1 -1
  50. package/src/consumers/baseConsumer.js +1 -1
  51. package/src/consumers/declarativeMapper.js +1 -1
  52. package/src/consumers/handlers/apiHandler.js +1 -1
  53. package/src/consumers/handlers/consoleHandler.js +1 -1
  54. package/src/consumers/handlers/databaseHandler.js +1 -1
  55. package/src/consumers/handlers/index.js +1 -1
  56. package/src/consumers/handlers/kafkaHandler.js +1 -1
  57. package/src/consumers/index.js +1 -1
  58. package/src/consumers/messageTransformer.js +1 -1
  59. package/src/consumers/validator.js +1 -1
  60. package/src/core/db/dialect/base-dialect.js +1 -1
  61. package/src/core/db/dialect/index.js +1 -1
  62. package/src/core/db/dialect/mysql-dialect.js +1 -1
  63. package/src/core/db/dialect/oracle-dialect.js +1 -1
  64. package/src/core/db/dialect/postgres-dialect.js +1 -1
  65. package/src/core/db/dialect/sqlite-dialect.js +1 -1
  66. package/src/core/db/flatten-helper.js +1 -1
  67. package/src/core/db/query-builder-error.js +1 -1
  68. package/src/core/db/query-builder.js +1 -1
  69. package/src/core/db/relation-helper.js +1 -1
  70. package/src/core/handlers/delete_handler.js +1 -1
  71. package/src/core/handlers/insert_handler.js +1 -1
  72. package/src/core/handlers/update_handler.js +1 -1
  73. package/src/core/models/base-model.js +1 -1
  74. package/src/core/utils/cache-manager.js +1 -1
  75. package/src/core/utils/component-engine.js +1 -1
  76. package/src/core/utils/context-builder.js +1 -1
  77. package/src/core/utils/datetime-formatter.js +1 -1
  78. package/src/core/utils/datetime-parser.js +1 -1
  79. package/src/core/utils/db.js +1 -1
  80. package/src/core/utils/logger.js +1 -1
  81. package/src/core/utils/payload-loader.js +1 -1
  82. package/src/core/utils/security-checks.js +1 -1
  83. package/src/middleware/body-options.js +1 -1
  84. package/src/middleware/cors.js +1 -1
  85. package/src/middleware/idempotency.js +1 -1
  86. package/src/middleware/rate-limiter.js +1 -1
  87. package/src/middleware/request-logger.js +1 -1
  88. package/src/middleware/security-headers.js +1 -1
  89. package/src/models/base-model-mysql.js +1 -1
  90. package/src/models/base-model-oracle.js +1 -1
  91. package/src/models/base-model-sqlite.js +1 -1
  92. package/src/models/base-model.js +1 -1
  93. package/src/pro/caching/redis-client.js +1 -1
  94. package/src/pro/caching/redis-helper.js +1 -1
  95. package/src/pro/consumers/baseConsumer.js +1 -1
  96. package/src/pro/consumers/declarativeMapper.js +1 -1
  97. package/src/pro/consumers/handlers/apiHandler.js +1 -1
  98. package/src/pro/consumers/handlers/consoleHandler.js +1 -1
  99. package/src/pro/consumers/handlers/databaseHandler.js +1 -1
  100. package/src/pro/consumers/handlers/index.js +1 -1
  101. package/src/pro/consumers/handlers/kafkaHandler.js +1 -1
  102. package/src/pro/consumers/index.js +1 -1
  103. package/src/pro/consumers/messageTransformer.js +1 -1
  104. package/src/pro/consumers/validator.js +1 -1
  105. package/src/pro/database/base-model-mysql.js +1 -1
  106. package/src/pro/database/base-model-oracle.js +1 -1
  107. package/src/pro/database/base-model-sqlite.js +1 -1
  108. package/src/pro/database/db-mysql.js +1 -1
  109. package/src/pro/database/db-oracle.js +1 -1
  110. package/src/pro/database/db-sqlite.js +1 -1
  111. package/src/pro/excel/excel-generator.js +1 -1
  112. package/src/pro/excel/excel-parser.js +1 -1
  113. package/src/pro/excel/export-service.js +1 -1
  114. package/src/pro/excel/export_handler.js +1 -1
  115. package/src/pro/excel/import-service.js +1 -1
  116. package/src/pro/excel/import-validator.js +1 -1
  117. package/src/pro/excel/import_handler.js +1 -1
  118. package/src/pro/excel/upsert-builder.js +1 -1
  119. package/src/pro/idgen/idgen-routes.js +1 -1
  120. package/src/pro/integrations/lookup-resolver.js +1 -1
  121. package/src/pro/integrations/upload-handler-v2.js +1 -1
  122. package/src/pro/integrations/upload-handler.js +1 -1
  123. package/src/pro/integrations/webhook.js +1 -1
  124. package/src/pro/locking/lock-routes.js +1 -1
  125. package/src/pro/locking/resource-lock-manager.js +1 -1
  126. package/src/pro/messaging/kafkaConsumerService.js +1 -1
  127. package/src/pro/messaging/kafkaService.js +1 -1
  128. package/src/pro/messaging/messagehubService.js +1 -1
  129. package/src/pro/messaging/rabbitmqService.js +1 -1
  130. package/src/pro/scheduler/job-manager.js +1 -1
  131. package/src/pro/scheduler/job-routes.js +1 -1
  132. package/src/pro/scheduler/job-validator.js +1 -1
  133. package/src/pro/storage/base-storage-provider.js +1 -1
  134. package/src/pro/storage/file-metadata-helper.js +1 -1
  135. package/src/pro/storage/index.js +1 -1
  136. package/src/pro/storage/local-storage-provider.js +1 -1
  137. package/src/pro/storage/s3-storage-provider.js +1 -1
  138. package/src/pro/storage/upload-cleanup-job.js +1 -1
  139. package/src/pro/storage/upload-cleanup-scheduler.js +1 -1
  140. package/src/pro/storage/upload-pending-tracker.js +1 -1
  141. package/src/pro/websocket/broadcast-helper.js +1 -1
  142. package/src/pro/websocket/index.js +1 -1
  143. package/src/pro/websocket/livesync-server.js +1 -1
  144. package/src/pro/websocket/ws-broadcaster.js +1 -1
  145. package/src/services/export-service.js +1 -1
  146. package/src/services/import-service.js +1 -1
  147. package/src/services/kafkaConsumerService.js +1 -1
  148. package/src/services/kafkaService.js +1 -1
  149. package/src/services/messagehubService.js +1 -1
  150. package/src/services/rabbitmqService.js +1 -1
  151. package/src/utils/cache-invalidation-registry.js +1 -1
  152. package/src/utils/cache-manager.js +1 -1
  153. package/src/utils/component-engine.js +1 -1
  154. package/src/utils/config-extractor.js +1 -1
  155. package/src/utils/consumerLogger.js +1 -1
  156. package/src/utils/context-builder.js +1 -1
  157. package/src/utils/dashboard-helpers.js +1 -1
  158. package/src/utils/dateHelper.js +1 -1
  159. package/src/utils/datetime-formatter.js +1 -1
  160. package/src/utils/datetime-parser.js +1 -1
  161. package/src/utils/db-bootstrap.js +1 -1
  162. package/src/utils/db-mysql.js +1 -1
  163. package/src/utils/db-oracle.js +1 -1
  164. package/src/utils/db-sqlite.js +1 -1
  165. package/src/utils/db.js +1 -1
  166. package/src/utils/demo-generator.js +1 -1
  167. package/src/utils/excel-generator.js +1 -1
  168. package/src/utils/excel-parser.js +1 -1
  169. package/src/utils/file-watcher.js +1 -1
  170. package/src/utils/id-generator.js +1 -1
  171. package/src/utils/idempotency-manager.js +1 -1
  172. package/src/utils/import-validator.js +1 -1
  173. package/src/utils/license-client.js +1 -1
  174. package/src/utils/lock-manager.js +1 -1
  175. package/src/utils/logger.js +1 -1
  176. package/src/utils/lookup-resolver.js +1 -1
  177. package/src/utils/payload-loader.js +1 -1
  178. package/src/utils/processor-response.js +1 -1
  179. package/src/utils/rabbitmq.js +1 -1
  180. package/src/utils/redis-client.js +1 -1
  181. package/src/utils/redis-helper.js +1 -1
  182. package/src/utils/request-scope.js +1 -1
  183. package/src/utils/security-checks.js +1 -1
  184. package/src/utils/service-resolver.js +1 -1
  185. package/src/utils/shutdown-coordinator.js +1 -1
  186. package/src/utils/trusted-keys.js +1 -1
  187. package/src/utils/upload-handler.js +1 -1
  188. package/src/utils/upsert-builder.js +1 -1
  189. package/src/utils/workflow-hook-executor.js +1 -1
  190. package/generators/metadata/global.json +0 -58
  191. package/generators/metadata/test-mysql-workbench.json +0 -118
  192. package/generators/metadata/test-mysql.json +0 -56
  193. package/generators/metadata/test-oracle-workbench.json +0 -118
  194. package/generators/metadata/test-oracle.json +0 -56
  195. package/generators/metadata/test-pg-workbench.json +0 -118
  196. package/generators/metadata/test-pg.json +0 -56
  197. package/generators/scripts/obfuscate-source.js +0 -356
  198. package/generators/scripts/validate-catalog.js +0 -430
  199. package/generators/scripts/validate-dbschema-catalog.js +0 -708
  200. package/generators/tests/baseline/mysql/mini_inventory_item/src/models/mini-inventory/item.js +0 -944
  201. package/generators/tests/baseline/mysql/mini_inventory_item/src/modules/mini-inventory/item.js +0 -740
  202. package/generators/tests/baseline/mysql/mini_inventory_item/src/modules/mini-inventory.js +0 -336
  203. package/generators/tests/baseline/oracle/mini_inventory_item/src/models/mini-inventory/item.js +0 -1002
  204. package/generators/tests/baseline/oracle/mini_inventory_item/src/modules/mini-inventory/item.js +0 -740
  205. package/generators/tests/baseline/oracle/mini_inventory_item/src/modules/mini-inventory.js +0 -336
  206. package/generators/tests/baseline/postgres/mini_inventory_item/src/models/mini-inventory/item.js +0 -1333
  207. package/generators/tests/baseline/postgres/mini_inventory_item/src/modules/mini-inventory/item.js +0 -1173
  208. package/generators/tests/baseline/postgres/mini_inventory_item/src/modules/mini-inventory.js +0 -496
  209. package/generators/tests/fixtures/payloads/custom-sensitive.json +0 -27
  210. package/generators/tests/fixtures/payloads/dynamic-search-optout.json +0 -23
  211. package/generators/tests/fixtures/payloads/login-with-password.json +0 -22
  212. package/generators/tests/fixtures/payloads/order-process.json +0 -52
  213. package/generators/tests/fixtures/payloads/with-inline-sql.json +0 -26
  214. package/generators/tests/integration-tahap4b/README.md +0 -145
  215. package/generators/tests/integration-tahap4b/run-concurrent.js +0 -77
  216. package/generators/tests/integration-tahap4b/seed.sql +0 -53
  217. package/generators/tests/integration-tahap4b/verify.sql +0 -110
  218. package/generators/tests/unit/cli/create-dashboard.test.js +0 -505
  219. package/generators/tests/unit/cli/create-processor.test.js +0 -319
  220. package/generators/tests/unit/cli/dispatch-dashboard.test.js +0 -149
  221. package/generators/tests/unit/lib/dashboard-generator.test.js +0 -895
  222. package/generators/tests/unit/lib/dashboard-validator.test.js +0 -354
  223. package/generators/tests/unit/lib/dbschema-kit/apply-executor.test.js +0 -437
  224. package/generators/tests/unit/lib/dbschema-kit/cli/dbschema-introspect.test.js +0 -393
  225. package/generators/tests/unit/lib/dbschema-kit/cli/dbschema-kit-generate-ddl.test.js +0 -104
  226. package/generators/tests/unit/lib/dbschema-kit/cli/dbschema-kit-init.test.js +0 -119
  227. package/generators/tests/unit/lib/dbschema-kit/cli/dbschema-kit-list.test.js +0 -48
  228. package/generators/tests/unit/lib/dbschema-kit/cli/dbschema-kit-migrate.test.js +0 -175
  229. package/generators/tests/unit/lib/dbschema-kit/cli/dbschema-kit-validate.test.js +0 -102
  230. package/generators/tests/unit/lib/dbschema-kit/cli/dbschema-models.test.js +0 -43
  231. package/generators/tests/unit/lib/dbschema-kit/cli/fixtures/introspect-stubs/all-schemas-listing.js +0 -84
  232. package/generators/tests/unit/lib/dbschema-kit/cli/fixtures/introspect-stubs/connection-error.js +0 -13
  233. package/generators/tests/unit/lib/dbschema-kit/cli/fixtures/introspect-stubs/empty.js +0 -12
  234. package/generators/tests/unit/lib/dbschema-kit/cli/fixtures/introspect-stubs/multi-schema.js +0 -124
  235. package/generators/tests/unit/lib/dbschema-kit/cli/fixtures/introspect-stubs/single-schema-inventory.js +0 -64
  236. package/generators/tests/unit/lib/dbschema-kit/cli/fixtures/introspect-stubs/two-tables.js +0 -66
  237. package/generators/tests/unit/lib/dbschema-kit/cli/fixtures/migrate-stubs/connection-error.js +0 -9
  238. package/generators/tests/unit/lib/dbschema-kit/cli/fixtures/migrate-stubs/partial.js +0 -29
  239. package/generators/tests/unit/lib/dbschema-kit/cli/fixtures/migrate-stubs/rollback.js +0 -26
  240. package/generators/tests/unit/lib/dbschema-kit/cli/fixtures/migrate-stubs/success.js +0 -43
  241. package/generators/tests/unit/lib/dbschema-kit/cli/fixtures/multi-schema/audit/events.js +0 -18
  242. package/generators/tests/unit/lib/dbschema-kit/cli/fixtures/multi-schema/inventory/products.js +0 -9
  243. package/generators/tests/unit/lib/dbschema-kit/cli/fixtures/multi-schema/users.js +0 -8
  244. package/generators/tests/unit/lib/dbschema-kit/connection.test.js +0 -112
  245. package/generators/tests/unit/lib/dbschema-kit/ddl-generator.test.js +0 -205
  246. package/generators/tests/unit/lib/dbschema-kit/define-model.test.js +0 -56
  247. package/generators/tests/unit/lib/dbschema-kit/dialect/index.test.js +0 -46
  248. package/generators/tests/unit/lib/dbschema-kit/dialect/mysql.test.js +0 -126
  249. package/generators/tests/unit/lib/dbschema-kit/dialect/oracle.test.js +0 -126
  250. package/generators/tests/unit/lib/dbschema-kit/dialect/postgres.test.js +0 -131
  251. package/generators/tests/unit/lib/dbschema-kit/dialect/sqlite.test.js +0 -126
  252. package/generators/tests/unit/lib/dbschema-kit/driver-loader.test.js +0 -93
  253. package/generators/tests/unit/lib/dbschema-kit/emitters/create-index.test.js +0 -173
  254. package/generators/tests/unit/lib/dbschema-kit/emitters/create-table.test.js +0 -376
  255. package/generators/tests/unit/lib/dbschema-kit/emitters/drop-table.test.js +0 -78
  256. package/generators/tests/unit/lib/dbschema-kit/fixtures/connection/invalid-dialect.env +0 -6
  257. package/generators/tests/unit/lib/dbschema-kit/fixtures/connection/missing-dialect.env +0 -5
  258. package/generators/tests/unit/lib/dbschema-kit/fixtures/connection/missing-host.env +0 -5
  259. package/generators/tests/unit/lib/dbschema-kit/fixtures/connection/oracle-valid.env +0 -6
  260. package/generators/tests/unit/lib/dbschema-kit/fixtures/connection/postgres-valid.env +0 -7
  261. package/generators/tests/unit/lib/dbschema-kit/fixtures/connection/sqlite-valid.env +0 -2
  262. package/generators/tests/unit/lib/dbschema-kit/fixtures/integration/mini-inventory/category.js +0 -11
  263. package/generators/tests/unit/lib/dbschema-kit/fixtures/integration/mini-inventory/item_product.js +0 -11
  264. package/generators/tests/unit/lib/dbschema-kit/fixtures/integration/mini-inventory/stock_inbound.js +0 -24
  265. package/generators/tests/unit/lib/dbschema-kit/fixtures/integration/mini-inventory/stock_inbound_item.js +0 -28
  266. package/generators/tests/unit/lib/dbschema-kit/fixtures/integration/mini-inventory/supplier.js +0 -9
  267. package/generators/tests/unit/lib/dbschema-kit/fixtures/integration/mini-inventory/warehouse.js +0 -9
  268. package/generators/tests/unit/lib/dbschema-kit/fixtures/integration/mini-inventory-invalid/orphan.js +0 -17
  269. package/generators/tests/unit/lib/dbschema-kit/fixtures/integration/mini-inventory-multifolder/master/category.js +0 -11
  270. package/generators/tests/unit/lib/dbschema-kit/fixtures/integration/mini-inventory-multifolder/master/item_product.js +0 -11
  271. package/generators/tests/unit/lib/dbschema-kit/fixtures/integration/mini-inventory-multifolder/master/supplier.js +0 -9
  272. package/generators/tests/unit/lib/dbschema-kit/fixtures/integration/mini-inventory-multifolder/master/warehouse.js +0 -9
  273. package/generators/tests/unit/lib/dbschema-kit/fixtures/integration/mini-inventory-multifolder/transactions/stock_inbound.js +0 -24
  274. package/generators/tests/unit/lib/dbschema-kit/fixtures/integration/mini-inventory-multifolder/transactions/stock_inbound_item.js +0 -28
  275. package/generators/tests/unit/lib/dbschema-kit/fixtures/integration/multi-schema/audit/events.js +0 -18
  276. package/generators/tests/unit/lib/dbschema-kit/fixtures/integration/multi-schema/inventory/products.js +0 -9
  277. package/generators/tests/unit/lib/dbschema-kit/fixtures/integration/multi-schema/public/users.js +0 -9
  278. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/duplicate-subfolder/extra/category.js +0 -8
  279. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/duplicate-subfolder/master/category.js +0 -8
  280. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/duplicate-tablename/bar.js +0 -8
  281. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/duplicate-tablename/foo.js +0 -8
  282. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/empty-folder/README.md +0 -1
  283. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/invalid-export/plain.js +0 -3
  284. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/invalid-schema/bad.js +0 -6
  285. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/legacy-pattern/legacy.js +0 -12
  286. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/multi-schema-distinct/audit/products.js +0 -9
  287. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/multi-schema-distinct/inventory/products.js +0 -9
  288. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/multi-schema-duplicate/a/products.js +0 -8
  289. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/multi-schema-duplicate/b/products.js +0 -8
  290. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/nested-deep/a/b/c/deep_table.js +0 -8
  291. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/recursive-multi-folder/.hidden/ignored.js +0 -7
  292. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/recursive-multi-folder/master/category.js +0 -8
  293. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/recursive-multi-folder/master/supplier.js +0 -8
  294. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/recursive-multi-folder/transactions/stock_inbound.js +0 -8
  295. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/recursive-multi-folder/transactions/stock_inbound_item.js +0 -8
  296. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/valid-multiple/category.js +0 -8
  297. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/valid-multiple/item_product.js +0 -9
  298. package/generators/tests/unit/lib/dbschema-kit/fixtures/loader/valid-single/category.js +0 -8
  299. package/generators/tests/unit/lib/dbschema-kit/integration.test.js +0 -217
  300. package/generators/tests/unit/lib/dbschema-kit/introspect-mapper.test.js +0 -403
  301. package/generators/tests/unit/lib/dbschema-kit/ir-builder.test.js +0 -390
  302. package/generators/tests/unit/lib/dbschema-kit/loader.test.js +0 -128
  303. package/generators/tests/unit/lib/dbschema-kit/naming.test.js +0 -170
  304. package/generators/tests/unit/lib/dbschema-kit/parser/shorthand-parser.test.js +0 -237
  305. package/generators/tests/unit/lib/dbschema-kit/schema-printer.test.js +0 -251
  306. package/generators/tests/unit/lib/dbschema-kit/statement-modifier.test.js +0 -105
  307. package/generators/tests/unit/lib/dbschema-kit/statement-splitter.test.js +0 -165
  308. package/generators/tests/unit/lib/dbschema-kit/topological-sort.test.js +0 -135
  309. package/generators/tests/unit/lib/dbschema-kit/validator/check-compatibility-validator.test.js +0 -373
  310. package/generators/tests/unit/lib/dbschema-kit/validator/circular-relation-validator.test.js +0 -454
  311. package/generators/tests/unit/lib/dbschema-kit/validator/cross-model-validator.test.js +0 -512
  312. package/generators/tests/unit/lib/dbschema-kit/validator/enhanced-validate-integration.test.js +0 -390
  313. package/generators/tests/unit/lib/dbschema-kit/validator/naming-convention-validator.test.js +0 -306
  314. package/generators/tests/unit/lib/dbschema-kit/validator/schema-validator.test.js +0 -443
  315. package/generators/tests/unit/lib/dbschema-kit/validator/type-compatibility-validator.test.js +0 -440
  316. package/generators/tests/unit/lib/dbschema-kit/validator/validator-reporter.test.js +0 -172
  317. package/generators/tests/unit/lib/metadata-manager-dashboard.test.js +0 -256
  318. package/generators/tests/unit/lib/payload-validator-fieldpolicy.test.js +0 -240
  319. package/generators/tests/unit/lib/processor-validation-generator.test.js +0 -300
  320. package/generators/tests/unit/lib/sensitive-field-masker.test.js +0 -170
  321. package/generators/tests/unit/lib/sql-table-extractor.test.js +0 -119
  322. package/scripts/generate-integrity-manifest.js +0 -124
  323. package/scripts/snapshot-cli-contracts.js +0 -194
  324. 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 };