Skip to content

Commit 809a289

Browse files
committed
Deprecated registerTypes function for Sequelize
1 parent 4e680a5 commit 809a289

10 files changed

Lines changed: 130 additions & 122 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
## 0.3.0 (unreleased)
22

33
- Switched to ESM
4+
- Deprecated `registerTypes` function for Sequelize (use `import 'pgvector/sequelize'` instead)
45
- Deprecated `enableExtension` function for Knex.js and Objection.js (use `createExtensionIfNotExists` instead)
56
- Dropped support for Node < 22
67

README.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -822,6 +822,25 @@ Get an array
822822
const arr = vec.toArray();
823823
```
824824

825+
## Upgrading
826+
827+
### 0.3.0
828+
829+
`registerTypes` is deprecated for Sequelize. Replace
830+
831+
```javascript
832+
import { Sequelize } from 'sequelize';
833+
import pgvector from 'pgvector/sequelize';
834+
835+
pgvector.registerTypes(Sequelize);
836+
```
837+
838+
with
839+
840+
```javascript
841+
import 'pgvector/sequelize';
842+
```
843+
825844
## History
826845

827846
View the [changelog](https://github.com/pgvector/pgvector-node/blob/master/CHANGELOG.md)

src/sequelize/halfvec.js

Lines changed: 33 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,44 @@
11
import { inherits } from 'node:util';
2+
import { Sequelize, DataTypes, Utils } from 'sequelize';
23
import { halfvecType, halfvecToSql, halfvecFromSql } from '../utils/index.js';
34

4-
export function registerHalfvec(Sequelize) {
5-
const DataTypes = Sequelize.DataTypes;
6-
const PgTypes = DataTypes.postgres;
7-
const ABSTRACT = DataTypes.ABSTRACT.prototype.constructor;
5+
const PgTypes = DataTypes.postgres;
6+
const ABSTRACT = DataTypes.ABSTRACT.prototype.constructor;
87

9-
class HALFVEC extends ABSTRACT {
10-
constructor(dimensions) {
11-
super();
12-
this._dimensions = dimensions;
13-
}
14-
15-
toSql() {
16-
return halfvecType(this._dimensions).toUpperCase();
17-
}
8+
class HALFVEC extends ABSTRACT {
9+
constructor(dimensions) {
10+
super();
11+
this._dimensions = dimensions;
12+
}
1813

19-
_stringify(value) {
20-
return halfvecToSql(value);
21-
}
14+
toSql() {
15+
return halfvecType(this._dimensions).toUpperCase();
16+
}
2217

23-
static parse(value) {
24-
return halfvecFromSql(value);
25-
}
18+
_stringify(value) {
19+
return halfvecToSql(value);
2620
}
2721

28-
HALFVEC.prototype.key = HALFVEC.key = 'halfvec';
22+
static parse(value) {
23+
return halfvecFromSql(value);
24+
}
25+
}
2926

30-
DataTypes.HALFVEC = Sequelize.Utils.classToInvokable(HALFVEC);
31-
DataTypes.HALFVEC.types.postgres = ['halfvec'];
27+
HALFVEC.prototype.key = HALFVEC.key = 'halfvec';
3228

33-
PgTypes.HALFVEC = function HALFVEC() {
34-
if (!(this instanceof PgTypes.HALFVEC)) {
35-
return new PgTypes.HALFVEC();
36-
}
37-
DataTypes.HALFVEC.apply(this, arguments);
38-
};
39-
inherits(PgTypes.HALFVEC, DataTypes.HALFVEC);
40-
PgTypes.HALFVEC.parse = DataTypes.HALFVEC.parse;
41-
PgTypes.HALFVEC.types = {postgres: ['halfvec']};
42-
DataTypes.postgres.HALFVEC.key = 'halfvec';
29+
DataTypes.HALFVEC = Utils.classToInvokable(HALFVEC);
30+
DataTypes.HALFVEC.types.postgres = ['halfvec'];
4331

44-
// for migrations
45-
Sequelize.HALFVEC ??= DataTypes.HALFVEC;
46-
}
32+
PgTypes.HALFVEC = function HALFVEC() {
33+
if (!(this instanceof PgTypes.HALFVEC)) {
34+
return new PgTypes.HALFVEC();
35+
}
36+
DataTypes.HALFVEC.apply(this, arguments);
37+
};
38+
inherits(PgTypes.HALFVEC, DataTypes.HALFVEC);
39+
PgTypes.HALFVEC.parse = DataTypes.HALFVEC.parse;
40+
PgTypes.HALFVEC.types = {postgres: ['halfvec']};
41+
DataTypes.postgres.HALFVEC.key = 'halfvec';
42+
43+
// for migrations
44+
Sequelize.HALFVEC ??= DataTypes.HALFVEC;

src/sequelize/index.js

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
1+
import { deprecate } from 'node:util';
12
import { toSql } from '../utils/index.js';
23
import { Utils } from 'sequelize';
3-
import { registerHalfvec } from './halfvec.js';
4-
import { registerSparsevec } from './sparsevec.js';
5-
import { registerVector } from './vector.js';
6-
7-
function registerTypes(Sequelize) {
8-
registerVector(Sequelize);
9-
registerHalfvec(Sequelize);
10-
registerSparsevec(Sequelize);
11-
}
4+
import './halfvec.js';
5+
import './sparsevec.js';
6+
import './vector.js';
7+
8+
const registerType = deprecate((Sequelize) => {}, "registerType() is deprecated. Use import 'pgvector/sequelize' instead.");
9+
const registerTypes = deprecate((Sequelize) => {}, "registerTypes() is deprecated. Use import 'pgvector/sequelize' instead.");
1210

1311
function distance(op, column, value, sequelize, binary) {
1412
const quotedColumn = column instanceof Utils.Literal ? column.val : sequelize.dialect.queryGenerator.quoteIdentifier(column);
@@ -40,8 +38,6 @@ export function jaccardDistance(column, value, sequelize) {
4038
return distance('<%>', column, value, sequelize, true);
4139
}
4240

43-
const registerType = registerTypes;
44-
4541
export { registerType, registerTypes };
4642

4743
export default { registerType, registerTypes };

src/sequelize/sparsevec.js

Lines changed: 33 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,44 @@
11
import { inherits } from 'node:util';
2+
import { Sequelize, DataTypes, Utils } from 'sequelize';
23
import { sparsevecType, sparsevecToSql, sparsevecFromSql } from '../utils/index.js';
34

4-
export function registerSparsevec(Sequelize) {
5-
const DataTypes = Sequelize.DataTypes;
6-
const PgTypes = DataTypes.postgres;
7-
const ABSTRACT = DataTypes.ABSTRACT.prototype.constructor;
5+
const PgTypes = DataTypes.postgres;
6+
const ABSTRACT = DataTypes.ABSTRACT.prototype.constructor;
87

9-
class SPARSEVEC extends ABSTRACT {
10-
constructor(dimensions) {
11-
super();
12-
this._dimensions = dimensions;
13-
}
14-
15-
toSql() {
16-
return sparsevecType(this._dimensions).toUpperCase();
17-
}
8+
class SPARSEVEC extends ABSTRACT {
9+
constructor(dimensions) {
10+
super();
11+
this._dimensions = dimensions;
12+
}
1813

19-
_stringify(value) {
20-
return sparsevecToSql(value);
21-
}
14+
toSql() {
15+
return sparsevecType(this._dimensions).toUpperCase();
16+
}
2217

23-
static parse(value) {
24-
return sparsevecFromSql(value);
25-
}
18+
_stringify(value) {
19+
return sparsevecToSql(value);
2620
}
2721

28-
SPARSEVEC.prototype.key = SPARSEVEC.key = 'sparsevec';
22+
static parse(value) {
23+
return sparsevecFromSql(value);
24+
}
25+
}
2926

30-
DataTypes.SPARSEVEC = Sequelize.Utils.classToInvokable(SPARSEVEC);
31-
DataTypes.SPARSEVEC.types.postgres = ['sparsevec'];
27+
SPARSEVEC.prototype.key = SPARSEVEC.key = 'sparsevec';
3228

33-
PgTypes.SPARSEVEC = function SPARSEVEC() {
34-
if (!(this instanceof PgTypes.SPARSEVEC)) {
35-
return new PgTypes.SPARSEVEC();
36-
}
37-
DataTypes.SPARSEVEC.apply(this, arguments);
38-
};
39-
inherits(PgTypes.SPARSEVEC, DataTypes.SPARSEVEC);
40-
PgTypes.SPARSEVEC.parse = DataTypes.SPARSEVEC.parse;
41-
PgTypes.SPARSEVEC.types = {postgres: ['sparsevec']};
42-
DataTypes.postgres.SPARSEVEC.key = 'sparsevec';
29+
DataTypes.SPARSEVEC = Utils.classToInvokable(SPARSEVEC);
30+
DataTypes.SPARSEVEC.types.postgres = ['sparsevec'];
4331

44-
// for migrations
45-
Sequelize.SPARSEVEC ??= DataTypes.SPARSEVEC;
46-
}
32+
PgTypes.SPARSEVEC = function SPARSEVEC() {
33+
if (!(this instanceof PgTypes.SPARSEVEC)) {
34+
return new PgTypes.SPARSEVEC();
35+
}
36+
DataTypes.SPARSEVEC.apply(this, arguments);
37+
};
38+
inherits(PgTypes.SPARSEVEC, DataTypes.SPARSEVEC);
39+
PgTypes.SPARSEVEC.parse = DataTypes.SPARSEVEC.parse;
40+
PgTypes.SPARSEVEC.types = {postgres: ['sparsevec']};
41+
DataTypes.postgres.SPARSEVEC.key = 'sparsevec';
42+
43+
// for migrations
44+
Sequelize.SPARSEVEC ??= DataTypes.SPARSEVEC;

src/sequelize/vector.js

Lines changed: 33 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,44 @@
11
import { inherits } from 'node:util';
2+
import { Sequelize, DataTypes, Utils } from 'sequelize';
23
import { vectorType, vectorToSql, vectorFromSql } from '../utils/index.js';
34

4-
export function registerVector(Sequelize) {
5-
const DataTypes = Sequelize.DataTypes;
6-
const PgTypes = DataTypes.postgres;
7-
const ABSTRACT = DataTypes.ABSTRACT.prototype.constructor;
5+
const PgTypes = DataTypes.postgres;
6+
const ABSTRACT = DataTypes.ABSTRACT.prototype.constructor;
87

9-
class VECTOR extends ABSTRACT {
10-
constructor(dimensions) {
11-
super();
12-
this._dimensions = dimensions;
13-
}
14-
15-
toSql() {
16-
return vectorType(this._dimensions).toUpperCase();
17-
}
8+
class VECTOR extends ABSTRACT {
9+
constructor(dimensions) {
10+
super();
11+
this._dimensions = dimensions;
12+
}
1813

19-
_stringify(value) {
20-
return vectorToSql(value);
21-
}
14+
toSql() {
15+
return vectorType(this._dimensions).toUpperCase();
16+
}
2217

23-
static parse(value) {
24-
return vectorFromSql(value);
25-
}
18+
_stringify(value) {
19+
return vectorToSql(value);
2620
}
2721

28-
VECTOR.prototype.key = VECTOR.key = 'vector';
22+
static parse(value) {
23+
return vectorFromSql(value);
24+
}
25+
}
2926

30-
DataTypes.VECTOR = Sequelize.Utils.classToInvokable(VECTOR);
31-
DataTypes.VECTOR.types.postgres = ['vector'];
27+
VECTOR.prototype.key = VECTOR.key = 'vector';
3228

33-
PgTypes.VECTOR = function VECTOR() {
34-
if (!(this instanceof PgTypes.VECTOR)) {
35-
return new PgTypes.VECTOR();
36-
}
37-
DataTypes.VECTOR.apply(this, arguments);
38-
};
39-
inherits(PgTypes.VECTOR, DataTypes.VECTOR);
40-
PgTypes.VECTOR.parse = DataTypes.VECTOR.parse;
41-
PgTypes.VECTOR.types = {postgres: ['vector']};
42-
DataTypes.postgres.VECTOR.key = 'vector';
29+
DataTypes.VECTOR = Utils.classToInvokable(VECTOR);
30+
DataTypes.VECTOR.types.postgres = ['vector'];
4331

44-
// for migrations
45-
Sequelize.VECTOR ??= DataTypes.VECTOR;
46-
}
32+
PgTypes.VECTOR = function VECTOR() {
33+
if (!(this instanceof PgTypes.VECTOR)) {
34+
return new PgTypes.VECTOR();
35+
}
36+
DataTypes.VECTOR.apply(this, arguments);
37+
};
38+
inherits(PgTypes.VECTOR, DataTypes.VECTOR);
39+
PgTypes.VECTOR.parse = DataTypes.VECTOR.parse;
40+
PgTypes.VECTOR.types = {postgres: ['vector']};
41+
DataTypes.postgres.VECTOR.key = 'vector';
42+
43+
// for migrations
44+
Sequelize.VECTOR ??= DataTypes.VECTOR;

tests/sequelize.test.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
import assert from 'node:assert';
22
import test from 'node:test';
33
import { Sequelize, DataTypes } from 'sequelize';
4-
import pgvector from 'pgvector/sequelize';
4+
import 'pgvector/sequelize';
55
import { l2Distance, maxInnerProduct, cosineDistance, l1Distance, hammingDistance, jaccardDistance } from 'pgvector/sequelize';
66
import { SparseVector } from 'pgvector';
77

88
test('sequelize example', async () => {
9-
pgvector.registerTypes(Sequelize);
10-
119
let sequelize = new Sequelize('postgres://localhost/pgvector_node_test', {
1210
logging: false
1311
});

types/sequelize/halfvec.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export function registerHalfvec(Sequelize: any): void;
1+
export {};

types/sequelize/sparsevec.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export function registerSparsevec(Sequelize: any): void;
1+
export {};

types/sequelize/vector.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export function registerVector(Sequelize: any): void;
1+
export {};

0 commit comments

Comments
 (0)