ts-prorm-orm 1.1.0 → 1.2.0

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 (460) hide show
  1. package/CHANGELOG.md +83 -0
  2. package/README.md +194 -72
  3. package/dist/audit/history-query.d.ts +35 -0
  4. package/dist/audit/index.d.ts +16 -0
  5. package/dist/audit/logger.d.ts +126 -0
  6. package/dist/cache/cache-manager.d.ts +341 -0
  7. package/dist/cache/index.d.ts +8 -0
  8. package/dist/cache/redis-cluster-cache.d.ts +164 -0
  9. package/dist/cache/redis-cluster-cache.js +19 -36
  10. package/dist/cli/cloud.d.ts +55 -0
  11. package/dist/cli/cloud.js +318 -0
  12. package/dist/cli/commands/auth.d.ts +2 -0
  13. package/dist/cli/commands/auth.js +345 -0
  14. package/dist/cli/commands/billing.d.ts +2 -0
  15. package/dist/cli/commands/billing.js +135 -0
  16. package/dist/cli/commands/code.d.ts +2 -0
  17. package/dist/cli/commands/code.js +168 -0
  18. package/dist/cli/commands/config.d.ts +2 -0
  19. package/dist/cli/commands/config.js +154 -0
  20. package/dist/cli/commands/db.d.ts +2 -0
  21. package/dist/cli/commands/db.js +189 -0
  22. package/dist/cli/commands/index.d.ts +1 -0
  23. package/dist/cli/commands/index.js +22 -0
  24. package/dist/cli/commands/keys.d.ts +2 -0
  25. package/dist/cli/commands/keys.js +100 -0
  26. package/dist/cli/commands/misc.d.ts +2 -0
  27. package/dist/cli/commands/misc.js +282 -0
  28. package/dist/cli/commands/pull.d.ts +2 -0
  29. package/dist/cli/commands/pull.js +306 -0
  30. package/dist/cli/commands/runners.d.ts +2 -0
  31. package/dist/cli/commands/runners.js +218 -0
  32. package/dist/cli/commands/scaffold.d.ts +2 -0
  33. package/dist/cli/commands/scaffold.js +383 -0
  34. package/dist/cli/commands/secrets.d.ts +2 -0
  35. package/dist/cli/commands/secrets.js +162 -0
  36. package/dist/cli/commands/store.d.ts +2 -0
  37. package/dist/cli/commands/store.js +274 -0
  38. package/dist/cli/commands/system.d.ts +10 -0
  39. package/dist/cli/commands/system.js +169 -0
  40. package/dist/cli/commands/teams.d.ts +2 -0
  41. package/dist/cli/commands/teams.js +189 -0
  42. package/dist/cli/commands/user.d.ts +2 -0
  43. package/dist/cli/commands/user.js +171 -0
  44. package/dist/cli/framework.d.ts +103 -0
  45. package/dist/cli/framework.js +436 -0
  46. package/dist/cli/io.d.ts +26 -0
  47. package/dist/cli/io.js +181 -0
  48. package/dist/cli/keychain.d.ts +10 -0
  49. package/dist/cli/keychain.js +101 -0
  50. package/dist/cli/prompt.d.ts +20 -0
  51. package/dist/cli/prompt.js +111 -0
  52. package/dist/cli.d.ts +214 -0
  53. package/dist/cli.js +72 -5
  54. package/dist/compliance/audit-trail.d.ts +66 -0
  55. package/dist/compliance/backup-verification.d.ts +279 -0
  56. package/dist/compliance/breach-detector.d.ts +197 -0
  57. package/dist/compliance/consent-record.d.ts +107 -0
  58. package/dist/compliance/consent-versioning.d.ts +169 -0
  59. package/dist/compliance/cross-border-log.d.ts +254 -0
  60. package/dist/compliance/data-classifier.d.ts +127 -0
  61. package/dist/compliance/data-lineage.d.ts +268 -0
  62. package/dist/compliance/data-masker.d.ts +110 -0
  63. package/dist/compliance/data-portability.d.ts +98 -0
  64. package/dist/compliance/data-retention.d.ts +108 -0
  65. package/dist/compliance/dsar-workflow.d.ts +175 -0
  66. package/dist/compliance/field-encryption.d.ts +84 -0
  67. package/dist/compliance/immutable-record.d.ts +84 -0
  68. package/dist/compliance/index.d.ts +93 -0
  69. package/dist/compliance/privacy-impact-assessment.d.ts +196 -0
  70. package/dist/compliance/pseudonymization.d.ts +96 -0
  71. package/dist/compliance/query-firewall.d.ts +661 -0
  72. package/dist/compliance/rate-limiter.d.ts +203 -0
  73. package/dist/compliance/right-to-erasure.d.ts +96 -0
  74. package/dist/compliance/row-level-security.d.ts +152 -0
  75. package/dist/compliance/security-decorator.d.ts +388 -0
  76. package/dist/compliance/security-monitor.d.ts +170 -0
  77. package/dist/compliance/sensitive-data-discovery.d.ts +151 -0
  78. package/dist/compliance/session-isolation.d.ts +286 -0
  79. package/dist/compliance/tls-enforcer.d.ts +51 -0
  80. package/dist/compliance/worm-storage.d.ts +225 -0
  81. package/dist/connection-manager.d.ts +130 -0
  82. package/dist/connection-pool.d.ts +311 -0
  83. package/dist/decorators/audit.d.ts +49 -0
  84. package/dist/decorators/check.d.ts +218 -0
  85. package/dist/decorators/collate.d.ts +346 -0
  86. package/dist/decorators/comment.d.ts +51 -0
  87. package/dist/decorators/database-settings.d.ts +193 -0
  88. package/dist/decorators/default.d.ts +148 -0
  89. package/dist/decorators/encryption.d.ts +175 -0
  90. package/dist/decorators/engine.d.ts +97 -0
  91. package/dist/decorators/fk-constraints.d.ts +387 -0
  92. package/dist/decorators/foreign-table.d.ts +57 -0
  93. package/dist/decorators/generated.d.ts +232 -0
  94. package/dist/decorators/hstore.d.ts +96 -0
  95. package/dist/decorators/index.d.ts +57 -0
  96. package/dist/decorators/index.js +14 -30
  97. package/dist/decorators/json-column.d.ts +47 -0
  98. package/dist/decorators/jsonb.d.ts +83 -0
  99. package/dist/decorators/orm-decorators.d.ts +274 -0
  100. package/dist/decorators/permissions.d.ts +192 -0
  101. package/dist/decorators/procedure.d.ts +168 -0
  102. package/dist/decorators/procedure.js +31 -7
  103. package/dist/decorators/query-options.d.ts +527 -0
  104. package/dist/decorators/range.d.ts +122 -0
  105. package/dist/decorators/set-column.d.ts +43 -0
  106. package/dist/decorators/spatial.d.ts +60 -0
  107. package/dist/decorators/storage.d.ts +561 -0
  108. package/dist/decorators/timezone.d.ts +319 -0
  109. package/dist/decorators/trigger.d.ts +50 -0
  110. package/dist/decorators/uuid.d.ts +102 -0
  111. package/dist/decorators/view.d.ts +213 -0
  112. package/dist/diagrams/chen-diagram.d.ts +70 -0
  113. package/dist/diagrams/chen-diagram.js +33 -31
  114. package/dist/diagrams/class-diagram.d.ts +78 -0
  115. package/dist/diagrams/class-diagram.js +23 -27
  116. package/dist/diagrams/dependency-diagram.d.ts +82 -0
  117. package/dist/diagrams/dependency-diagram.js +18 -9
  118. package/dist/diagrams/er-diagram.d.ts +82 -0
  119. package/dist/diagrams/er-diagram.js +174 -231
  120. package/dist/diagrams/flow-diagram.d.ts +70 -0
  121. package/dist/diagrams/flow-diagram.js +23 -18
  122. package/dist/diagrams/gantt-diagram.d.ts +67 -0
  123. package/dist/diagrams/gantt-diagram.js +20 -18
  124. package/dist/diagrams/index-diagram.d.ts +61 -0
  125. package/dist/diagrams/index-diagram.js +36 -31
  126. package/dist/diagrams/index.d.ts +155 -0
  127. package/dist/diagrams/index.js +7 -1
  128. package/dist/diagrams/migration-diagram.d.ts +67 -0
  129. package/dist/diagrams/migration-diagram.js +45 -57
  130. package/dist/diagrams/model-diagram.d.ts +85 -0
  131. package/dist/diagrams/model-diagram.js +225 -287
  132. package/dist/diagrams/package-diagram.d.ts +69 -0
  133. package/dist/diagrams/package-diagram.js +30 -32
  134. package/dist/diagrams/palette.d.ts +138 -0
  135. package/dist/diagrams/palette.js +134 -25
  136. package/dist/diagrams/relational-diagram.d.ts +82 -0
  137. package/dist/diagrams/relational-diagram.js +51 -59
  138. package/dist/diagrams/schemadoc-diagram.d.ts +57 -0
  139. package/dist/diagrams/schemadoc-diagram.js +36 -28
  140. package/dist/diagrams/sequence-diagram.d.ts +61 -0
  141. package/dist/diagrams/sequence-diagram.js +20 -11
  142. package/dist/diagrams/state-diagram.d.ts +85 -0
  143. package/dist/diagrams/state-diagram.js +21 -17
  144. package/dist/diagrams/svg-dom.d.ts +62 -0
  145. package/dist/diagrams/svg-dom.js +11 -0
  146. package/dist/diagrams/tree-diagram.d.ts +47 -0
  147. package/dist/diagrams/tree-diagram.js +19 -10
  148. package/dist/dialects/clickhouse/index.d.ts +660 -0
  149. package/dist/dialects/clickhouse/index.js +107 -2
  150. package/dist/dialects/cockroachdb/index.d.ts +1708 -0
  151. package/dist/dialects/cockroachdb/index.js +139 -10
  152. package/dist/dialects/cratedb/index.d.ts +262 -0
  153. package/dist/dialects/cratedb/index.js +148 -0
  154. package/dist/dialects/databricks/index.d.ts +397 -0
  155. package/dist/dialects/databricks/index.js +233 -11
  156. package/dist/dialects/db2/index.d.ts +729 -0
  157. package/dist/dialects/db2/index.js +152 -2
  158. package/dist/dialects/dialect.d.ts +1653 -0
  159. package/dist/dialects/duckdb/index.d.ts +440 -0
  160. package/dist/dialects/duckdb/index.js +21 -37
  161. package/dist/dialects/exasol/index.d.ts +197 -0
  162. package/dist/dialects/exasol/index.js +14 -0
  163. package/dist/dialects/firebird/index.d.ts +286 -0
  164. package/dist/dialects/firebird/index.js +135 -0
  165. package/dist/dialects/greenplum/index.d.ts +336 -0
  166. package/dist/dialects/greenplum/index.js +168 -0
  167. package/dist/dialects/hana/index.d.ts +512 -0
  168. package/dist/dialects/hana/index.js +17 -35
  169. package/dist/dialects/mariadb/index.d.ts +1241 -0
  170. package/dist/dialects/mariadb/index.js +181 -43
  171. package/dist/dialects/mssql/index.d.ts +729 -0
  172. package/dist/dialects/mssql/index.js +76 -7
  173. package/dist/dialects/mysql/index.d.ts +1233 -0
  174. package/dist/dialects/mysql/index.js +87 -19
  175. package/dist/dialects/oracle/index.d.ts +1222 -0
  176. package/dist/dialects/oracle/index.js +210 -9
  177. package/dist/dialects/postgres/index.d.ts +1598 -0
  178. package/dist/dialects/postgres/index.js +34 -13
  179. package/dist/dialects/query-stream-helper.d.ts +58 -0
  180. package/dist/dialects/questdb/index.d.ts +430 -0
  181. package/dist/dialects/questdb/index.js +292 -0
  182. package/dist/dialects/redshift/index.d.ts +933 -0
  183. package/dist/dialects/redshift/index.js +17 -5
  184. package/dist/dialects/singlestore/index.d.ts +233 -0
  185. package/dist/dialects/singlestore/index.js +53 -0
  186. package/dist/dialects/snowflake/index.d.ts +727 -0
  187. package/dist/dialects/snowflake/index.js +154 -5
  188. package/dist/dialects/spanner/index.d.ts +660 -0
  189. package/dist/dialects/spanner/index.js +43 -21
  190. package/dist/dialects/sqlite/index.d.ts +1133 -0
  191. package/dist/dialects/sqlite/index.js +168 -30
  192. package/dist/dialects/tidb/index.d.ts +226 -0
  193. package/dist/dialects/tidb/index.js +10 -0
  194. package/dist/dialects/timescaledb/index.d.ts +286 -0
  195. package/dist/dialects/timescaledb/index.js +179 -0
  196. package/dist/dialects/trino/index.d.ts +230 -0
  197. package/dist/dialects/trino/index.js +85 -10
  198. package/dist/dialects/turso/index.d.ts +98 -0
  199. package/dist/dialects/turso/index.js +10 -0
  200. package/dist/dialects/vertica/index.d.ts +321 -0
  201. package/dist/dialects/vertica/index.js +161 -0
  202. package/dist/dialects/yugabytedb/index.d.ts +276 -0
  203. package/dist/dialects/yugabytedb/index.js +121 -0
  204. package/dist/errors/index.d.ts +378 -0
  205. package/dist/errors/index.js +29 -1
  206. package/dist/errors/utils.d.ts +53 -0
  207. package/dist/errors.d.ts +5 -0
  208. package/dist/extensions/catalog/cloud-warehouse-features.d.ts +27 -0
  209. package/dist/extensions/catalog/mssql-features.d.ts +20 -0
  210. package/dist/extensions/catalog/mysql-mariadb-plugins.d.ts +18 -0
  211. package/dist/extensions/catalog/oracle-db2-features.d.ts +17 -0
  212. package/dist/extensions/catalog/postgres-extensions.d.ts +15 -0
  213. package/dist/extensions/index.d.ts +34 -0
  214. package/dist/extensions/types.d.ts +43 -0
  215. package/dist/external-fields/adapters.d.ts +50 -0
  216. package/dist/external-fields/adapters.js +227 -0
  217. package/dist/external-fields/decorator.d.ts +77 -0
  218. package/dist/external-fields/decorator.js +80 -0
  219. package/dist/external-fields/index.d.ts +10 -0
  220. package/dist/external-fields/index.js +19 -0
  221. package/dist/external-fields/runtime.d.ts +39 -0
  222. package/dist/external-fields/runtime.js +221 -0
  223. package/dist/foreign-data.d.ts +168 -0
  224. package/dist/graph/base-graph-dialect.d.ts +250 -0
  225. package/dist/graph/base-graph-dialect.js +539 -0
  226. package/dist/graph/dgraph/index.d.ts +65 -0
  227. package/dist/graph/dgraph/index.js +559 -0
  228. package/dist/graph/gremlin/index.d.ts +59 -0
  229. package/dist/graph/gremlin/index.js +378 -0
  230. package/dist/graph/index.d.ts +60 -0
  231. package/dist/graph/index.js +67 -0
  232. package/dist/graph/neo4j/index.d.ts +50 -0
  233. package/dist/graph/neo4j/index.js +462 -0
  234. package/dist/graph/types.d.ts +213 -0
  235. package/dist/graph/types.js +234 -0
  236. package/dist/hooks/hooks-manager.d.ts +189 -0
  237. package/dist/hooks/index.d.ts +8 -0
  238. package/dist/index.d.ts +711 -0
  239. package/dist/index.js +19 -4
  240. package/dist/logging.d.ts +183 -0
  241. package/dist/migrations/index.d.ts +9 -0
  242. package/dist/migrations/migration.d.ts +143 -0
  243. package/dist/migrations/migrator.d.ts +199 -0
  244. package/dist/migrations/prormmigration.d.ts +131 -0
  245. package/dist/migrations/query-interface.d.ts +335 -0
  246. package/dist/migrations/seeder.d.ts +167 -0
  247. package/dist/models/associations.d.ts +131 -0
  248. package/dist/models/associations.js +7 -2
  249. package/dist/models/constraints.d.ts +175 -0
  250. package/dist/models/data-types.d.ts +1656 -0
  251. package/dist/models/decorators.d.ts +328 -0
  252. package/dist/models/decorators.js +61 -82
  253. package/dist/models/eager-load.d.ts +86 -0
  254. package/dist/models/eager-load.js +369 -0
  255. package/dist/models/index.d.ts +13 -0
  256. package/dist/models/indexes.d.ts +325 -0
  257. package/dist/models/methods.d.ts +419 -0
  258. package/dist/models/model-manager.d.ts +76 -0
  259. package/dist/models/model.d.ts +820 -0
  260. package/dist/models/model.js +15 -101
  261. package/dist/models/operators.d.ts +29 -0
  262. package/dist/models/scopes.d.ts +71 -0
  263. package/dist/models/typescript-types.d.ts +177 -0
  264. package/dist/nosql/aerospike/index.d.ts +126 -0
  265. package/dist/nosql/allegrograph/index.d.ts +86 -0
  266. package/dist/nosql/arangodb/index.d.ts +285 -0
  267. package/dist/nosql/arangodb/index.js +274 -2
  268. package/dist/nosql/arangodb/where.d.ts +38 -0
  269. package/dist/nosql/arangodb/where.js +94 -0
  270. package/dist/nosql/azure-blob/index.d.ts +104 -0
  271. package/dist/nosql/beanstalkd/index.d.ts +88 -0
  272. package/dist/nosql/beequeue/index.d.ts +99 -0
  273. package/dist/nosql/bigchaindb/index.d.ts +113 -0
  274. package/dist/nosql/bigtable/index.d.ts +144 -0
  275. package/dist/nosql/blazegraph/index.d.ts +88 -0
  276. package/dist/nosql/bullmq/index.d.ts +83 -0
  277. package/dist/nosql/cassandra/index.d.ts +119 -0
  278. package/dist/nosql/chroma/index.d.ts +151 -0
  279. package/dist/nosql/cloudflare-kv/index.d.ts +120 -0
  280. package/dist/nosql/coherence/index.d.ts +91 -0
  281. package/dist/nosql/cosmosdb/index.d.ts +78 -0
  282. package/dist/nosql/couchbase/index.d.ts +103 -0
  283. package/dist/nosql/dax/index.d.ts +118 -0
  284. package/dist/nosql/deno-kv/index.d.ts +109 -0
  285. package/dist/nosql/dgraph/index.d.ts +80 -0
  286. package/dist/nosql/doris/index.d.ts +88 -0
  287. package/dist/nosql/druid/index.d.ts +95 -0
  288. package/dist/nosql/dynamodb/index.d.ts +643 -0
  289. package/dist/nosql/dynamodb/index.js +423 -0
  290. package/dist/nosql/elasticsearch/index.d.ts +239 -0
  291. package/dist/nosql/etcd/index.d.ts +243 -0
  292. package/dist/nosql/eventhubs/index.d.ts +89 -0
  293. package/dist/nosql/eventstore/index.d.ts +102 -0
  294. package/dist/nosql/faunadb/index.d.ts +141 -0
  295. package/dist/nosql/faunadb/index.js +329 -0
  296. package/dist/nosql/firestore/index.d.ts +67 -0
  297. package/dist/nosql/fluree/index.d.ts +88 -0
  298. package/dist/nosql/fuseki/index.d.ts +94 -0
  299. package/dist/nosql/gcs/index.d.ts +62 -0
  300. package/dist/nosql/gearman/index.d.ts +77 -0
  301. package/dist/nosql/geode/index.d.ts +93 -0
  302. package/dist/nosql/graphdb/index.d.ts +86 -0
  303. package/dist/nosql/graylog/index.d.ts +118 -0
  304. package/dist/nosql/gridgain/index.d.ts +78 -0
  305. package/dist/nosql/hazelcast/index.d.ts +73 -0
  306. package/dist/nosql/hbase/index.d.ts +123 -0
  307. package/dist/nosql/ignite/index.d.ts +80 -0
  308. package/dist/nosql/immudb/index.d.ts +131 -0
  309. package/dist/nosql/index.d.ts +215 -0
  310. package/dist/nosql/infinispan/index.d.ts +95 -0
  311. package/dist/nosql/influxdb/flux-compiler.d.ts +23 -0
  312. package/dist/nosql/influxdb/flux-compiler.js +170 -0
  313. package/dist/nosql/influxdb/index.d.ts +300 -0
  314. package/dist/nosql/influxdb/index.js +0 -0
  315. package/dist/nosql/kafka/index.d.ts +113 -0
  316. package/dist/nosql/keyspaces/index.d.ts +122 -0
  317. package/dist/nosql/kinesis/index.d.ts +121 -0
  318. package/dist/nosql/leveldb/index.d.ts +112 -0
  319. package/dist/nosql/leveldb/index.js +103 -1
  320. package/dist/nosql/lmdb/index.d.ts +76 -0
  321. package/dist/nosql/loki/index.d.ts +126 -0
  322. package/dist/nosql/marklogic/index.d.ts +76 -0
  323. package/dist/nosql/materialize/index.d.ts +91 -0
  324. package/dist/nosql/meilisearch/index.d.ts +76 -0
  325. package/dist/nosql/memcached/index.d.ts +138 -0
  326. package/dist/nosql/milvus/index.d.ts +167 -0
  327. package/dist/nosql/minio/index.d.ts +122 -0
  328. package/dist/nosql/momento/index.d.ts +99 -0
  329. package/dist/nosql/mongodb/index.d.ts +265 -0
  330. package/dist/nosql/mongodb/index.js +139 -0
  331. package/dist/nosql/mongodb/where.d.ts +8 -0
  332. package/dist/nosql/mongodb/where.js +181 -0
  333. package/dist/nosql/nats/index.d.ts +139 -0
  334. package/dist/nosql/nedb/index.d.ts +79 -0
  335. package/dist/nosql/neo4j/index.d.ts +217 -0
  336. package/dist/nosql/neo4j/index.js +26 -14
  337. package/dist/nosql/neptune/index.d.ts +234 -0
  338. package/dist/nosql/neptune/index.js +23 -9
  339. package/dist/nosql/nsq/index.d.ts +93 -0
  340. package/dist/nosql/opensearch/index.d.ts +97 -0
  341. package/dist/nosql/orientdb/index.d.ts +72 -0
  342. package/dist/nosql/papertrail/index.d.ts +120 -0
  343. package/dist/nosql/pinecone/index.d.ts +148 -0
  344. package/dist/nosql/pinot/index.d.ts +90 -0
  345. package/dist/nosql/pouchdb/index.d.ts +95 -0
  346. package/dist/nosql/prometheus/index.d.ts +112 -0
  347. package/dist/nosql/provendb/index.d.ts +143 -0
  348. package/dist/nosql/provendb/index.js +262 -0
  349. package/dist/nosql/pubsub/index.d.ts +83 -0
  350. package/dist/nosql/pulsar/index.d.ts +105 -0
  351. package/dist/nosql/qdrant/index.d.ts +231 -0
  352. package/dist/nosql/qldb/index.d.ts +182 -0
  353. package/dist/nosql/qldb/index.js +302 -1
  354. package/dist/nosql/r2/index.d.ts +160 -0
  355. package/dist/nosql/rabbitmq/index.d.ts +131 -0
  356. package/dist/nosql/ravendb/index.d.ts +138 -0
  357. package/dist/nosql/ravendb/index.js +323 -9
  358. package/dist/nosql/ravendb/where.d.ts +38 -0
  359. package/dist/nosql/ravendb/where.js +94 -0
  360. package/dist/nosql/redis/index.d.ts +267 -0
  361. package/dist/nosql/redis/index.js +19 -5
  362. package/dist/nosql/redpanda/index.d.ts +117 -0
  363. package/dist/nosql/resque/index.d.ts +91 -0
  364. package/dist/nosql/rethinkdb/index.d.ts +194 -0
  365. package/dist/nosql/rethinkdb/index.js +290 -0
  366. package/dist/nosql/rethinkdb/where.d.ts +38 -0
  367. package/dist/nosql/rethinkdb/where.js +94 -0
  368. package/dist/nosql/rocksdb/document-layer.d.ts +162 -0
  369. package/dist/nosql/rocksdb/document-layer.js +338 -0
  370. package/dist/nosql/rocksdb/index.d.ts +112 -0
  371. package/dist/nosql/rocksdb/index.js +103 -1
  372. package/dist/nosql/rocksdb/where-match.d.ts +21 -0
  373. package/dist/nosql/rocksdb/where-match.js +238 -0
  374. package/dist/nosql/rockset/index.d.ts +84 -0
  375. package/dist/nosql/s3/index.d.ts +170 -0
  376. package/dist/nosql/scylladb/index.d.ts +117 -0
  377. package/dist/nosql/signoz/index.d.ts +116 -0
  378. package/dist/nosql/sns/index.d.ts +99 -0
  379. package/dist/nosql/solr/index.d.ts +129 -0
  380. package/dist/nosql/splunk/index.d.ts +125 -0
  381. package/dist/nosql/sqs/index.d.ts +116 -0
  382. package/dist/nosql/stardog/index.d.ts +86 -0
  383. package/dist/nosql/starrocks/index.d.ts +89 -0
  384. package/dist/nosql/store.d.ts +23 -0
  385. package/dist/nosql/sumologic/index.d.ts +119 -0
  386. package/dist/nosql/surrealdb/index.d.ts +156 -0
  387. package/dist/nosql/surrealdb/index.js +174 -1
  388. package/dist/nosql/surrealdb/query-compiler.d.ts +26 -0
  389. package/dist/nosql/surrealdb/query-compiler.js +193 -0
  390. package/dist/nosql/terminusdb/index.d.ts +95 -0
  391. package/dist/nosql/tigergraph/index.d.ts +314 -0
  392. package/dist/nosql/typesense/index.d.ts +82 -0
  393. package/dist/nosql/unqlite/index.d.ts +68 -0
  394. package/dist/nosql/upstash/index.d.ts +80 -0
  395. package/dist/nosql/vercel-kv/index.d.ts +82 -0
  396. package/dist/nosql/victoriametrics/index.d.ts +129 -0
  397. package/dist/nosql/virtuoso/index.d.ts +87 -0
  398. package/dist/nosql/weaviate/index.d.ts +196 -0
  399. package/dist/operators/index.d.ts +7 -0
  400. package/dist/operators.d.ts +2947 -0
  401. package/dist/operators.js +46 -1
  402. package/dist/prisma-migrate/index.d.ts +28 -0
  403. package/dist/prisma-migrate/migration-generator.d.ts +21 -0
  404. package/dist/prisma-migrate/model-generator.d.ts +12 -0
  405. package/dist/prisma-migrate/relations.d.ts +28 -0
  406. package/dist/prisma-migrate/schema-parser.d.ts +42 -0
  407. package/dist/prisma-migrate/type-mapper.d.ts +20 -0
  408. package/dist/prorm.d.ts +2093 -0
  409. package/dist/prorm.js +721 -302
  410. package/dist/query-builders/cte-builder.d.ts +104 -0
  411. package/dist/query-builders/functions/aggregate.d.ts +199 -0
  412. package/dist/query-builders/functions/conditional.d.ts +195 -0
  413. package/dist/query-builders/functions/datetime.d.ts +202 -0
  414. package/dist/query-builders/functions/fulltext.d.ts +220 -0
  415. package/dist/query-builders/functions/index.d.ts +17 -0
  416. package/dist/query-builders/functions/json.d.ts +157 -0
  417. package/dist/query-builders/functions/math.d.ts +215 -0
  418. package/dist/query-builders/functions/string.d.ts +233 -0
  419. package/dist/query-builders/functions/window.d.ts +209 -0
  420. package/dist/query-builders/include-builder.d.ts +85 -0
  421. package/dist/query-builders/index-expression-builder.d.ts +153 -0
  422. package/dist/query-builders/index.d.ts +121 -0
  423. package/dist/query-builders/index.js +10 -0
  424. package/dist/query-builders/insert-builder.d.ts +62 -0
  425. package/dist/query-builders/model-helpers.d.ts +28 -0
  426. package/dist/query-builders/order-limit-builder.d.ts +84 -0
  427. package/dist/query-builders/sql-compiler.d.ts +562 -0
  428. package/dist/query-builders/subquery-builder.d.ts +133 -0
  429. package/dist/query-builders/update-builder.d.ts +71 -0
  430. package/dist/query-builders/view-builder.d.ts +189 -0
  431. package/dist/query-builders/where-builder.d.ts +124 -0
  432. package/dist/query-interface.d.ts +407 -0
  433. package/dist/query-interface.js +84 -0
  434. package/dist/query-optimizers/batch-optimizer.d.ts +175 -0
  435. package/dist/query-optimizers/explain-plans.d.ts +187 -0
  436. package/dist/query-optimizers/index.d.ts +27 -0
  437. package/dist/query-optimizers/prepared-statement-cache.d.ts +252 -0
  438. package/dist/query-optimizers/query-hints.d.ts +201 -0
  439. package/dist/query-optimizers/query-optimizer.d.ts +162 -0
  440. package/dist/query-optimizers/slow-query-logger.d.ts +186 -0
  441. package/dist/replica-manager.d.ts +235 -0
  442. package/dist/schema/index.d.ts +7 -0
  443. package/dist/schema/migration-generator.d.ts +74 -0
  444. package/dist/schema/schema-differ.d.ts +114 -0
  445. package/dist/schema/types.d.ts +246 -0
  446. package/dist/schema-objects.d.ts +78 -0
  447. package/dist/schema-objects.js +203 -0
  448. package/dist/sql-constants.d.ts +240 -0
  449. package/dist/sqlite-advanced.d.ts +572 -0
  450. package/dist/streams/index.d.ts +5 -0
  451. package/dist/streams/transforms.d.ts +120 -0
  452. package/dist/transaction.d.ts +221 -0
  453. package/dist/types/index.d.ts +3123 -0
  454. package/dist/user-management.d.ts +141 -0
  455. package/dist/utils/date.d.ts +149 -0
  456. package/dist/utils/index.d.ts +359 -0
  457. package/dist/utils/string.d.ts +88 -0
  458. package/dist/validators/index.d.ts +7 -0
  459. package/dist/validators/validator.d.ts +306 -0
  460. package/package.json +20 -5
