vsrepo 2.6.0 → 2.7.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 +24 -0
- package/README.md +3 -2
- package/README.pt-BR.md +3 -2
- package/dist/VSRepoAdapter.d.ts +12 -0
- package/dist/VSRepoAdapter.js.map +1 -1
- package/dist/VSRepository.d.ts +50 -4
- package/dist/VSRepository.js +57 -28
- package/dist/VSRepository.js.map +1 -1
- package/dist/decorators/query-method.decorator.d.ts +3 -24
- package/dist/decorators/query-method.decorator.js +4 -27
- package/dist/decorators/query-method.decorator.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/internal/resolvers/dynamic-methods.resolver.d.ts +6 -5
- package/dist/internal/resolvers/dynamic-methods.resolver.js +112 -98
- package/dist/internal/resolvers/dynamic-methods.resolver.js.map +1 -1
- package/dist/internal/utils/vs-placeholder-parser.util.d.ts +2 -0
- package/dist/internal/utils/vs-placeholder-parser.util.js +62 -0
- package/dist/internal/utils/vs-placeholder-parser.util.js.map +1 -0
- package/dist/internal/utils/vs-query-builder.util.d.ts +5 -1
- package/dist/internal/utils/vs-query-builder.util.js +1 -13
- package/dist/internal/utils/vs-query-builder.util.js.map +1 -1
- package/dist/internal/utils/vs-raw-query-builder.util.d.ts +238 -0
- package/dist/internal/utils/vs-raw-query-builder.util.js +433 -0
- package/dist/internal/utils/vs-raw-query-builder.util.js.map +1 -0
- package/dist/internal/utils/vs-sql.util.d.ts +100 -0
- package/dist/internal/utils/vs-sql.util.js +151 -0
- package/dist/internal/utils/vs-sql.util.js.map +1 -0
- package/dist/internal/validators/decorators.validator.js +1 -1
- package/dist/internal/validators/decorators.validator.js.map +1 -1
- package/dist/internal/validators/vsrepo.validator.js +1 -0
- package/dist/internal/validators/vsrepo.validator.js.map +1 -1
- package/dist/types/vsrepo/vs-raw-query-builder-cte-query.type.d.ts +8 -0
- package/dist/types/vsrepo/vs-raw-query-builder-cte-query.type.js +3 -0
- package/dist/types/vsrepo/vs-raw-query-builder-cte-query.type.js.map +1 -0
- package/dist/types/vsrepo/vs-raw-query-builder-target.type.d.ts +7 -0
- package/dist/types/vsrepo/vs-raw-query-builder-target.type.js +3 -0
- package/dist/types/vsrepo/vs-raw-query-builder-target.type.js.map +1 -0
- package/dist/types/vsrepo/vsrepo-options.type.d.ts +18 -0
- package/package.json +3 -2
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.VSSql = void 0;
|
|
4
|
+
const VSRepoError_1 = require("../../errors/VSRepoError");
|
|
5
|
+
const vsrepo_error_type_enum_1 = require("../enums/vsrepo-error-type.enum");
|
|
6
|
+
/**
|
|
7
|
+
* An ORM-agnostic, composable SQL fragment that compiles down to whatever placeholder
|
|
8
|
+
* syntax your adapter declares via `VSRepoAdapter.getPlaceholder()`, instead of assuming one.
|
|
9
|
+
*
|
|
10
|
+
* A `VSSql` never touches the database by itself — build one with `VSSql.sql`
|
|
11
|
+
* (or compose it from `VSSql.raw`/`VSSql.join`/`VSSql.empty`) and pass it
|
|
12
|
+
* straight to `VSRepository.query()`, which compiles and executes it.
|
|
13
|
+
*
|
|
14
|
+
* Values interpolated with `${...}` are always sent as parameters. Nesting
|
|
15
|
+
* another `VSSql` inline splices its text and parameters into the outer
|
|
16
|
+
* fragment, so fragments compose freely:
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* import { VSSql } from "vsrepo";
|
|
21
|
+
*
|
|
22
|
+
* const filter = onlyActive ? VSSql.sql`AND active = ${true}` : VSSql.empty;
|
|
23
|
+
*
|
|
24
|
+
* const fragment = VSSql.sql`
|
|
25
|
+
* SELECT * FROM ${VSSql.raw('"user"')}
|
|
26
|
+
* WHERE id IN (${VSSql.join(ids)})
|
|
27
|
+
* ${filter}
|
|
28
|
+
* `;
|
|
29
|
+
*
|
|
30
|
+
* const users = await userRepository.query<User[]>(fragment);
|
|
31
|
+
* ```
|
|
32
|
+
*
|
|
33
|
+
* @publicApi
|
|
34
|
+
*/
|
|
35
|
+
class VSSql {
|
|
36
|
+
chunks;
|
|
37
|
+
values;
|
|
38
|
+
constructor(chunks, values) {
|
|
39
|
+
this.chunks = chunks;
|
|
40
|
+
this.values = values;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Appends `value` to the in-progress `chunks`/`values` pair: a nested
|
|
44
|
+
* `VSSql` is spliced in (its own text merged into the current trailing
|
|
45
|
+
* chunk, its own parameters appended in order), anything else becomes a
|
|
46
|
+
* single new parameter. `chunks` always has `values.length + 1` entries.
|
|
47
|
+
*/
|
|
48
|
+
static appendValue(chunks, values, value) {
|
|
49
|
+
if (value instanceof VSSql) {
|
|
50
|
+
chunks[chunks.length - 1] += value.chunks[0] ?? "";
|
|
51
|
+
for (let i = 0; i < value.values.length; i++) {
|
|
52
|
+
values.push(value.values[i]);
|
|
53
|
+
chunks.push(value.chunks[i + 1] ?? "");
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
values.push(value);
|
|
58
|
+
chunks.push("");
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Compiles this fragment into a single SQL string and its positional
|
|
63
|
+
* argument array, rendering each parameter's placeholder with
|
|
64
|
+
* `getPlaceholder(index)` — `index` is the 0-based position of the
|
|
65
|
+
* parameter in the returned `args` array. Used internally by
|
|
66
|
+
* `VSRepository.query()`; only call this directly if you need the raw
|
|
67
|
+
* `{ text, args }` pair for something else (e.g. logging).
|
|
68
|
+
*/
|
|
69
|
+
compile(getPlaceholder) {
|
|
70
|
+
let text = this.chunks[0] ?? "";
|
|
71
|
+
for (let i = 0; i < this.values.length; i++) {
|
|
72
|
+
text += getPlaceholder(i) + (this.chunks[i + 1] ?? "");
|
|
73
|
+
}
|
|
74
|
+
return { text, args: [...this.values] };
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Builds a `VSSql` fragment from a tagged template literal. Every
|
|
78
|
+
* interpolated `${value}` becomes a parameter, except another `VSSql`
|
|
79
|
+
* (e.g. from `raw()`, `join()`, or a nested `sql` fragment), which is
|
|
80
|
+
* spliced in as text + its own parameters instead.
|
|
81
|
+
*
|
|
82
|
+
* @example
|
|
83
|
+
* ```typescript
|
|
84
|
+
* const fragment = VSSql.sql`SELECT * FROM "user" WHERE email = ${email}`;
|
|
85
|
+
* const users = await userRepository.query<User[]>(fragment);
|
|
86
|
+
* ```
|
|
87
|
+
*/
|
|
88
|
+
static sql(strings, ...values) {
|
|
89
|
+
const chunks = [strings[0] ?? ""];
|
|
90
|
+
const outValues = [];
|
|
91
|
+
for (let i = 0; i < values.length; i++) {
|
|
92
|
+
const value = values[i];
|
|
93
|
+
VSSql.appendValue(chunks, outValues, value);
|
|
94
|
+
chunks[chunks.length - 1] += strings[i + 1] ?? "";
|
|
95
|
+
}
|
|
96
|
+
return new VSSql(chunks, outValues);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Inserts `text` into the query as-is, unparameterized — for identifiers
|
|
100
|
+
* (table/column names) or SQL keywords that can't be bound as a
|
|
101
|
+
* parameter. `text` is never escaped or validated: only pass trusted,
|
|
102
|
+
* non-user-controlled input.
|
|
103
|
+
*
|
|
104
|
+
* @example
|
|
105
|
+
* ```typescript
|
|
106
|
+
* const table = VSSql.raw('"user"');
|
|
107
|
+
* const fragment = VSSql.sql`SELECT * FROM ${table} WHERE active = ${true}`;
|
|
108
|
+
* ```
|
|
109
|
+
*/
|
|
110
|
+
static raw(text) {
|
|
111
|
+
if (typeof text !== "string") {
|
|
112
|
+
throw new VSRepoError_1.VSRepoError("'VSSql.raw' expects 'text' to be a string", vsrepo_error_type_enum_1.VSRepoErrorType.BASE);
|
|
113
|
+
}
|
|
114
|
+
return new VSSql([text], []);
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* An empty fragment — contributes no text and no parameters. Useful as
|
|
118
|
+
* the "nothing" branch when conditionally composing a fragment.
|
|
119
|
+
* @example
|
|
120
|
+
* ```typescript
|
|
121
|
+
* condition ? VSSql.sql`AND active = true` : VSSql.empty
|
|
122
|
+
* ```
|
|
123
|
+
*/
|
|
124
|
+
static empty = new VSSql([""], []);
|
|
125
|
+
/**
|
|
126
|
+
* Joins `values` into a single fragment, separated by `separator` and
|
|
127
|
+
* wrapped by `prefix`/`suffix`. Each element is either a parameter value
|
|
128
|
+
* (auto-wrapped, like a normal `${...}` interpolation) or a nested `VSSql`
|
|
129
|
+
* fragment (spliced in). Most commonly used to build an `IN (...)` list.
|
|
130
|
+
*
|
|
131
|
+
* @example
|
|
132
|
+
* ```typescript
|
|
133
|
+
* const fragment = VSSql.sql`WHERE id IN (${VSSql.join(ids)})`;
|
|
134
|
+
* ```
|
|
135
|
+
*/
|
|
136
|
+
static join(values, separator = ", ", prefix = "", suffix = "") {
|
|
137
|
+
if (!Array.isArray(values) || values.length === 0) {
|
|
138
|
+
throw new VSRepoError_1.VSRepoError("'VSSql.join' expects 'values' to be a non-empty array", vsrepo_error_type_enum_1.VSRepoErrorType.BASE);
|
|
139
|
+
}
|
|
140
|
+
const chunks = [prefix];
|
|
141
|
+
const outValues = [];
|
|
142
|
+
for (let i = 0; i < values.length; i++) {
|
|
143
|
+
const value = values[i];
|
|
144
|
+
VSSql.appendValue(chunks, outValues, value);
|
|
145
|
+
chunks[chunks.length - 1] += i === values.length - 1 ? suffix : separator;
|
|
146
|
+
}
|
|
147
|
+
return new VSSql(chunks, outValues);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
exports.VSSql = VSSql;
|
|
151
|
+
//# sourceMappingURL=vs-sql.util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vs-sql.util.js","sourceRoot":"","sources":["../../../src/internal/utils/vs-sql.util.ts"],"names":[],"mappings":"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"}
|
|
@@ -61,7 +61,7 @@ class DecoratorsValidator {
|
|
|
61
61
|
spreadArgs: v.optional(v.boolean()),
|
|
62
62
|
});
|
|
63
63
|
static validateQueryMethodOptions(options) {
|
|
64
|
-
const parsed = v.safeParse(this.queryMethodOptionsSchema, options);
|
|
64
|
+
const parsed = v.safeParse(this.queryMethodOptionsSchema, options ?? {});
|
|
65
65
|
if (!parsed.success) {
|
|
66
66
|
const firstIssue = parsed.issues[0];
|
|
67
67
|
const path = firstIssue.path?.length ? firstIssue.path.map(p => String(p.key)).join(".") : "options";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decorators.validator.js","sourceRoot":"","sources":["../../../src/internal/validators/decorators.validator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA6B;AAE7B,0DAAuD;AACvD,gFAAuD;AAEvD,4EAAkE;AAElE,MAAa,mBAAmB;IACpB,MAAM,CAAU,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;QAC1D,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC/B,cAAc,EAAE,CAAC,CAAC,QAAQ,CAAC,yBAAc,CAAC;KAC7C,CAAC,CAAC;IAEH,MAAM,CAAC,4BAA4B,CAAC,OAAgB;QAChD,MAAM,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,0BAA0B,EAAE,OAAO,CAAC,CAAC;QAErE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACpC,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACrG,MAAM,IAAI,yBAAW,CAAC,GAAG,IAAI,KAAK,UAAU,CAAC,OAAO,EAAE,EAAE,wCAAe,CAAC,SAAS,CAAC,CAAC;QACvF,CAAC;QAED,OAAO,MAAM,CAAC,MAAM,CAAC;IACzB,CAAC;IAEO,MAAM,CAAC,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;QAC/C,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC;QACzC,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QACrC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;KACtC,CAAC,CAAC;IAEH,MAAM,CAAC,0BAA0B,CAAC,OAAgB;QAC9C,MAAM,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,wBAAwB,EAAE,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"decorators.validator.js","sourceRoot":"","sources":["../../../src/internal/validators/decorators.validator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA6B;AAE7B,0DAAuD;AACvD,gFAAuD;AAEvD,4EAAkE;AAElE,MAAa,mBAAmB;IACpB,MAAM,CAAU,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;QAC1D,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC/B,cAAc,EAAE,CAAC,CAAC,QAAQ,CAAC,yBAAc,CAAC;KAC7C,CAAC,CAAC;IAEH,MAAM,CAAC,4BAA4B,CAAC,OAAgB;QAChD,MAAM,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,0BAA0B,EAAE,OAAO,CAAC,CAAC;QAErE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACpC,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACrG,MAAM,IAAI,yBAAW,CAAC,GAAG,IAAI,KAAK,UAAU,CAAC,OAAO,EAAE,EAAE,wCAAe,CAAC,SAAS,CAAC,CAAC;QACvF,CAAC;QAED,OAAO,MAAM,CAAC,MAAM,CAAC;IACzB,CAAC;IAEO,MAAM,CAAC,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;QAC/C,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC;QACzC,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QACrC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;KACtC,CAAC,CAAC;IAEH,MAAM,CAAC,0BAA0B,CAAC,OAAgB;QAC9C,MAAM,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,wBAAwB,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;QAEzE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACpC,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACrG,MAAM,IAAI,yBAAW,CAAC,GAAG,IAAI,KAAK,UAAU,CAAC,OAAO,EAAE,EAAE,wCAAe,CAAC,SAAS,CAAC,CAAC;QACvF,CAAC;QAED,OAAO,MAAM,CAAC,MAAM,CAAC;IACzB,CAAC;;AAlCL,kDAmCC"}
|
|
@@ -69,6 +69,7 @@ class VSRepoValidator {
|
|
|
69
69
|
logSlowThresholdMs: v.optional(v.union([v.pipe(v.number(), v.gtValue(0)), v.boolean()])),
|
|
70
70
|
defaultOrdering: v.optional(ordering_schema_1.default),
|
|
71
71
|
lazyDynamicMethods: v.optional(v.boolean()),
|
|
72
|
+
vsPlaceholders: v.optional(v.boolean()),
|
|
72
73
|
});
|
|
73
74
|
validateConstructorOptions(options) {
|
|
74
75
|
const parsed = v.safeParse(this.constructorOptionsSchema, options);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vsrepo.validator.js","sourceRoot":"","sources":["../../../src/internal/validators/vsrepo.validator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA6B;AAE7B,kEAAwD;AACxD,0DAAuD;AACvD,gFAAuD;AAGvD,4EAAkE;AAElE,gGAAsF;AAKtF,oFAA2D;AAC3D,0EAAiD;AAKjD,4EAAmD;AACnD,kFAAyD;AAEzD,MAAa,eAAe;IACxB,uFAAuF;IACvF,yGAAyG;IACjG,MAAM,CAAY;IAE1B,SAAS,CAAC,MAAgB;QACtB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAEO,cAAc,CAAC,KAAiC,EAAE,IAAqB,EAAE,YAAY,GAAG,SAAS;QACrG,MAAM,IAAI,GAAG,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;QAC/F,MAAM,OAAO,GAAG,GAAG,IAAI,KAAK,KAAK,EAAE,OAAO,IAAI,mBAAmB,EAAE,CAAC;QAEpE,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,sBAAsB,IAAI,MAAM,OAAO,EAAE,CAAC,CAAC;QAEjE,MAAM,IAAI,yBAAW,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC;IAEgB,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;QACjD,sEAAsE;QACtE,OAAO,EAAE,CAAC,CAAC,GAAG,EAAE;QAChB,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC9B,aAAa,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACrC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,8BAAU,CAAC,CAAC;QACxC,kBAAkB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACxF,eAAe,EAAE,CAAC,CAAC,QAAQ,CAAC,yBAAc,CAAC;QAC3C,kBAAkB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"vsrepo.validator.js","sourceRoot":"","sources":["../../../src/internal/validators/vsrepo.validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { VSRawQueryBuilder } from "../../internal/utils/vs-raw-query-builder.util";
|
|
2
|
+
import { VSSql } from "../../internal/utils/vs-sql.util";
|
|
3
|
+
/** Anything that can be used as a CTE's body in {@link VSRawQueryBuilder.with}/
|
|
4
|
+
* {@link VSRawQueryBuilder.withRecursive}.
|
|
5
|
+
*
|
|
6
|
+
* @publicApi
|
|
7
|
+
*/
|
|
8
|
+
export type VSRawQueryBuilderCteQuery = VSSql | VSRawQueryBuilder | ((cte: VSRawQueryBuilder) => VSRawQueryBuilder | VSSql);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vs-raw-query-builder-cte-query.type.js","sourceRoot":"","sources":["../../../src/types/vsrepo/vs-raw-query-builder-cte-query.type.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { VSRawQueryBuilder } from "../../internal/utils/vs-raw-query-builder.util";
|
|
2
|
+
import { VSSql } from "../../internal/utils/vs-sql.util";
|
|
3
|
+
/** Anything that can be used where a table/column reference is expected.
|
|
4
|
+
*
|
|
5
|
+
* @publicApi
|
|
6
|
+
*/
|
|
7
|
+
export type VSRawQueryBuilderTarget = string | VSSql | VSRawQueryBuilder | ((subquery: VSRawQueryBuilder) => VSRawQueryBuilder | VSSql);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vs-raw-query-builder-target.type.js","sourceRoot":"","sources":["../../../src/types/vsrepo/vs-raw-query-builder-target.type.ts"],"names":[],"mappings":""}
|
|
@@ -43,4 +43,22 @@ export type VSRepoOptions<T, K> = {
|
|
|
43
43
|
* @default false
|
|
44
44
|
*/
|
|
45
45
|
lazyDynamicMethods?: boolean;
|
|
46
|
+
/**
|
|
47
|
+
* When `true`, raw SQL strings passed to `VSRepository.query()` and
|
|
48
|
+
* `@QueryMethod` stop using your database's native placeholder syntax
|
|
49
|
+
* and instead use VSRepository's own agnostic, positional placeholders —
|
|
50
|
+
* `?1`, `?2`, ... (1-based, Spring Data JPA style). The same index may be
|
|
51
|
+
* repeated (`?1 ... ?1`) to reuse the same argument more than once.
|
|
52
|
+
*
|
|
53
|
+
* Compiled via `adapter.getPlaceholder()`, so the adapter must implement
|
|
54
|
+
* it — the constructor throws a `VSRepoError` if it's enabled and the
|
|
55
|
+
* adapter doesn't.
|
|
56
|
+
*
|
|
57
|
+
* This is independent of passing a `VSSql` fragment directly to
|
|
58
|
+
* `VSRepository.query()`, which always requires `getPlaceholder()`
|
|
59
|
+
* regardless of this option.
|
|
60
|
+
*
|
|
61
|
+
* @default false
|
|
62
|
+
*/
|
|
63
|
+
vsPlaceholders?: boolean;
|
|
46
64
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vsrepo",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.7.0",
|
|
4
4
|
"description": "ORM-agnostic repository pattern library",
|
|
5
5
|
"homepage": "https://github.com/jaobrabo123/VSRepository#readme",
|
|
6
6
|
"repository": {
|
|
@@ -41,7 +41,8 @@
|
|
|
41
41
|
"test": "bun run test:typing && bun run test:implementation",
|
|
42
42
|
"lint": "oxlint --type-aware src/ test/",
|
|
43
43
|
"format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
|
|
44
|
-
"format:check": "prettier --check \"src/**/*.ts\" \"test/**/*.ts\""
|
|
44
|
+
"format:check": "prettier --check \"src/**/*.ts\" \"test/**/*.ts\"",
|
|
45
|
+
"full-validation": "bun run typecheck && bun run lint && bun run format:check && bun run test"
|
|
45
46
|
},
|
|
46
47
|
"keywords": [
|
|
47
48
|
"prisma",
|