@supabase/pg-delta 1.0.0-alpha.10 → 1.0.0-alpha.11

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 (123) hide show
  1. package/dist/cli/commands/declarative-export.js +12 -17
  2. package/dist/cli/commands/plan.js +10 -13
  3. package/dist/cli/commands/sync.js +8 -12
  4. package/dist/cli/utils/integrations.d.ts +30 -6
  5. package/dist/cli/utils/integrations.js +98 -6
  6. package/dist/core/change-utils.d.ts +9 -0
  7. package/dist/core/change-utils.js +71 -0
  8. package/dist/core/change.types.d.ts +22 -0
  9. package/dist/core/change.types.js +37 -1
  10. package/dist/core/depend.js +25 -0
  11. package/dist/core/export/file-mapper.d.ts +2 -2
  12. package/dist/core/integrations/filter/dsl.d.ts +78 -74
  13. package/dist/core/integrations/filter/dsl.js +127 -79
  14. package/dist/core/integrations/filter/flatten.d.ts +51 -0
  15. package/dist/core/integrations/filter/flatten.js +116 -0
  16. package/dist/core/integrations/integration-dsl.d.ts +17 -1
  17. package/dist/core/integrations/merge.d.ts +20 -0
  18. package/dist/core/integrations/merge.js +60 -0
  19. package/dist/core/integrations/serialize/dsl.d.ts +7 -4
  20. package/dist/core/integrations/serialize/dsl.js +2 -2
  21. package/dist/core/integrations/supabase.js +23 -8
  22. package/dist/core/objects/aggregate/changes/aggregate.types.d.ts +1 -0
  23. package/dist/core/objects/base.change.d.ts +10 -0
  24. package/dist/core/objects/base.change.js +10 -0
  25. package/dist/core/objects/base.model.d.ts +4 -1
  26. package/dist/core/objects/base.model.js +5 -2
  27. package/dist/core/objects/collation/changes/collation.types.d.ts +1 -0
  28. package/dist/core/objects/domain/changes/domain.create.d.ts +1 -1
  29. package/dist/core/objects/domain/changes/domain.create.js +7 -1
  30. package/dist/core/objects/domain/changes/domain.types.d.ts +1 -0
  31. package/dist/core/objects/event-trigger/changes/event-trigger.types.d.ts +1 -0
  32. package/dist/core/objects/extension/changes/extension.types.d.ts +1 -0
  33. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.types.d.ts +1 -0
  34. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper.types.d.ts +1 -0
  35. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.types.d.ts +1 -0
  36. package/dist/core/objects/foreign-data-wrapper/server/changes/server.types.d.ts +1 -0
  37. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.types.d.ts +1 -0
  38. package/dist/core/objects/index/changes/index.types.d.ts +1 -0
  39. package/dist/core/objects/language/changes/language.types.d.ts +1 -0
  40. package/dist/core/objects/materialized-view/changes/materialized-view.types.d.ts +1 -0
  41. package/dist/core/objects/procedure/changes/procedure.types.d.ts +1 -0
  42. package/dist/core/objects/publication/changes/publication.types.d.ts +1 -0
  43. package/dist/core/objects/rls-policy/changes/rls-policy.types.d.ts +1 -0
  44. package/dist/core/objects/role/changes/role.types.d.ts +1 -0
  45. package/dist/core/objects/rule/changes/rule.types.d.ts +1 -0
  46. package/dist/core/objects/schema/changes/schema.types.d.ts +1 -0
  47. package/dist/core/objects/sequence/changes/sequence.types.d.ts +1 -0
  48. package/dist/core/objects/subscription/changes/subscription.types.d.ts +1 -0
  49. package/dist/core/objects/table/changes/table.types.d.ts +1 -0
  50. package/dist/core/objects/trigger/changes/trigger.types.d.ts +1 -0
  51. package/dist/core/objects/type/composite-type/changes/composite-type.types.d.ts +1 -0
  52. package/dist/core/objects/type/enum/changes/enum.types.d.ts +1 -0
  53. package/dist/core/objects/type/range/changes/range.types.d.ts +1 -0
  54. package/dist/core/objects/type/type.types.d.ts +1 -0
  55. package/dist/core/objects/view/changes/view.types.d.ts +1 -0
  56. package/dist/core/objects/view/view.diff.js +24 -13
  57. package/dist/core/postgres-config.d.ts +2 -2
  58. package/dist/core/sort/custom-constraints.js +1 -1
  59. package/dist/core/sort/logical-sort.js +3 -24
  60. package/package.json +5 -1
  61. package/src/cli/commands/declarative-export.ts +19 -27
  62. package/src/cli/commands/plan.ts +14 -20
  63. package/src/cli/commands/sync.ts +8 -15
  64. package/src/cli/utils/integrations.test.ts +210 -3
  65. package/src/cli/utils/integrations.ts +134 -6
  66. package/src/core/catalog.snapshot.test.ts +11 -2
  67. package/src/core/change-utils.test.ts +61 -0
  68. package/src/core/change-utils.ts +73 -0
  69. package/src/core/change.types.ts +50 -0
  70. package/src/core/depend.ts +25 -0
  71. package/src/core/export/file-mapper.ts +7 -2
  72. package/src/core/integrations/filter/dsl.test.ts +299 -60
  73. package/src/core/integrations/filter/dsl.ts +208 -169
  74. package/src/core/integrations/filter/flatten.test.ts +282 -0
  75. package/src/core/integrations/filter/flatten.ts +150 -0
  76. package/src/core/integrations/integration-dsl.ts +17 -1
  77. package/src/core/integrations/merge.test.ts +128 -0
  78. package/src/core/integrations/merge.ts +72 -0
  79. package/src/core/integrations/serialize/dsl.test.ts +6 -6
  80. package/src/core/integrations/serialize/dsl.ts +7 -4
  81. package/src/core/integrations/supabase.ts +23 -8
  82. package/src/core/objects/aggregate/changes/aggregate.types.ts +1 -0
  83. package/src/core/objects/base.change.ts +10 -0
  84. package/src/core/objects/base.model.test.ts +43 -0
  85. package/src/core/objects/base.model.ts +5 -2
  86. package/src/core/objects/collation/changes/collation.types.ts +1 -0
  87. package/src/core/objects/domain/changes/domain.create.ts +17 -1
  88. package/src/core/objects/domain/changes/domain.types.ts +1 -0
  89. package/src/core/objects/event-trigger/changes/event-trigger.types.ts +1 -0
  90. package/src/core/objects/extension/changes/extension.types.ts +1 -0
  91. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.types.ts +1 -0
  92. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper.types.ts +1 -0
  93. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.types.ts +1 -0
  94. package/src/core/objects/foreign-data-wrapper/server/changes/server.types.ts +1 -0
  95. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.types.ts +1 -0
  96. package/src/core/objects/index/changes/index.types.ts +1 -0
  97. package/src/core/objects/language/changes/language.types.ts +1 -0
  98. package/src/core/objects/materialized-view/changes/materialized-view.types.ts +1 -0
  99. package/src/core/objects/procedure/changes/procedure.types.ts +1 -0
  100. package/src/core/objects/publication/changes/publication.types.ts +1 -0
  101. package/src/core/objects/rls-policy/changes/rls-policy.types.ts +1 -0
  102. package/src/core/objects/role/changes/role.types.ts +1 -0
  103. package/src/core/objects/rule/changes/rule.types.ts +1 -0
  104. package/src/core/objects/schema/changes/schema.types.ts +1 -0
  105. package/src/core/objects/sequence/changes/sequence.types.ts +1 -0
  106. package/src/core/objects/subscription/changes/subscription.types.ts +1 -0
  107. package/src/core/objects/table/changes/table.types.ts +1 -0
  108. package/src/core/objects/trigger/changes/trigger.types.ts +1 -0
  109. package/src/core/objects/type/composite-type/changes/composite-type.types.ts +1 -0
  110. package/src/core/objects/type/enum/changes/enum.types.ts +1 -0
  111. package/src/core/objects/type/range/changes/range.types.ts +1 -0
  112. package/src/core/objects/type/type.types.ts +1 -0
  113. package/src/core/objects/view/changes/view.types.ts +1 -0
  114. package/src/core/objects/view/view.diff.test.ts +96 -0
  115. package/src/core/objects/view/view.diff.ts +30 -15
  116. package/src/core/postgres-config.ts +2 -2
  117. package/src/core/sort/custom-constraints.ts +1 -1
  118. package/src/core/sort/logical-sort.ts +3 -27
  119. package/src/typedoc.ts +248 -0
  120. package/dist/core/integrations/filter/extractors.d.ts +0 -12
  121. package/dist/core/integrations/filter/extractors.js +0 -178
  122. package/src/core/integrations/filter/extractors.test.ts +0 -244
  123. package/src/core/integrations/filter/extractors.ts +0 -187
