@shivaedev/sql 0.34.0 → 0.35.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 (111) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/README.md +2 -2
  3. package/dist/aggregateColumn.d.ts +3 -3
  4. package/dist/aggregateColumn.d.ts.map +1 -1
  5. package/dist/aggregateColumn.js +4 -2
  6. package/dist/aggregateColumn.js.map +1 -1
  7. package/dist/batchWrites.d.ts +4 -4
  8. package/dist/batchWrites.d.ts.map +1 -1
  9. package/dist/batchWrites.js +8 -5
  10. package/dist/batchWrites.js.map +1 -1
  11. package/dist/batchedDelete.js +1 -1
  12. package/dist/batchedDelete.js.map +1 -1
  13. package/dist/compositeRepository.d.ts +9 -5
  14. package/dist/compositeRepository.d.ts.map +1 -1
  15. package/dist/compositeRepository.js +12 -9
  16. package/dist/compositeRepository.js.map +1 -1
  17. package/dist/conditionalUpsert.d.ts +4 -4
  18. package/dist/conditionalUpsert.d.ts.map +1 -1
  19. package/dist/conditionalUpsert.js +7 -4
  20. package/dist/conditionalUpsert.js.map +1 -1
  21. package/dist/conflictWrites.d.ts +4 -4
  22. package/dist/conflictWrites.d.ts.map +1 -1
  23. package/dist/conflictWrites.js +11 -8
  24. package/dist/conflictWrites.js.map +1 -1
  25. package/dist/insertFromSelect.d.ts +3 -3
  26. package/dist/insertFromSelect.d.ts.map +1 -1
  27. package/dist/insertFromSelect.js +5 -3
  28. package/dist/insertFromSelect.js.map +1 -1
  29. package/dist/latestPerGroup.d.ts +2 -2
  30. package/dist/latestPerGroup.d.ts.map +1 -1
  31. package/dist/latestPerGroup.js +5 -4
  32. package/dist/latestPerGroup.js.map +1 -1
  33. package/dist/makeAggregate.d.ts +4 -3
  34. package/dist/makeAggregate.d.ts.map +1 -1
  35. package/dist/makeAggregate.js +35 -31
  36. package/dist/makeAggregate.js.map +1 -1
  37. package/dist/makeConflictClause.d.ts +3 -3
  38. package/dist/makeConflictClause.d.ts.map +1 -1
  39. package/dist/makeConflictClause.js +6 -4
  40. package/dist/makeConflictClause.js.map +1 -1
  41. package/dist/makeQueryClauses.d.ts +3 -3
  42. package/dist/makeQueryClauses.d.ts.map +1 -1
  43. package/dist/makeQueryClauses.js +5 -3
  44. package/dist/makeQueryClauses.js.map +1 -1
  45. package/dist/pinnedGroups.d.ts +3 -4
  46. package/dist/pinnedGroups.d.ts.map +1 -1
  47. package/dist/pinnedGroups.js +8 -10
  48. package/dist/pinnedGroups.js.map +1 -1
  49. package/dist/repository.d.ts +1 -1
  50. package/dist/repository.d.ts.map +1 -1
  51. package/dist/repository.js +7 -9
  52. package/dist/repository.js.map +1 -1
  53. package/dist/repositoryChanges.d.ts +2 -2
  54. package/dist/repositoryChanges.d.ts.map +1 -1
  55. package/dist/repositoryChanges.js +2 -1
  56. package/dist/repositoryChanges.js.map +1 -1
  57. package/dist/repositoryFilter.d.ts +4 -4
  58. package/dist/repositoryFilter.d.ts.map +1 -1
  59. package/dist/repositoryFilter.js +5 -3
  60. package/dist/repositoryFilter.js.map +1 -1
  61. package/dist/repositoryQueries.d.ts +3 -3
  62. package/dist/repositoryQueries.d.ts.map +1 -1
  63. package/dist/repositoryQueries.js +45 -41
  64. package/dist/repositoryQueries.js.map +1 -1
  65. package/dist/repositoryWrites.d.ts +9 -5
  66. package/dist/repositoryWrites.d.ts.map +1 -1
  67. package/dist/repositoryWrites.js +8 -7
  68. package/dist/repositoryWrites.js.map +1 -1
  69. package/dist/tupleIn.d.ts +1 -2
  70. package/dist/tupleIn.d.ts.map +1 -1
  71. package/dist/tupleIn.js +16 -17
  72. package/dist/tupleIn.js.map +1 -1
  73. package/dist/upsertResult.d.ts +2 -2
  74. package/dist/upsertResult.d.ts.map +1 -1
  75. package/dist/upsertResult.js +4 -2
  76. package/dist/upsertResult.js.map +1 -1
  77. package/dist/versionedRepository.d.ts +5 -5
  78. package/dist/versionedRepository.d.ts.map +1 -1
  79. package/dist/versionedRepository.js +5 -3
  80. package/dist/versionedRepository.js.map +1 -1
  81. package/dist/versionedStatements.d.ts +3 -3
  82. package/dist/versionedStatements.d.ts.map +1 -1
  83. package/dist/versionedStatements.js +12 -9
  84. package/dist/versionedStatements.js.map +1 -1
  85. package/package.json +7 -6
  86. package/src/aggregateColumn.ts +4 -3
  87. package/src/batchWrites.ts +10 -10
  88. package/src/batchedDelete.ts +1 -1
  89. package/src/compositeRepository.ts +15 -15
  90. package/src/conditionalUpsert.ts +7 -6
  91. package/src/conflictWrites.ts +14 -10
  92. package/src/insertFromSelect.ts +6 -6
  93. package/src/latestPerGroup.ts +5 -4
  94. package/src/makeAggregate.ts +48 -47
  95. package/src/makeConflictClause.ts +6 -6
  96. package/src/makeQueryClauses.ts +6 -6
  97. package/src/pinnedGroups.ts +10 -14
  98. package/src/repository.ts +8 -9
  99. package/src/repositoryChanges.ts +2 -6
  100. package/src/repositoryFilter.ts +5 -4
  101. package/src/repositoryQueries.ts +57 -55
  102. package/src/repositoryWrites.ts +9 -9
  103. package/src/tupleIn.ts +16 -18
  104. package/src/upsertResult.ts +4 -3
  105. package/src/versionedRepository.ts +6 -6
  106. package/src/versionedStatements.ts +15 -15
  107. package/dist/testing.d.ts +0 -27
  108. package/dist/testing.d.ts.map +0 -1
  109. package/dist/testing.js +0 -75
  110. package/dist/testing.js.map +0 -1
  111. package/src/testing.ts +0 -103
