prisma-ts-select 0.1.2 → 0.1.4
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 +266 -212
- package/assets/groupBy.gif +0 -0
- package/assets/joinUnsafeIgnoreType.gif +0 -0
- package/assets/joinUnsafeTypeEnforced.gif +0 -0
- package/assets/typesafe-join.gif +0 -0
- package/assets/typesafe-join.png +0 -0
- package/assets/{whereisNull.gif → whereIsNull.gif} +0 -0
- package/assets/whereNotNull.gif +0 -0
- package/dist/bin.cjs +1 -1
- package/dist/bin.js +1 -1
- package/dist/{chunk-54D2J5AR.cjs → chunk-GSIFF2TF.cjs} +19 -0
- package/dist/{chunk-47KZVQLD.js → chunk-NFKUA5XM.js} +19 -0
- package/dist/extend/dialects/index.d.ts +4 -4
- package/dist/extend/dialects/index.js +26 -2
- package/dist/extend/dialects/mysql-v6.d.ts +10 -6
- package/dist/extend/dialects/mysql-v6.js +15 -3
- package/dist/extend/dialects/mysql-v7.d.ts +2 -2
- package/dist/extend/dialects/mysql-v7.js +14 -2
- package/dist/extend/dialects/mysql.d.ts +9 -5
- package/dist/extend/dialects/mysql.js +14 -2
- package/dist/extend/dialects/postgresql-v6.d.ts +12 -7
- package/dist/extend/dialects/postgresql-v6.js +22 -4
- package/dist/extend/dialects/postgresql-v7.d.ts +12 -7
- package/dist/extend/dialects/postgresql-v7.js +22 -4
- package/dist/extend/dialects/postgresql.d.ts +10 -6
- package/dist/extend/dialects/postgresql.js +21 -3
- package/dist/extend/dialects/shared.d.ts +6 -1
- package/dist/extend/dialects/shared.js +11 -2
- package/dist/extend/dialects/sqlite.d.ts +12 -4
- package/dist/extend/dialects/sqlite.js +26 -2
- package/dist/extend/dialects/types.d.ts +2 -1
- package/dist/extend/extend.d.ts +9 -6
- package/dist/extend/extend.js +47 -12
- package/dist/extend/{sql-expr-BaKWzJ-r.d.ts → sql-expr-BGSEwzCi.d.ts} +5 -1
- package/dist/extend/types-B0F8m0ok.d.ts +8 -0
- package/dist/generator.cjs +1 -1
- package/dist/generator.js +1 -1
- package/package.json +27 -29
- package/LICENSE +0 -21
- package/dist/extend/types-D84lxYVc.d.ts +0 -5
|
@@ -4,6 +4,12 @@ function sqlExpr(sql) {
|
|
|
4
4
|
return sql;
|
|
5
5
|
} };
|
|
6
6
|
}
|
|
7
|
+
var DISTINCT_BRAND = Symbol("sqlDistinct");
|
|
8
|
+
function sqlDistinct(sql) {
|
|
9
|
+
return { sql, [DISTINCT_BRAND]: true, toString() {
|
|
10
|
+
return sql;
|
|
11
|
+
} };
|
|
12
|
+
}
|
|
7
13
|
function resolveArg(arg, quoteFn) {
|
|
8
14
|
if (typeof arg !== "string") return arg.sql;
|
|
9
15
|
return quoteFn(arg);
|
|
@@ -11,6 +17,7 @@ function resolveArg(arg, quoteFn) {
|
|
|
11
17
|
|
|
12
18
|
// src/dialects/shared.ts
|
|
13
19
|
var esc = (s) => s.replace(/'/g, "''");
|
|
20
|
+
var flattenJsonObjectPairs = (pairs, quoteFn) => pairs.flatMap(([k, v]) => [`'${esc(k)}'`, resolveArg(v, quoteFn)]);
|
|
14
21
|
|
|
15
22
|
// src/dialects/postgresql.ts
|
|
16
23
|
var PG_CAST_TYPES = /* @__PURE__ */ new Set(["INTEGER", "TEXT", "BIGINT", "BOOLEAN", "REAL", "NUMERIC", "DATE", "TIMESTAMP", "JSON", "JSONB"]);
|
|
@@ -18,11 +25,12 @@ var postgresqlContextFns = (quoteFn) => ({
|
|
|
18
25
|
avg: (col) => sqlExpr(`AVG(${resolveArg(col, quoteFn)})`),
|
|
19
26
|
sum: (col) => sqlExpr(`SUM(${resolveArg(col, quoteFn)})`),
|
|
20
27
|
countAll: () => sqlExpr("COUNT(*)"),
|
|
21
|
-
count: (col) => sqlExpr(col === "*" ? "COUNT(*)" : `COUNT(${
|
|
28
|
+
count: (col) => sqlExpr(col === "*" ? "COUNT(*)" : `COUNT(${resolveArg(col, quoteFn)})`),
|
|
22
29
|
countDistinct: (col) => sqlExpr(`COUNT(DISTINCT ${quoteFn(col)})`),
|
|
30
|
+
distinct: (col) => sqlDistinct(`DISTINCT ${quoteFn(col)}`),
|
|
23
31
|
length: (col) => sqlExpr(`LENGTH(${resolveArg(col, quoteFn)})`),
|
|
24
|
-
stringAgg: (col, sep) => sqlExpr(`STRING_AGG(${
|
|
25
|
-
arrayAgg: (col) => sqlExpr(`ARRAY_AGG(${
|
|
32
|
+
stringAgg: (col, sep) => sqlExpr(`STRING_AGG(${resolveArg(col, quoteFn)}, '${esc(sep)}')`),
|
|
33
|
+
arrayAgg: (col) => sqlExpr(`ARRAY_AGG(${resolveArg(col, quoteFn)})`),
|
|
26
34
|
stddevPop: (col) => sqlExpr(`STDDEV_POP(${quoteFn(col)})`),
|
|
27
35
|
stddevSamp: (col) => sqlExpr(`STDDEV_SAMP(${quoteFn(col)})`),
|
|
28
36
|
varPop: (col) => sqlExpr(`VAR_POP(${quoteFn(col)})`),
|
|
@@ -95,6 +103,16 @@ var postgresqlContextFns = (quoteFn) => ({
|
|
|
95
103
|
trunc: (x, n) => sqlExpr(n !== void 0 ? `TRUNC(${resolveArg(x, quoteFn)}, ${n})` : `TRUNC(${resolveArg(x, quoteFn)})`),
|
|
96
104
|
div: (x, y) => sqlExpr(`DIV(${resolveArg(x, quoteFn)}, ${y})`),
|
|
97
105
|
random: () => sqlExpr("RANDOM()"),
|
|
106
|
+
// ── JSON scalar fns ───────────────────────────────────────────────────────
|
|
107
|
+
/**
|
|
108
|
+
* Uses jsonb_path_query_first — requires PG 12+ (Prisma 5+ minimum).
|
|
109
|
+
* @note PG uses JSONPath syntax (e.g. `$.tags[0]`, `$.name`).
|
|
110
|
+
* MySQL/SQLite use SQL/JSON path syntax — paths are NOT cross-dialect compatible.
|
|
111
|
+
* Mismatched paths silently return NULL.
|
|
112
|
+
*/
|
|
113
|
+
jsonExtract: (col, path) => sqlExpr(`jsonb_path_query_first(${resolveArg(col, quoteFn)}, '${esc(path)}')`),
|
|
114
|
+
jsonArray: (...args) => sqlExpr(`jsonb_build_array(${args.map((a) => resolveArg(a, quoteFn)).join(", ")})`),
|
|
115
|
+
jsonObject: (pairs) => sqlExpr(`jsonb_build_object(${flattenJsonObjectPairs(pairs, quoteFn).join(", ")})`),
|
|
98
116
|
// ── Type coercion ────────────────────────────────────────────────────────
|
|
99
117
|
cast: (expr, type) => {
|
|
100
118
|
if (!PG_CAST_TYPES.has(type)) throw new Error(`cast: invalid cast type '${String(type)}'`);
|
|
@@ -127,7 +145,7 @@ var postgresqlDialect = {
|
|
|
127
145
|
var postgresqlV7ContextFns = (quoteFn) => ({
|
|
128
146
|
...postgresqlContextFns(quoteFn),
|
|
129
147
|
countAll: () => sqlExpr("COUNT(*)"),
|
|
130
|
-
count: (col) => sqlExpr(col === "*" ? "COUNT(*)" : `COUNT(${
|
|
148
|
+
count: (col) => sqlExpr(col === "*" ? "COUNT(*)" : `COUNT(${resolveArg(col, quoteFn)})`),
|
|
131
149
|
countDistinct: (col) => sqlExpr(`COUNT(DISTINCT ${quoteFn(col)})`),
|
|
132
150
|
ceil: (col) => sqlExpr(`CEIL(${resolveArg(col, quoteFn)})`),
|
|
133
151
|
floor: (col) => sqlExpr(`FLOOR(${resolveArg(col, quoteFn)})`)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Dialect } from './types.js';
|
|
2
|
-
import { S as SQLExpr } from '../sql-expr-
|
|
3
|
-
import { J as JSONValue } from '../types-
|
|
4
|
-
import { FilterCols, ColName } from './shared.js';
|
|
2
|
+
import { S as SQLExpr, a as SQLDistinct } from '../sql-expr-BGSEwzCi.js';
|
|
3
|
+
import { J as JSONValue, a as JSONObject } from '../types-B0F8m0ok.js';
|
|
4
|
+
import { FilterCols, ColName, ColTypeOf, FilterJsonCols } from './shared.js';
|
|
5
5
|
import '@prisma/client/runtime/client';
|
|
6
6
|
|
|
7
7
|
type PgCastTypeMap = {
|
|
@@ -22,11 +22,12 @@ declare const postgresqlContextFns: <TColEntries extends [string, unknown] = nev
|
|
|
22
22
|
avg: (col: FilterCols<TColEntries, number> | SQLExpr<number>) => SQLExpr<number>;
|
|
23
23
|
sum: (col: FilterCols<TColEntries, number> | SQLExpr<number>) => SQLExpr<number>;
|
|
24
24
|
countAll: () => SQLExpr<number>;
|
|
25
|
-
count: (col: ColName<TColEntries> | "*") => SQLExpr<number>;
|
|
25
|
+
count: (col: ColName<TColEntries> | "*" | SQLExpr<unknown>) => SQLExpr<number>;
|
|
26
26
|
countDistinct: (col: ColName<TColEntries>) => SQLExpr<number>;
|
|
27
|
+
distinct: <Col extends ColName<TColEntries>>(col: Col) => SQLDistinct<NonNullable<ColTypeOf<TColEntries, Col>>>;
|
|
27
28
|
length: (col: FilterCols<TColEntries, string> | SQLExpr<string>) => SQLExpr<number>;
|
|
28
|
-
stringAgg: (col: ColName<TColEntries>, sep: string) => SQLExpr<string>;
|
|
29
|
-
arrayAgg: (col: ColName<TColEntries>) => SQLExpr<unknown[]>;
|
|
29
|
+
stringAgg: (col: ColName<TColEntries> | SQLExpr<string>, sep: string) => SQLExpr<string>;
|
|
30
|
+
arrayAgg: (col: ColName<TColEntries> | SQLExpr<unknown>) => SQLExpr<unknown[]>;
|
|
30
31
|
stddevPop: (col: FilterCols<TColEntries, number>) => SQLExpr<number>;
|
|
31
32
|
stddevSamp: (col: FilterCols<TColEntries, number>) => SQLExpr<number>;
|
|
32
33
|
varPop: (col: FilterCols<TColEntries, number>) => SQLExpr<number>;
|
|
@@ -80,6 +81,9 @@ declare const postgresqlContextFns: <TColEntries extends [string, unknown] = nev
|
|
|
80
81
|
trunc: (x: FilterCols<TColEntries, number> | SQLExpr<number>, n?: number) => SQLExpr<number>;
|
|
81
82
|
div: (x: FilterCols<TColEntries, number> | SQLExpr<number>, y: number) => SQLExpr<number>;
|
|
82
83
|
random: () => SQLExpr<number>;
|
|
84
|
+
jsonExtract: (col: FilterJsonCols<TColEntries> | SQLExpr<JSONValue>, path: string) => SQLExpr<JSONValue>;
|
|
85
|
+
jsonArray: (args_0: SQLExpr<unknown> | ColName<TColEntries>, ...args: (SQLExpr<unknown> | ColName<TColEntries>)[]) => SQLExpr<JSONValue[]>;
|
|
86
|
+
jsonObject: (pairs: [string, ColName<TColEntries> | SQLExpr<unknown>][]) => SQLExpr<JSONObject>;
|
|
83
87
|
cast: <T extends keyof PgCastTypeMap>(expr: ColName<TColEntries> | SQLExpr<unknown>, type: T) => SQLExpr<PgCastTypeMap[T]>;
|
|
84
88
|
};
|
|
85
89
|
type DialectFns<TColEntries extends [string, unknown] = never, _TCriteria extends object = object> = ReturnType<typeof postgresqlContextFns<TColEntries>>;
|
|
@@ -4,6 +4,12 @@ function sqlExpr(sql) {
|
|
|
4
4
|
return sql;
|
|
5
5
|
} };
|
|
6
6
|
}
|
|
7
|
+
var DISTINCT_BRAND = Symbol("sqlDistinct");
|
|
8
|
+
function sqlDistinct(sql) {
|
|
9
|
+
return { sql, [DISTINCT_BRAND]: true, toString() {
|
|
10
|
+
return sql;
|
|
11
|
+
} };
|
|
12
|
+
}
|
|
7
13
|
function resolveArg(arg, quoteFn) {
|
|
8
14
|
if (typeof arg !== "string") return arg.sql;
|
|
9
15
|
return quoteFn(arg);
|
|
@@ -11,6 +17,7 @@ function resolveArg(arg, quoteFn) {
|
|
|
11
17
|
|
|
12
18
|
// src/dialects/shared.ts
|
|
13
19
|
var esc = (s) => s.replace(/'/g, "''");
|
|
20
|
+
var flattenJsonObjectPairs = (pairs, quoteFn) => pairs.flatMap(([k, v]) => [`'${esc(k)}'`, resolveArg(v, quoteFn)]);
|
|
14
21
|
|
|
15
22
|
// src/dialects/postgresql.ts
|
|
16
23
|
var PG_CAST_TYPES = /* @__PURE__ */ new Set(["INTEGER", "TEXT", "BIGINT", "BOOLEAN", "REAL", "NUMERIC", "DATE", "TIMESTAMP", "JSON", "JSONB"]);
|
|
@@ -18,11 +25,12 @@ var postgresqlContextFns = (quoteFn) => ({
|
|
|
18
25
|
avg: (col) => sqlExpr(`AVG(${resolveArg(col, quoteFn)})`),
|
|
19
26
|
sum: (col) => sqlExpr(`SUM(${resolveArg(col, quoteFn)})`),
|
|
20
27
|
countAll: () => sqlExpr("COUNT(*)"),
|
|
21
|
-
count: (col) => sqlExpr(col === "*" ? "COUNT(*)" : `COUNT(${
|
|
28
|
+
count: (col) => sqlExpr(col === "*" ? "COUNT(*)" : `COUNT(${resolveArg(col, quoteFn)})`),
|
|
22
29
|
countDistinct: (col) => sqlExpr(`COUNT(DISTINCT ${quoteFn(col)})`),
|
|
30
|
+
distinct: (col) => sqlDistinct(`DISTINCT ${quoteFn(col)}`),
|
|
23
31
|
length: (col) => sqlExpr(`LENGTH(${resolveArg(col, quoteFn)})`),
|
|
24
|
-
stringAgg: (col, sep) => sqlExpr(`STRING_AGG(${
|
|
25
|
-
arrayAgg: (col) => sqlExpr(`ARRAY_AGG(${
|
|
32
|
+
stringAgg: (col, sep) => sqlExpr(`STRING_AGG(${resolveArg(col, quoteFn)}, '${esc(sep)}')`),
|
|
33
|
+
arrayAgg: (col) => sqlExpr(`ARRAY_AGG(${resolveArg(col, quoteFn)})`),
|
|
26
34
|
stddevPop: (col) => sqlExpr(`STDDEV_POP(${quoteFn(col)})`),
|
|
27
35
|
stddevSamp: (col) => sqlExpr(`STDDEV_SAMP(${quoteFn(col)})`),
|
|
28
36
|
varPop: (col) => sqlExpr(`VAR_POP(${quoteFn(col)})`),
|
|
@@ -95,6 +103,16 @@ var postgresqlContextFns = (quoteFn) => ({
|
|
|
95
103
|
trunc: (x, n) => sqlExpr(n !== void 0 ? `TRUNC(${resolveArg(x, quoteFn)}, ${n})` : `TRUNC(${resolveArg(x, quoteFn)})`),
|
|
96
104
|
div: (x, y) => sqlExpr(`DIV(${resolveArg(x, quoteFn)}, ${y})`),
|
|
97
105
|
random: () => sqlExpr("RANDOM()"),
|
|
106
|
+
// ── JSON scalar fns ───────────────────────────────────────────────────────
|
|
107
|
+
/**
|
|
108
|
+
* Uses jsonb_path_query_first — requires PG 12+ (Prisma 5+ minimum).
|
|
109
|
+
* @note PG uses JSONPath syntax (e.g. `$.tags[0]`, `$.name`).
|
|
110
|
+
* MySQL/SQLite use SQL/JSON path syntax — paths are NOT cross-dialect compatible.
|
|
111
|
+
* Mismatched paths silently return NULL.
|
|
112
|
+
*/
|
|
113
|
+
jsonExtract: (col, path) => sqlExpr(`jsonb_path_query_first(${resolveArg(col, quoteFn)}, '${esc(path)}')`),
|
|
114
|
+
jsonArray: (...args) => sqlExpr(`jsonb_build_array(${args.map((a) => resolveArg(a, quoteFn)).join(", ")})`),
|
|
115
|
+
jsonObject: (pairs) => sqlExpr(`jsonb_build_object(${flattenJsonObjectPairs(pairs, quoteFn).join(", ")})`),
|
|
98
116
|
// ── Type coercion ────────────────────────────────────────────────────────
|
|
99
117
|
cast: (expr, type) => {
|
|
100
118
|
if (!PG_CAST_TYPES.has(type)) throw new Error(`cast: invalid cast type '${String(type)}'`);
|
|
@@ -1,6 +1,11 @@
|
|
|
1
|
+
import { S as SQLExpr } from '../sql-expr-BGSEwzCi.js';
|
|
2
|
+
|
|
1
3
|
declare const sharedFunctions: {};
|
|
2
4
|
declare const esc: (s: string) => string;
|
|
5
|
+
declare const flattenJsonObjectPairs: (pairs: [string, string | SQLExpr<unknown>][], quoteFn: (ref: string) => string) => string[];
|
|
3
6
|
type FilterCols<TEntries extends [string, unknown], T> = TEntries extends [infer N extends string, infer V] ? NonNullable<V> extends T ? N : never : never;
|
|
4
7
|
type ColName<TEntries extends [string, unknown]> = TEntries extends [infer N extends string, unknown] ? N : never;
|
|
8
|
+
type ColTypeOf<TEntries extends [string, unknown], Col extends string> = TEntries extends [Col, infer V] ? V : never;
|
|
9
|
+
type FilterJsonCols<TEntries extends [string, unknown]> = TEntries extends [infer N extends string, infer V] ? NonNullable<V> extends (string | number | boolean | Date | bigint | Buffer) ? never : N : never;
|
|
5
10
|
|
|
6
|
-
export { type ColName, type FilterCols, esc, sharedFunctions };
|
|
11
|
+
export { type ColName, type ColTypeOf, type FilterCols, type FilterJsonCols, esc, flattenJsonObjectPairs, sharedFunctions };
|
|
@@ -1,5 +1,14 @@
|
|
|
1
|
+
// src/sql-expr.ts
|
|
2
|
+
function resolveArg(arg, quoteFn) {
|
|
3
|
+
if (typeof arg !== "string") return arg.sql;
|
|
4
|
+
return quoteFn(arg);
|
|
5
|
+
}
|
|
6
|
+
|
|
1
7
|
// src/dialects/shared.ts
|
|
2
|
-
var sharedFunctions = {
|
|
8
|
+
var sharedFunctions = {
|
|
9
|
+
// Intentionally empty — placeholder for future cross-dialect functions
|
|
10
|
+
};
|
|
3
11
|
var esc = (s) => s.replace(/'/g, "''");
|
|
12
|
+
var flattenJsonObjectPairs = (pairs, quoteFn) => pairs.flatMap(([k, v]) => [`'${esc(k)}'`, resolveArg(v, quoteFn)]);
|
|
4
13
|
|
|
5
|
-
export { esc, sharedFunctions };
|
|
14
|
+
export { esc, flattenJsonObjectPairs, sharedFunctions };
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { Dialect } from './types.js';
|
|
2
|
-
import { S as SQLExpr } from '../sql-expr-
|
|
3
|
-
import {
|
|
2
|
+
import { S as SQLExpr, a as SQLDistinct, D as DISTINCT_BRAND } from '../sql-expr-BGSEwzCi.js';
|
|
3
|
+
import { J as JSONValue, a as JSONObject } from '../types-B0F8m0ok.js';
|
|
4
|
+
import { FilterCols, ColName, ColTypeOf, FilterJsonCols } from './shared.js';
|
|
5
|
+
import '@prisma/client/runtime/client';
|
|
4
6
|
|
|
5
7
|
type SqliteMinMaxResult<TColEntries extends [string, unknown], Col extends string> = TColEntries extends [Col, infer V] ? NonNullable<V> extends number ? bigint | null : V | null : never;
|
|
6
8
|
type SqliteCastTypeMap = {
|
|
@@ -14,10 +16,13 @@ declare const sqliteContextFns: <TColEntries extends [string, unknown] = never,
|
|
|
14
16
|
avg: (col: FilterCols<TColEntries, number> | SQLExpr<number>) => SQLExpr<number>;
|
|
15
17
|
sum: (col: FilterCols<TColEntries, number> | SQLExpr<number>) => SQLExpr<bigint | number>;
|
|
16
18
|
countAll: () => SQLExpr<bigint>;
|
|
17
|
-
count: (col: ColName<TColEntries> | "*") => SQLExpr<bigint>;
|
|
19
|
+
count: (col: ColName<TColEntries> | "*" | SQLExpr<unknown>) => SQLExpr<bigint>;
|
|
18
20
|
countDistinct: (col: ColName<TColEntries>) => SQLExpr<bigint>;
|
|
21
|
+
distinct: <Col extends ColName<TColEntries>>(col: Col) => SQLDistinct<NonNullable<ColTypeOf<TColEntries, Col>>>;
|
|
19
22
|
length: (col: FilterCols<TColEntries, string> | SQLExpr<string>) => SQLExpr<bigint>;
|
|
20
|
-
groupConcat: (col:
|
|
23
|
+
groupConcat: (((col: SQLDistinct<string>) => SQLExpr<string>) & ((col: ColName<TColEntries> | (SQLExpr<string> & {
|
|
24
|
+
readonly [DISTINCT_BRAND]?: never;
|
|
25
|
+
}), sep?: string) => SQLExpr<string>));
|
|
21
26
|
total: (col: ColName<TColEntries>) => SQLExpr<number>;
|
|
22
27
|
min: <Col extends ColName<TColEntries>>(col: Col) => SQLExpr<SqliteMinMaxResult<TColEntries, Col>>;
|
|
23
28
|
max: <Col extends ColName<TColEntries>>(col: Col) => SQLExpr<SqliteMinMaxResult<TColEntries, Col>>;
|
|
@@ -54,6 +59,9 @@ declare const sqliteContextFns: <TColEntries extends [string, unknown] = never,
|
|
|
54
59
|
log: (x: FilterCols<TColEntries, number> | SQLExpr<number>) => SQLExpr<number>;
|
|
55
60
|
log2: (x: FilterCols<TColEntries, number> | SQLExpr<number>) => SQLExpr<number>;
|
|
56
61
|
log10: (x: FilterCols<TColEntries, number> | SQLExpr<number>) => SQLExpr<number>;
|
|
62
|
+
jsonExtract: (col: FilterJsonCols<TColEntries> | SQLExpr<JSONValue>, path: string) => SQLExpr<JSONValue>;
|
|
63
|
+
jsonArray: (args_0: SQLExpr<unknown> | ColName<TColEntries>, ...args: (SQLExpr<unknown> | ColName<TColEntries>)[]) => SQLExpr<JSONValue[]>;
|
|
64
|
+
jsonObject: (pairs: [string, ColName<TColEntries> | SQLExpr<unknown>][]) => SQLExpr<JSONObject>;
|
|
57
65
|
cast: <T extends keyof SqliteCastTypeMap>(expr: ColName<TColEntries> | SQLExpr<unknown>, type: T) => SQLExpr<SqliteCastTypeMap[T]>;
|
|
58
66
|
};
|
|
59
67
|
type DialectFns<TColEntries extends [string, unknown] = never, TCriteria extends object = object> = ReturnType<typeof sqliteContextFns<TColEntries, TCriteria>>;
|
|
@@ -4,11 +4,24 @@ function sqlExpr(sql) {
|
|
|
4
4
|
return sql;
|
|
5
5
|
} };
|
|
6
6
|
}
|
|
7
|
+
var DISTINCT_BRAND = Symbol("sqlDistinct");
|
|
8
|
+
function sqlDistinct(sql) {
|
|
9
|
+
return { sql, [DISTINCT_BRAND]: true, toString() {
|
|
10
|
+
return sql;
|
|
11
|
+
} };
|
|
12
|
+
}
|
|
13
|
+
function isDistinct(val) {
|
|
14
|
+
return typeof val === "object" && val !== null && DISTINCT_BRAND in val;
|
|
15
|
+
}
|
|
7
16
|
function resolveArg(arg, quoteFn) {
|
|
8
17
|
if (typeof arg !== "string") return arg.sql;
|
|
9
18
|
return quoteFn(arg);
|
|
10
19
|
}
|
|
11
20
|
|
|
21
|
+
// src/dialects/shared.ts
|
|
22
|
+
var esc = (s) => s.replace(/'/g, "''");
|
|
23
|
+
var flattenJsonObjectPairs = (pairs, quoteFn) => pairs.flatMap(([k, v]) => [`'${esc(k)}'`, resolveArg(v, quoteFn)]);
|
|
24
|
+
|
|
12
25
|
// src/dialects/sqlite.ts
|
|
13
26
|
var SQLITE_CAST_TYPES = /* @__PURE__ */ new Set(["INTEGER", "TEXT", "REAL", "NUMERIC", "BLOB"]);
|
|
14
27
|
var dateArg = (col, quoteFn) => {
|
|
@@ -22,11 +35,18 @@ var sqliteContextFns = (quoteFn, condFn) => ({
|
|
|
22
35
|
sum: (col) => sqlExpr(`SUM(${resolveArg(col, quoteFn)})`),
|
|
23
36
|
// Aggregate integer-result fns — SQLite returns INTEGER → bigint
|
|
24
37
|
countAll: () => sqlExpr("COUNT(*)"),
|
|
25
|
-
count: (col) => sqlExpr(col === "*" ? "COUNT(*)" : `COUNT(${
|
|
38
|
+
count: (col) => sqlExpr(col === "*" ? "COUNT(*)" : `COUNT(${resolveArg(col, quoteFn)})`),
|
|
26
39
|
countDistinct: (col) => sqlExpr(`COUNT(DISTINCT ${quoteFn(col)})`),
|
|
40
|
+
distinct: (col) => sqlDistinct(`DISTINCT ${quoteFn(col)}`),
|
|
27
41
|
// LENGTH returns INTEGER → bigint in SQLite
|
|
28
42
|
length: (col) => sqlExpr(`LENGTH(${resolveArg(col, quoteFn)})`),
|
|
29
|
-
groupConcat: (col, sep) =>
|
|
43
|
+
groupConcat: (col, sep) => {
|
|
44
|
+
const inner = resolveArg(col, quoteFn);
|
|
45
|
+
if (isDistinct(col) && sep !== void 0) {
|
|
46
|
+
throw new Error("SQLite does not support GROUP_CONCAT(DISTINCT col, sep) \u2014 omit the separator.");
|
|
47
|
+
}
|
|
48
|
+
return sqlExpr(`GROUP_CONCAT(${inner}${sep !== void 0 ? `, '${sep.replace(/'/g, "''")}'` : ""})`);
|
|
49
|
+
},
|
|
30
50
|
total: (col) => sqlExpr(`TOTAL(${quoteFn(col)})`),
|
|
31
51
|
// SQLite MIN/MAX return bigint for integer columns — override base (number) return types
|
|
32
52
|
min: (col) => sqlExpr(`MIN(${quoteFn(col)})`),
|
|
@@ -86,6 +106,10 @@ var sqliteContextFns = (quoteFn, condFn) => ({
|
|
|
86
106
|
log: (x) => sqlExpr(`LOG(${resolveArg(x, quoteFn)})`),
|
|
87
107
|
log2: (x) => sqlExpr(`LOG2(${resolveArg(x, quoteFn)})`),
|
|
88
108
|
log10: (x) => sqlExpr(`LOG10(${resolveArg(x, quoteFn)})`),
|
|
109
|
+
// ── JSON scalar fns ───────────────────────────────────────────────────────
|
|
110
|
+
jsonExtract: (col, path) => sqlExpr(`json_extract(${resolveArg(col, quoteFn)}, '${esc(path)}')`),
|
|
111
|
+
jsonArray: (...args) => sqlExpr(`json_array(${args.map((a) => resolveArg(a, quoteFn)).join(", ")})`),
|
|
112
|
+
jsonObject: (pairs) => sqlExpr(`json_object(${flattenJsonObjectPairs(pairs, quoteFn).join(", ")})`),
|
|
89
113
|
// ── Type coercion ────────────────────────────────────────────────────────
|
|
90
114
|
cast: (expr, type) => {
|
|
91
115
|
if (!SQLITE_CAST_TYPES.has(type)) throw new Error(`cast: invalid cast type '${String(type)}'`);
|
|
@@ -8,5 +8,6 @@ type Dialect = {
|
|
|
8
8
|
};
|
|
9
9
|
declare const SUPPORTED_PROVIDERS: readonly ["sqlite", "mysql", "postgresql"];
|
|
10
10
|
type SupportedProvider = typeof SUPPORTED_PROVIDERS[keyof typeof SUPPORTED_PROVIDERS];
|
|
11
|
+
type FunctionRegistry = Record<string, (...args: unknown[]) => unknown>;
|
|
11
12
|
|
|
12
|
-
export { type Dialect, SUPPORTED_PROVIDERS, type SupportedProvider };
|
|
13
|
+
export { type Dialect, type FunctionRegistry, SUPPORTED_PROVIDERS, type SupportedProvider };
|
package/dist/extend/extend.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Decimal } from '@prisma/client/runtime/client';
|
|
2
|
-
import { S as SQLExpr, L as LitToType } from './sql-expr-
|
|
2
|
+
import { S as SQLExpr, L as LitToType } from './sql-expr-BGSEwzCi.js';
|
|
3
3
|
|
|
4
4
|
type PrismaClient = any;
|
|
5
5
|
|
|
@@ -21,7 +21,7 @@ type DATABASE = {
|
|
|
21
21
|
type JSONPrimitive = string | number | boolean | null;
|
|
22
22
|
type JSONValue = JSONPrimitive | JSONObject | JSONArray;
|
|
23
23
|
type JSONObject = {
|
|
24
|
-
[member: string]: JSONValue;
|
|
24
|
+
[member: string]: JSONValue | undefined;
|
|
25
25
|
};
|
|
26
26
|
type JSONArray = Array<JSONValue>;
|
|
27
27
|
type StrTypeToTSType<str> = str extends string ? (GetTSType<RemoveNullChar<str>> | IsNullable<str>) : never;
|
|
@@ -61,6 +61,7 @@ type Values = {
|
|
|
61
61
|
withs?: Array<{
|
|
62
62
|
name: string;
|
|
63
63
|
sql: string;
|
|
64
|
+
columns?: string[];
|
|
64
65
|
}>;
|
|
65
66
|
limit?: number;
|
|
66
67
|
offset?: number;
|
|
@@ -98,7 +99,7 @@ type FindColumnInFields<Column extends string, TFields extends TFieldsType, Tabl
|
|
|
98
99
|
type IterateTables<Tables extends Array<TTableSources>, TFields extends TFieldsType, IncTName extends boolean, acc extends Record<string, any> = {}> = Tables extends [infer T extends TTableSources, ...infer Rest extends Array<TTableSources>] ? [IncTName] extends [false] ? IterateTables<Rest, TFields, IncTName, acc & TFields[T extends string ? T : T[1]]> : IterateTables<Rest, TFields, IncTName, acc & IterateTablesFromFields<T, TFields[T extends string ? T : T[1]], IncTName>> : acc;
|
|
99
100
|
type GenName<T extends string, F extends unknown, IncName extends boolean> = F extends string ? [IncName] extends [false] ? F : `${T}.${F}` : never;
|
|
100
101
|
type IterateTablesFromFields<Table extends TTableSources, TFields extends Record<string, string>, IncTName extends boolean> = {
|
|
101
|
-
[f in keyof TFields as GenName<Table extends string ? Table :
|
|
102
|
+
[f in keyof TFields as GenName<Table extends string ? Table : Table extends readonly [any, infer Name extends string] ? Name : never, f, IncTName>]: TFields[f];
|
|
102
103
|
};
|
|
103
104
|
type TablesArray2Name<TSources extends Array<TTableSources>, acc extends Array<string> = []> = TSources extends [infer T extends TTableSources, ...infer Rest extends Array<TTableSources>] ? TablesArray2Name<Rest, [...acc, GetAliasTableNames<T>]> : acc;
|
|
104
105
|
type GetColumnNamesFromTable<TDBBase extends TTableSources> = TDBBase extends TVirtualTableSource ? never : keyof GetFieldsFromTable<GetRealTableNames<TDBBase>>;
|
|
@@ -109,10 +110,10 @@ type GetOtherColumns<Tables extends TArrSources> = Exclude<GetColumnsFromTables<
|
|
|
109
110
|
declare class _fSelect<TSources extends TArrSources, TFields extends TFieldsType, TSelectRT extends Record<string, any> = {}> extends _fOrderBy<TSources, TFields, TSelectRT> {
|
|
110
111
|
select<T>(fn: (ctx: SelectFnContext<TSources, TFields>) => SQLExpr<T>): _fSelect<TSources, TFields, Prettify<TSelectRT & Record<string, T>>>;
|
|
111
112
|
select<T, A extends string>(fn: (ctx: SelectFnContext<TSources, TFields>) => SQLExpr<T>, alias: A): _fSelect<TSources, TFields, Prettify<TSelectRT & Record<A, T>>>;
|
|
112
|
-
select<const TSelect extends ValidSelect<TSources, TFields>>(select: TSelect): _fSelect<TSources, TFields, Prettify<TSelectRT & MergeItems<TSelect, TSources, TFields>>>;
|
|
113
|
+
select<const TSelect extends ValidSelect<TSources, TFields>>(select: TSelect): _fSelect<TSources, TFields, Prettify<TSelectRT & MergeItems<TSelect, TSources, TFields, CountKeys<TSources> extends 1 ? false : true>>>;
|
|
113
114
|
select<const TSelect extends ValidSelect<TSources, TFields>, TAlias extends string>(select: TSelect, alias: TAlias): _fSelect<TSources, TFields, Prettify<TSelectRT & Record<TAlias, ExtractColumnType<TSelect, TSources, TFields>>>>;
|
|
114
115
|
}
|
|
115
|
-
type CountKeys<T extends Array<TTableSources>, acc extends Array<true> = []> = T extends [
|
|
116
|
+
type CountKeys<T extends Array<TTableSources>, acc extends Array<true> = []> = T extends [TTableSources, ...infer R extends Array<TTableSources>] ? CountKeys<R, [...acc, true]> : acc["length"];
|
|
116
117
|
type StripTablePrefix<S extends string> = S extends `${string}.${infer Col}` ? Col : S;
|
|
117
118
|
declare class _fSelectDistinct<TSources extends TArrSources, TFields extends TFieldsType, TSelectRT extends Record<string, any> = {}> extends _fSelect<TSources, TFields, TSelectRT> {
|
|
118
119
|
selectDistinct(): _fSelect<TSources, TFields, TSelectRT>;
|
|
@@ -264,6 +265,7 @@ type Relations<Table extends TTableSources> = Extract<DATABASE, {
|
|
|
264
265
|
type AvailableJoins<Tables extends Array<TTableSources>, acc extends TTableSources = never> = Tables extends [infer T extends TTableSources, ...infer Rest extends Array<TTableSources>] ? AvailableJoins<Rest, acc | keyof Relations<T>> : acc;
|
|
265
266
|
type GetRealTableNames<Tables extends TTableSources> = Tables extends any ? Tables extends string ? Tables : Tables[0] : never;
|
|
266
267
|
type GetAliasTableNames<Tables extends TTableSources> = Tables extends any ? Tables extends string ? Tables : Tables[1] : never;
|
|
268
|
+
type IsTargetCTE<TJTable> = TJTable extends TVirtualTableSource ? string : never;
|
|
267
269
|
type SafeJoins<TNewJoin extends TTables, TJoins extends TArrSources, TRelations = Relations<TNewJoin>> = {
|
|
268
270
|
[k in keyof TRelations as Filter<k, GetRealTableNames<TJoins[number]>>]: TRelations[k];
|
|
269
271
|
};
|
|
@@ -360,7 +362,7 @@ declare class _fJoin<TSources extends TArrSources, TFields extends TFieldsType,
|
|
|
360
362
|
where?: JoinWhereCriteria<Table, TAlias>;
|
|
361
363
|
joinType?: JoinType;
|
|
362
364
|
}): _fJoinReturn<[...TSources, [TAlias] extends [undefined] ? Table : [Table, TAlias]], Prettify<TFields & Record<[TAlias] extends [undefined] ? Table : TAlias, GetFieldsFromTable<Table>>>, TCTEs>;
|
|
363
|
-
join<const TableInput extends `${AvailableJoins<TSources>}` | `${AvailableJoins<TSources>} ${string}`, Table extends AvailableJoins<TSources> = ExtractTableName<TableInput> & AvailableJoins<TSources>, TAlias extends string | never = ExtractAlias<TableInput>, TJoinCols extends [string, string] = ValidStringTuple<GetUnionOfRelations<MapJoinsToKnownTables<SafeJoins<Table, TSources>, TSources>>>, TCol1 extends TJoinCols[0] = never>(table: TableInput, field: TCol1, reference: find<TJoinCols, TCol1>, options?: {
|
|
365
|
+
join<const TableInput extends `${AvailableJoins<TSources>}` | `${AvailableJoins<TSources>} ${string}`, Table extends AvailableJoins<TSources> = ExtractTableName<TableInput> & AvailableJoins<TSources>, TAlias extends string | never = ExtractAlias<TableInput>, TJoinCols extends [string, string] = ValidStringTuple<GetUnionOfRelations<MapJoinsToKnownTables<SafeJoins<Table, TSources>, TSources>>>, TJTable = Table extends keyof TCTEs ? TVirtualTableSource : [Extract<TSources[number], string>] extends [never] ? TVirtualTableSource : never, TCol1 extends (TJoinCols[0] | IsTargetCTE<TJTable>) = never>(table: TableInput, field: TCol1, reference: find<TJoinCols, TCol1> | IsTargetCTE<TJTable>, options?: {
|
|
364
366
|
where?: JoinWhereCriteria<Table, TAlias>;
|
|
365
367
|
joinType?: JoinType;
|
|
366
368
|
}): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], Prettify<TFields & Record<[TAlias] extends [never] ? Table : TAlias, GetFieldsFromTable<Table>>>, TCTEs>;
|
|
@@ -491,6 +493,7 @@ declare class DbWith<TCTEs extends Record<string, Record<string, any>>> {
|
|
|
491
493
|
constructor(db: PrismaClient, _withs: Array<{
|
|
492
494
|
name: string;
|
|
493
495
|
sql: string;
|
|
496
|
+
columns?: string[];
|
|
494
497
|
}>);
|
|
495
498
|
with<const TName extends string, TQuery extends _fRun<any, any, any>>(name: TName, query: TQuery): DbWith<TCTEs & Record<TName, InferCTEShape<TQuery>>>;
|
|
496
499
|
from<const TName extends keyof TCTEs & string>(cteName: TName): _fJoinReturn<[readonly ["__cte__", TName]], Record<TName, TCTEs[TName]>, TCTEs>;
|
package/dist/extend/extend.js
CHANGED
|
@@ -262,9 +262,6 @@ var I = class _I {
|
|
|
262
262
|
}
|
|
263
263
|
};
|
|
264
264
|
|
|
265
|
-
// src/dialects/shared.ts
|
|
266
|
-
var esc = (s2) => s2.replace(/'/g, "''");
|
|
267
|
-
|
|
268
265
|
// src/sql-expr.ts
|
|
269
266
|
function sqlExpr(sql) {
|
|
270
267
|
return { sql, toString() {
|
|
@@ -282,6 +279,9 @@ function resolveArg(arg, quoteFn) {
|
|
|
282
279
|
return quoteFn(arg);
|
|
283
280
|
}
|
|
284
281
|
|
|
282
|
+
// src/dialects/shared.ts
|
|
283
|
+
var esc = (s2) => s2.replace(/'/g, "''");
|
|
284
|
+
|
|
285
285
|
// src/extend.ts
|
|
286
286
|
var DB = {};
|
|
287
287
|
var DbSelect = class {
|
|
@@ -575,12 +575,21 @@ var _fSelect = class __fSelect extends _fOrderBy {
|
|
|
575
575
|
}
|
|
576
576
|
}
|
|
577
577
|
if (alias !== void 0) {
|
|
578
|
+
if (select === "*" && this.values.tables.length > 1) {
|
|
579
|
+
throw new Error(`select("*", alias) is not supported on multi-table queries \u2014 use explicit column names or select("*") without alias`);
|
|
580
|
+
}
|
|
578
581
|
const quotedSelect2 = select === "*" ? "*" : select.includes(".") ? dialect.quoteQualifiedColumn(select) : dialect.quote(select, false);
|
|
579
582
|
return new __fSelect(this.db, {
|
|
580
583
|
...this.values,
|
|
581
584
|
selects: [...this.values.selects, `${quotedSelect2} AS ${dialect.quote(alias, true)}`]
|
|
582
585
|
});
|
|
583
586
|
}
|
|
587
|
+
if (select === "*" && this.values.tables.length > 1) {
|
|
588
|
+
const expandedSelects = this.values.tables.flatMap(
|
|
589
|
+
(tableObj) => expandToQualifiedSelects(tableObj, this.values.withs)
|
|
590
|
+
);
|
|
591
|
+
return new __fSelect(this.db, { ...this.values, selects: [...this.values.selects, ...expandedSelects] });
|
|
592
|
+
}
|
|
584
593
|
const quotedSelect = select === "*" ? "*" : select.includes(".") ? dialect.quoteQualifiedColumn(select) : dialect.quote(select, false);
|
|
585
594
|
return new __fSelect(this.db, {
|
|
586
595
|
...this.values,
|
|
@@ -596,13 +605,7 @@ var _fSelectDistinct = class extends _fSelect {
|
|
|
596
605
|
const selects = function(values) {
|
|
597
606
|
if (values.tables && values.tables.length > 1) {
|
|
598
607
|
return values.tables.reduce((acc, tableObj) => {
|
|
599
|
-
|
|
600
|
-
const actualTable = tableObj.table;
|
|
601
|
-
if (!DB[actualTable]) return acc;
|
|
602
|
-
return acc.concat(Object.keys(DB[actualTable].fields).map((field) => {
|
|
603
|
-
const qualifiedCol = `${tableIdentifier}.${field}`;
|
|
604
|
-
return `${dialect.quoteQualifiedColumn(qualifiedCol)} AS ${dialect.quote(`${tableIdentifier}.${field}`, true)}`;
|
|
605
|
-
}));
|
|
608
|
+
return acc.concat(expandToQualifiedSelects(tableObj, values.withs));
|
|
606
609
|
}, []);
|
|
607
610
|
}
|
|
608
611
|
const t2 = values.tables[0];
|
|
@@ -706,6 +709,9 @@ var _fWhere = class __fWhere extends _fGroupBy {
|
|
|
706
709
|
where: [...this.values.where || [], criteriaOrFn]
|
|
707
710
|
});
|
|
708
711
|
}
|
|
712
|
+
/**
|
|
713
|
+
* @security NEVER pass user-supplied input. Inserts SQL verbatim into $queryRawUnsafe without parameterization.
|
|
714
|
+
*/
|
|
709
715
|
whereRaw(where) {
|
|
710
716
|
return new _fGroupBy(this.db, {
|
|
711
717
|
...this.values,
|
|
@@ -889,15 +895,42 @@ var _fJoin = class __fJoin extends _fWhere {
|
|
|
889
895
|
return this._joinImpl("CROSS", table);
|
|
890
896
|
}
|
|
891
897
|
};
|
|
898
|
+
function expandToQualifiedSelects(tableObj, withs) {
|
|
899
|
+
const tId = tableObj.alias || tableObj.table;
|
|
900
|
+
if (DB[tableObj.table]) {
|
|
901
|
+
return Object.keys(DB[tableObj.table].fields).map((field) => {
|
|
902
|
+
const q = `${tId}.${field}`;
|
|
903
|
+
return `${dialect.quoteQualifiedColumn(q)} AS ${dialect.quote(q, true)}`;
|
|
904
|
+
});
|
|
905
|
+
}
|
|
906
|
+
const cte = withs?.find((w2) => w2.name === tableObj.table);
|
|
907
|
+
if (!cte?.columns?.length) throw new Error(`Cannot expand * for CTE "${tableObj.table}" \u2014 select columns explicitly`);
|
|
908
|
+
return cte.columns.map((col) => {
|
|
909
|
+
const q = `${tId}.${col}`;
|
|
910
|
+
return `${dialect.quoteQualifiedColumn(q)} AS ${dialect.quote(q, true)}`;
|
|
911
|
+
});
|
|
912
|
+
}
|
|
913
|
+
function extractSelectAlias(expr) {
|
|
914
|
+
const aliased = / AS ["'`](.+?)["'`]\s*$/i.exec(expr);
|
|
915
|
+
if (aliased) return aliased[1];
|
|
916
|
+
const quoted = /^["'`](.+?)["'`]$/.exec(expr);
|
|
917
|
+
if (quoted) return quoted[1];
|
|
918
|
+
if (/^\w+$/.test(expr)) return expr;
|
|
919
|
+
return null;
|
|
920
|
+
}
|
|
921
|
+
function extractCTEColumns(query) {
|
|
922
|
+
return query.values.selects.map(extractSelectAlias).filter((c2) => c2 !== null);
|
|
923
|
+
}
|
|
892
924
|
var DbWith = class _DbWith {
|
|
893
925
|
constructor(db, _withs) {
|
|
894
926
|
this.db = db;
|
|
895
927
|
this._withs = _withs;
|
|
896
928
|
}
|
|
897
929
|
with(name, query) {
|
|
930
|
+
const columns = extractCTEColumns(query);
|
|
898
931
|
return new _DbWith(this.db, [
|
|
899
932
|
...this._withs,
|
|
900
|
-
{ name, sql: query.getSQL().replace(/;$/, "") }
|
|
933
|
+
{ name, sql: query.getSQL().replace(/;$/, ""), columns }
|
|
901
934
|
]);
|
|
902
935
|
}
|
|
903
936
|
from(baseTableOrCTE, alias) {
|
|
@@ -916,9 +949,11 @@ var extendedPrismaClient = {
|
|
|
916
949
|
const [base, ...aliases] = table.split(" ");
|
|
917
950
|
return new DbSelect(client).from(base.trim(), aliases.join().trim() || void 0);
|
|
918
951
|
},
|
|
952
|
+
/** @note `query` must be produced by the same prisma-ts-select builder instance. */
|
|
919
953
|
$with(name, query) {
|
|
920
954
|
const client = Prisma.getExtensionContext(this);
|
|
921
|
-
|
|
955
|
+
const columns = extractCTEColumns(query);
|
|
956
|
+
return new DbWith(client, [{ name, sql: query.getSQL().replace(/;$/, ""), columns }]);
|
|
922
957
|
}
|
|
923
958
|
}
|
|
924
959
|
};
|
|
@@ -4,7 +4,11 @@ type SQLExpr<T> = {
|
|
|
4
4
|
readonly [_type]?: T;
|
|
5
5
|
toString(): string;
|
|
6
6
|
};
|
|
7
|
+
declare const DISTINCT_BRAND: unique symbol;
|
|
8
|
+
type SQLDistinct<T> = SQLExpr<T> & {
|
|
9
|
+
readonly [DISTINCT_BRAND]: true;
|
|
10
|
+
};
|
|
7
11
|
type LitValue = string | number | boolean | null;
|
|
8
12
|
type LitToType<T extends LitValue> = T extends string ? string : T extends number ? number : T extends boolean ? number : null;
|
|
9
13
|
|
|
10
|
-
export type
|
|
14
|
+
export { DISTINCT_BRAND as D, type LitToType as L, type SQLExpr as S, type SQLDistinct as a };
|
package/dist/generator.cjs
CHANGED
package/dist/generator.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import './chunk-
|
|
1
|
+
import './chunk-NFKUA5XM.js';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "prisma-ts-select",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"bin": {
|
|
6
6
|
"prisma-ts-select": "dist/bin.cjs"
|
|
@@ -28,6 +28,30 @@
|
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
30
|
},
|
|
31
|
+
"scripts": {
|
|
32
|
+
"bp": "pnpm build && pnpm version patch && pnpm pack",
|
|
33
|
+
"build": "pnpm exec rimraf dist && tsup",
|
|
34
|
+
"reset": "rm -rf prisma/migrations/ && prisma migrate dev --name init && prisma generate",
|
|
35
|
+
"start": "tsx src/index.ts",
|
|
36
|
+
"prisma-upgrade": "pnpm i --save-dev prisma@latest && pnpm i @prisma/client@latest",
|
|
37
|
+
"lint:ts": "tsc --noEmit -p tsconfig.json",
|
|
38
|
+
"lint:tsw": "pnpm tsc -w",
|
|
39
|
+
"lint": "tsc --noEmit ; eslint \"scripts/**/*.{j,t}s{,x}\" --cache --max-warnings=0",
|
|
40
|
+
"lint:s": "eslint --config .eslintrc.style.json \"scripts/**/*.{j,t}s{,x}\" --cache --max-warnings=0",
|
|
41
|
+
"lint:fix": "eslint --config .eslintrc.style.json \"scripts/**/*.{j,t}s{,x}\" --cache --max-warnings=0 --fix",
|
|
42
|
+
"p:gen": "pnpm exec prisma generate",
|
|
43
|
+
"p:dbp": "pnpm exec prisma db push",
|
|
44
|
+
"p:migrate": "pnpm exec prisma migrate dev",
|
|
45
|
+
"p:update": "pnpm add -D prisma@latest && pnpm add @prisma/client@latest",
|
|
46
|
+
"test": "node --test tests/**/*.spec.ts",
|
|
47
|
+
"test:jest": "jest",
|
|
48
|
+
"2postinstall": "node src/scripts/postinstall.js",
|
|
49
|
+
"doc": "pnpm exec markdown-toc -i README.md",
|
|
50
|
+
"mdcode-ts": "pnpm exec mdcode",
|
|
51
|
+
"readme:extract": "pnpm mdcode extract README.md",
|
|
52
|
+
"readme:update": "pnpm mdcode update --transform ./transforms/readme-sql-clean.ts README.md",
|
|
53
|
+
"readme:test": "pnpm --filter usage-sqlite-v7 test -- tests/readme"
|
|
54
|
+
},
|
|
31
55
|
"dependencies": {
|
|
32
56
|
"@prisma/generator-helper": "^6.0.0",
|
|
33
57
|
"@prisma/internals": "^6.0.0",
|
|
@@ -76,7 +100,7 @@
|
|
|
76
100
|
"knip": "^5.9.4",
|
|
77
101
|
"log-with-statusbar": "^1.2.0",
|
|
78
102
|
"markdown-toc": "^1.2.0",
|
|
79
|
-
"mdcode-ts": "0.0.
|
|
103
|
+
"mdcode-ts": "^0.0.4",
|
|
80
104
|
"prisma": "6.19.2",
|
|
81
105
|
"prisma-dbml-generator": "^0.10.0",
|
|
82
106
|
"prisma-docs-generator": "^0.8.0",
|
|
@@ -151,31 +175,5 @@
|
|
|
151
175
|
"publishConfig": {
|
|
152
176
|
"access": "public",
|
|
153
177
|
"name": "prisma-ts-select"
|
|
154
|
-
},
|
|
155
|
-
"scripts": {
|
|
156
|
-
"bp": "pnpm build && pnpm version patch && pnpm pack",
|
|
157
|
-
"build": "pnpm exec rimraf dist && tsup",
|
|
158
|
-
"reset": "rm -rf prisma/migrations/ && prisma migrate dev --name init && prisma generate",
|
|
159
|
-
"start": "tsx src/index.ts",
|
|
160
|
-
"prisma-upgrade": "pnpm i --save-dev prisma@latest && pnpm i @prisma/client@latest",
|
|
161
|
-
"lint:ts": "tsc --noEmit -p tsconfig.json",
|
|
162
|
-
"lint:tsw": "pnpm tsc -w",
|
|
163
|
-
"lint": "tsc --noEmit ; eslint \"scripts/**/*.{j,t}s{,x}\" --cache --max-warnings=0",
|
|
164
|
-
"lint:s": "eslint --config .eslintrc.style.json \"scripts/**/*.{j,t}s{,x}\" --cache --max-warnings=0",
|
|
165
|
-
"lint:fix": "eslint --config .eslintrc.style.json \"scripts/**/*.{j,t}s{,x}\" --cache --max-warnings=0 --fix",
|
|
166
|
-
"p:gen": "pnpm exec prisma generate",
|
|
167
|
-
"p:dbp": "pnpm exec prisma db push",
|
|
168
|
-
"p:migrate": "pnpm exec prisma migrate dev",
|
|
169
|
-
"p:update": "pnpm add -D prisma@latest && pnpm add @prisma/client@latest",
|
|
170
|
-
"test": "node --test tests/**/*.spec.ts",
|
|
171
|
-
"test:jest": "jest",
|
|
172
|
-
"2postinstall": "node src/scripts/postinstall.js",
|
|
173
|
-
"doc": "pnpm exec markdown-toc -i README.md",
|
|
174
|
-
"mdcode": "go run github.com/szkiba/mdcode@latest ",
|
|
175
|
-
"mdcode-ts": "pnpm exec mdcode-ts",
|
|
176
|
-
"readme:extract": "pnpm mdcode-ts extract README.md",
|
|
177
|
-
"readme:update:old": "pnpm mdcode update README.md",
|
|
178
|
-
"readme:update": "pnpm mdcode-ts update README.md",
|
|
179
|
-
"readme:test": "pnpm --filter usage-sqlite-v7 test -- tests/readme"
|
|
180
178
|
}
|
|
181
|
-
}
|
|
179
|
+
}
|
package/LICENSE
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2024 Adrian Elton-Browning
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|