@juit/pgproxy-persister 1.3.6 → 1.4.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.
package/dist/index.cjs CHANGED
@@ -28,11 +28,13 @@ module.exports = __toCommonJS(index_exports);
28
28
  var import_pgproxy_client = require("@juit/pgproxy-client");
29
29
  __reExport(index_exports, require("./model.cjs"), module.exports);
30
30
  __reExport(index_exports, require("./persister.cjs"), module.exports);
31
+ __reExport(index_exports, require("./search.cjs"), module.exports);
31
32
  // Annotate the CommonJS export names for ESM import in node:
32
33
  0 && (module.exports = {
33
34
  SQL,
34
35
  escape,
35
36
  ...require("./model.cjs"),
36
- ...require("./persister.cjs")
37
+ ...require("./persister.cjs"),
38
+ ...require("./search.cjs")
37
39
  });
38
40
  //# sourceMappingURL=index.cjs.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/index.ts"],
4
- "mappings": ";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,4BAA4B;AAC5B,0BAAc,wBAFd;AAGA,0BAAc,4BAHd;",
4
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,4BAA4B;AAC5B,0BAAc,wBAFd;AAGA,0BAAc,4BAHd;AAIA,0BAAc,yBAJd;",
5
5
  "names": []
6
6
  }
package/dist/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  export { escape, SQL } from '@juit/pgproxy-client';
2
2
  export * from './model';
3
3
  export * from './persister';
4
+ export * from './search';
package/dist/index.mjs CHANGED
@@ -2,6 +2,7 @@
2
2
  import { escape, SQL } from "@juit/pgproxy-client";
3
3
  export * from "./model.mjs";
4
4
  export * from "./persister.mjs";
5
+ export * from "./search.mjs";
5
6
  export {
6
7
  SQL,
7
8
  escape
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/index.ts"],
4
- "mappings": ";AACA,SAAS,QAAQ,WAAW;AAC5B,cAAc;AACd,cAAc;",
4
+ "mappings": ";AACA,SAAS,QAAQ,WAAW;AAC5B,cAAc;AACd,cAAc;AACd,cAAc;",
5
5
  "names": []
6
6
  }
package/dist/model.cjs CHANGED
@@ -24,15 +24,7 @@ __export(model_exports, {
24
24
  });
25
25
  module.exports = __toCommonJS(model_exports);
26
26
  var import_pgproxy_client = require("@juit/pgproxy-client");
27
- function assert(assertion, message) {
28
- if (!assertion) throw new Error(message);
29
- }
30
- function assertArray(value, message) {
31
- assert(Array.isArray(value), message);
32
- }
33
- function assertObject(value, message) {
34
- assert(value && typeof value === "object", message);
35
- }
27
+ var import_utils = require("./utils.cjs");
36
28
  function where(query, params) {
37
29
  const conditions = [];
38
30
  let count = 0;
@@ -52,8 +44,8 @@ function where(query, params) {
52
44
  count
53
45
  ];
54
46
  }
