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.
Files changed (41) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/README.md +3 -2
  3. package/README.pt-BR.md +3 -2
  4. package/dist/VSRepoAdapter.d.ts +12 -0
  5. package/dist/VSRepoAdapter.js.map +1 -1
  6. package/dist/VSRepository.d.ts +50 -4
  7. package/dist/VSRepository.js +57 -28
  8. package/dist/VSRepository.js.map +1 -1
  9. package/dist/decorators/query-method.decorator.d.ts +3 -24
  10. package/dist/decorators/query-method.decorator.js +4 -27
  11. package/dist/decorators/query-method.decorator.js.map +1 -1
  12. package/dist/index.d.ts +4 -0
  13. package/dist/index.js +5 -1
  14. package/dist/index.js.map +1 -1
  15. package/dist/internal/resolvers/dynamic-methods.resolver.d.ts +6 -5
  16. package/dist/internal/resolvers/dynamic-methods.resolver.js +112 -98
  17. package/dist/internal/resolvers/dynamic-methods.resolver.js.map +1 -1
  18. package/dist/internal/utils/vs-placeholder-parser.util.d.ts +2 -0
  19. package/dist/internal/utils/vs-placeholder-parser.util.js +62 -0
  20. package/dist/internal/utils/vs-placeholder-parser.util.js.map +1 -0
  21. package/dist/internal/utils/vs-query-builder.util.d.ts +5 -1
  22. package/dist/internal/utils/vs-query-builder.util.js +1 -13
  23. package/dist/internal/utils/vs-query-builder.util.js.map +1 -1
  24. package/dist/internal/utils/vs-raw-query-builder.util.d.ts +238 -0
  25. package/dist/internal/utils/vs-raw-query-builder.util.js +433 -0
  26. package/dist/internal/utils/vs-raw-query-builder.util.js.map +1 -0
  27. package/dist/internal/utils/vs-sql.util.d.ts +100 -0
  28. package/dist/internal/utils/vs-sql.util.js +151 -0
  29. package/dist/internal/utils/vs-sql.util.js.map +1 -0
  30. package/dist/internal/validators/decorators.validator.js +1 -1
  31. package/dist/internal/validators/decorators.validator.js.map +1 -1
  32. package/dist/internal/validators/vsrepo.validator.js +1 -0
  33. package/dist/internal/validators/vsrepo.validator.js.map +1 -1
  34. package/dist/types/vsrepo/vs-raw-query-builder-cte-query.type.d.ts +8 -0
  35. package/dist/types/vsrepo/vs-raw-query-builder-cte-query.type.js +3 -0
  36. package/dist/types/vsrepo/vs-raw-query-builder-cte-query.type.js.map +1 -0
  37. package/dist/types/vsrepo/vs-raw-query-builder-target.type.d.ts +7 -0
  38. package/dist/types/vsrepo/vs-raw-query-builder-target.type.js +3 -0
  39. package/dist/types/vsrepo/vs-raw-query-builder-target.type.js.map +1 -0
  40. package/dist/types/vsrepo/vsrepo-options.type.d.ts +18 -0
  41. 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;QAEnE,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"}
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":"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"}
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,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=vs-raw-query-builder-cte-query.type.js.map
@@ -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,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=vs-raw-query-builder-target.type.js.map
@@ -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.6.0",
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",