@@ -1 +0,0 @@
1
- {"version":3,"file":"testing.js","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"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"}
package/src/testing.ts DELETED
@@ -1,103 +0,0 @@
1
- import { Data, Effect, Schema } from "effect";
2
- import { SqlClient } from "effect/sql";
3
- import { type BucketKey, type ItemKey, invalidationKeys } from "@shivaedev/changes/keys.ts";
4
- import { ChangeDeclarations } from "#ChangeDeclarations.ts";
5
- import { ChangeObserver, transact } from "#transact.ts";
6
-
7
- export class UnannouncedWrites extends Data.TaggedError("UnannouncedWrites")<{ readonly tables: readonly string[] }> {}
8
-
9
- export interface ChangeCoverage {
10
- readonly covers: Readonly<Record<string, readonly (ItemKey | BucketKey)[]>>;
11
- }
12
-
13
- export const withChangeCoverage = Effect.fn("Changes.withChangeCoverage")(function* <A, E, R>(
14
- body: Effect.Effect<A, E, R>,
15
- options?: ChangeCoverage,
16
- ) {
17
- const observer = yield* ChangeObserver;
18
- const sql = yield* SqlClient.SqlClient;
19
- const named = new Set<unknown>();
20
- const declarations = new Map<string, { keys: Set<string>; rows: number }>();
21
- const outer = yield* ChangeDeclarations;
22
- const written = sql`select relid, relname, (n_tup_ins + n_tup_upd + n_tup_del)::int as writes from pg_stat_xact_user_tables`.pipe(
23
- Effect.flatMap(Schema.decodeUnknownEffect(Schema.Array(Schema.Struct({ relid: Schema.Int, relname: Schema.String, writes: Schema.Int })))),
24
- );
25
- const checked = Effect.gen(function* () {
26
- const before = new Map((yield* written).map((row) => [row.relid, row.writes]));
27
- const result = yield* body;
28
- const missing = (yield* written).filter((row) => {
29
- const count = row.writes - (before.get(row.relid) ?? 0);
30
- if (count <= 0) {
31
- return false;
32
- }
33
- const automatic = declarations.get(row.relname);
34
- const explicit = options?.covers[row.relname] ?? [];
35
- const expected = [...(automatic?.keys ?? []), ...invalidationKeys(explicit)];
36
- return (count > (automatic?.rows ?? 0) && explicit.length === 0) || expected.some((key) => !named.has(key));
37
- });
38
- if (missing.length > 0) {
39
- return yield* Effect.fail(new UnannouncedWrites({ tables: missing.map((row) => row.relname).sort() }));
40
- }
41
- return result;
42
- });
43
- return yield* checked.pipe(
44
- transact({ onSqlError: (error) => error }),
45
- Effect.provideService(ChangeDeclarations, {
46
- declare: (table, keys, rows) =>
47
- Effect.andThen(
48
- Effect.sync(() => {
49
- const entry = declarations.get(table) ?? { keys: new Set<string>(), rows: 0 };
50
- for (const key of keys) {
51
- entry.keys.add(key);
52
- }
53
- entry.rows += rows;
54
- declarations.set(table, entry);
55
- }),
56
- outer.declare(table, keys, rows),
57
- ),
58
- }),
59
- Effect.provideService(ChangeObserver, (event) => {
60
- if (event._tag === "Recorded") {
61
- for (const key of event.changes) {
62
- named.add(key);
63
- }
64
- }
65
- return observer(event);
66
- }),
67
- );
68
- });
69
-
70
- export class PublishedKeysMismatch extends Data.TaggedError("PublishedKeysMismatch")<{
71
- readonly expected: readonly unknown[];
72
- readonly actual: readonly unknown[];
73
- }> {
74
- override get message() {
75
- return `Expected published keys ${JSON.stringify(this.expected)}; actual published keys ${JSON.stringify(this.actual)}`;
76
- }
77
- }
78
-
79
- export function expectPublished(keys: readonly unknown[]): <A, E, R>(body: Effect.Effect<A, E, R>) => Effect.Effect<A, E | PublishedKeysMismatch, R>;
80
- export function expectPublished<A>(
81
- keys: (result: A) => readonly unknown[],
82
- ): <E, R>(body: Effect.Effect<A, E, R>) => Effect.Effect<A, E | PublishedKeysMismatch, R>;
83
- export function expectPublished<A>(keys: readonly unknown[] | ((result: A) => readonly unknown[])) {
84
- return Effect.fn("Changes.expectPublished")(function* <E, R>(body: Effect.Effect<A, E, R>) {
85
- const observer = yield* ChangeObserver;
86
- const actual = new Set<unknown>();
87
- const result = yield* body.pipe(
88
- Effect.provideService(ChangeObserver, (event) => {
89
- if (event._tag === "Published") {
90
- for (const key of event.changes) {
91
- actual.add(key);
92
- }
93
- }
94
- return observer(event);
95
- }),
96
- );
97
- const expected = new Set(typeof keys === "function" ? keys(result) : keys);
98
- if (actual.size !== expected.size || [...expected].some((key) => !actual.has(key))) {
99
- return yield* Effect.fail(new PublishedKeysMismatch({ actual: [...actual], expected: [...expected] }));
100
- }
101
- return result;
102
- });
103
- }