@ailnaf/zoddb 0.0.0-stage → 0.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.
- package/CHANGELOG.md +73 -0
- package/LICENSE +15 -0
- package/README.md +440 -2
- package/dist/aggregate.d.ts +42 -0
- package/dist/aggregate.d.ts.map +1 -0
- package/dist/aggregate.js +77 -0
- package/dist/aggregate.js.map +1 -0
- package/dist/auth-schema.d.ts +26 -0
- package/dist/auth-schema.d.ts.map +1 -0
- package/dist/auth-schema.js +139 -0
- package/dist/auth-schema.js.map +1 -0
- package/dist/better-auth-adapter.d.ts +21 -0
- package/dist/better-auth-adapter.d.ts.map +1 -0
- package/dist/better-auth-adapter.js +175 -0
- package/dist/better-auth-adapter.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +341 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +22 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +52 -0
- package/dist/config.js.map +1 -0
- package/dist/db.d.ts +183 -0
- package/dist/db.d.ts.map +1 -0
- package/dist/db.js +1063 -0
- package/dist/db.js.map +1 -0
- package/dist/ddl.d.ts +21 -0
- package/dist/ddl.d.ts.map +1 -0
- package/dist/ddl.js +127 -0
- package/dist/ddl.js.map +1 -0
- package/dist/dev.d.ts +9 -0
- package/dist/dev.d.ts.map +1 -0
- package/dist/dev.js +21 -0
- package/dist/dev.js.map +1 -0
- package/dist/errors.d.ts +63 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +122 -0
- package/dist/errors.js.map +1 -0
- package/dist/filter.d.ts +67 -0
- package/dist/filter.d.ts.map +1 -0
- package/dist/filter.js +230 -0
- package/dist/filter.js.map +1 -0
- package/dist/graph.d.ts +54 -0
- package/dist/graph.d.ts.map +1 -0
- package/dist/graph.js +52 -0
- package/dist/graph.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/init.d.ts +12 -0
- package/dist/init.d.ts.map +1 -0
- package/dist/init.js +62 -0
- package/dist/init.js.map +1 -0
- package/dist/migrate.d.ts +58 -0
- package/dist/migrate.d.ts.map +1 -0
- package/dist/migrate.js +447 -0
- package/dist/migrate.js.map +1 -0
- package/dist/migrations.d.ts +80 -0
- package/dist/migrations.d.ts.map +1 -0
- package/dist/migrations.js +281 -0
- package/dist/migrations.js.map +1 -0
- package/dist/relation-graph.d.ts +50 -0
- package/dist/relation-graph.d.ts.map +1 -0
- package/dist/relation-graph.js +93 -0
- package/dist/relation-graph.js.map +1 -0
- package/dist/relations.d.ts +128 -0
- package/dist/relations.d.ts.map +1 -0
- package/dist/relations.js +21 -0
- package/dist/relations.js.map +1 -0
- package/dist/schema.d.ts +247 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +584 -0
- package/dist/schema.js.map +1 -0
- package/dist/studio/page.d.ts +3 -0
- package/dist/studio/page.d.ts.map +1 -0
- package/dist/studio/page.js +708 -0
- package/dist/studio/page.js.map +1 -0
- package/dist/studio/server.d.ts +26 -0
- package/dist/studio/server.d.ts.map +1 -0
- package/dist/studio/server.js +415 -0
- package/dist/studio/server.js.map +1 -0
- package/dist/table.d.ts +156 -0
- package/dist/table.d.ts.map +1 -0
- package/dist/table.js +165 -0
- package/dist/table.js.map +1 -0
- package/dist/where.d.ts +18 -0
- package/dist/where.d.ts.map +1 -0
- package/dist/where.js +76 -0
- package/dist/where.js.map +1 -0
- package/docs/api.md +476 -0
- package/package.json +70 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../src/table.ts"],"names":[],"mappings":"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"}
|
package/dist/table.js
ADDED
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { RowValidationError } from './errors.js';
|
|
3
|
+
export function sql(strings, ...params) {
|
|
4
|
+
return { _tag: 'sql', strings: [...strings], params };
|
|
5
|
+
}
|
|
6
|
+
export const isSqlFragment = (v) => typeof v === 'object' && v !== null && v._tag === 'sql';
|
|
7
|
+
export const snakeCase = (s) => s.replace(/[A-Z]/g, c => `_${c.toLowerCase()}`);
|
|
8
|
+
export class ColumnBuilder {
|
|
9
|
+
schema;
|
|
10
|
+
sqlType;
|
|
11
|
+
column;
|
|
12
|
+
nullableFlag;
|
|
13
|
+
defaultFlag;
|
|
14
|
+
pkFlag;
|
|
15
|
+
defaultValue;
|
|
16
|
+
uniqueFlag;
|
|
17
|
+
ref;
|
|
18
|
+
enumDef;
|
|
19
|
+
/** 由 table() 盖章,供 .references(() => other.id) 反查表名/列名 */
|
|
20
|
+
_owner;
|
|
21
|
+
constructor(schema, sqlType, column = undefined, nullableFlag = false, defaultFlag = false, pkFlag = false, defaultValue = undefined, uniqueFlag = false, ref = undefined, enumDef = undefined) {
|
|
22
|
+
this.schema = schema;
|
|
23
|
+
this.sqlType = sqlType;
|
|
24
|
+
this.column = column;
|
|
25
|
+
this.nullableFlag = nullableFlag;
|
|
26
|
+
this.defaultFlag = defaultFlag;
|
|
27
|
+
this.pkFlag = pkFlag;
|
|
28
|
+
this.defaultValue = defaultValue;
|
|
29
|
+
this.uniqueFlag = uniqueFlag;
|
|
30
|
+
this.ref = ref;
|
|
31
|
+
this.enumDef = enumDef;
|
|
32
|
+
}
|
|
33
|
+
/** 覆盖 DB 列名(默认 camelCase → snake_case) */
|
|
34
|
+
as(column) {
|
|
35
|
+
return new ColumnBuilder(this.schema, this.sqlType, column, this.nullableFlag, this.defaultFlag, this.pkFlag, this.defaultValue, this.uniqueFlag, this.ref, this.enumDef);
|
|
36
|
+
}
|
|
37
|
+
nullable() {
|
|
38
|
+
return new ColumnBuilder(this.schema, this.sqlType, this.column, true, this.defaultFlag, this.pkFlag, this.defaultValue, this.uniqueFlag, this.ref, this.enumDef);
|
|
39
|
+
}
|
|
40
|
+
pk() {
|
|
41
|
+
return new ColumnBuilder(this.schema, this.sqlType, this.column, this.nullableFlag, this.defaultFlag, true, this.defaultValue, this.uniqueFlag, this.ref, this.enumDef);
|
|
42
|
+
}
|
|
43
|
+
default(v) {
|
|
44
|
+
return new ColumnBuilder(this.schema, this.sqlType, this.column, this.nullableFlag, true, this.pkFlag, v, this.uniqueFlag, this.ref, this.enumDef);
|
|
45
|
+
}
|
|
46
|
+
/** 单列唯一约束(PG 自动命名 {table}_{col}_key) */
|
|
47
|
+
unique() {
|
|
48
|
+
return new ColumnBuilder(this.schema, this.sqlType, this.column, this.nullableFlag, this.defaultFlag, this.pkFlag, this.defaultValue, true, this.ref, this.enumDef);
|
|
49
|
+
}
|
|
50
|
+
/** 外键;目标列必须来自 table() 定义(延迟解析,支持前向引用) */
|
|
51
|
+
references(target, opts = {}) {
|
|
52
|
+
const ref = opts.onDelete ? { thunk: target, onDelete: opts.onDelete } : { thunk: target };
|
|
53
|
+
return new ColumnBuilder(this.schema, this.sqlType, this.column, this.nullableFlag, this.defaultFlag, this.pkFlag, this.defaultValue, this.uniqueFlag, ref, this.enumDef);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* 生成按表定制的映射函数:字面量 key → 单态对象形状,避免通用遍历/动态查表。
|
|
58
|
+
* key 来自开发者写的 schema,JSON.stringify 转义后内联,不接受用户输入。
|
|
59
|
+
*/
|
|
60
|
+
export function compilePlanMappers(name, plan) {
|
|
61
|
+
const fast = ['const o = {};'];
|
|
62
|
+
const valid = ['const o = {};'];
|
|
63
|
+
plan.forEach((p, i) => {
|
|
64
|
+
const db = JSON.stringify(p.dbKey);
|
|
65
|
+
const out = JSON.stringify(p.outKey);
|
|
66
|
+
const read = p.dbKey === p.outKey
|
|
67
|
+
? `const v${i} = row[${db}];`
|
|
68
|
+
: `let v${i} = row[${db}]; if (v${i} === undefined) v${i} = row[${out}];`;
|
|
69
|
+
fast.push(read, `o[${out}] = v${i};`);
|
|
70
|
+
valid.push(read, `{ const p = parsers[${i}].safeParse(v${i});`, ` if (!p.success) throw new Err(tableName, index, p.error.issues, ${out}, v${i} === undefined);`, ` o[${out}] = p.data; }`);
|
|
71
|
+
});
|
|
72
|
+
fast.push('return o;');
|
|
73
|
+
valid.push('return o;');
|
|
74
|
+
const makeFast = new Function('row', fast.join('\n'));
|
|
75
|
+
const makeValid = new Function('row', 'index', 'parsers', 'tableName', 'Err', valid.join('\n'));
|
|
76
|
+
return { fast: makeFast, valid: makeValid };
|
|
77
|
+
}
|
|
78
|
+
export function table(name, columns, opts = {}) {
|
|
79
|
+
const entries = Object.entries(columns);
|
|
80
|
+
const plan = entries.map(([outKey, col]) => ({
|
|
81
|
+
outKey,
|
|
82
|
+
dbKey: col.column ?? snakeCase(outKey),
|
|
83
|
+
nullable: col.nullableFlag,
|
|
84
|
+
parse: col.nullableFlag ? z.union([col.schema, z.null()]) : col.schema,
|
|
85
|
+
sqlType: col.sqlType,
|
|
86
|
+
pk: col.pkFlag,
|
|
87
|
+
unique: col.uniqueFlag,
|
|
88
|
+
defaultValue: col.defaultValue,
|
|
89
|
+
ref: col.ref,
|
|
90
|
+
enum: col.enumDef,
|
|
91
|
+
}));
|
|
92
|
+
const compositePk = opts.primaryKey ? [...opts.primaryKey] : [];
|
|
93
|
+
if (compositePk.length > 0) {
|
|
94
|
+
if (compositePk.length < 2)
|
|
95
|
+
throw new Error(`table ${name}: primaryKey 数组至少需要 2 列`);
|
|
96
|
+
if (new Set(compositePk).size !== compositePk.length) {
|
|
97
|
+
throw new Error(`table ${name}: primaryKey 不能包含重复列`);
|
|
98
|
+
}
|
|
99
|
+
for (const key of compositePk) {
|
|
100
|
+
const col = columns[key];
|
|
101
|
+
if (!col)
|
|
102
|
+
throw new Error(`table ${name}: primaryKey 引用了未知列 ${key}`);
|
|
103
|
+
if (col.pkFlag)
|
|
104
|
+
throw new Error(`table ${name}: primaryKey 数组不能与列 .pk() 混用`);
|
|
105
|
+
if (col.nullableFlag)
|
|
106
|
+
throw new Error(`table ${name}: primaryKey 列 ${key} 不能 nullable`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
const shape = {};
|
|
110
|
+
for (const [key, col] of entries) {
|
|
111
|
+
const base = col.nullableFlag ? z.union([col.schema, z.null()]) : col.schema;
|
|
112
|
+
shape[key] = col.nullableFlag || col.defaultFlag ? base.optional() : base;
|
|
113
|
+
}
|
|
114
|
+
const compiled = compilePlanMappers(name, plan);
|
|
115
|
+
const parsers = plan.map(p => p.parse);
|
|
116
|
+
const dbKeyOf = (k) => columns[k].column ?? snakeCase(k);
|
|
117
|
+
const tbl = {
|
|
118
|
+
_tag: 'table',
|
|
119
|
+
name,
|
|
120
|
+
columns,
|
|
121
|
+
__plan: plan,
|
|
122
|
+
__primaryKey: compositePk.map(k => columns[k].column ?? snakeCase(k)),
|
|
123
|
+
insertSchema: z.strictObject(shape),
|
|
124
|
+
updateSchema: z.strictObject(shape).partial(),
|
|
125
|
+
__mapFast: compiled.fast,
|
|
126
|
+
__mapValid: (row, index) => compiled.valid(row, index, parsers, name, RowValidationError),
|
|
127
|
+
__uniques: (opts.unique ?? []).map(keys => keys.map(dbKeyOf)),
|
|
128
|
+
__indexes: (opts.indexes ?? []).map(idx => {
|
|
129
|
+
if (idx.columns.length === 0)
|
|
130
|
+
throw new Error(`table ${name}: index 至少需要一列`);
|
|
131
|
+
const cols = idx.columns.map(dbKeyOf);
|
|
132
|
+
return { name: idx.name ?? `${name}_${cols.join('_')}_idx`, columns: cols, unique: idx.unique === true };
|
|
133
|
+
}),
|
|
134
|
+
__checks: Object.entries(opts.checks ?? {}).map(([checkName, expression]) => ({
|
|
135
|
+
name: checkName,
|
|
136
|
+
expression,
|
|
137
|
+
})),
|
|
138
|
+
};
|
|
139
|
+
for (const [outKey, col] of entries)
|
|
140
|
+
col._owner = { table: tbl, outKey };
|
|
141
|
+
return tbl;
|
|
142
|
+
}
|
|
143
|
+
// ---------------------------------------------------------------- pg 类型 → zod
|
|
144
|
+
export const pg = {
|
|
145
|
+
uuid: () => new ColumnBuilder(z.uuid(), 'uuid'),
|
|
146
|
+
text: () => new ColumnBuilder(z.string(), 'text'),
|
|
147
|
+
varchar: (length) => new ColumnBuilder(z.string().max(length ?? Number.POSITIVE_INFINITY), `varchar${length ? `(${length})` : ''}`),
|
|
148
|
+
int: () => new ColumnBuilder(z.int(), 'int4'),
|
|
149
|
+
/** postgres.js 把 int8 以字符串返回(避免精度丢失),这里转成 bigint;入参两种都收 */
|
|
150
|
+
bigint: () => new ColumnBuilder(z.union([z.bigint(), z.string().regex(/^-?\d+$/)]).transform(v => (typeof v === 'bigint' ? v : BigInt(v))), 'int8'),
|
|
151
|
+
/** numeric 由 postgres.js 以字符串返回,避免精度丢失 */
|
|
152
|
+
numeric: () => new ColumnBuilder(z.string(), 'numeric'),
|
|
153
|
+
bool: () => new ColumnBuilder(z.boolean(), 'bool'),
|
|
154
|
+
/** 只提供 timestamptz:timestamp(no tz) 是时区事故源头 */
|
|
155
|
+
timestamptz: () => new ColumnBuilder(z.union([z.date(), z.iso.datetime()]).transform(v => (v instanceof Date ? v : new Date(v))), 'timestamptz'),
|
|
156
|
+
/** postgres.js 把 date 解析成 Date(UTC 零点),对外统一成 YYYY-MM-DD 字符串,避免时区歧义 */
|
|
157
|
+
date: () => new ColumnBuilder(z.union([z.iso.date(), z.date()]).transform(v => (v instanceof Date ? v.toISOString().slice(0, 10) : v)), 'date'),
|
|
158
|
+
jsonb: (schema) => new ColumnBuilder(schema, 'jsonb'),
|
|
159
|
+
/** 数组:pg.array(pg.text()) → text[] */
|
|
160
|
+
array: (item) => new ColumnBuilder(z.array(item.schema), `${item.sqlType}[]`),
|
|
161
|
+
bytea: () => new ColumnBuilder(z.custom(v => v instanceof Uint8Array), 'bytea'),
|
|
162
|
+
/** PG enum:type 名 + 值列表;建类型由 createSchema/diffSchema 负责 */
|
|
163
|
+
enum: (enumName, values) => new ColumnBuilder(z.enum(values), enumName, undefined, false, false, false, undefined, false, undefined, { name: enumName, values: [...values] }),
|
|
164
|
+
};
|
|
165
|
+
//# sourceMappingURL=table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.js","sourceRoot":"","sources":["../src/table.ts"],"names":[],"mappings":"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"}
|
package/dist/where.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* better-auth Where[] → 参数化 SQL 片段。
|
|
3
|
+
* 只生成文本与参数;标识符由保留字安全转义,值全部走 $n 绑定。
|
|
4
|
+
*/
|
|
5
|
+
export interface WhereCondition {
|
|
6
|
+
field: string;
|
|
7
|
+
value: unknown;
|
|
8
|
+
operator?: string | undefined;
|
|
9
|
+
connector?: 'AND' | 'OR' | undefined;
|
|
10
|
+
mode?: 'sensitive' | 'insensitive' | undefined;
|
|
11
|
+
}
|
|
12
|
+
export interface SqlChunk {
|
|
13
|
+
text: string;
|
|
14
|
+
params: unknown[];
|
|
15
|
+
}
|
|
16
|
+
/** 同一 connector 组内 AND/OR,组间 AND(与 better-auth 官方 adapter 语义一致) */
|
|
17
|
+
export declare function compileWhere(where: readonly WhereCondition[] | undefined, column: (field: string) => string, params?: unknown[]): SqlChunk;
|
|
18
|
+
//# sourceMappingURL=where.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"where.d.ts","sourceRoot":"","sources":["../src/where.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,OAAO,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC7B,SAAS,CAAC,EAAE,KAAK,GAAG,IAAI,GAAG,SAAS,CAAA;IACpC,IAAI,CAAC,EAAE,WAAW,GAAG,aAAa,GAAG,SAAS,CAAA;CAC/C;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,OAAO,EAAE,CAAA;CAClB;AAsDD,mEAAmE;AACnE,wBAAgB,YAAY,CAC1B,KAAK,EAAE,SAAS,cAAc,EAAE,GAAG,SAAS,EAC5C,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,EACjC,MAAM,GAAE,OAAO,EAAO,GACrB,QAAQ,CAaV"}
|
package/dist/where.js
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
const quoteIdent = (s) => `"${s.replace(/"/g, '""')}"`;
|
|
2
|
+
function makePlaceholder(params, value) {
|
|
3
|
+
if (value === undefined)
|
|
4
|
+
throw new Error('where 参数为 undefined:拒绝生成 SQL');
|
|
5
|
+
params.push(value);
|
|
6
|
+
return `$${params.length}`;
|
|
7
|
+
}
|
|
8
|
+
function compileCondition(w, column, params) {
|
|
9
|
+
const col = quoteIdent(column(w.field));
|
|
10
|
+
const op = (w.operator ?? 'eq').toLowerCase();
|
|
11
|
+
const value = w.value;
|
|
12
|
+
const arr = Array.isArray(value) ? value : [value];
|
|
13
|
+
const insensitive = w.mode === 'insensitive'
|
|
14
|
+
&& (typeof value === 'string' || (Array.isArray(value) && value.every(v => typeof v === 'string')));
|
|
15
|
+
const ph = (v) => makePlaceholder(params, v);
|
|
16
|
+
switch (op) {
|
|
17
|
+
case 'eq':
|
|
18
|
+
if (value === null)
|
|
19
|
+
return `${col} is null`;
|
|
20
|
+
if (insensitive)
|
|
21
|
+
return `lower(${col}) = lower(${ph(value)})`;
|
|
22
|
+
return `${col} = ${ph(value)}`;
|
|
23
|
+
case 'ne':
|
|
24
|
+
if (value === null)
|
|
25
|
+
return `${col} is not null`;
|
|
26
|
+
if (insensitive)
|
|
27
|
+
return `lower(${col}) <> lower(${ph(value)})`;
|
|
28
|
+
return `${col} <> ${ph(value)}`;
|
|
29
|
+
case 'gt': return `${col} > ${ph(value)}`;
|
|
30
|
+
case 'gte': return `${col} >= ${ph(value)}`;
|
|
31
|
+
case 'lt': return `${col} < ${ph(value)}`;
|
|
32
|
+
case 'lte': return `${col} <= ${ph(value)}`;
|
|
33
|
+
case 'in': {
|
|
34
|
+
if (arr.length === 0)
|
|
35
|
+
return 'false';
|
|
36
|
+
const values = insensitive ? arr.map(v => String(v).toLowerCase()) : arr;
|
|
37
|
+
return insensitive
|
|
38
|
+
? `lower(${col}) = any(${ph(values)})`
|
|
39
|
+
: `${col} = any(${ph(values)})`;
|
|
40
|
+
}
|
|
41
|
+
case 'not_in': {
|
|
42
|
+
if (arr.length === 0)
|
|
43
|
+
return 'true';
|
|
44
|
+
const values = insensitive ? arr.map(v => String(v).toLowerCase()) : arr;
|
|
45
|
+
return insensitive
|
|
46
|
+
? `not (lower(${col}) = any(${ph(values)}))`
|
|
47
|
+
: `not (${col} = any(${ph(values)}))`;
|
|
48
|
+
}
|
|
49
|
+
case 'contains': return `${col} ${insensitive ? 'ilike' : 'like'} ${ph(`%${String(value)}%`)}`;
|
|
50
|
+
case 'starts_with': return `${col} ${insensitive ? 'ilike' : 'like'} ${ph(`${String(value)}%`)}`;
|
|
51
|
+
case 'ends_with': return `${col} ${insensitive ? 'ilike' : 'like'} ${ph(`%${String(value)}`)}`;
|
|
52
|
+
default:
|
|
53
|
+
throw new Error(`不支持的 where 操作符 "${op}"`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/** 同一 connector 组内 AND/OR,组间 AND(与 better-auth 官方 adapter 语义一致) */
|
|
57
|
+
export function compileWhere(where, column, params = []) {
|
|
58
|
+
if (!where || where.length === 0)
|
|
59
|
+
return { text: '', params };
|
|
60
|
+
const ands = [];
|
|
61
|
+
const ors = [];
|
|
62
|
+
for (const w of where) {
|
|
63
|
+
const sql = compileCondition(w, column, params);
|
|
64
|
+
if (w.connector === 'OR')
|
|
65
|
+
ors.push(sql);
|
|
66
|
+
else
|
|
67
|
+
ands.push(sql);
|
|
68
|
+
}
|
|
69
|
+
const groups = [];
|
|
70
|
+
if (ands.length)
|
|
71
|
+
groups.push(`(${ands.join(' and ')})`);
|
|
72
|
+
if (ors.length)
|
|
73
|
+
groups.push(`(${ors.join(' or ')})`);
|
|
74
|
+
return { text: groups.join(' and '), params };
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=where.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"where.js","sourceRoot":"","sources":["../src/where.ts"],"names":[],"mappings":"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"}
|