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.
Files changed (40) hide show
  1. package/README.md +266 -212
  2. package/assets/groupBy.gif +0 -0
  3. package/assets/joinUnsafeIgnoreType.gif +0 -0
  4. package/assets/joinUnsafeTypeEnforced.gif +0 -0
  5. package/assets/typesafe-join.gif +0 -0
  6. package/assets/typesafe-join.png +0 -0
  7. package/assets/{whereisNull.gif → whereIsNull.gif} +0 -0
  8. package/assets/whereNotNull.gif +0 -0
  9. package/dist/bin.cjs +1 -1
  10. package/dist/bin.js +1 -1
  11. package/dist/{chunk-54D2J5AR.cjs → chunk-GSIFF2TF.cjs} +19 -0
  12. package/dist/{chunk-47KZVQLD.js → chunk-NFKUA5XM.js} +19 -0
  13. package/dist/extend/dialects/index.d.ts +4 -4
  14. package/dist/extend/dialects/index.js +26 -2
  15. package/dist/extend/dialects/mysql-v6.d.ts +10 -6
  16. package/dist/extend/dialects/mysql-v6.js +15 -3
  17. package/dist/extend/dialects/mysql-v7.d.ts +2 -2
  18. package/dist/extend/dialects/mysql-v7.js +14 -2
  19. package/dist/extend/dialects/mysql.d.ts +9 -5
  20. package/dist/extend/dialects/mysql.js +14 -2
  21. package/dist/extend/dialects/postgresql-v6.d.ts +12 -7
  22. package/dist/extend/dialects/postgresql-v6.js +22 -4
  23. package/dist/extend/dialects/postgresql-v7.d.ts +12 -7
  24. package/dist/extend/dialects/postgresql-v7.js +22 -4
  25. package/dist/extend/dialects/postgresql.d.ts +10 -6
  26. package/dist/extend/dialects/postgresql.js +21 -3
  27. package/dist/extend/dialects/shared.d.ts +6 -1
  28. package/dist/extend/dialects/shared.js +11 -2
  29. package/dist/extend/dialects/sqlite.d.ts +12 -4
  30. package/dist/extend/dialects/sqlite.js +26 -2
  31. package/dist/extend/dialects/types.d.ts +2 -1
  32. package/dist/extend/extend.d.ts +9 -6
  33. package/dist/extend/extend.js +47 -12
  34. package/dist/extend/{sql-expr-BaKWzJ-r.d.ts → sql-expr-BGSEwzCi.d.ts} +5 -1
  35. package/dist/extend/types-B0F8m0ok.d.ts +8 -0
  36. package/dist/generator.cjs +1 -1
  37. package/dist/generator.js +1 -1
  38. package/package.json +27 -29
  39. package/LICENSE +0 -21
  40. 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(${quoteFn(col)})`),
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(${quoteFn(col)}, '${esc(sep)}')`),
25
- arrayAgg: (col) => sqlExpr(`ARRAY_AGG(${quoteFn(col)})`),
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(${quoteFn(col)})`),
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-BaKWzJ-r.js';
3
- import { J as JSONValue } from '../types-D84lxYVc.js';
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(${quoteFn(col)})`),
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(${quoteFn(col)}, '${esc(sep)}')`),
25
- arrayAgg: (col) => sqlExpr(`ARRAY_AGG(${quoteFn(col)})`),
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-BaKWzJ-r.js';
3
- import { FilterCols, ColName } from './shared.js';
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: ColName<TColEntries>, sep?: string) => SQLExpr<string>;
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(${quoteFn(col)})`),
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) => sqlExpr(`GROUP_CONCAT(${quoteFn(col)}${sep !== void 0 ? `, '${sep.replace(/'/g, "''")}'` : ""})`),
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 };
@@ -1,5 +1,5 @@
1
1
  import { Decimal } from '@prisma/client/runtime/client';
2
- import { S as SQLExpr, L as LitToType } from './sql-expr-BaKWzJ-r.js';
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 : `Come back to 6`, f, IncTName>]: TFields[f];
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 [string, ...infer R extends Array<string>] ? CountKeys<R, [...acc, true]> : acc["length"];
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>;
@@ -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
- const tableIdentifier = tableObj.alias || tableObj.table;
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
- return new DbWith(client, [{ name, sql: query.getSQL().replace(/;$/, "") }]);
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 { LitToType as L, SQLExpr as S };
14
+ export { DISTINCT_BRAND as D, type LitToType as L, type SQLExpr as S, type SQLDistinct as a };
@@ -0,0 +1,8 @@
1
+ import { JsonValue } from '@prisma/client/runtime/client';
2
+
3
+ type JSONValue = JsonValue;
4
+ type JSONObject = {
5
+ [member: string]: JSONValue | undefined;
6
+ };
7
+
8
+ export type { JSONValue as J, JSONObject as a };
@@ -1,4 +1,4 @@
1
1
  'use strict';
2
2
 
3
- require('./chunk-54D2J5AR.cjs');
3
+ require('./chunk-GSIFF2TF.cjs');
4
4
 
package/dist/generator.js CHANGED
@@ -1 +1 @@
1
- import './chunk-47KZVQLD.js';
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.2",
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.3-9",
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.
@@ -1,5 +0,0 @@
1
- import { JsonValue } from '@prisma/client/runtime/client';
2
-
3
- type JSONValue = JsonValue;
4
-
5
- export type { JSONValue as J };