55
- function insert(schema, table, query, unique = false) {
56
- assertObject(query, "Called INSERT with a non-object");
47
+ function insert(etable, query, unique = false) {
48
+ (0, import_utils.assertObject)(query, "Called INSERT with a non-object");
57
49
  const columns = [];
58
50
  const placeholders = [];
59
51
  const values = [];
@@ -65,15 +57,15 @@ function insert(schema, table, query, unique = false) {
65
57
  }
66
58
  const returning = unique ? "ON CONFLICT DO NOTHING RETURNING *" : "RETURNING *";
67
59
  return [
68
- columns.length == 0 ? `INSERT INTO ${(0, import_pgproxy_client.escape)(schema)}.${(0, import_pgproxy_client.escape)(table)} DEFAULT VALUES ${returning}` : `INSERT INTO ${(0, import_pgproxy_client.escape)(schema)}.${(0, import_pgproxy_client.escape)(table)} (${columns.join()}) VALUES (${placeholders.join()}) ${returning}`,
60
+ columns.length == 0 ? `INSERT INTO ${etable} DEFAULT VALUES ${returning}` : `INSERT INTO ${etable} (${columns.join()}) VALUES (${placeholders.join()}) ${returning}`,
69
61
  values
70
62
  ];
71
63
  }
72
- function upsert(schema, table, keys, data) {
73
- assertObject(keys, "Called UPSERT with a non-object for keys");
74
- assertObject(data, "Called UPSERT with a non-object for data");
75
- assert(Object.keys(keys).length > 0, "Called UPSERT with no conflict keys");
76
- assert(Object.keys(data).length > 0, "Called UPSERT with no updateable data");
64
+ function upsert(etable, keys, data) {
65
+ (0, import_utils.assertObject)(keys, "Called UPSERT with a non-object for keys");
66
+ (0, import_utils.assertObject)(data, "Called UPSERT with a non-object for data");
67
+ (0, import_utils.assert)(Object.keys(keys).length > 0, "Called UPSERT with no conflict keys");
68
+ (0, import_utils.assert)(Object.keys(data).length > 0, "Called UPSERT with no updateable data");
77
69
  const object = { ...keys, ...data, ...keys };
78
70
  const columns = [];
79
71
  const placeholders = [];
@@ -95,14 +87,14 @@ function upsert(schema, table, keys, data) {
95
87
  values.push(value);
96
88
  }
97
89
  return [
98
- `INSERT INTO ${(0, import_pgproxy_client.escape)(schema)}.${(0, import_pgproxy_client.escape)(table)} (${columns.join()}) VALUES (${placeholders.join()}) ON CONFLICT (${conflictKeys.join(",")}) DO UPDATE SET ${updates.join(",")} RETURNING *`,
90
+ `INSERT INTO ${etable} (${columns.join()}) VALUES (${placeholders.join()}) ON CONFLICT (${conflictKeys.join(",")}) DO UPDATE SET ${updates.join(",")} RETURNING *`,
99
91
  values
100
92
  ];
101
93
  }
102
- function select(schema, table, query, sort, offset, limit) {
94
+ function select(etable, query, sort, offset, limit) {
103
95
  if (typeof sort === "string") sort = [sort];
104
- assertObject(query, "Called SELECT with a non-object query");
105
- assertArray(sort, "Called SELECT with a non-array sort");
96
+ (0, import_utils.assertObject)(query, "Called SELECT with a non-object query");
97
+ (0, import_utils.assertArray)(sort, "Called SELECT with a non-array sort");
106
98
  const [conditions, values] = where(query, []);
107
99
  const order = [];
108
100
  for (const field of sort) {
@@ -115,7 +107,7 @@ function select(schema, table, query, sort, offset, limit) {
115
107
  }
116
108
  }
117
109
  const orderby = order.length == 0 ? "" : ` ORDER BY ${order.join(",")}`;
118
- let sql = `SELECT * FROM ${(0, import_pgproxy_client.escape)(schema)}.${(0, import_pgproxy_client.escape)(table)}${conditions}${orderby}`;
110
+ let sql = `SELECT * FROM ${etable}${conditions}${orderby}`;
119
111
  if (offset && offset > 0) {
120
112
  sql += ` OFFSET $${values.length + 1}`;
121
113
  values.push(Math.floor(offset));
@@ -126,9 +118,9 @@ function select(schema, table, query, sort, offset, limit) {
126
118
  }
127
119
  return [sql, values];
128
120
  }
129
- function update(schema, table, query, patch) {
130
- assertObject(query, "Called UPDATE with a non-object query");
131
- assertObject(patch, "Called UPDATE with a non-object patch");
121
+ function update(etable, query, patch) {
122
+ (0, import_utils.assertObject)(query, "Called UPDATE with a non-object query");
123
+ (0, import_utils.assertObject)(patch, "Called UPDATE with a non-object patch");
132
124
  const patches = [];
133
125
  const values = [];
134
126
  for (const [column, value] of Object.entries(patch)) {
@@ -136,44 +128,38 @@ function update(schema, table, query, patch) {
136
128
  const index = values.push(value);
137
129
  patches.push(`${(0, import_pgproxy_client.escape)(column)}=$${index}`);
138
130
  }
139
- if (patches.length === 0) return select(schema, table, query, [], 0, 0);
131
+ if (patches.length === 0) return select(etable, query, [], 0, 0);
140
132
  const [conditions, , count] = where(query, values);
141
- assert(count > 0, "Cowardly refusing to run UPDATE with empty query");
142
- const statement = `UPDATE ${(0, import_pgproxy_client.escape)(schema)}.${(0, import_pgproxy_client.escape)(table)} SET ${patches.join()}${conditions} RETURNING *`;
133
+ (0, import_utils.assert)(count > 0, "Cowardly refusing to run UPDATE with empty query");
134
+ const statement = `UPDATE ${etable} SET ${patches.join()}${conditions} RETURNING *`;
143
135
  return [statement, values];
144
136
  }
145
- function del(schema, table, query) {
146
- assertObject(query, "Called DELETE with a non-object query");
137
+ function del(etable, query) {
138
+ (0, import_utils.assertObject)(query, "Called DELETE with a non-object query");
147
139
  const [conditions, values, count] = where(query, []);
148
- assert(count > 0, "Cowardly refusing to run DELETE with empty query");
149
- return [`DELETE FROM ${(0, import_pgproxy_client.escape)(schema)}.${(0, import_pgproxy_client.escape)(table)}${conditions} RETURNING *`, values];
140
+ (0, import_utils.assert)(count > 0, "Cowardly refusing to run DELETE with empty query");
141
+ return [`DELETE FROM ${etable}${conditions} RETURNING *`, values];
150
142
  }
151
143
  var ModelImpl = class {
152
144
  _connection;
153
- _schema;
154
- _table;
145
+ _etable;
155
146
  constructor(connection, name) {
156
147
  this._connection = connection;
157
- const [schemaOrTable, maybeTable, ...extra] = name.split(".");
158
- assert(extra.length === 0, `Invalid table name "${name}"`);
159
- const [schema, table] = maybeTable ? [schemaOrTable, maybeTable] : ["public", schemaOrTable];
160
- assert(table, `Invalid table name "${name}"`);
161
- this._schema = schema || "public";
162
- this._table = table;
148
+ this._etable = (0, import_utils.encodeSchemaAndName)(name);
163
149
  }
164
150
  // Actual implementation
165
151
  async create(data, unique = false) {
166
- const [sql, params] = insert(this._schema, this._table, data, unique);
152
+ const [sql, params] = insert(this._etable, data, unique);
167
153
  const result = await this._connection.query(sql, params);
168
154
  return result.rows[0];
169
155
  }
170
156
  async upsert(keys, data) {
171
- const [sql, params] = upsert(this._schema, this._table, keys, data);
157
+ const [sql, params] = upsert(this._etable, keys, data);
172
158
  const result = await this._connection.query(sql, params);
173
159
  return result.rows[0];
174
160
  }
175
161
  async read(query = {}, sort = [], offset = 0, limit = 0) {
176
- const [sql, params] = select(this._schema, this._table, query, sort, offset, limit);
162
+ const [sql, params] = select(this._etable, query, sort, offset, limit);
177
163
  const result = await this._connection.query(sql, params);
178
164
  return result.rows;
179
165
  }
@@ -182,12 +168,12 @@ var ModelImpl = class {
182
168
  return result[0];
183
169
  }
184
170
  async update(query, patch) {
185
- const [sql, params] = update(this._schema, this._table, query, patch);
171
+ const [sql, params] = update(this._etable, query, patch);
186
172
  const result = await this._connection.query(sql, params);
187
173
  return result.rows;
188
174
  }
189
175
  async delete(query) {
190
- const [sql, params] = del(this._schema, this._table, query);
176
+ const [sql, params] = del(this._etable, query);
191
177
  const result = await this._connection.query(sql, params);
192
178
  return result.rowCount;
193
179
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/model.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": []
6
6
  }
package/dist/model.mjs CHANGED
@@ -1,14 +1,6 @@
1
1
  // model.ts
2
2
  import { escape } from "@juit/pgproxy-client";
3
- function assert(assertion, message) {
4
- if (!assertion) throw new Error(message);
5
- }
6
- function assertArray(value, message) {
7
- assert(Array.isArray(value), message);
8
- }
9
- function assertObject(value, message) {
10
- assert(value && typeof value === "object", message);
11
- }
3
+ import { assert, assertArray, assertObject, encodeSchemaAndName } from "./utils.mjs";
12
4
  function where(query, params) {
13
5
  const conditions = [];
14
6
  let count = 0;
@@ -28,7 +20,7 @@ function where(query, params) {
28
20
  count
29
21
  ];
30
22
  }
31
- function insert(schema, table, query, unique = false) {
23
+ function insert(etable, query, unique = false) {
32
24
  assertObject(query, "Called INSERT with a non-object");
33
25
  const columns = [];
34
26
  const placeholders = [];
@@ -41,11 +33,11 @@ function insert(schema, table, query, unique = false) {
41
33
  }
42
34
  const returning = unique ? "ON CONFLICT DO NOTHING RETURNING *" : "RETURNING *";
43
35
  return [
44
- columns.length == 0 ? `INSERT INTO ${escape(schema)}.${escape(table)} DEFAULT VALUES ${returning}` : `INSERT INTO ${escape(schema)}.${escape(table)} (${columns.join()}) VALUES (${placeholders.join()}) ${returning}`,
36
+ columns.length == 0 ? `INSERT INTO ${etable} DEFAULT VALUES ${returning}` : `INSERT INTO ${etable} (${columns.join()}) VALUES (${placeholders.join()}) ${returning}`,
45
37
  values
46
38
  ];
47
39
  }
48
- function upsert(schema, table, keys, data) {
40
+ function upsert(etable, keys, data) {
49
41
  assertObject(keys, "Called UPSERT with a non-object for keys");
50
42
  assertObject(data, "Called UPSERT with a non-object for data");
51
43
  assert(Object.keys(keys).length > 0, "Called UPSERT with no conflict keys");
@@ -71,11 +63,11 @@ function upsert(schema, table, keys, data) {
71
63
  values.push(value);
72
64
  }
73
65
  return [
74
- `INSERT INTO ${escape(schema)}.${escape(table)} (${columns.join()}) VALUES (${placeholders.join()}) ON CONFLICT (${conflictKeys.join(",")}) DO UPDATE SET ${updates.join(",")} RETURNING *`,
66
+ `INSERT INTO ${etable} (${columns.join()}) VALUES (${placeholders.join()}) ON CONFLICT (${conflictKeys.join(",")}) DO UPDATE SET ${updates.join(",")} RETURNING *`,
75
67
  values
76
68
  ];
77
69
  }
78
- function select(schema, table, query, sort, offset, limit) {
70
+ function select(etable, query, sort, offset, limit) {
79
71
  if (typeof sort === "string") sort = [sort];
80
72
  assertObject(query, "Called SELECT with a non-object query");
81
73
  assertArray(sort, "Called SELECT with a non-array sort");
@@ -91,7 +83,7 @@ function select(schema, table, query, sort, offset, limit) {
91
83
  }
92
84
  }
93
85
  const orderby = order.length == 0 ? "" : ` ORDER BY ${order.join(",")}`;
94
- let sql = `SELECT * FROM ${escape(schema)}.${escape(table)}${conditions}${orderby}`;
86
+ let sql = `SELECT * FROM ${etable}${conditions}${orderby}`;
95
87
  if (offset && offset > 0) {
96
88
  sql += ` OFFSET $${values.length + 1}`;
97
89
  values.push(Math.floor(offset));
@@ -102,7 +94,7 @@ function select(schema, table, query, sort, offset, limit) {
102
94
  }
103
95
  return [sql, values];
104
96
  }
105
- function update(schema, table, query, patch) {
97
+ function update(etable, query, patch) {
106
98
  assertObject(query, "Called UPDATE with a non-object query");
107
99
  assertObject(patch, "Called UPDATE with a non-object patch");
108
100
  const patches = [];
@@ -112,44 +104,38 @@ function update(schema, table, query, patch) {
112
104
  const index = values.push(value);
113
105
  patches.push(`${escape(column)}=$${index}`);
114
106
  }
115
- if (patches.length === 0) return select(schema, table, query, [], 0, 0);
107
+ if (patches.length === 0) return select(etable, query, [], 0, 0);
116
108
  const [conditions, , count] = where(query, values);
117
109
  assert(count > 0, "Cowardly refusing to run UPDATE with empty query");
118
- const statement = `UPDATE ${escape(schema)}.${escape(table)} SET ${patches.join()}${conditions} RETURNING *`;
110
+ const statement = `UPDATE ${etable} SET ${patches.join()}${conditions} RETURNING *`;
119
111
  return [statement, values];
120
112
  }
121
- function del(schema, table, query) {
113
+ function del(etable, query) {
122
114
  assertObject(query, "Called DELETE with a non-object query");
123
115
  const [conditions, values, count] = where(query, []);
124
116
  assert(count > 0, "Cowardly refusing to run DELETE with empty query");
125
- return [`DELETE FROM ${escape(schema)}.${escape(table)}${conditions} RETURNING *`, values];
117
+ return [`DELETE FROM ${etable}${conditions} RETURNING *`, values];
126
118
  }
127
119
  var ModelImpl = class {
128
120
  _connection;
129
- _schema;
130
- _table;
121
+ _etable;
131
122
  constructor(connection, name) {
132
123
  this._connection = connection;
133
- const [schemaOrTable, maybeTable, ...extra] = name.split(".");
134
- assert(extra.length === 0, `Invalid table name "${name}"`);
135
- const [schema, table] = maybeTable ? [schemaOrTable, maybeTable] : ["public", schemaOrTable];
136
- assert(table, `Invalid table name "${name}"`);
137
- this._schema = schema || "public";
138
- this._table = table;
124
+ this._etable = encodeSchemaAndName(name);
139
125
  }
140
126
  // Actual implementation
141
127
  async create(data, unique = false) {
142
- const [sql, params] = insert(this._schema, this._table, data, unique);
128
+ const [sql, params] = insert(this._etable, data, unique);
143
129
  const result = await this._connection.query(sql, params);
144
130
  return result.rows[0];
145
131
  }
146
132
  async upsert(keys, data) {
147
- const [sql, params] = upsert(this._schema, this._table, keys, data);
133
+ const [sql, params] = upsert(this._etable, keys, data);
148
134
  const result = await this._connection.query(sql, params);
149
135
  return result.rows[0];
150
136
  }
151
137
  async read(query = {}, sort = [], offset = 0, limit = 0) {
152
- const [sql, params] = select(this._schema, this._table, query, sort, offset, limit);
138
+ const [sql, params] = select(this._etable, query, sort, offset, limit);
153
139
  const result = await this._connection.query(sql, params);
154
140
  return result.rows;
155
141
  }
@@ -158,12 +144,12 @@ var ModelImpl = class {
158
144
  return result[0];
159
145
  }
160
146
  async update(query, patch) {
161
- const [sql, params] = update(this._schema, this._table, query, patch);
147
+ const [sql, params] = update(this._etable, query, patch);
162
148
  const result = await this._connection.query(sql, params);
163
149
  return result.rows;
164
150
  }
165
151
  async delete(query) {
166
- const [sql, params] = del(this._schema, this._table, query);
152
+ const [sql, params] = del(this._etable, query);
167
153
  const result = await this._connection.query(sql, params);
168
154
  return result.rowCount;
169
155
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/model.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": []
6
6
  }
@@ -0,0 +1,215 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // search.ts
21
+ var search_exports = {};
22
+ __export(search_exports, {
23
+ Search: () => Search,
24
+ reviver: () => reviver
25
+ });
26
+ module.exports = __toCommonJS(search_exports);
27
+ var import_pgproxy_client = require("@juit/pgproxy-client");
28
+ var import_utils = require("./utils.cjs");
29
+ var ISO_RE = /^(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))$/;
30
+ function reviver(_key, data) {
31
+ if (typeof data === "string" && ISO_RE.test(data)) return new Date(data);
32
+ return data;
33
+ }
34
+ var SearchImpl = class {
35
+ /** Our persister instance */
36
+ #persister;
37
+ /** The escaped table name */
38
+ #eTable;
39
+ /** The escaped joins */
40
+ #eJoins;
41
+ /** The full-text search column (if any) */
42
+ #fullTextSearchColumn;
43
+ constructor(persister, table, joinsOrFullTextSearchColumn, maybeFullTextSearchColumn) {
44
+ this.#persister = persister;
45
+ this.#eTable = (0, import_utils.encodeSchemaAndName)(table);
46
+ let joins = {};
47
+ let fullTextSearchColumn = void 0;
48
+ if (typeof joinsOrFullTextSearchColumn === "string") {
49
+ fullTextSearchColumn = joinsOrFullTextSearchColumn;
50
+ } else if (joinsOrFullTextSearchColumn) {
51
+ joins = joinsOrFullTextSearchColumn;
52
+ fullTextSearchColumn = maybeFullTextSearchColumn;
53
+ }
54
+ this.#fullTextSearchColumn = fullTextSearchColumn || void 0;
55
+ this.#eJoins = Object.fromEntries(Object.entries(joins).map(([key, def]) => {
56
+ return [key, {
57
+ column: (0, import_pgproxy_client.escape)(def.column),
58
+ refTable: (0, import_utils.encodeSchemaAndName)(def.refTable),
59
+ refColumn: (0, import_pgproxy_client.escape)(def.refColumn),
60
+ sortColumn: def.sortColumn ? (0, import_pgproxy_client.escape)(def.sortColumn) : void 0
61
+ }];
62
+ }));
63
+ }
64
+ #query(count, options, extra) {
65
+ const {
66
+ offset = 0,
67
+ limit = 20,
68
+ filters = [],
69
+ sort,
70
+ order,
71
+ q
72
+ } = options;
73
+ const etable = this.#eTable;
74
+ const ejoins = this.#eJoins;
75
+ const fields = [];
76
+ const where = [];
77
+ const orderby = [];
78
+ const params = [];
79
+ if (extra) {
80
+ where.push(extra.where);
81
+ params.push(...extra.params);
82
+ }
83
+ let esearch = "";
84
+ if (count === "only") {
85
+ if (this.#fullTextSearchColumn) esearch = (0, import_pgproxy_client.escape)(this.#fullTextSearchColumn);
86
+ } else if (this.#fullTextSearchColumn) {
87
+ fields.push(`(TO_JSONB(${etable}.*) - $${params.push(this.#fullTextSearchColumn)})`);
88
+ esearch = (0, import_pgproxy_client.escape)(this.#fullTextSearchColumn);
89
+ } else {
90
+ fields.push(`TO_JSONB(${etable}.*)`);
91
+ }
92
+ const from = [etable];
93
+ let joinIndex = 0;
94
+ const joinedTables = {};
95
+ Object.entries(ejoins).forEach(([as, { column, refTable, refColumn }]) => {
96
+ const ealias = (0, import_pgproxy_client.escape)(`__$${(++joinIndex).toString(16).padStart(4, "0")}$__`);
97
+ joinedTables[as] ??= ealias;
98
+ if (count !== "only") {
99
+ const index = params.push(as);
100
+ fields.push(`JSONB_BUILD_OBJECT($${index}::TEXT, TO_JSONB(${ealias}))`);
101
+ }
102
+ from.push(`LEFT JOIN ${refTable} ${ealias} ON ${etable}.${column} = ${ealias}.${refColumn}`);
103
+ });
104
+ if (sort) {
105
+ const joinedOrder = order?.toLocaleLowerCase() === "desc" ? " DESC" : "";
106
+ if (ejoins[sort]) {
107
+ (0, import_utils.assert)(ejoins[sort].sortColumn, `Sort column for joined field "${sort}" not defined`);
108
+ const joinedTableAlias = joinedTables[sort];
109
+ const joinedColumn = ejoins[sort].sortColumn;
110
+ orderby.push(`${joinedTableAlias}.${joinedColumn}${joinedOrder} NULLS LAST`);
111
+ } else {
112
+ orderby.push(`${etable}.${(0, import_pgproxy_client.escape)(sort)}${joinedOrder}`);
113
+ }
114
+ }
115
+ if (q) {
116
+ (0, import_utils.assert)(esearch, "Full-text search column not defined");
117
+ if (q.match(/^[\w][-@\w]*$/)) {
118
+ from.push(`CROSS JOIN LATERAL CAST(LOWER($${params.push(q + ":*")}) AS tsquery) AS "__query"`);
119
+ } else {
120
+ from.push(`CROSS JOIN LATERAL websearch_to_tsquery($${params.push(q)}) AS "__query"`);
121
+ }
122
+ orderby.push(`ts_rank(${etable}.${esearch}, "__query") DESC`);
123
+ where.push(`"__query" @@ ${etable}.${esearch}`);
124
+ }
125
+ for (const { name, field, op = "=", value } of filters) {
126
+ const [ecolumn, evalue] = field && ["like", "ilike", "~"].includes(op) ? [`${(0, import_pgproxy_client.escape)(name)}->>$${params.push(field)}`, value] : field ? [`${(0, import_pgproxy_client.escape)(name)}->$${params.push(field)}`, JSON.stringify(value)] : [(0, import_pgproxy_client.escape)(name), value];
127
+ if (op === "in") {
128
+ const evalue2 = field && Array.isArray(value) ? value.map((v) => JSON.stringify(v)) : value;
129
+ where.push(`${etable}.${ecolumn} = ANY($${params.push(evalue2)})`);
130
+ continue;
131
+ } else if (op === "not in") {
132
+ const evalue2 = field && Array.isArray(value) ? value.map((v) => JSON.stringify(v)) : value;
133
+ where.push(`${etable}.${ecolumn} != ALL($${params.push(evalue2)})`);
134
+ continue;
135
+ } else if (op === "@>" || op === "<@") {
136
+ (0, import_utils.assert)(!field, `Field "${field}" cannot be specified when using JSONB operator "${op}" for column "${name}"`);
137
+ where.push(`${etable}.${ecolumn} ${op} ($${params.push(JSON.stringify(value))})::JSONB`);
138
+ continue;
139
+ }
140
+ let operator;
141
+ switch (op) {
142
+ case ">":
143
+ operator = ">";
144
+ break;
145
+ case ">=":
146
+ operator = ">=";
147
+ break;
148
+ case "<":
149
+ operator = "<";
150
+ break;
151
+ case "<=":
152
+ operator = "<=";
153
+ break;
154
+ case "like":
155
+ operator = "LIKE";
156
+ break;
157
+ case "ilike":
158
+ operator = "ILIKE";
159
+ break;
160
+ case "~":
161
+ operator = "ILIKE";
162
+ break;
163
+ case "!=":
164
+ operator = "IS DISTINCT FROM";
165
+ break;
166
+ case "=":
167
+ operator = "IS NOT DISTINCT FROM";
168
+ break;
169
+ default:
170
+ throw new Error(`Unsupported operator "${op}" for column "${name}"`);
171
+ }
172
+ where.push(`${etable}.${ecolumn} ${operator} $${params.push(evalue)}`);
173
+ }
174
+ const result = `(${fields.join(" || ")})::TEXT AS "result"`;
175
+ const clauses = count === "only" ? 'COUNT(*) AS "total"' : count ? `COUNT(*) OVER() AS "total", ${result}` : result;
176
+ let sql = `SELECT ${clauses} FROM ${from.join(" ")}`;
177
+ if (where.length) sql += ` WHERE ${where.join(" AND ")}`;
178
+ if (orderby.length && count !== "only") sql += ` ORDER BY ${orderby.join(", ")}`;
179
+ if (offset) sql += ` OFFSET $${params.push(offset)}`;
180
+ if (limit) sql += ` LIMIT $${params.push(limit)}`;
181
+ return [sql, params];
182
+ }
183
+ query(options, extra) {
184
+ return this.#query(false, options, extra);
185
+ }
186
+ async find(options, extra) {
187
+ const [sql, params] = this.#query(false, { ...options, offset: 0, limit: 1 }, extra);
188
+ const result = await this.#persister.query(sql, params);
189
+ if (result.rows[0]) return JSON.parse(result.rows[0].result, reviver);
190
+ return void 0;
191
+ }
192
+ async search(options, extra) {
193
+ const [sql, params] = this.#query(true, options, extra);
194
+ const result = await this.#persister.query(sql, params).catch((error) => {
195
+ throw new Error(`Error executing search query: ${error.message}`, { cause: { sql, params, error } });
196
+ });
197
+ if (result.rows.length === 0 && (options.offset || 0) > 0) {
198
+ const [sql2, params2] = this.#query("only", { ...options, offset: 0, limit: void 0 }, extra);
199
+ const result2 = await this.#persister.query(sql2, params2);
200
+ (0, import_utils.assert)(result2.rows[0], "Expected total row in count query");
201
+ const total2 = Number(result2.rows[0].total);
202
+ return { total: total2, rows: [] };
203
+ }
204
+ const rows = result.rows.map((row) => JSON.parse(row.result, reviver));
205
+ const total = Number(result.rows[0]?.total) || 0;
206
+ return { total, rows };
207
+ }
208
+ };
209
+ var Search = SearchImpl;
210
+ // Annotate the CommonJS export names for ESM import in node:
211
+ 0 && (module.exports = {
212
+ Search,
213
+ reviver
214
+ });
215
+ //# sourceMappingURL=search.cjs.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/search.ts"],
4
+ "mappings": "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",
5
+ "names": ["evalue", "sql", "params", "result", "total"]
6
+ }