@@ -1,4 +1,5 @@
1
1
  import { diffObjects } from "../base.diff.ts";
2
+ import { normalizeColumns } from "../base.model.ts";
2
3
  import {
3
4
  diffPrivileges,
4
5
  emitColumnPrivilegeChanges,
@@ -43,19 +44,17 @@ export function diffViews(
43
44
  const { created, dropped, altered } = diffObjects(main, branch);
44
45
 
45
46
  const changes: ViewChange[] = [];
46
-
47
- for (const viewId of created) {
48
- const v = branch[viewId];
49
- changes.push(new CreateView({ view: v }));
47
+ const appendCreateViewChanges = (view: View) => {
48
+ changes.push(new CreateView({ view }));
50
49
 
51
50
  // OWNER: If the view should be owned by someone other than the current user,
52
51
  // emit ALTER VIEW ... OWNER TO after creation
53
- if (v.owner !== ctx.currentUser) {
54
- changes.push(new AlterViewChangeOwner({ view: v, owner: v.owner }));
52
+ if (view.owner !== ctx.currentUser) {
53
+ changes.push(new AlterViewChangeOwner({ view, owner: view.owner }));
55
54
  }
56
55
 
57
- if (v.comment !== null) {
58
- changes.push(new CreateCommentOnView({ view: v }));
56
+ if (view.comment !== null) {
57
+ changes.push(new CreateCommentOnView({ view }));
59
58
  }
60
59
 
61
60
  // PRIVILEGES: For created objects, compare against default privileges state
@@ -66,26 +65,26 @@ export function diffViews(
66
65
  const effectiveDefaults = ctx.defaultPrivilegeState.getEffectiveDefaults(
67
66
  ctx.currentUser,
68
67
  "view",
69
- v.schema ?? "",
68
+ view.schema ?? "",
70
69
  );
71
70
  const creatorFilteredDefaults =
72
- v.owner !== ctx.currentUser
71
+ view.owner !== ctx.currentUser
73
72
  ? effectiveDefaults.filter((p) => p.grantee !== ctx.currentUser)
74
73
  : effectiveDefaults;
75
- const desiredPrivileges = v.privileges;
74
+ const desiredPrivileges = view.privileges;
76
75
  // Filter out owner privileges - owner always has ALL privileges implicitly
77
76
  // and shouldn't be compared. Use the view owner as the reference.
78
77
  const privilegeResults = diffPrivileges(
79
78
  creatorFilteredDefaults,
80
79
  desiredPrivileges,
81
- v.owner,
80
+ view.owner,
82
81
  );
83
82
 
84
83
  changes.push(
85
84
  ...(emitColumnPrivilegeChanges(
86
85
  privilegeResults,
87
- v,
88
- v,
86
+ view,
87
+ view,
89
88
  "view",
90
89
  {
91
90
  Grant: GrantViewPrivileges,
@@ -96,6 +95,10 @@ export function diffViews(
96
95
  ctx.version,
97
96
  ) as ViewChange[]),
98
97
  );
98
+ };
99
+
100
+ for (const viewId of created) {
101
+ appendCreateViewChanges(branch[viewId]);
99
102
  }
100
103
 
101
104
  for (const viewId of dropped) {
@@ -128,7 +131,19 @@ export function diffViews(
128
131
  { options: deepEqual },
129
132
  );
130
133
 
131
- if (nonAlterablePropsChanged) {
134
+ // Normalize columns (strip position, sort by name) to match stableSnapshot().
135
+ // Position-only differences are safe to ignore here because column order in a
136
+ // view is determined by its definition, which is already checked above via
137
+ // NON_ALTERABLE_FIELDS - a position change always implies a definition change.
138
+ if (
139
+ !deepEqual(
140
+ normalizeColumns(mainView.columns),
141
+ normalizeColumns(branchView.columns),
142
+ )
143
+ ) {
144
+ changes.push(new DropView({ view: mainView }));
145
+ appendCreateViewChanges(branchView);
146
+ } else if (nonAlterablePropsChanged) {
132
147
  // Replace the entire view using CREATE OR REPLACE to avoid drop when possible
133
148
  changes.push(new CreateView({ view: branchView, orReplace: true }));
134
149
  } else {
@@ -2,7 +2,7 @@
2
2
  * PostgreSQL connection configuration with custom type handlers.
3
3
  */
4
4
 
5
- import type { PoolClient, PoolConfig } from "pg";
5
+ import type { ClientBase, PoolClient, PoolConfig } from "pg";
6
6
  import { escapeIdentifier, Pool, types } from "pg";
7
7
  import { parseSslConfig } from "./plan/ssl-config.ts";
8
8
 
@@ -115,7 +115,7 @@ const DEFAULT_CONNECT_TIMEOUT_MS =
115
115
  */
116
116
  interface CreatePoolOptions extends Partial<PoolConfig> {
117
117
  /** Called when a new client connects to the pool */
118
- onConnect?: (client: PoolClient) => void | Promise<void>;
118
+ onConnect?: (client: ClientBase) => void | Promise<void>;
119
119
  /** Called when an idle client emits an error */
120
120
  onError?: (err: Error, client: PoolClient) => void;
121
121
  /** Called when a client is acquired from the pool */
@@ -1,5 +1,5 @@
1
1
  import type { Change } from "../change.types.ts";
2
- import { getSchema } from "../integrations/filter/extractors.ts";
2
+ import { getSchema } from "../change-utils.ts";
3
3
  import {
4
4
  GrantRoleDefaultPrivileges,
5
5
  RevokeRoleDefaultPrivileges,
@@ -10,7 +10,7 @@
10
10
  */
11
11
 
12
12
  import type { Change } from "../change.types.ts";
13
- import { getSchema } from "../integrations/filter/extractors.ts";
13
+ import { getSchema } from "../change-utils.ts";
14
14
  import { getExecutionPhase, isMetadataStableId, type Phase } from "./utils.ts";
15
15
 
16
16
  /**
@@ -308,30 +308,6 @@ function getParentStableId(change: Change): string | null {
308
308
  return requires.length > 0 ? requires[0] : null;
309
309
  }
310
310
 
311
- /**
312
- * Extract schema name from a change.
313
- * Returns the schema name if present, or null for non-schema objects.
314
- *
315
- * Uses the getSchema helper which directly accesses schema properties from change objects.
316
- * For default_privilege changes, accesses the inSchema property directly.
317
- * For event_trigger changes, groups by their function's schema.
318
- */
319
- function extractSchemaFromChange(change: Change): string | null {
320
- // Handle default_privilege changes specially (they have inSchema property)
321
- if (change.scope === "default_privilege") {
322
- // TypeScript doesn't know about inSchema, but we know it exists for default_privilege changes
323
- return (change as { inSchema: string | null }).inSchema ?? null;
324
- }
325
-
326
- // Handle event_trigger changes specially - group by their function's schema
327
- if (change.objectType === "event_trigger") {
328
- return change.eventTrigger.function_schema;
329
- }
330
-
331
- // Use the getSchema helper for all other changes
332
- return getSchema(change);
333
- }
334
-
335
311
  /**
336
312
  * Get the effective object type for sorting purposes.
337
313
  * For sub-entities, returns the parent's object type (table/view/materialized_view).
@@ -438,8 +414,8 @@ function sortPhase(changes: Change[], phase: Phase): Change[] {
438
414
  const changeB = b.change;
439
415
 
440
416
  // 1. Compare schemas (group objects by schema)
441
- const schemaA = extractSchemaFromChange(changeA);
442
- const schemaB = extractSchemaFromChange(changeB);
417
+ const schemaA = getSchema(changeA);
418
+ const schemaB = getSchema(changeB);
443
419
 
444
420
  // Non-schema objects (roles, languages, extensions, etc.) sort first
445
421
  // Use a special prefix to ensure they come before schema objects
package/src/typedoc.ts ADDED
@@ -0,0 +1,248 @@
1
+ /**
2
+ * @supabase/pg-delta — API Reference
3
+ *
4
+ * This module is a dedicated documentation entry point. It re-exports only the
5
+ * types relevant to authoring custom integration filters and does **not** affect
6
+ * the public API surface exposed by the package's main entry point.
7
+ *
8
+ * @module
9
+ */
10
+
11
+ // ---------------------------------------------------------------------------
12
+ // Filter DSL
13
+ // ---------------------------------------------------------------------------
14
+
15
+ export type {
16
+ FilterDSL,
17
+ FilterPattern,
18
+ PathPattern,
19
+ } from "./core/integrations/filter/dsl.ts";
20
+ export type { FlatValue } from "./core/integrations/filter/flatten.ts";
21
+
22
+ // ---------------------------------------------------------------------------
23
+ // Integration
24
+ // ---------------------------------------------------------------------------
25
+
26
+ export type { IntegrationDSL } from "./core/integrations/integration-dsl.ts";
27
+ export type { SerializeDSL } from "./core/integrations/serialize/dsl.ts";
28
+
29
+ // ---------------------------------------------------------------------------
30
+ // Change Types — Base & Top-Level Unions
31
+ // ---------------------------------------------------------------------------
32
+
33
+ export type {
34
+ Change,
35
+ OBJECT_TYPE_TO_PROPERTY_KEY,
36
+ } from "./core/change.types.ts";
37
+ // Top-level union types (each combines all change variants for an object type)
38
+ export type { AggregateChange } from "./core/objects/aggregate/changes/aggregate.types.ts";
39
+ export { BaseChange } from "./core/objects/base.change.ts";
40
+ export type { CollationChange } from "./core/objects/collation/changes/collation.types.ts";
41
+ export type { DomainChange } from "./core/objects/domain/changes/domain.types.ts";
42
+ export type { EventTriggerChange } from "./core/objects/event-trigger/changes/event-trigger.types.ts";
43
+ export type { ExtensionChange } from "./core/objects/extension/changes/extension.types.ts";
44
+ export type { ForeignDataWrapperChange } from "./core/objects/foreign-data-wrapper/foreign-data-wrapper.types.ts";
45
+ export type { IndexChange } from "./core/objects/index/changes/index.types.ts";
46
+ export type { LanguageChange } from "./core/objects/language/changes/language.types.ts";
47
+ export type { MaterializedViewChange } from "./core/objects/materialized-view/changes/materialized-view.types.ts";
48
+ export type { ProcedureChange } from "./core/objects/procedure/changes/procedure.types.ts";
49
+ export type { PublicationChange } from "./core/objects/publication/changes/publication.types.ts";
50
+ export type { RlsPolicyChange } from "./core/objects/rls-policy/changes/rls-policy.types.ts";
51
+ export type { RoleChange } from "./core/objects/role/changes/role.types.ts";
52
+ export type { RuleChange } from "./core/objects/rule/changes/rule.types.ts";
53
+ export type { SchemaChange } from "./core/objects/schema/changes/schema.types.ts";
54
+ export type { SequenceChange } from "./core/objects/sequence/changes/sequence.types.ts";
55
+ export type { SubscriptionChange } from "./core/objects/subscription/changes/subscription.types.ts";
56
+ export type { TableChange } from "./core/objects/table/changes/table.types.ts";
57
+ export type { TriggerChange } from "./core/objects/trigger/changes/trigger.types.ts";
58
+ export type { TypeChange } from "./core/objects/type/type.types.ts";
59
+ export type { ViewChange } from "./core/objects/view/changes/view.types.ts";
60
+
61
+ // ---------------------------------------------------------------------------
62
+ // Change Types — FDW & Type Sub-Unions
63
+ // ---------------------------------------------------------------------------
64
+
65
+ // Inner FDW union renamed to avoid collision with the outer ForeignDataWrapperChange
66
+ export type { ForeignDataWrapperChange as FDWChange } from "./core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.types.ts";
67
+ export type { ForeignTableChange } from "./core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.types.ts";
68
+ export type { ServerChange } from "./core/objects/foreign-data-wrapper/server/changes/server.types.ts";
69
+ export type { UserMappingChange } from "./core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.types.ts";
70
+
71
+ export type { CompositeTypeChange } from "./core/objects/type/composite-type/changes/composite-type.types.ts";
72
+ export type { EnumChange } from "./core/objects/type/enum/changes/enum.types.ts";
73
+ export type { RangeChange } from "./core/objects/type/range/changes/range.types.ts";
74
+
75
+ // ---------------------------------------------------------------------------
76
+ // Change Types — Concrete Change Classes (all object types)
77
+ // ---------------------------------------------------------------------------
78
+
79
+ // Aggregate
80
+ export * from "./core/objects/aggregate/changes/aggregate.alter.ts";
81
+ export * from "./core/objects/aggregate/changes/aggregate.comment.ts";
82
+ export * from "./core/objects/aggregate/changes/aggregate.create.ts";
83
+ export * from "./core/objects/aggregate/changes/aggregate.drop.ts";
84
+ export * from "./core/objects/aggregate/changes/aggregate.privilege.ts";
85
+
86
+ // Collation
87
+ export * from "./core/objects/collation/changes/collation.alter.ts";
88
+ export * from "./core/objects/collation/changes/collation.comment.ts";
89
+ export * from "./core/objects/collation/changes/collation.create.ts";
90
+ export * from "./core/objects/collation/changes/collation.drop.ts";
91
+
92
+ // Domain
93
+ export * from "./core/objects/domain/changes/domain.alter.ts";
94
+ export * from "./core/objects/domain/changes/domain.comment.ts";
95
+ export * from "./core/objects/domain/changes/domain.create.ts";
96
+ export * from "./core/objects/domain/changes/domain.drop.ts";
97
+ export * from "./core/objects/domain/changes/domain.privilege.ts";
98
+
99
+ // Event Trigger
100
+ export * from "./core/objects/event-trigger/changes/event-trigger.alter.ts";
101
+ export * from "./core/objects/event-trigger/changes/event-trigger.comment.ts";
102
+ export * from "./core/objects/event-trigger/changes/event-trigger.create.ts";
103
+ export * from "./core/objects/event-trigger/changes/event-trigger.drop.ts";
104
+
105
+ // Extension
106
+ export * from "./core/objects/extension/changes/extension.alter.ts";
107
+ export * from "./core/objects/extension/changes/extension.comment.ts";
108
+ export * from "./core/objects/extension/changes/extension.create.ts";
109
+ export * from "./core/objects/extension/changes/extension.drop.ts";
110
+
111
+ // Foreign Data Wrapper — FDW wrapper
112
+ export * from "./core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.ts";
113
+ export * from "./core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.comment.ts";
114
+ export * from "./core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.ts";
115
+ export * from "./core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.drop.ts";
116
+ export * from "./core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.privilege.ts";
117
+
118
+ // Foreign Data Wrapper — Foreign Table
119
+ export * from "./core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.ts";
120
+ export * from "./core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.comment.ts";
121
+ export * from "./core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.ts";
122
+ export * from "./core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.drop.ts";
123
+ export * from "./core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.privilege.ts";
124
+
125
+ // Foreign Data Wrapper — Server
126
+ export * from "./core/objects/foreign-data-wrapper/server/changes/server.alter.ts";
127
+ export * from "./core/objects/foreign-data-wrapper/server/changes/server.comment.ts";
128
+ export * from "./core/objects/foreign-data-wrapper/server/changes/server.create.ts";
129
+ export * from "./core/objects/foreign-data-wrapper/server/changes/server.drop.ts";
130
+ export * from "./core/objects/foreign-data-wrapper/server/changes/server.privilege.ts";
131
+
132
+ // Foreign Data Wrapper — User Mapping
133
+ export * from "./core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.ts";
134
+ export * from "./core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.ts";
135
+ export * from "./core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.drop.ts";
136
+
137
+ // Index
138
+ export * from "./core/objects/index/changes/index.alter.ts";
139
+ export * from "./core/objects/index/changes/index.comment.ts";
140
+ export * from "./core/objects/index/changes/index.create.ts";
141
+ export * from "./core/objects/index/changes/index.drop.ts";
142
+
143
+ // Language
144
+ export * from "./core/objects/language/changes/language.alter.ts";
145
+ export * from "./core/objects/language/changes/language.comment.ts";
146
+ export * from "./core/objects/language/changes/language.create.ts";
147
+ export * from "./core/objects/language/changes/language.drop.ts";
148
+ export * from "./core/objects/language/changes/language.privilege.ts";
149
+
150
+ // Materialized View
151
+ export * from "./core/objects/materialized-view/changes/materialized-view.alter.ts";
152
+ export * from "./core/objects/materialized-view/changes/materialized-view.comment.ts";
153
+ export * from "./core/objects/materialized-view/changes/materialized-view.create.ts";
154
+ export * from "./core/objects/materialized-view/changes/materialized-view.drop.ts";
155
+ export * from "./core/objects/materialized-view/changes/materialized-view.privilege.ts";
156
+
157
+ // Procedure
158
+ export * from "./core/objects/procedure/changes/procedure.alter.ts";
159
+ export * from "./core/objects/procedure/changes/procedure.comment.ts";
160
+ export * from "./core/objects/procedure/changes/procedure.create.ts";
161
+ export * from "./core/objects/procedure/changes/procedure.drop.ts";
162
+ export * from "./core/objects/procedure/changes/procedure.privilege.ts";
163
+
164
+ // Publication
165
+ export * from "./core/objects/publication/changes/publication.alter.ts";
166
+ export * from "./core/objects/publication/changes/publication.comment.ts";
167
+ export * from "./core/objects/publication/changes/publication.create.ts";
168
+ export * from "./core/objects/publication/changes/publication.drop.ts";
169
+
170
+ // RLS Policy
171
+ export * from "./core/objects/rls-policy/changes/rls-policy.alter.ts";
172
+ export * from "./core/objects/rls-policy/changes/rls-policy.comment.ts";
173
+ export * from "./core/objects/rls-policy/changes/rls-policy.create.ts";
174
+ export * from "./core/objects/rls-policy/changes/rls-policy.drop.ts";
175
+
176
+ // Role
177
+ export * from "./core/objects/role/changes/role.alter.ts";
178
+ export * from "./core/objects/role/changes/role.comment.ts";
179
+ export * from "./core/objects/role/changes/role.create.ts";
180
+ export * from "./core/objects/role/changes/role.drop.ts";
181
+ export * from "./core/objects/role/changes/role.privilege.ts";
182
+
183
+ // Rule
184
+ export * from "./core/objects/rule/changes/rule.alter.ts";
185
+ export * from "./core/objects/rule/changes/rule.comment.ts";
186
+ export * from "./core/objects/rule/changes/rule.create.ts";
187
+ export * from "./core/objects/rule/changes/rule.drop.ts";
188
+
189
+ // Schema
190
+ export * from "./core/objects/schema/changes/schema.alter.ts";
191
+ export * from "./core/objects/schema/changes/schema.comment.ts";
192
+ export * from "./core/objects/schema/changes/schema.create.ts";
193
+ export * from "./core/objects/schema/changes/schema.drop.ts";
194
+ export * from "./core/objects/schema/changes/schema.privilege.ts";
195
+
196
+ // Sequence
197
+ export * from "./core/objects/sequence/changes/sequence.alter.ts";
198
+ export * from "./core/objects/sequence/changes/sequence.comment.ts";
199
+ export * from "./core/objects/sequence/changes/sequence.create.ts";
200
+ export * from "./core/objects/sequence/changes/sequence.drop.ts";
201
+ export * from "./core/objects/sequence/changes/sequence.privilege.ts";
202
+
203
+ // Subscription
204
+ export * from "./core/objects/subscription/changes/subscription.alter.ts";
205
+ export * from "./core/objects/subscription/changes/subscription.comment.ts";
206
+ export * from "./core/objects/subscription/changes/subscription.create.ts";
207
+ export * from "./core/objects/subscription/changes/subscription.drop.ts";
208
+
209
+ // Table
210
+ export * from "./core/objects/table/changes/table.alter.ts";
211
+ export * from "./core/objects/table/changes/table.comment.ts";
212
+ export * from "./core/objects/table/changes/table.create.ts";
213
+ export * from "./core/objects/table/changes/table.drop.ts";
214
+ export * from "./core/objects/table/changes/table.privilege.ts";
215
+
216
+ // Trigger
217
+ export * from "./core/objects/trigger/changes/trigger.alter.ts";
218
+ export * from "./core/objects/trigger/changes/trigger.comment.ts";
219
+ export * from "./core/objects/trigger/changes/trigger.create.ts";
220
+ export * from "./core/objects/trigger/changes/trigger.drop.ts";
221
+
222
+ // Type — Composite
223
+ export * from "./core/objects/type/composite-type/changes/composite-type.alter.ts";
224
+ export * from "./core/objects/type/composite-type/changes/composite-type.comment.ts";
225
+ export * from "./core/objects/type/composite-type/changes/composite-type.create.ts";
226
+ export * from "./core/objects/type/composite-type/changes/composite-type.drop.ts";
227
+ export * from "./core/objects/type/composite-type/changes/composite-type.privilege.ts";
228
+
229
+ // Type — Enum
230
+ export * from "./core/objects/type/enum/changes/enum.alter.ts";
231
+ export * from "./core/objects/type/enum/changes/enum.comment.ts";
232
+ export * from "./core/objects/type/enum/changes/enum.create.ts";
233
+ export * from "./core/objects/type/enum/changes/enum.drop.ts";
234
+ export * from "./core/objects/type/enum/changes/enum.privilege.ts";
235
+
236
+ // Type — Range
237
+ export * from "./core/objects/type/range/changes/range.alter.ts";
238
+ export * from "./core/objects/type/range/changes/range.comment.ts";
239
+ export * from "./core/objects/type/range/changes/range.create.ts";
240
+ export * from "./core/objects/type/range/changes/range.drop.ts";
241
+ export * from "./core/objects/type/range/changes/range.privilege.ts";
242
+
243
+ // View
244
+ export * from "./core/objects/view/changes/view.alter.ts";
245
+ export * from "./core/objects/view/changes/view.comment.ts";
246
+ export * from "./core/objects/view/changes/view.create.ts";
247
+ export * from "./core/objects/view/changes/view.drop.ts";
248
+ export * from "./core/objects/view/changes/view.privilege.ts";
@@ -1,12 +0,0 @@
1
- import type { Change } from "../../change.types.ts";
2
- /**
3
- * Property extractor function that extracts a value from a change.
4
- */
5
- type PropertyExtractor = (change: Change) => string | null;
6
- /**
7
- * Registry of property extractors.
8
- * Maps property names to extractor functions.
9
- */
10
- export declare const PROPERTY_EXTRACTORS: Record<string, PropertyExtractor>;
11
- export declare function getSchema(change: Change): string | null;
12
- export {};
@@ -1,178 +0,0 @@
1
- /**
2
- * Registry of property extractors.
3
- * Maps property names to extractor functions.
4
- */
5
- export const PROPERTY_EXTRACTORS = {
6
- schema: getSchema,
7
- owner: getOwner,
8
- member: (change) => {
9
- if (change.scope === "membership") {
10
- return change.member;
11
- }
12
- return null;
13
- },
14
- grantee: (change) => {
15
- if (change.scope === "privilege" && "grantee" in change) {
16
- return change.grantee;
17
- }
18
- return null;
19
- },
20
- publication: (change) => {
21
- if (change.objectType === "publication") {
22
- return change.publication.name;
23
- }
24
- return null;
25
- },
26
- extension: (change) => {
27
- if (change.objectType === "extension") {
28
- return change.extension.name;
29
- }
30
- return null;
31
- },
32
- procedureLanguage: (change) => {
33
- if (change.objectType === "procedure") {
34
- return change.procedure.language;
35
- }
36
- return null;
37
- },
38
- eventTriggerName: (change) => {
39
- if (change.objectType === "event_trigger") {
40
- return change.eventTrigger.name;
41
- }
42
- return null;
43
- },
44
- procedureBinaryPath: (change) => {
45
- if (change.objectType === "procedure") {
46
- return change.procedure.binary_path ?? null;
47
- }
48
- return null;
49
- },
50
- triggerFunctionSchema: (change) => {
51
- if (change.objectType === "trigger") {
52
- return change.trigger.function_schema;
53
- }
54
- return null;
55
- },
56
- };
57
- export function getSchema(change) {
58
- switch (change.objectType) {
59
- case "aggregate":
60
- return change.aggregate.schema;
61
- case "collation":
62
- return change.collation.schema;
63
- case "composite_type":
64
- return change.compositeType.schema;
65
- case "domain":
66
- return change.domain.schema;
67
- case "enum":
68
- return change.enum.schema;
69
- case "event_trigger":
70
- return null;
71
- case "extension":
72
- return change.extension.schema;
73
- case "index":
74
- return change.index.schema;
75
- case "language":
76
- return null;
77
- case "materialized_view":
78
- return change.materializedView.schema;
79
- case "procedure":
80
- return change.procedure.schema;
81
- case "publication":
82
- return null;
83
- case "range":
84
- return change.range.schema;
85
- case "rls_policy":
86
- return change.policy.schema;
87
- case "role":
88
- return null;
89
- case "rule":
90
- return change.rule.schema;
91
- case "schema":
92
- return change.schema.name;
93
- case "sequence":
94
- return change.sequence.schema;
95
- case "subscription":
96
- return null;
97
- case "table":
98
- return change.table.schema;
99
- case "trigger":
100
- return change.trigger.schema;
101
- case "view":
102
- return change.view.schema;
103
- case "foreign_data_wrapper":
104
- return null;
105
- case "server":
106
- return null;
107
- case "user_mapping":
108
- return null;
109
- case "foreign_table":
110
- return change.foreignTable.schema;
111
- default: {
112
- // exhaustiveness check
113
- const _exhaustive = change;
114
- return _exhaustive;
115
- }
116
- }
117
- }
118
- function getOwner(change) {
119
- switch (change.objectType) {
120
- case "aggregate":
121
- return change.aggregate.owner;
122
- case "collation":
123
- return change.collation.owner;
124
- case "composite_type":
125
- return change.compositeType.owner;
126
- case "domain":
127
- return change.domain.owner;
128
- case "enum":
129
- return change.enum.owner;
130
- case "event_trigger":
131
- return change.eventTrigger.owner;
132
- case "extension":
133
- return change.extension.owner;
134
- case "index":
135
- return change.index.owner;
136
- case "language":
137
- return change.language.owner;
138
- case "materialized_view":
139
- return change.materializedView.owner;
140
- case "procedure":
141
- return change.procedure.owner;
142
- case "publication":
143
- return change.publication.owner;
144
- case "range":
145
- return change.range.owner;
146
- case "rls_policy":
147
- return change.policy.owner;
148
- case "role":
149
- return change.role.name;
150
- case "rule":
151
- return change.rule.owner;
152
- case "schema":
153
- return change.schema.owner;
154
- case "sequence":
155
- return change.sequence.owner;
156
- case "subscription":
157
- return change.subscription.owner;
158
- case "table":
159
- return change.table.owner;
160
- case "trigger":
161
- return change.trigger.owner;
162
- case "view":
163
- return change.view.owner;
164
- case "foreign_data_wrapper":
165
- return change.foreignDataWrapper.owner;
166
- case "server":
167
- return change.server.owner;
168
- case "user_mapping":
169
- return null;
170
- case "foreign_table":
171
- return change.foreignTable.owner;
172
- default: {
173
- // exhaustiveness check
174
- const _exhaustive = change;
175
- return _exhaustive;
176
- }
177
- }
178
- }