@framers/sql-storage-adapter 0.7.4 → 0.7.6
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.
- package/README.md +25 -13
- package/dist/adapters/supabase.d.ts +8 -0
- package/dist/adapters/supabase.d.ts.map +1 -1
- package/dist/adapters/supabase.js +38 -11
- package/dist/adapters/supabase.js.map +1 -1
- package/dist/cjs/adapters/supabase.d.ts +8 -0
- package/dist/cjs/adapters/supabase.js +29 -11
- package/dist/cjs/core/contracts/features.js +4 -2
- package/dist/cjs/core/contracts/fts.d.ts +20 -8
- package/dist/cjs/core/portable.d.ts +1 -0
- package/dist/cjs/core/portable.js +3 -0
- package/dist/cjs/core/resolver.js +1 -1
- package/dist/cjs/fts/PostgresFts.d.ts +14 -13
- package/dist/cjs/fts/PostgresFts.js +61 -33
- package/dist/cjs/fts/SqliteFts4.d.ts +28 -0
- package/dist/cjs/fts/SqliteFts4.js +67 -0
- package/dist/cjs/fts/SqliteFts5.d.ts +1 -0
- package/dist/cjs/fts/SqliteFts5.js +3 -0
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.js +3 -0
- package/dist/core/contracts/features.d.ts.map +1 -1
- package/dist/core/contracts/features.js +6 -2
- package/dist/core/contracts/features.js.map +1 -1
- package/dist/core/contracts/fts.d.ts +20 -8
- package/dist/core/contracts/fts.d.ts.map +1 -1
- package/dist/core/portable.d.ts +1 -0
- package/dist/core/portable.d.ts.map +1 -1
- package/dist/core/portable.js +1 -0
- package/dist/core/portable.js.map +1 -1
- package/dist/core/resolver.js +1 -1
- package/dist/core/resolver.js.map +1 -1
- package/dist/fts/PostgresFts.d.ts +14 -13
- package/dist/fts/PostgresFts.d.ts.map +1 -1
- package/dist/fts/PostgresFts.js +83 -39
- package/dist/fts/PostgresFts.js.map +1 -1
- package/dist/fts/SqliteFts4.d.ts +28 -0
- package/dist/fts/SqliteFts4.d.ts.map +1 -0
- package/dist/fts/SqliteFts4.js +56 -0
- package/dist/fts/SqliteFts4.js.map +1 -0
- package/dist/fts/SqliteFts5.d.ts +1 -0
- package/dist/fts/SqliteFts5.d.ts.map +1 -1
- package/dist/fts/SqliteFts5.js +3 -0
- package/dist/fts/SqliteFts5.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/fts/PostgresFts.js
CHANGED
|
@@ -1,62 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The indexes createIndex has described in this process, by index name. It
|
|
3
|
+
* is the module's, not an instance's, so a features object made later (or a
|
|
4
|
+
* second one) syncs, rebuilds and queries an index another one created, and
|
|
5
|
+
* each index keeps its own language.
|
|
6
|
+
*/
|
|
7
|
+
const INDEXES = new Map();
|
|
8
|
+
const WEIGHTS = new Set(['A', 'B', 'C', 'D']);
|
|
1
9
|
/**
|
|
2
10
|
* Postgres full-text search using tsvector columns and GIN indexes.
|
|
3
11
|
*
|
|
4
|
-
* Unlike FTS5 (separate virtual table), Postgres stores the tsvector
|
|
5
|
-
*
|
|
6
|
-
*
|
|
12
|
+
* Unlike FTS5 (separate virtual table), Postgres stores the tsvector as a
|
|
13
|
+
* column `_tsv` on the content table itself. The `createIndex()` call adds the
|
|
14
|
+
* column, creates the GIN index, and backfills existing rows. Queries go
|
|
15
|
+
* through `websearch_to_tsquery`, which reads raw user text without syntax
|
|
16
|
+
* errors: words are ANDed, and `or`, `-word` and quoted phrases work as in a
|
|
17
|
+
* web search box.
|
|
7
18
|
*/
|
|
8
19
|
export class PostgresFts {
|
|
9
|
-
constructor() {
|
|
10
|
-
/** The content table is stored during createIndex for use by other methods. */
|
|
11
|
-
this._contentTable = '';
|
|
12
|
-
this._columns = [];
|
|
13
|
-
this._lang = 'english';
|
|
14
|
-
}
|
|
15
20
|
createIndex(config) {
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
21
|
+
const index = {
|
|
22
|
+
contentTable: config.contentTable ?? config.table,
|
|
23
|
+
columns: config.columns,
|
|
24
|
+
lang: tokenizerToLang(config.tokenizer),
|
|
25
|
+
weights: checkWeights(config.columns, config.weights),
|
|
26
|
+
};
|
|
27
|
+
INDEXES.set(config.table, index);
|
|
28
|
+
const ct = index.contentTable;
|
|
22
29
|
return [
|
|
23
30
|
`ALTER TABLE ${ct} ADD COLUMN IF NOT EXISTS _tsv tsvector`,
|
|
24
31
|
`CREATE INDEX IF NOT EXISTS idx_${config.table}_tsv ON ${ct} USING GIN(_tsv)`,
|
|
25
|
-
`UPDATE ${ct} SET _tsv =
|
|
32
|
+
`UPDATE ${ct} SET _tsv = ${tsvector(index, index.columns.map((column) => `COALESCE(${column}, '')`))} WHERE _tsv IS NULL`,
|
|
26
33
|
].join(';\n');
|
|
27
34
|
}
|
|
28
|
-
matchClause(
|
|
29
|
-
return `_tsv @@
|
|
35
|
+
matchClause(indexName, queryPlaceholder) {
|
|
36
|
+
return `_tsv @@ websearch_to_tsquery('${langOf(indexName)}', ${queryPlaceholder})`;
|
|
30
37
|
}
|
|
31
|
-
rankExpression(
|
|
38
|
+
rankExpression(indexName, queryPlaceholder) {
|
|
32
39
|
const qp = queryPlaceholder ?? '$1';
|
|
33
|
-
return `ts_rank(_tsv,
|
|
40
|
+
return `ts_rank(_tsv, websearch_to_tsquery('${langOf(indexName)}', ${qp}))`;
|
|
41
|
+
}
|
|
42
|
+
relevanceOrder(indexName, queryPlaceholder) {
|
|
43
|
+
return `${this.rankExpression(indexName, queryPlaceholder)} DESC`;
|
|
34
44
|
}
|
|
35
|
-
rebuildCommand(
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
return `UPDATE ${ct} SET _tsv = to_tsvector('${this._lang}', ${colConcat})`;
|
|
45
|
+
rebuildCommand(indexName) {
|
|
46
|
+
const index = described(indexName);
|
|
47
|
+
return `UPDATE ${index.contentTable} SET _tsv = ${tsvector(index, index.columns.map((column) => `COALESCE(${column}, '')`))}`;
|
|
39
48
|
}
|
|
40
|
-
syncInsert(
|
|
41
|
-
const
|
|
42
|
-
const
|
|
43
|
-
|
|
44
|
-
.join(" || ' ' || ");
|
|
45
|
-
return `UPDATE ${ct} SET _tsv = to_tsvector('${this._lang}', ${colConcat}) WHERE id = $1`;
|
|
49
|
+
syncInsert(indexName, _rowIdExpr, columns) {
|
|
50
|
+
const index = described(indexName);
|
|
51
|
+
const values = columns.map((_, i) => `COALESCE($${i + 2}, '')`);
|
|
52
|
+
return `UPDATE ${index.contentTable} SET _tsv = ${tsvector({ ...index, columns }, values)} WHERE id = $1`;
|
|
46
53
|
}
|
|
47
54
|
sanitizeQuery(input) {
|
|
48
|
-
return input
|
|
55
|
+
return input
|
|
56
|
+
.replace(/[*()":^~{}[\]\\-]/g, ' ')
|
|
57
|
+
.split(/\s+/)
|
|
58
|
+
.filter((word) => word.length > 0 && word.toLowerCase() !== 'or')
|
|
59
|
+
.map((word) => `"${word}"`)
|
|
60
|
+
.join(' or ');
|
|
49
61
|
}
|
|
50
62
|
joinClause(contentTable, contentAlias, _ftsAlias, _indexName) {
|
|
51
63
|
return `${contentTable} ${contentAlias}`;
|
|
52
64
|
}
|
|
53
|
-
/** Map FTS5-style tokenizer strings to Postgres text search configurations. */
|
|
54
|
-
_tokenizerToLang(tokenizer) {
|
|
55
|
-
if (!tokenizer)
|
|
56
|
-
return 'english';
|
|
57
|
-
if (tokenizer.includes('porter'))
|
|
58
|
-
return 'english';
|
|
59
|
-
return 'simple';
|
|
60
|
-
}
|
|
61
65
|
}
|
|
66
|
+
/** Map FTS5-style tokenizer strings to Postgres text search configurations. */
|
|
67
|
+
const tokenizerToLang = (tokenizer) => {
|
|
68
|
+
if (!tokenizer)
|
|
69
|
+
return 'english';
|
|
70
|
+
if (tokenizer.includes('porter'))
|
|
71
|
+
return 'english';
|
|
72
|
+
return 'simple';
|
|
73
|
+
};
|
|
74
|
+
const checkWeights = (columns, weights) => {
|
|
75
|
+
if (!weights)
|
|
76
|
+
return undefined;
|
|
77
|
+
for (const [column, weight] of Object.entries(weights)) {
|
|
78
|
+
if (!columns.includes(column))
|
|
79
|
+
throw new Error(`weights names ${JSON.stringify(column)}, which is not one of the indexed columns.`);
|
|
80
|
+
if (!WEIGHTS.has(weight))
|
|
81
|
+
throw new Error(`The weight of ${column} must be 'A', 'B', 'C' or 'D'; got ${JSON.stringify(weight)}.`);
|
|
82
|
+
}
|
|
83
|
+
return weights;
|
|
84
|
+
};
|
|
85
|
+
/** The tsvector expression over `values`, one per indexed column, weighted when the index has weights. */
|
|
86
|
+
const tsvector = (index, values) => {
|
|
87
|
+
if (!index.weights)
|
|
88
|
+
return `to_tsvector('${index.lang}', ${values.join(" || ' ' || ")})`;
|
|
89
|
+
return values
|
|
90
|
+
.map((value, i) => {
|
|
91
|
+
const weight = index.weights[index.columns[i]];
|
|
92
|
+
const vector = `to_tsvector('${index.lang}', ${value})`;
|
|
93
|
+
return weight ? `setweight(${vector}, '${weight}')` : vector;
|
|
94
|
+
})
|
|
95
|
+
.join(' || ');
|
|
96
|
+
};
|
|
97
|
+
const described = (indexName) => {
|
|
98
|
+
const index = INDEXES.get(indexName);
|
|
99
|
+
if (!index) {
|
|
100
|
+
throw new Error(`No PostgreSQL full-text index named ${JSON.stringify(indexName)} has been described in this process: run its createIndex() first (it is idempotent).`);
|
|
101
|
+
}
|
|
102
|
+
return index;
|
|
103
|
+
};
|
|
104
|
+
/** The language of an index, or 'english' for an index this process has not described. */
|
|
105
|
+
const langOf = (indexName) => INDEXES.get(indexName)?.lang ?? 'english';
|
|
62
106
|
//# sourceMappingURL=PostgresFts.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PostgresFts.js","sourceRoot":"","sources":["../../src/fts/PostgresFts.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PostgresFts.js","sourceRoot":"","sources":["../../src/fts/PostgresFts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { IFullTextSearch } from '../core/contracts/fts.js';
|
|
2
|
+
/**
|
|
3
|
+
* SQLite FTS4 full-text search, for sql.js and the IndexedDB adapter: the
|
|
4
|
+
* stock sql.js build compiles SQLite with FTS3 and FTS4 and without FTS5.
|
|
5
|
+
*
|
|
6
|
+
* Uses FTS4 virtual tables with external content, the porter, unicode61 or
|
|
7
|
+
* simple tokenizer, and rowid joins to the content table. FTS4 has no rank
|
|
8
|
+
* column; relevanceOrder orders by the length of `offsets()`, which grows with
|
|
9
|
+
* the number of matching terms, so the best match comes first.
|
|
10
|
+
*/
|
|
11
|
+
export declare class SqliteFts4 implements IFullTextSearch {
|
|
12
|
+
createIndex(config: {
|
|
13
|
+
table: string;
|
|
14
|
+
columns: string[];
|
|
15
|
+
contentTable?: string;
|
|
16
|
+
tokenizer?: string;
|
|
17
|
+
}): string;
|
|
18
|
+
matchClause(indexName: string, queryPlaceholder: string): string;
|
|
19
|
+
rankExpression(indexName: string, _queryPlaceholder?: string): string;
|
|
20
|
+
relevanceOrder(indexName: string, _queryPlaceholder?: string): string;
|
|
21
|
+
rebuildCommand(indexName: string): string;
|
|
22
|
+
syncInsert(indexName: string, rowIdExpr: string, columns: string[]): string;
|
|
23
|
+
sanitizeQuery(input: string): string;
|
|
24
|
+
joinClause(contentTable: string, contentAlias: string, ftsAlias: string, indexName: string): string;
|
|
25
|
+
/** An FTS5-style tokenizer string as an FTS4 tokenizer name. */
|
|
26
|
+
private tokenizer;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=SqliteFts4.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SqliteFts4.d.ts","sourceRoot":"","sources":["../../src/fts/SqliteFts4.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAEhE;;;;;;;;GAQG;AACH,qBAAa,UAAW,YAAW,eAAe;IAChD,WAAW,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;IAO5G,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,MAAM;IAIhE,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,MAAM,GAAG,MAAM;IAIrE,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,MAAM,GAAG,MAAM;IAIrE,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAIzC,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM;IAK3E,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IASpC,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;IAInG,gEAAgE;IAChE,OAAO,CAAC,SAAS;CAMlB"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQLite FTS4 full-text search, for sql.js and the IndexedDB adapter: the
|
|
3
|
+
* stock sql.js build compiles SQLite with FTS3 and FTS4 and without FTS5.
|
|
4
|
+
*
|
|
5
|
+
* Uses FTS4 virtual tables with external content, the porter, unicode61 or
|
|
6
|
+
* simple tokenizer, and rowid joins to the content table. FTS4 has no rank
|
|
7
|
+
* column; relevanceOrder orders by the length of `offsets()`, which grows with
|
|
8
|
+
* the number of matching terms, so the best match comes first.
|
|
9
|
+
*/
|
|
10
|
+
export class SqliteFts4 {
|
|
11
|
+
createIndex(config) {
|
|
12
|
+
const parts = [...config.columns];
|
|
13
|
+
if (config.contentTable)
|
|
14
|
+
parts.push(`content="${config.contentTable}"`);
|
|
15
|
+
parts.push(`tokenize=${this.tokenizer(config.tokenizer)}`);
|
|
16
|
+
return `CREATE VIRTUAL TABLE IF NOT EXISTS ${config.table} USING fts4(${parts.join(', ')})`;
|
|
17
|
+
}
|
|
18
|
+
matchClause(indexName, queryPlaceholder) {
|
|
19
|
+
return `${indexName} MATCH ${queryPlaceholder}`;
|
|
20
|
+
}
|
|
21
|
+
rankExpression(indexName, _queryPlaceholder) {
|
|
22
|
+
return `length(offsets(${indexName}))`;
|
|
23
|
+
}
|
|
24
|
+
relevanceOrder(indexName, _queryPlaceholder) {
|
|
25
|
+
return `length(offsets(${indexName})) DESC`;
|
|
26
|
+
}
|
|
27
|
+
rebuildCommand(indexName) {
|
|
28
|
+
return `INSERT INTO ${indexName}(${indexName}) VALUES('rebuild')`;
|
|
29
|
+
}
|
|
30
|
+
syncInsert(indexName, rowIdExpr, columns) {
|
|
31
|
+
const placeholders = columns.map(() => '?').join(', ');
|
|
32
|
+
return `INSERT INTO ${indexName} (docid, ${columns.join(', ')}) VALUES (${rowIdExpr}, ${placeholders})`;
|
|
33
|
+
}
|
|
34
|
+
sanitizeQuery(input) {
|
|
35
|
+
return input
|
|
36
|
+
.replace(/[*()":^~{}[\]\\]/g, '')
|
|
37
|
+
.split(/\s+/)
|
|
38
|
+
.filter((word) => word.length > 0)
|
|
39
|
+
.map((word) => `"${word}"`)
|
|
40
|
+
.join(' OR ');
|
|
41
|
+
}
|
|
42
|
+
joinClause(contentTable, contentAlias, ftsAlias, indexName) {
|
|
43
|
+
return `${indexName} ${ftsAlias} JOIN ${contentTable} ${contentAlias} ON ${contentAlias}.rowid = ${ftsAlias}.docid`;
|
|
44
|
+
}
|
|
45
|
+
/** An FTS5-style tokenizer string as an FTS4 tokenizer name. */
|
|
46
|
+
tokenizer(tokenizer) {
|
|
47
|
+
if (!tokenizer)
|
|
48
|
+
return 'unicode61';
|
|
49
|
+
if (tokenizer.includes('porter'))
|
|
50
|
+
return 'porter';
|
|
51
|
+
if (tokenizer.includes('unicode61'))
|
|
52
|
+
return 'unicode61';
|
|
53
|
+
return 'simple';
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=SqliteFts4.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SqliteFts4.js","sourceRoot":"","sources":["../../src/fts/SqliteFts4.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,MAAM,OAAO,UAAU;IACrB,WAAW,CAAC,MAAuF;QACjG,MAAM,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QAClC,IAAI,MAAM,CAAC,YAAY;YAAE,KAAK,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC;QACxE,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAC3D,OAAO,sCAAsC,MAAM,CAAC,KAAK,eAAe,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IAC9F,CAAC;IAED,WAAW,CAAC,SAAiB,EAAE,gBAAwB;QACrD,OAAO,GAAG,SAAS,UAAU,gBAAgB,EAAE,CAAC;IAClD,CAAC;IAED,cAAc,CAAC,SAAiB,EAAE,iBAA0B;QAC1D,OAAO,kBAAkB,SAAS,IAAI,CAAC;IACzC,CAAC;IAED,cAAc,CAAC,SAAiB,EAAE,iBAA0B;QAC1D,OAAO,kBAAkB,SAAS,SAAS,CAAC;IAC9C,CAAC;IAED,cAAc,CAAC,SAAiB;QAC9B,OAAO,eAAe,SAAS,IAAI,SAAS,qBAAqB,CAAC;IACpE,CAAC;IAED,UAAU,CAAC,SAAiB,EAAE,SAAiB,EAAE,OAAiB;QAChE,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvD,OAAO,eAAe,SAAS,YAAY,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,SAAS,KAAK,YAAY,GAAG,CAAC;IAC1G,CAAC;IAED,aAAa,CAAC,KAAa;QACzB,OAAO,KAAK;aACT,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC;aAChC,KAAK,CAAC,KAAK,CAAC;aACZ,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;aACjC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,GAAG,CAAC;aAC1B,IAAI,CAAC,MAAM,CAAC,CAAC;IAClB,CAAC;IAED,UAAU,CAAC,YAAoB,EAAE,YAAoB,EAAE,QAAgB,EAAE,SAAiB;QACxF,OAAO,GAAG,SAAS,IAAI,QAAQ,SAAS,YAAY,IAAI,YAAY,OAAO,YAAY,YAAY,QAAQ,QAAQ,CAAC;IACtH,CAAC;IAED,gEAAgE;IACxD,SAAS,CAAC,SAAkB;QAClC,IAAI,CAAC,SAAS;YAAE,OAAO,WAAW,CAAC;QACnC,IAAI,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,OAAO,QAAQ,CAAC;QAClD,IAAI,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC;YAAE,OAAO,WAAW,CAAC;QACxD,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF"}
|
package/dist/fts/SqliteFts5.d.ts
CHANGED
|
@@ -14,6 +14,7 @@ export declare class SqliteFts5 implements IFullTextSearch {
|
|
|
14
14
|
}): string;
|
|
15
15
|
matchClause(indexName: string, queryPlaceholder: string): string;
|
|
16
16
|
rankExpression(indexName: string, _queryPlaceholder?: string): string;
|
|
17
|
+
relevanceOrder(indexName: string, _queryPlaceholder?: string): string;
|
|
17
18
|
rebuildCommand(indexName: string): string;
|
|
18
19
|
syncInsert(indexName: string, rowIdExpr: string, columns: string[]): string;
|
|
19
20
|
sanitizeQuery(input: string): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SqliteFts5.d.ts","sourceRoot":"","sources":["../../src/fts/SqliteFts5.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAEhE;;;;;GAKG;AACH,qBAAa,UAAW,YAAW,eAAe;IAChD,WAAW,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;IAY5G,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,MAAM;IAIhE,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,MAAM,GAAG,MAAM;IAIrE,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAIzC,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM;IAK3E,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IASpC,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;CAGpG"}
|
|
1
|
+
{"version":3,"file":"SqliteFts5.d.ts","sourceRoot":"","sources":["../../src/fts/SqliteFts5.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAEhE;;;;;GAKG;AACH,qBAAa,UAAW,YAAW,eAAe;IAChD,WAAW,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;IAY5G,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,MAAM;IAIhE,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,MAAM,GAAG,MAAM;IAIrE,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,MAAM,GAAG,MAAM;IAIrE,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAIzC,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM;IAK3E,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IASpC,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;CAGpG"}
|
package/dist/fts/SqliteFts5.js
CHANGED
|
@@ -22,6 +22,9 @@ export class SqliteFts5 {
|
|
|
22
22
|
rankExpression(indexName, _queryPlaceholder) {
|
|
23
23
|
return `${indexName}.rank`;
|
|
24
24
|
}
|
|
25
|
+
relevanceOrder(indexName, _queryPlaceholder) {
|
|
26
|
+
return `${indexName}.rank`;
|
|
27
|
+
}
|
|
25
28
|
rebuildCommand(indexName) {
|
|
26
29
|
return `INSERT INTO ${indexName}(${indexName}) VALUES('rebuild')`;
|
|
27
30
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SqliteFts5.js","sourceRoot":"","sources":["../../src/fts/SqliteFts5.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,OAAO,UAAU;IACrB,WAAW,CAAC,MAAuF;QACjG,MAAM,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QAClC,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC;YAC/C,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACtC,CAAC;QACD,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACrB,KAAK,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC;QAC/C,CAAC;QACD,OAAO,sCAAsC,MAAM,CAAC,KAAK,eAAe,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IAC9F,CAAC;IAED,WAAW,CAAC,SAAiB,EAAE,gBAAwB;QACrD,OAAO,GAAG,SAAS,UAAU,gBAAgB,EAAE,CAAC;IAClD,CAAC;IAED,cAAc,CAAC,SAAiB,EAAE,iBAA0B;QAC1D,OAAO,GAAG,SAAS,OAAO,CAAC;IAC7B,CAAC;IAED,cAAc,CAAC,SAAiB;QAC9B,OAAO,eAAe,SAAS,IAAI,SAAS,qBAAqB,CAAC;IACpE,CAAC;IAED,UAAU,CAAC,SAAiB,EAAE,SAAiB,EAAE,OAAiB;QAChE,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvD,OAAO,eAAe,SAAS,YAAY,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,SAAS,KAAK,YAAY,GAAG,CAAC;IAC1G,CAAC;IAED,aAAa,CAAC,KAAa;QACzB,OAAO,KAAK;aACT,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC;aAChC,KAAK,CAAC,KAAK,CAAC;aACZ,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;aAC3B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;aACpB,IAAI,CAAC,MAAM,CAAC,CAAC;IAClB,CAAC;IAED,UAAU,CAAC,YAAoB,EAAE,YAAoB,EAAE,QAAgB,EAAE,SAAiB;QACxF,OAAO,GAAG,SAAS,IAAI,QAAQ,SAAS,YAAY,IAAI,YAAY,OAAO,YAAY,YAAY,QAAQ,QAAQ,CAAC;IACtH,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"SqliteFts5.js","sourceRoot":"","sources":["../../src/fts/SqliteFts5.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,OAAO,UAAU;IACrB,WAAW,CAAC,MAAuF;QACjG,MAAM,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QAClC,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC;YAC/C,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACtC,CAAC;QACD,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACrB,KAAK,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC;QAC/C,CAAC;QACD,OAAO,sCAAsC,MAAM,CAAC,KAAK,eAAe,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IAC9F,CAAC;IAED,WAAW,CAAC,SAAiB,EAAE,gBAAwB;QACrD,OAAO,GAAG,SAAS,UAAU,gBAAgB,EAAE,CAAC;IAClD,CAAC;IAED,cAAc,CAAC,SAAiB,EAAE,iBAA0B;QAC1D,OAAO,GAAG,SAAS,OAAO,CAAC;IAC7B,CAAC;IAED,cAAc,CAAC,SAAiB,EAAE,iBAA0B;QAC1D,OAAO,GAAG,SAAS,OAAO,CAAC;IAC7B,CAAC;IAED,cAAc,CAAC,SAAiB;QAC9B,OAAO,eAAe,SAAS,IAAI,SAAS,qBAAqB,CAAC;IACpE,CAAC;IAED,UAAU,CAAC,SAAiB,EAAE,SAAiB,EAAE,OAAiB;QAChE,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvD,OAAO,eAAe,SAAS,YAAY,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,SAAS,KAAK,YAAY,GAAG,CAAC;IAC1G,CAAC;IAED,aAAa,CAAC,KAAa;QACzB,OAAO,KAAK;aACT,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC;aAChC,KAAK,CAAC,KAAK,CAAC;aACZ,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;aAC3B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;aACpB,IAAI,CAAC,MAAM,CAAC,CAAC;IAClB,CAAC;IAED,UAAU,CAAC,YAAoB,EAAE,YAAoB,EAAE,QAAgB,EAAE,SAAiB;QACxF,OAAO,GAAG,SAAS,IAAI,QAAQ,SAAS,YAAY,IAAI,YAAY,OAAO,YAAY,YAAY,QAAQ,QAAQ,CAAC;IACtH,CAAC;CACF"}
|
package/dist/index.d.ts
CHANGED
|
@@ -20,6 +20,7 @@ export { segmentFilePath, segmentName, validateSegment } from './shared/segment.
|
|
|
20
20
|
export { SqliteDialect } from './dialects/SqliteDialect.js';
|
|
21
21
|
export { PostgresDialect } from './dialects/PostgresDialect.js';
|
|
22
22
|
export { SqliteFts5 } from './fts/SqliteFts5.js';
|
|
23
|
+
export { SqliteFts4 } from './fts/SqliteFts4.js';
|
|
23
24
|
export { PostgresFts } from './fts/PostgresFts.js';
|
|
24
25
|
export { NodeBlobCodec } from './codecs/NodeBlobCodec.js';
|
|
25
26
|
export { BrowserBlobCodec } from './codecs/BrowserBlobCodec.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,SAAS,CAAC;AAGxB,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAGhC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mCAAmC,CAAC;AAClD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,+BAA+B,CAAC;AAQ9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kCAAkC,CAAC;AACjD,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,wCAAwC,CAAC;AACvD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAM5C,cAAc,yBAAyB,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAMjF,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,SAAS,CAAC;AAGxB,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAGhC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mCAAmC,CAAC;AAClD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,+BAA+B,CAAC;AAQ9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kCAAkC,CAAC;AACjD,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,wCAAwC,CAAC;AACvD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAM5C,cAAc,yBAAyB,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAMjF,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -34,6 +34,7 @@ export { segmentFilePath, segmentName, validateSegment } from './shared/segment.
|
|
|
34
34
|
export { SqliteDialect } from './dialects/SqliteDialect.js';
|
|
35
35
|
export { PostgresDialect } from './dialects/PostgresDialect.js';
|
|
36
36
|
export { SqliteFts5 } from './fts/SqliteFts5.js';
|
|
37
|
+
export { SqliteFts4 } from './fts/SqliteFts4.js';
|
|
37
38
|
export { PostgresFts } from './fts/PostgresFts.js';
|
|
38
39
|
export { NodeBlobCodec } from './codecs/NodeBlobCodec.js';
|
|
39
40
|
export { BrowserBlobCodec } from './codecs/BrowserBlobCodec.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,cAAc,SAAS,CAAC;AAExB,8EAA8E;AAC9E,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAEhC,+EAA+E;AAC/E,cAAc,gCAAgC,CAAC;AAC/C,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mCAAmC,CAAC;AAClD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,+BAA+B,CAAC;AAE9C,wEAAwE;AACxE,yDAAyD;AACzD,2HAA2H;AAC3H,mEAAmE;AAEnE,+EAA+E;AAC/E,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kCAAkC,CAAC;AACjD,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,wCAAwC,CAAC;AACvD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAE5C,uFAAuF;AACvF,sFAAsF;AAEtF,+EAA+E;AAC/E,cAAc,yBAAyB,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEjF,6FAA6F;AAC7F,uGAAuG;AAEvG,iFAAiF;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAsB,MAAM,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,cAAc,SAAS,CAAC;AAExB,8EAA8E;AAC9E,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAEhC,+EAA+E;AAC/E,cAAc,gCAAgC,CAAC;AAC/C,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mCAAmC,CAAC;AAClD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,+BAA+B,CAAC;AAE9C,wEAAwE;AACxE,yDAAyD;AACzD,2HAA2H;AAC3H,mEAAmE;AAEnE,+EAA+E;AAC/E,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kCAAkC,CAAC;AACjD,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,wCAAwC,CAAC;AACvD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAE5C,uFAAuF;AACvF,sFAAsF;AAEtF,+EAA+E;AAC/E,cAAc,yBAAyB,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEjF,6FAA6F;AAC7F,uGAAuG;AAEvG,iFAAiF;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAsB,MAAM,iBAAiB,CAAC"}
|
package/package.json
CHANGED