objection 3.3.0 → 3.4.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 (29) hide show
  1. package/lib/model/AjvValidator.js +87 -10
  2. package/lib/model/Model.js +3 -1
  3. package/lib/model/modelId.js +10 -2
  4. package/lib/model/modelQueryProps.js +7 -0
  5. package/lib/queryBuilder/QueryBuilder.js +5 -3
  6. package/lib/queryBuilder/QueryBuilderBase.js +44 -9
  7. package/lib/queryBuilder/ReferenceBuilder.js +8 -1
  8. package/lib/queryBuilder/graph/GraphFetcher.js +1 -3
  9. package/lib/queryBuilder/graph/GraphOptions.js +30 -1
  10. package/lib/queryBuilder/graph/GraphUpsert.js +16 -1
  11. package/lib/queryBuilder/graph/patch/GraphPatchAction.js +8 -2
  12. package/lib/queryBuilder/join/RelationJoiner.js +62 -9
  13. package/lib/queryBuilder/join/utils.js +20 -2
  14. package/lib/queryBuilder/operations/InsertOperation.js +11 -4
  15. package/lib/queryBuilder/operations/UpdateOperation.js +2 -0
  16. package/lib/queryBuilder/operations/jsonApi/WhereJsonHasPostgresOperation.js +1 -0
  17. package/lib/queryBuilder/operations/jsonApi/WhereJsonNotObjectPostgresOperation.js +1 -0
  18. package/lib/queryBuilder/operations/jsonApi/WhereJsonPostgresOperation.js +33 -0
  19. package/lib/queryBuilder/operations/jsonApi/postgresJsonApi.js +16 -1
  20. package/lib/queryBuilder/operations/select/SelectOperation.js +39 -1
  21. package/lib/relations/RelationFindOperation.js +66 -2
  22. package/lib/relations/RelationProperty.js +3 -2
  23. package/lib/relations/manyToMany/ManyToManyRelation.js +34 -3
  24. package/lib/relations/manyToMany/find/ManyToManyFindOperation.js +34 -4
  25. package/lib/relations/manyToMany/update/ManyToManyUpdateOperationBase.js +4 -0
  26. package/lib/utils/assert.js +9 -0
  27. package/lib/utils/wrapDbError.js +36 -0
  28. package/package.json +2 -5
  29. package/typings/objection/index.d.ts +1 -1
@@ -1,6 +1,14 @@
1
1
  'use strict';
2
2
 
3
+ function assertHasIdColumn(modelClass) {
4
+ if (modelClass.getIdColumnArray().length === 0) {
5
+ throw new Error(`model ${modelClass.name} has no idColumn`);
6
+ }
7
+ }
8
+
3
9
  function assertHasId(model) {
10
+ assertHasIdColumn(model.constructor);
11
+
4
12
  if (!model.$hasId()) {
5
13
  const modelClass = model.constructor;
6
14
  const ids = modelClass.getIdColumnArray().join(', ');
@@ -21,5 +29,6 @@ function assertIdNotUndefined(id, message) {
21
29
 
22
30
  module.exports = {
23
31
  assertHasId,
32
+ assertHasIdColumn,
24
33
  assertIdNotUndefined,
25
34
  };
@@ -0,0 +1,36 @@
1
+ 'use strict';
2
+
3
+ const { wrapError, DBError, UniqueViolationError } = require('db-errors');
4
+
5
+ // db-errors only recognizes mssql unique key violations, but the same error
6
+ // number (2627) is also used for primary key violations (#2688).
7
+ const MSSQL_PRIMARY_KEY_REGEX =
8
+ /Violation of PRIMARY KEY constraint '(.+)'\. Cannot insert duplicate key in object '(.+)\.(.+)'\. The duplicate key value is \((.+)\)/;
9
+
10
+ function wrapDbError(err) {
11
+ const wrapped = wrapError(err);
12
+
13
+ if (wrapped.constructor === DBError && wrapped.client === 'mssql') {
14
+ const { nativeError } = wrapped;
15
+ const match =
16
+ nativeError.info &&
17
+ nativeError.info.number === 2627 &&
18
+ MSSQL_PRIMARY_KEY_REGEX.exec(nativeError.message);
19
+
20
+ if (match) {
21
+ return new UniqueViolationError({
22
+ nativeError,
23
+ client: 'mssql',
24
+ table: match[3],
25
+ schema: match[2],
26
+ constraint: match[1],
27
+ });
28
+ }
29
+ }
30
+
31
+ return wrapped;
32
+ }
33
+
34
+ module.exports = {
35
+ wrapDbError,
36
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "objection",
3
- "version": "3.3.0",
3
+ "version": "3.4.1",
4
4
  "description": "An SQL-friendly ORM for Node.js",
5
5
  "main": "lib/objection.js",
6
6
  "license": "MIT",
@@ -63,11 +63,10 @@
63
63
  "db-errors": "^0.2.3"
64
64
  },
65
65
  "peerDependencies": {
66
- "knex": ">=1.0.1"
66
+ "knex": ">=2.3.0"
67
67
  },
68
68
  "devDependencies": {
69
69
  "@types/node": "^22.15.3",
70
- "bluebird": "^3.7.2",
71
70
  "chai": "^4.3.10",
72
71
  "chai-subset": "^1.6.0",
73
72
  "eslint": "^8.54.0",
@@ -75,14 +74,12 @@
75
74
  "eslint-plugin-prettier": "^5.3.1",
76
75
  "expect.js": "^0.3.1",
77
76
  "knex": "^3.3.0",
78
- "lodash": "^4.18.1",
79
77
  "mocha": "^11.2.2",
80
78
  "mysql": "^2.18.1",
81
79
  "pg": "^8.15.6",
82
80
  "prettier": "3.9.9",
83
81
  "sqlite3": "^5.1.7",
84
82
  "typescript": ">=5.8.3",
85
- "uuid": "^9.0.1",
86
83
  "vitepress": "1.6.4"
87
84
  }
88
85
  }
@@ -590,7 +590,7 @@ declare namespace Objection {
590
590
  }
591
591
 
592
592
  interface FromMethod<QB extends AnyQueryBuilder> {
593
- (table: TableRef<QB>): QB;
593
+ (table: TableRef<QB>, options?: { only?: boolean }): QB;
594
594
  }
595
595
 
596
596
  interface FromRawMethod<QB extends AnyQueryBuilder> extends RawInterface<QB> {}