@@ -0,0 +1,462 @@
1
+ "use strict";
2
+ /**
3
+ * Neo4j graph dialect — Cypher generation for the ORM builder API.
4
+ *
5
+ * Maps the ORM model API onto Cypher: node labels for tables, `MATCH`/
6
+ * `CREATE`/`MERGE`/`SET`/`DELETE` for CRUD, relationships for associations,
7
+ * and variable-length patterns for traversals. Everything is parameterized
8
+ * (`$p0`, `$props`, ...). Users never hand-write Cypher for standard
9
+ * operations.
10
+ *
11
+ * The `neo4j-driver` package is loaded lazily so importing this module never
12
+ * forces the optional dependency; a pre-built driver can be injected via
13
+ * `options.client` for tests/connection reuse.
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.Neo4jGraphDialect = void 0;
17
+ const index_1 = require("../../errors/index");
18
+ const types_1 = require("../../types");
19
+ const base_graph_dialect_1 = require("../base-graph-dialect");
20
+ const types_2 = require("../types");
21
+ function stripUndefined(data) {
22
+ const out = {};
23
+ for (const [k, v] of Object.entries(data)) {
24
+ if (v !== undefined)
25
+ out[k] = v;
26
+ }
27
+ return out;
28
+ }
29
+ /** Translate a SQL LIKE pattern into a Java/Cypher regex for `=~`. */
30
+ function likeToRegex(pattern, caseInsensitive = false) {
31
+ const escaped = String(pattern).replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
32
+ const regex = escaped.replace(/%/g, '.*').replace(/_/g, '.');
33
+ return `${caseInsensitive ? '(?i)' : ''}${regex}`;
34
+ }
35
+ class Neo4jGraphDialect extends base_graph_dialect_1.BaseGraphDialect {
36
+ constructor(options = {}) {
37
+ super(options);
38
+ this.name = 'neo4j';
39
+ this.library = 'neo4j-driver';
40
+ this.driver = null;
41
+ this.txns = new Map();
42
+ this.dialectName = 'neo4j';
43
+ }
44
+ get defaultNodeVar() {
45
+ return 'n';
46
+ }
47
+ // -------------------------------------------------------------------
48
+ // Connection lifecycle
49
+ // -------------------------------------------------------------------
50
+ async connect() {
51
+ if (this._connected && this.driver)
52
+ return;
53
+ try {
54
+ let driver = this.options.client;
55
+ if (!driver) {
56
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
57
+ const neo4j = require('neo4j-driver');
58
+ const url = this.options.url || `bolt://${this.options.host || 'localhost'}:${this.options.port || 7687}`;
59
+ const auth = this.options.username !== undefined
60
+ ? neo4j.auth.basic(this.options.username, this.options.password || '')
61
+ : undefined;
62
+ driver = neo4j.driver(url, auth, this.options.driverOptions);
63
+ }
64
+ // Fail fast on bad connection details.
65
+ if (typeof driver.verifyConnectivity === 'function') {
66
+ await driver.verifyConnectivity();
67
+ }
68
+ this.driver = driver;
69
+ this._connection = driver;
70
+ this._connected = true;
71
+ }
72
+ catch (error) {
73
+ this.driver = null;
74
+ this._connection = null;
75
+ this._connected = false;
76
+ throw new index_1.ConnectionError('Failed to connect to Neo4j', {
77
+ parent: error instanceof Error ? error : undefined,
78
+ database: this.options.database,
79
+ });
80
+ }
81
+ }
82
+ async disconnect() {
83
+ const driver = this.driver;
84
+ this.driver = null;
85
+ this._connection = null;
86
+ this._connected = false;
87
+ if (driver && typeof driver.close === 'function') {
88
+ await driver.close();
89
+ }
90
+ }
91
+ requireDriver() {
92
+ if (!this.driver || !this._connected) {
93
+ throw new index_1.ConnectionError('Neo4jGraphDialect is not connected. Call connect() first.', {
94
+ database: this.options.database,
95
+ });
96
+ }
97
+ return this.driver;
98
+ }
99
+ async query(statement, options) {
100
+ const params = options?.bind || {};
101
+ const txId = options?.transaction?.id;
102
+ try {
103
+ let records;
104
+ if (txId && this.txns.has(txId)) {
105
+ const res = await this.txns.get(txId).tx.run(statement, params);
106
+ records = res.records;
107
+ }
108
+ else {
109
+ const driver = this.requireDriver();
110
+ const session = driver.session(this.options.database ? { database: this.options.database } : undefined);
111
+ try {
112
+ const res = await session.run(statement, params);
113
+ records = res.records;
114
+ }
115
+ finally {
116
+ await session.close();
117
+ }
118
+ }
119
+ const rows = records.map((r) => (typeof r.toObject === 'function' ? r.toObject() : r));
120
+ return { rows, rowCount: rows.length, fields: [] };
121
+ }
122
+ catch (error) {
123
+ throw new index_1.DatabaseError('Neo4j query failed', {
124
+ code: 'QUERY_ERROR',
125
+ parent: error instanceof Error ? error : undefined,
126
+ original: error instanceof Error ? error.message : String(error),
127
+ sql: statement,
128
+ });
129
+ }
130
+ }
131
+ async getDatabaseVersion() {
132
+ try {
133
+ const res = await this.query('CALL dbms.components() YIELD versions RETURN versions[0] AS version');
134
+ return String(res.rows[0]?.version ?? 'unknown');
135
+ }
136
+ catch {
137
+ return 'unknown';
138
+ }
139
+ }
140
+ // -------------------------------------------------------------------
141
+ // Transactions
142
+ // -------------------------------------------------------------------
143
+ async startTransaction(options) {
144
+ const driver = this.requireDriver();
145
+ const session = driver.session(this.options.database ? { database: this.options.database } : undefined);
146
+ const tx = session.beginTransaction();
147
+ const transaction = new types_1.Transaction(options);
148
+ this.txns.set(transaction.id, { session, tx });
149
+ return transaction;
150
+ }
151
+ async commitTransaction(transaction) {
152
+ const entry = this.txns.get(transaction.id);
153
+ if (!entry)
154
+ return;
155
+ try {
156
+ await entry.tx.commit();
157
+ }
158
+ finally {
159
+ await entry.session.close();
160
+ this.txns.delete(transaction.id);
161
+ }
162
+ }
163
+ async rollbackTransaction(transaction) {
164
+ const entry = this.txns.get(transaction.id);
165
+ if (!entry)
166
+ return;
167
+ try {
168
+ await entry.tx.rollback();
169
+ }
170
+ finally {
171
+ await entry.session.close();
172
+ this.txns.delete(transaction.id);
173
+ }
174
+ }
175
+ // -------------------------------------------------------------------
176
+ // Predicate rendering
177
+ // -------------------------------------------------------------------
178
+ renderPredicate(pred, ctx) {
179
+ switch (pred.kind) {
180
+ case 'true':
181
+ return 'true';
182
+ case 'and':
183
+ return pred.items.length
184
+ ? `(${pred.items.map((p) => this.renderPredicate(p, ctx)).join(' AND ')})`
185
+ : 'true';
186
+ case 'or':
187
+ return pred.items.length
188
+ ? `(${pred.items.map((p) => this.renderPredicate(p, ctx)).join(' OR ')})`
189
+ : 'true';
190
+ case 'not':
191
+ return `NOT (${this.renderPredicate(pred.item, ctx)})`;
192
+ case 'cmp':
193
+ return this.renderComparison(pred, ctx);
194
+ }
195
+ }
196
+ renderComparison(pred, ctx) {
197
+ const ref = `${ctx.nodeVar}.${(0, types_2.safeIdent)(pred.field)}`;
198
+ const p = (v) => `$${ctx.params.add(v)}`;
199
+ switch (pred.op) {
200
+ case 'eq':
201
+ return `${ref} = ${p(pred.value)}`;
202
+ case 'ne':
203
+ return `${ref} <> ${p(pred.value)}`;
204
+ case 'gt':
205
+ return `${ref} > ${p(pred.value)}`;
206
+ case 'gte':
207
+ return `${ref} >= ${p(pred.value)}`;
208
+ case 'lt':
209
+ return `${ref} < ${p(pred.value)}`;
210
+ case 'lte':
211
+ return `${ref} <= ${p(pred.value)}`;
212
+ case 'in':
213
+ return `${ref} IN ${p(pred.value)}`;
214
+ case 'notIn':
215
+ return `NOT ${ref} IN ${p(pred.value)}`;
216
+ case 'isNull':
217
+ return `${ref} IS NULL`;
218
+ case 'isNotNull':
219
+ return `${ref} IS NOT NULL`;
220
+ case 'like':
221
+ return `${ref} =~ ${p(likeToRegex(String(pred.value)))}`;
222
+ case 'notLike':
223
+ return `NOT ${ref} =~ ${p(likeToRegex(String(pred.value)))}`;
224
+ case 'iLike':
225
+ case 'notILike': {
226
+ const rx = `${ref} =~ ${p(likeToRegex(String(pred.value), true))}`;
227
+ return pred.op === 'notILike' ? `NOT ${rx}` : rx;
228
+ }
229
+ case 'startsWith':
230
+ return `${ref} STARTS WITH ${p(pred.value)}`;
231
+ case 'notStartsWith':
232
+ return `NOT ${ref} STARTS WITH ${p(pred.value)}`;
233
+ case 'endsWith':
234
+ return `${ref} ENDS WITH ${p(pred.value)}`;
235
+ case 'notEndsWith':
236
+ return `NOT ${ref} ENDS WITH ${p(pred.value)}`;
237
+ case 'substring':
238
+ return `${ref} CONTAINS ${p(pred.value)}`;
239
+ case 'notSubstring':
240
+ return `NOT ${ref} CONTAINS ${p(pred.value)}`;
241
+ case 'regexp':
242
+ return `${ref} =~ ${p(pred.value)}`;
243
+ case 'notRegexp':
244
+ return `NOT ${ref} =~ ${p(pred.value)}`;
245
+ case 'between': {
246
+ const [lo, hi] = Array.isArray(pred.value) ? pred.value : [undefined, undefined];
247
+ return `(${ref} >= ${p(lo)} AND ${ref} <= ${p(hi)})`;
248
+ }
249
+ case 'notBetween': {
250
+ const [lo, hi] = Array.isArray(pred.value) ? pred.value : [undefined, undefined];
251
+ return `NOT (${ref} >= ${p(lo)} AND ${ref} <= ${p(hi)})`;
252
+ }
253
+ default:
254
+ return `${ref} = ${p(pred.value)}`;
255
+ }
256
+ }
257
+ where(where, nodeVar, params) {
258
+ const sql = this.renderPredicate((0, types_2.normalizeWhere)(where), { nodeVar, params });
259
+ return sql && sql !== 'true' ? sql : '';
260
+ }
261
+ // -------------------------------------------------------------------
262
+ // Codegen
263
+ // -------------------------------------------------------------------
264
+ compileMatch(spec) {
265
+ const params = new types_2.ParamBag();
266
+ const v = this.defaultNodeVar;
267
+ const label = (0, types_2.safeIdent)(spec.label);
268
+ let text = `MATCH (${v}:${label})`;
269
+ const whereSql = this.where(spec.where, v, params);
270
+ if (whereSql)
271
+ text += `\nWHERE ${whereSql}`;
272
+ const includeReturns = [];
273
+ for (const step of spec.include || []) {
274
+ const alias = (0, types_2.safeIdent)(step.as || step.targetLabel || step.edgeLabel);
275
+ const edge = (0, types_2.safeIdent)(step.edgeLabel);
276
+ const targetLabel = step.targetLabel ? `:${(0, types_2.safeIdent)(step.targetLabel)}` : '';
277
+ const rel = step.direction === 'in' ? `<-[:${edge}]-` : `-[:${edge}]->`;
278
+ text += `\nOPTIONAL MATCH (${v})${rel}(${alias}${targetLabel})`;
279
+ const stepWhere = this.where(step.where, alias, params);
280
+ if (stepWhere)
281
+ text += ` WHERE ${stepWhere}`;
282
+ includeReturns.push(`collect(DISTINCT ${alias}) AS ${alias}`);
283
+ }
284
+ if (spec.count) {
285
+ text += `\nRETURN count(${v}) AS count`;
286
+ return { text, params: params.params };
287
+ }
288
+ const attrs = Array.isArray(spec.attributes) ? spec.attributes : undefined;
289
+ const projection = attrs && attrs.length
290
+ ? `${v}{${attrs.map((a) => `.${(0, types_2.safeIdent)(a)}`).join(', ')}}`
291
+ : v;
292
+ const distinct = spec.distinct ? 'DISTINCT ' : '';
293
+ text += `\nRETURN ${distinct}${projection}${includeReturns.length ? ', ' + includeReturns.join(', ') : ''}`;
294
+ const order = spec.order || [];
295
+ if (order.length) {
296
+ text += `\nORDER BY ${order.map(([f, d]) => `${v}.${(0, types_2.safeIdent)(f)} ${d}`).join(', ')}`;
297
+ }
298
+ if (spec.offset !== undefined && spec.offset !== null && String(spec.offset) !== '') {
299
+ text += `\nSKIP ${Number(spec.offset)}`;
300
+ }
301
+ if (spec.limit !== undefined && spec.limit !== null && String(spec.limit) !== '') {
302
+ text += `\nLIMIT ${Number(spec.limit)}`;
303
+ }
304
+ return { text, params: params.params };
305
+ }
306
+ compileCreateNode(label, data) {
307
+ const params = new types_2.ParamBag('props');
308
+ const name = params.add(stripUndefined(data));
309
+ return {
310
+ text: `CREATE (n:${(0, types_2.safeIdent)(label)} $${name})\nRETURN n`,
311
+ params: params.params,
312
+ };
313
+ }
314
+ compileUpdateNodes(label, where, values) {
315
+ const params = new types_2.ParamBag();
316
+ const v = this.defaultNodeVar;
317
+ let text = `MATCH (${v}:${(0, types_2.safeIdent)(label)})`;
318
+ const whereSql = this.where(where, v, params);
319
+ if (whereSql)
320
+ text += `\nWHERE ${whereSql}`;
321
+ const setValues = stripUndefined(values);
322
+ const removeFields = Object.keys(values).filter((k) => values[k] === undefined);
323
+ const clauses = [];
324
+ if (Object.keys(setValues).length) {
325
+ const pname = params.add(setValues);
326
+ clauses.push(`SET ${v} += $${pname}`);
327
+ }
328
+ if (removeFields.length) {
329
+ clauses.push(`REMOVE ${removeFields.map((f) => `${v}.${(0, types_2.safeIdent)(f)}`).join(', ')}`);
330
+ }
331
+ if (clauses.length)
332
+ text += `\n${clauses.join('\n')}`;
333
+ text += `\nRETURN ${v}`;
334
+ return { text, params: params.params };
335
+ }
336
+ compileDeleteNodes(label, where, detach) {
337
+ const params = new types_2.ParamBag();
338
+ const v = this.defaultNodeVar;
339
+ let text = `MATCH (${v}:${(0, types_2.safeIdent)(label)})`;
340
+ const whereSql = this.where(where, v, params);
341
+ if (whereSql)
342
+ text += `\nWHERE ${whereSql}`;
343
+ text += `\n${detach ? 'DETACH DELETE' : 'DELETE'} ${v}`;
344
+ return { text, params: params.params };
345
+ }
346
+ compileUpsertNode(label, data, conflictKeys) {
347
+ const params = new types_2.ParamBag();
348
+ const v = this.defaultNodeVar;
349
+ const keys = conflictKeys.length ? conflictKeys : ['id'];
350
+ const mergeProps = keys
351
+ .map((k) => `${(0, types_2.safeIdent)(k)}: $${params.add(data[k])}`)
352
+ .join(', ');
353
+ const pname = params.add(stripUndefined(data));
354
+ return {
355
+ text: `MERGE (${v}:${(0, types_2.safeIdent)(label)} {${mergeProps}})\nSET ${v} += $${pname}\nRETURN ${v}`,
356
+ params: params.params,
357
+ };
358
+ }
359
+ compileIncrement(label, fields, where, by) {
360
+ const params = new types_2.ParamBag();
361
+ const v = this.defaultNodeVar;
362
+ let text = `MATCH (${v}:${(0, types_2.safeIdent)(label)})`;
363
+ const whereSql = this.where(where, v, params);
364
+ if (whereSql)
365
+ text += `\nWHERE ${whereSql}`;
366
+ const map = typeof fields === 'string'
367
+ ? { [fields]: by }
368
+ : Array.isArray(fields)
369
+ ? Object.fromEntries(fields.map((f) => [f, by]))
370
+ : fields;
371
+ const sets = Object.entries(map).map(([f, amt]) => {
372
+ const ref = `${v}.${(0, types_2.safeIdent)(f)}`;
373
+ return `${ref} = coalesce(${ref}, 0) + $${params.add(amt)}`;
374
+ });
375
+ text += `\nSET ${sets.join(', ')}\nRETURN ${v}`;
376
+ return { text, params: params.params };
377
+ }
378
+ compileCreateEdge(spec) {
379
+ const params = new types_2.ParamBag();
380
+ let text = `MATCH (a:${(0, types_2.safeIdent)(spec.fromLabel)})`;
381
+ const fromWhere = this.where(spec.fromWhere, 'a', params);
382
+ if (fromWhere)
383
+ text += ` WHERE ${fromWhere}`;
384
+ text += `\nMATCH (b:${(0, types_2.safeIdent)(spec.toLabel)})`;
385
+ const toWhere = this.where(spec.toWhere, 'b', params);
386
+ if (toWhere)
387
+ text += ` WHERE ${toWhere}`;
388
+ text += `\nMERGE (a)-[r:${(0, types_2.safeIdent)(spec.edgeLabel)}]->(b)`;
389
+ if (spec.props && Object.keys(spec.props).length) {
390
+ text += `\nSET r += $${params.add(stripUndefined(spec.props))}`;
391
+ }
392
+ text += `\nRETURN r`;
393
+ return { text, params: params.params };
394
+ }
395
+ compileTraverse(spec) {
396
+ const params = new types_2.ParamBag();
397
+ const v = this.defaultNodeVar;
398
+ let text = `MATCH (${v}:${(0, types_2.safeIdent)(spec.label)})`;
399
+ const startWhere = this.where(spec.where, v, params);
400
+ if (startWhere)
401
+ text += `\nWHERE ${startWhere}`;
402
+ const edge = spec.edgeLabel ? `:${(0, types_2.safeIdent)(spec.edgeLabel)}` : '';
403
+ const min = spec.minDepth ?? 1;
404
+ const max = spec.maxDepth ?? 1;
405
+ const varLen = min === 1 && max === 1 ? '' : `*${min}..${max}`;
406
+ const targetLabel = spec.targetLabel ? `:${(0, types_2.safeIdent)(spec.targetLabel)}` : '';
407
+ const rel = spec.direction === 'in'
408
+ ? `<-[${edge}${varLen}]-`
409
+ : spec.direction === 'both'
410
+ ? `-[${edge}${varLen}]-`
411
+ : `-[${edge}${varLen}]->`;
412
+ text += `\nMATCH (${v})${rel}(m${targetLabel})`;
413
+ const targetWhere = this.where(spec.targetWhere, 'm', params);
414
+ if (targetWhere)
415
+ text += `\nWHERE ${targetWhere}`;
416
+ text += `\nRETURN DISTINCT m`;
417
+ if (spec.limit !== undefined)
418
+ text += `\nLIMIT ${Number(spec.limit)}`;
419
+ return { text, params: params.params };
420
+ }
421
+ compileCreateConstraint(label, fields, kind, name) {
422
+ const v = 'n';
423
+ const l = (0, types_2.safeIdent)(label);
424
+ const cname = (0, types_2.safeIdent)(name || `c_${label}_${fields.join('_')}`);
425
+ const props = fields.map((f) => `${v}.${(0, types_2.safeIdent)(f)}`);
426
+ let requirement;
427
+ if (kind === 'key') {
428
+ requirement = `(${props.join(', ')}) IS NODE KEY`;
429
+ }
430
+ else if (kind === 'exists') {
431
+ requirement = `${props[0]} IS NOT NULL`;
432
+ }
433
+ else {
434
+ requirement = props.length > 1 ? `(${props.join(', ')}) IS UNIQUE` : `${props[0]} IS UNIQUE`;
435
+ }
436
+ return {
437
+ text: `CREATE CONSTRAINT ${cname} IF NOT EXISTS FOR (${v}:${l}) REQUIRE ${requirement}`,
438
+ params: {},
439
+ };
440
+ }
441
+ compileDropConstraint(_label, name) {
442
+ return { text: `DROP CONSTRAINT ${(0, types_2.safeIdent)(name)} IF EXISTS`, params: {} };
443
+ }
444
+ compileCreateIndex(label, fields, name) {
445
+ const v = 'n';
446
+ const l = (0, types_2.safeIdent)(label);
447
+ const iname = (0, types_2.safeIdent)(name || `idx_${label}_${fields.join('_')}`);
448
+ const props = fields.map((f) => `${v}.${(0, types_2.safeIdent)(f)}`).join(', ');
449
+ return {
450
+ text: `CREATE INDEX ${iname} IF NOT EXISTS FOR (${v}:${l}) ON (${props})`,
451
+ params: {},
452
+ };
453
+ }
454
+ compileDropIndex(_label, name) {
455
+ return { text: `DROP INDEX ${(0, types_2.safeIdent)(name)} IF EXISTS`, params: {} };
456
+ }
457
+ compileShowLabels() {
458
+ return { text: 'CALL db.labels() YIELD label RETURN label', params: {} };
459
+ }
460
+ }
461
+ exports.Neo4jGraphDialect = Neo4jGraphDialect;
462
+ exports.default = Neo4jGraphDialect;
@@ -0,0 +1,213 @@
1
+ /**
2
+ * Shared types and helpers for the ORM's graph/object-database dialects
3
+ * (Neo4j, Gremlin/TinkerPop/Neptune, Dgraph).
4
+ *
5
+ * These live under `src/graph/` and are intentionally self-contained: the
6
+ * graph dialects reuse the SQL-shaped `Dialect` contract (so the same
7
+ * `Model` builder API drives them) but express everything as graph
8
+ * primitives — node labels, edges/relationships, and traversals — instead
9
+ * of tables and joins. Nothing here edits shared base files.
10
+ */
11
+ import { DatabaseError } from '../errors/index';
12
+ import type { WhereOptions } from '../types';
13
+ /**
14
+ * Connection options accepted by every graph dialect. Superset of the
15
+ * SQL `DialectOptions` (host/port/database/username/password) plus a graph
16
+ * endpoint `url` and an escape hatch for injecting a pre-built driver/client
17
+ * (used by tests and connection reuse, mirroring the NoSQL stores).
18
+ */
19
+ export interface GraphConnectionOptions {
20
+ /** Full endpoint URL, e.g. `bolt://localhost:7687`, `ws://host:8182/gremlin`, `http://localhost:8080`. */
21
+ url?: string;
22
+ host?: string;
23
+ port?: number;
24
+ database?: string;
25
+ username?: string;
26
+ password?: string;
27
+ /** Extra driver-specific options passed straight through. */
28
+ driverOptions?: Record<string, unknown>;
29
+ /** Pre-built native client/driver to use instead of constructing one. */
30
+ client?: unknown;
31
+ [key: string]: unknown;
32
+ }
33
+ /**
34
+ * A compiled graph statement: the query text in the target graph language
35
+ * (Cypher / Gremlin / DQL) plus its named parameter bindings. All standard
36
+ * operations are parameterized — values never get string-interpolated into
37
+ * the statement text.
38
+ */
39
+ export interface GraphStatement {
40
+ text: string;
41
+ params: Record<string, unknown>;
42
+ }
43
+ /**
44
+ * Canonical comparison operators, normalized from both the `Op.*` symbol
45
+ * operators and the `$and`/`$or`/`$not` string keys so each dialect only has
46
+ * to render one small, stable set.
47
+ */
48
+ export type CanonOp = 'eq' | 'ne' | 'gt' | 'gte' | 'lt' | 'lte' | 'in' | 'notIn' | 'like' | 'notLike' | 'iLike' | 'notILike' | 'between' | 'notBetween' | 'isNull' | 'isNotNull' | 'startsWith' | 'notStartsWith' | 'endsWith' | 'notEndsWith' | 'substring' | 'notSubstring' | 'regexp' | 'notRegexp';
49
+ /**
50
+ * Normalized WHERE predicate tree. Each dialect walks this and renders it in
51
+ * its own language rather than re-parsing the raw `WhereOptions`.
52
+ */
53
+ export type GraphPredicate = {
54
+ kind: 'and';
55
+ items: GraphPredicate[];
56
+ } | {
57
+ kind: 'or';
58
+ items: GraphPredicate[];
59
+ } | {
60
+ kind: 'not';
61
+ item: GraphPredicate;
62
+ } | {
63
+ kind: 'cmp';
64
+ field: string;
65
+ op: CanonOp;
66
+ value: unknown;
67
+ } | {
68
+ kind: 'true';
69
+ };
70
+ /** ORM association kinds, mapped onto graph edges. */
71
+ export type GraphAssociationType = 'hasMany' | 'hasOne' | 'belongsTo' | 'belongsToMany';
72
+ /**
73
+ * How an ORM association becomes a graph edge. `hasMany`/`hasOne` become an
74
+ * OUTBOUND edge from the source node; `belongsTo` becomes an INBOUND edge
75
+ * (the inverse); `belongsToMany` becomes an OUTBOUND edge over the join
76
+ * relationship. The edge label defaults to a derived name but can be set
77
+ * explicitly.
78
+ */
79
+ export interface GraphAssociationSpec {
80
+ type: GraphAssociationType;
81
+ /** Association name as used in `include`, e.g. `posts`. */
82
+ as: string;
83
+ /** Target node label, e.g. `Post`. */
84
+ target: string;
85
+ /** Relationship/edge type/label, e.g. `HAS_POST`. */
86
+ edgeLabel: string;
87
+ /** Edge direction from the source node's perspective. */
88
+ direction: 'out' | 'in';
89
+ }
90
+ /** Property/attribute definition for a node or edge model (schemaless-friendly). */
91
+ export interface GraphPropertyDefinition {
92
+ type?: string;
93
+ unique?: boolean;
94
+ index?: boolean;
95
+ required?: boolean;
96
+ primaryKey?: boolean;
97
+ }
98
+ /** A node model: a labelled vertex type with optional property schema + associations. */
99
+ export interface NodeModelDefinition {
100
+ label: string;
101
+ properties?: Record<string, GraphPropertyDefinition>;
102
+ /** Property used as the node's stable identity (defaults to `id`). */
103
+ primaryKey?: string;
104
+ associations?: GraphAssociationSpec[];
105
+ }
106
+ /** An edge model: a relationship type connecting two node labels. */
107
+ export interface EdgeModelDefinition {
108
+ label: string;
109
+ from: string;
110
+ to: string;
111
+ properties?: Record<string, GraphPropertyDefinition>;
112
+ }
113
+ /** Direction of a graph traversal relative to the start node. */
114
+ export type GraphTraversalDirection = 'out' | 'in' | 'both';
115
+ /** A single hop / edge match used when building a traversal or `include`. */
116
+ export interface GraphTraversalStep {
117
+ /** Edge label to traverse, e.g. `HAS_POST`. */
118
+ edgeLabel: string;
119
+ direction: GraphTraversalDirection;
120
+ /** Target node label reached by this hop, if known. */
121
+ targetLabel?: string;
122
+ /** Association name this hop represents (used as the result key). */
123
+ as?: string;
124
+ /** Filter applied to the reached nodes. */
125
+ where?: WhereOptions;
126
+ }
127
+ /** Spec for a variable-length / multi-hop traversal from a start node. */
128
+ export interface GraphTraversalSpec {
129
+ /** Start node label. */
130
+ label: string;
131
+ /** Filter selecting the start node(s). */
132
+ where?: WhereOptions;
133
+ /** Single edge label (shorthand) or an explicit chain of steps. */
134
+ edgeLabel?: string;
135
+ direction?: GraphTraversalDirection;
136
+ targetLabel?: string;
137
+ /** Minimum traversal depth (1 = direct neighbours). Default 1. */
138
+ minDepth?: number;
139
+ /** Maximum traversal depth. Default 1. */
140
+ maxDepth?: number;
141
+ /** Filter applied to reached nodes. */
142
+ targetWhere?: WhereOptions;
143
+ limit?: number;
144
+ }
145
+ /** Options for a node find/match. */
146
+ export interface NodeMatchSpec {
147
+ label: string;
148
+ where?: WhereOptions;
149
+ attributes?: string[] | {
150
+ include?: string[];
151
+ exclude?: string[];
152
+ };
153
+ order?: Array<[string, 'ASC' | 'DESC']> | string[];
154
+ limit?: number | string;
155
+ offset?: number | string;
156
+ /** Associations to co-fetch as graph walks. */
157
+ include?: GraphTraversalStep[];
158
+ /** Return only a count. */
159
+ count?: boolean;
160
+ /** DISTINCT results. */
161
+ distinct?: boolean;
162
+ }
163
+ /**
164
+ * Typed error thrown when a relational feature has no meaningful graph
165
+ * equivalent and cannot be emulated via traversal (e.g. arbitrary SQL joins
166
+ * on a pure graph, materialized views, row-level-security policies).
167
+ */
168
+ export declare class GraphCapabilityError extends DatabaseError {
169
+ readonly feature: string;
170
+ readonly dialect: string;
171
+ constructor(feature: string, dialect: string);
172
+ }
173
+ /**
174
+ * Allocates unique, ordered parameter names and collects their values.
175
+ * Produces both a named-param map (for Cypher `$p0` / DQL `$p0` / Gremlin
176
+ * bindings) and, via {@link toArray}, a positional array for the SQL-shaped
177
+ * `{ sql, values }` return contract.
178
+ */
179
+ export declare class ParamBag {
180
+ private readonly prefix;
181
+ private index;
182
+ readonly params: Record<string, unknown>;
183
+ private readonly names;
184
+ constructor(prefix?: string);
185
+ add(value: unknown): string;
186
+ toArray(): unknown[];
187
+ }
188
+ /**
189
+ * Normalize an ORM `WhereOptions` (mixing `Op.*` symbols, `$and`/`$or`/
190
+ * `$not`, and plain equality) into a {@link GraphPredicate} tree. Returns a
191
+ * `{ kind: 'true' }` node for an empty/absent filter.
192
+ */
193
+ export declare function normalizeWhere(where?: WhereOptions | null): GraphPredicate;
194
+ /**
195
+ * Derive a graph edge from an ORM association descriptor (as produced by
196
+ * `Model.hasMany`/`belongsTo`/etc.). Accepts a loose shape so it works with
197
+ * either the ORM's association objects or a plain {@link GraphAssociationSpec}.
198
+ */
199
+ export declare function deriveAssociationEdge(assoc: {
200
+ associationType?: string;
201
+ type?: string;
202
+ as?: string;
203
+ target?: {
204
+ name?: string;
205
+ label?: string;
206
+ } | string;
207
+ edgeLabel?: string;
208
+ direction?: 'out' | 'in';
209
+ }): GraphAssociationSpec;
210
+ /** Default edge label for an association name, e.g. `posts` -> `HAS_POSTS`. */
211
+ export declare function defaultEdgeLabel(as: string): string;
212
+ /** Sanitize an identifier (label/property/edge) to a safe `[A-Za-z0-9_]` token. */
213
+ export declare function safeIdent(name: string): string;