@verdant-web/common 2.1.1 → 2.3.0-next.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 (194) hide show
  1. package/dist/esm/EventSubscriber.js.map +1 -1
  2. package/dist/esm/batching.js.map +1 -1
  3. package/dist/esm/error.js +8 -2
  4. package/dist/esm/error.js.map +1 -1
  5. package/dist/esm/indexes.js +2 -2
  6. package/dist/esm/indexes.js.map +1 -1
  7. package/dist/esm/memo.js.map +1 -1
  8. package/dist/esm/migration.js.map +1 -1
  9. package/dist/esm/oids.js.map +1 -1
  10. package/dist/esm/operation.js.map +1 -1
  11. package/dist/esm/patch.js.map +1 -1
  12. package/dist/esm/replica.js +1 -1
  13. package/dist/esm/replica.js.map +1 -1
  14. package/dist/esm/schema/children.js.map +1 -1
  15. package/dist/esm/schema/fieldHelpers.js.map +1 -1
  16. package/dist/esm/schema/fields.js +0 -14
  17. package/dist/esm/schema/fields.js.map +1 -1
  18. package/dist/esm/schema/index.js +1 -2
  19. package/dist/esm/schema/index.js.map +1 -1
  20. package/dist/esm/schema/validation.js.map +1 -1
  21. package/dist/esm/timestamp.js.map +1 -1
  22. package/dist/esm/timestamp.test.js.map +1 -1
  23. package/dist/esm/undo.js.map +1 -1
  24. package/dist/esm/utils.js.map +1 -1
  25. package/package.json +5 -8
  26. package/src/error.ts +7 -1
  27. package/src/indexes.ts +2 -2
  28. package/src/protocol.ts +1 -1
  29. package/src/schema/fieldHelpers.ts +5 -5
  30. package/src/schema/fields.ts +3 -13
  31. package/src/schema/index.ts +1 -2
  32. package/src/schema/types/compounds.ts +6 -6
  33. package/src/schema/types/fields.ts +8 -47
  34. package/src/schema/types/shapes.ts +2 -7
  35. package/src/schema/types/synthetics.ts +0 -1
  36. package/src/schema/validation.ts +2 -6
  37. package/dist/cjs/EventSubscriber.d.ts +0 -18
  38. package/dist/cjs/EventSubscriber.js +0 -70
  39. package/dist/cjs/EventSubscriber.js.map +0 -1
  40. package/dist/cjs/baseline.d.ts +0 -5
  41. package/dist/cjs/baseline.js +0 -3
  42. package/dist/cjs/baseline.js.map +0 -1
  43. package/dist/cjs/batching.d.ts +0 -43
  44. package/dist/cjs/batching.js +0 -98
  45. package/dist/cjs/batching.js.map +0 -1
  46. package/dist/cjs/error.d.ts +0 -16
  47. package/dist/cjs/error.js +0 -37
  48. package/dist/cjs/error.js.map +0 -1
  49. package/dist/cjs/files.d.ts +0 -19
  50. package/dist/cjs/files.js +0 -19
  51. package/dist/cjs/files.js.map +0 -1
  52. package/dist/cjs/index.d.ts +0 -21
  53. package/dist/cjs/index.js +0 -44
  54. package/dist/cjs/index.js.map +0 -1
  55. package/dist/cjs/indexes.d.ts +0 -17
  56. package/dist/cjs/indexes.js +0 -146
  57. package/dist/cjs/indexes.js.map +0 -1
  58. package/dist/cjs/indexes.test.d.ts +0 -1
  59. package/dist/cjs/indexes.test.js +0 -156
  60. package/dist/cjs/indexes.test.js.map +0 -1
  61. package/dist/cjs/memo.d.ts +0 -6
  62. package/dist/cjs/memo.js +0 -25
  63. package/dist/cjs/memo.js.map +0 -1
  64. package/dist/cjs/memo.test.d.ts +0 -1
  65. package/dist/cjs/memo.test.js +0 -29
  66. package/dist/cjs/memo.test.js.map +0 -1
  67. package/dist/cjs/migration.d.ts +0 -174
  68. package/dist/cjs/migration.js +0 -310
  69. package/dist/cjs/migration.js.map +0 -1
  70. package/dist/cjs/oids.d.ts +0 -101
  71. package/dist/cjs/oids.js +0 -466
  72. package/dist/cjs/oids.js.map +0 -1
  73. package/dist/cjs/oids.test.d.ts +0 -1
  74. package/dist/cjs/oids.test.js +0 -409
  75. package/dist/cjs/oids.test.js.map +0 -1
  76. package/dist/cjs/operation.d.ts +0 -142
  77. package/dist/cjs/operation.js +0 -549
  78. package/dist/cjs/operation.js.map +0 -1
  79. package/dist/cjs/operation.test.d.ts +0 -1
  80. package/dist/cjs/operation.test.js +0 -977
  81. package/dist/cjs/operation.test.js.map +0 -1
  82. package/dist/cjs/patch.d.ts +0 -28
  83. package/dist/cjs/patch.js +0 -230
  84. package/dist/cjs/patch.js.map +0 -1
  85. package/dist/cjs/presence.d.ts +0 -29
  86. package/dist/cjs/presence.js +0 -3
  87. package/dist/cjs/presence.js.map +0 -1
  88. package/dist/cjs/protocol.d.ts +0 -145
  89. package/dist/cjs/protocol.js +0 -4
  90. package/dist/cjs/protocol.js.map +0 -1
  91. package/dist/cjs/refs.d.ts +0 -7
  92. package/dist/cjs/refs.js +0 -30
  93. package/dist/cjs/refs.js.map +0 -1
  94. package/dist/cjs/replica.d.ts +0 -28
  95. package/dist/cjs/replica.js +0 -29
  96. package/dist/cjs/replica.js.map +0 -1
  97. package/dist/cjs/schema/children.d.ts +0 -2
  98. package/dist/cjs/schema/children.js +0 -24
  99. package/dist/cjs/schema/children.js.map +0 -1
  100. package/dist/cjs/schema/defaults.test.d.ts +0 -1
  101. package/dist/cjs/schema/defaults.test.js +0 -34
  102. package/dist/cjs/schema/defaults.test.js.map +0 -1
  103. package/dist/cjs/schema/fieldHelpers.d.ts +0 -35
  104. package/dist/cjs/schema/fieldHelpers.js +0 -38
  105. package/dist/cjs/schema/fieldHelpers.js.map +0 -1
  106. package/dist/cjs/schema/fields.d.ts +0 -12
  107. package/dist/cjs/schema/fields.js +0 -187
  108. package/dist/cjs/schema/fields.js.map +0 -1
  109. package/dist/cjs/schema/index.d.ts +0 -54
  110. package/dist/cjs/schema/index.js +0 -64
  111. package/dist/cjs/schema/index.js.map +0 -1
  112. package/dist/cjs/schema/indexFilters.d.ts +0 -6
  113. package/dist/cjs/schema/indexFilters.js +0 -31
  114. package/dist/cjs/schema/indexFilters.js.map +0 -1
  115. package/dist/cjs/schema/types/collection.d.ts +0 -23
  116. package/dist/cjs/schema/types/collection.js +0 -3
  117. package/dist/cjs/schema/types/collection.js.map +0 -1
  118. package/dist/cjs/schema/types/compounds.d.ts +0 -11
  119. package/dist/cjs/schema/types/compounds.js +0 -3
  120. package/dist/cjs/schema/types/compounds.js.map +0 -1
  121. package/dist/cjs/schema/types/fields.d.ts +0 -78
  122. package/dist/cjs/schema/types/fields.js +0 -3
  123. package/dist/cjs/schema/types/fields.js.map +0 -1
  124. package/dist/cjs/schema/types/filters.d.ts +0 -29
  125. package/dist/cjs/schema/types/filters.js +0 -3
  126. package/dist/cjs/schema/types/filters.js.map +0 -1
  127. package/dist/cjs/schema/types/shapes.d.ts +0 -24
  128. package/dist/cjs/schema/types/shapes.js +0 -3
  129. package/dist/cjs/schema/types/shapes.js.map +0 -1
  130. package/dist/cjs/schema/types/synthetics.d.ts +0 -37
  131. package/dist/cjs/schema/types/synthetics.js +0 -3
  132. package/dist/cjs/schema/types/synthetics.js.map +0 -1
  133. package/dist/cjs/schema/types.d.ts +0 -18
  134. package/dist/cjs/schema/types.js +0 -23
  135. package/dist/cjs/schema/types.js.map +0 -1
  136. package/dist/cjs/schema/validation.d.ts +0 -14
  137. package/dist/cjs/schema/validation.js +0 -158
  138. package/dist/cjs/schema/validation.js.map +0 -1
  139. package/dist/cjs/timestamp.d.ts +0 -51
  140. package/dist/cjs/timestamp.js +0 -254
  141. package/dist/cjs/timestamp.js.map +0 -1
  142. package/dist/cjs/timestamp.test.d.ts +0 -1
  143. package/dist/cjs/timestamp.test.js +0 -105
  144. package/dist/cjs/timestamp.test.js.map +0 -1
  145. package/dist/cjs/undo.d.ts +0 -3
  146. package/dist/cjs/undo.js +0 -201
  147. package/dist/cjs/undo.js.map +0 -1
  148. package/dist/cjs/utils.d.ts +0 -20
  149. package/dist/cjs/utils.js +0 -146
  150. package/dist/cjs/utils.js.map +0 -1
  151. package/dist/cjs/utils.test.d.ts +0 -1
  152. package/dist/cjs/utils.test.js +0 -37
  153. package/dist/cjs/utils.test.js.map +0 -1
  154. package/dist/esm/EventSubscriber.d.ts +0 -18
  155. package/dist/esm/baseline.d.ts +0 -5
  156. package/dist/esm/batching.d.ts +0 -43
  157. package/dist/esm/error.d.ts +0 -16
  158. package/dist/esm/files.d.ts +0 -19
  159. package/dist/esm/index.d.ts +0 -21
  160. package/dist/esm/indexes.d.ts +0 -17
  161. package/dist/esm/indexes.test.d.ts +0 -1
  162. package/dist/esm/memo.d.ts +0 -6
  163. package/dist/esm/memo.test.d.ts +0 -1
  164. package/dist/esm/migration.d.ts +0 -174
  165. package/dist/esm/oids.d.ts +0 -101
  166. package/dist/esm/oids.test.d.ts +0 -1
  167. package/dist/esm/operation.d.ts +0 -142
  168. package/dist/esm/operation.test.d.ts +0 -1
  169. package/dist/esm/patch.d.ts +0 -28
  170. package/dist/esm/presence.d.ts +0 -29
  171. package/dist/esm/protocol.d.ts +0 -145
  172. package/dist/esm/refs.d.ts +0 -7
  173. package/dist/esm/replica.d.ts +0 -28
  174. package/dist/esm/schema/children.d.ts +0 -2
  175. package/dist/esm/schema/defaults.test.d.ts +0 -1
  176. package/dist/esm/schema/fieldHelpers.d.ts +0 -35
  177. package/dist/esm/schema/fields.d.ts +0 -12
  178. package/dist/esm/schema/index.d.ts +0 -54
  179. package/dist/esm/schema/indexFilters.d.ts +0 -6
  180. package/dist/esm/schema/types/collection.d.ts +0 -23
  181. package/dist/esm/schema/types/compounds.d.ts +0 -11
  182. package/dist/esm/schema/types/fields.d.ts +0 -78
  183. package/dist/esm/schema/types/filters.d.ts +0 -29
  184. package/dist/esm/schema/types/shapes.d.ts +0 -24
  185. package/dist/esm/schema/types/synthetics.d.ts +0 -37
  186. package/dist/esm/schema/types.d.ts +0 -18
  187. package/dist/esm/schema/validation.d.ts +0 -14
  188. package/dist/esm/timestamp.d.ts +0 -51
  189. package/dist/esm/timestamp.test.d.ts +0 -1
  190. package/dist/esm/undo.d.ts +0 -3
  191. package/dist/esm/utils.d.ts +0 -20
  192. package/dist/esm/utils.test.d.ts +0 -1
  193. package/dist/tsconfig-cjs.tsbuildinfo +0 -1
  194. package/dist/tsconfig.tsbuildinfo +0 -1
@@ -1,174 +0,0 @@
1
- import { StorageCollectionSchema, StorageSchema, StorageDocument, CollectionFilter, StorageDocumentInit } from './index.js';
2
- /**@deprecated */
3
- export interface DroppedCollectionMigrationStrategy<Old extends StorageCollectionSchema<any, any, any>> {
4
- (old: Old): void | Promise<void>;
5
- }
6
- /**@deprecated */
7
- export interface PreservedCollectionMigrationStrategy<Old extends StorageCollectionSchema<any, any, any>, New extends StorageCollectionSchema<any, any, any>> {
8
- (old: StorageDocument<Old>): StorageDocument<New> | Promise<StorageDocument<New>>;
9
- }
10
- /** @deprecated */
11
- export declare type MigrationsKeyedOnCollection<Old extends StorageSchema<any>, New extends StorageSchema<any>> = PreservedCollectionMigrations<Old, New> | DroppedCollectionMigrations<Old, New>;
12
- /**@deprecated */
13
- declare type NotInSchema<Name extends string | number | symbol, Schema extends StorageSchema<any>> = Name extends keyof Schema['collections'] ? never : Name;
14
- /** @deprecated */
15
- declare type InSchema<Name extends string | number | symbol, Schema extends StorageSchema<any>> = Name extends keyof Schema['collections'] ? Name : never;
16
- /** @deprecated */
17
- declare type DroppedCollections<Old extends StorageSchema<any>, New extends StorageSchema<any>> = {
18
- [Key in keyof Old['collections'] as NotInSchema<Key, New>]: StorageCollectionSchema<any, any, any>;
19
- };
20
- /** @deprecated */
21
- declare type PreservedCollections<Old extends StorageSchema<any>, New extends StorageSchema<any>> = {
22
- [Key in keyof Old['collections'] as InSchema<Key, New>]: StorageCollectionSchema<any, any, any>;
23
- };
24
- /** @deprecated */
25
- declare type DroppedCollectionMigrations<Old extends StorageSchema<any>, New extends StorageSchema<any>> = {
26
- [Key in keyof DroppedCollections<Old, New>]: DroppedCollectionMigrationStrategy<Old['collections'][Key]>;
27
- };
28
- /** @deprecated */
29
- declare type PreservedCollectionMigrations<Old extends StorageSchema<any>, New extends StorageSchema<any>> = {
30
- [Key in keyof PreservedCollections<Old, New>]: PreservedCollectionMigrationStrategy<Old['collections'][Key], New['collections'][Key]>;
31
- };
32
- /** @deprecated */
33
- declare type StrategyFor<Key extends string, Old extends StorageSchema<any>, New extends StorageSchema<any>> = Key extends keyof New['collections'] ? PreservedCollectionMigrationStrategy<Old['collections'][Key], New['collections'][Key]> : DroppedCollectionMigrationStrategy<Old['collections'][Key]>;
34
- /** @deprecated */
35
- declare type DeprecatedMigrationRunner<Old extends StorageSchema<any>, New extends StorageSchema<any>> = <Collection extends Extract<keyof Old['collections'], string>>(collection: Collection, strategy: StrategyFor<Collection, Old, New>) => Promise<void>;
36
- /** @deprecated */
37
- declare type DeprecatedMigrationQueryMaker<Collection extends StorageCollectionSchema<any, any, any>> = {
38
- get(primaryKey: string): Promise<StorageDocument<Collection> | undefined>;
39
- findOne(query: CollectionFilter): Promise<StorageDocument<Collection> | undefined>;
40
- findAll(query?: CollectionFilter): Promise<StorageDocument<Collection>[]>;
41
- };
42
- /** @deprecated */
43
- declare type DeprecatedMigrationQueries<Old extends StorageSchema<any>> = {
44
- [Key in keyof Old['collections']]: DeprecatedMigrationQueryMaker<Old['collections'][Key]>;
45
- };
46
- /** @deprecated */
47
- declare type DeprecatedMigrationMutations<New extends StorageSchema> = {
48
- [Key in keyof New['collections']]: {
49
- put(document: StorageDocumentInit<New['collections'][Key]>): Promise<StorageDocument<New['collections'][Key]>>;
50
- delete(primaryKey: string): Promise<void>;
51
- };
52
- };
53
- /** @deprecated */
54
- export interface DeprecatedMigrationTools<Old extends StorageSchema<any>, New extends StorageSchema<any>> {
55
- migrate: DeprecatedMigrationRunner<Old, New>;
56
- identity: <T>(val: T) => T;
57
- /**
58
- * @deprecated - default field values are automatically
59
- * applied during migration, you don't need to use this.
60
- * Please remove it from your migrations - even old ones
61
- * (old migrations can be updated!)
62
- */
63
- withDefaults: (collectionName: string, value: any) => any;
64
- queries: DeprecatedMigrationQueries<Old>;
65
- mutations: DeprecatedMigrationMutations<New>;
66
- info: {
67
- changedCollections: keyof Old['collections'][];
68
- addedCollections: keyof New['collections'][];
69
- removedCollections: keyof Old['collections'][];
70
- };
71
- }
72
- export interface MigrationEngine {
73
- migrate: (collection: string, strategy: (val: any) => any) => Promise<void>;
74
- queries: MigrationQueries<any>;
75
- mutations: MigrationMutations<any>;
76
- /** OIDs of any new documents created during the migration */
77
- newOids: string[];
78
- /** Promises that should be resolved before completing the migration */
79
- awaitables: Promise<any>[];
80
- /** Deletes all documents in a collection - used for removed collections */
81
- deleteCollection: (collection: string) => Promise<void>;
82
- log: (...messages: any[]) => void;
83
- }
84
- /** @deprecated */
85
- declare type DeprecatedMigrationProcedure<Old extends StorageSchema, New extends StorageSchema> = (tools: DeprecatedMigrationTools<Old, New>) => Promise<void>;
86
- declare type EmptySchema = {
87
- version: 0;
88
- collections: {};
89
- };
90
- /** @deprecated - use createMigration */
91
- export declare function migrate<Schema extends StorageSchema>(schema: Schema, procedure: DeprecatedMigrationProcedure<EmptySchema, Schema>): Migration<EmptySchema, Schema>;
92
- /** @deprecated = use createMigration */
93
- export declare function migrate<Old extends StorageSchema, New extends StorageSchema>(oldSchema: Old, newSchema: New, procedure: DeprecatedMigrationProcedure<Old, New>): Migration<Old, New>;
94
- export interface MigrationIndexDescription {
95
- name: string;
96
- multiEntry: boolean;
97
- synthetic: boolean;
98
- compound: boolean;
99
- }
100
- export interface Migration<Old extends StorageSchema = any, New extends StorageSchema = any> {
101
- version: number;
102
- oldSchema: Old;
103
- newSchema: New;
104
- migrate: (engine: MigrationEngine) => Promise<void>;
105
- /** Collections which are added in the new schema and not present in the old */
106
- addedCollections: string[];
107
- /** Collections which were removed from the old schema */
108
- removedCollections: string[];
109
- /** All collections which exist after the migration has completed - i.e. the ones in the new schema */
110
- allCollections: string[];
111
- /** Only the collections which were in the old schema */
112
- oldCollections: string[];
113
- /** Collections whose fields or indexes changed between schemas */
114
- changedCollections: string[];
115
- addedIndexes: Record<string, MigrationIndexDescription[]>;
116
- removedIndexes: Record<string, MigrationIndexDescription[]>;
117
- }
118
- export declare function migrationRange(from: number, to: number): number[];
119
- /** @deprecated - use createMigration with no procedure function */
120
- export declare function createDefaultMigration(schema: StorageSchema): Migration<{
121
- version: 0;
122
- collections: {};
123
- }>;
124
- /** @deprecated - use createMigration with no procedure function */
125
- export declare function createDefaultMigration<Old extends StorageSchema>(oldSchema: Old, newSchema: StorageSchema): Migration<Old>;
126
- /** New, simpler type-safety migration tools */
127
- declare type DocumentShape<Init = any, Snapshot = any> = {
128
- init: Init;
129
- snapshot: Snapshot;
130
- };
131
- declare type SchemaDocuments = Record<string, DocumentShape>;
132
- declare type CollectionProcedure<OldSnapshot, NewInit> = {
133
- (old: OldSnapshot): NewInit | Promise<NewInit>;
134
- };
135
- declare type MigrationQueries<Old extends SchemaDocuments> = {
136
- [Key in keyof Old]: {
137
- get(primaryKey: string): Promise<Old[Key]['snapshot'] | undefined>;
138
- findOne(query: CollectionFilter): Promise<Old[Key]['snapshot'] | undefined>;
139
- findAll(query?: CollectionFilter): Promise<Old[Key]['snapshot'][]>;
140
- };
141
- };
142
- declare type MigrationMutations<New extends SchemaDocuments> = {
143
- [Key in keyof New]: {
144
- put(document: New[Key]['init']): Promise<New[Key]['snapshot']>;
145
- delete(primaryKey: string): Promise<void>;
146
- };
147
- };
148
- declare type MigrationTools<Old extends SchemaDocuments, New extends SchemaDocuments> = {
149
- /**
150
- * Process a change in a collection's documents by taking in each existing
151
- * document and returning its new shape. This is typed so you can be
152
- * confident the proper transformations are made.
153
- */
154
- migrate: <Collection extends keyof Old & keyof New>(collection: Collection, strategy: CollectionProcedure<Old[Collection]['snapshot'], New[Collection]['init']>) => Promise<void>;
155
- mutations: MigrationMutations<New>;
156
- queries: MigrationQueries<Old>;
157
- info: {
158
- changedCollections: (keyof Old & keyof New)[];
159
- addedCollections: (keyof New)[];
160
- removedCollections: (keyof Old)[];
161
- };
162
- };
163
- declare type MigrationProcedure<Old extends SchemaDocuments, New extends SchemaDocuments> = {
164
- (tools: MigrationTools<Old, New>): Promise<void>;
165
- };
166
- declare type InitialMigrationTools<New extends SchemaDocuments> = {
167
- mutations: MigrationMutations<New>;
168
- };
169
- declare type InitialMigrationProcedure<New extends SchemaDocuments> = {
170
- (tools: InitialMigrationTools<New>): Promise<void>;
171
- };
172
- export declare function createMigration<New extends SchemaDocuments>(newSchema: StorageSchema, procedure?: InitialMigrationProcedure<New>): any;
173
- export declare function createMigration<Old extends SchemaDocuments, New extends SchemaDocuments>(oldSchema: StorageSchema, newSchema: StorageSchema, procedure?: MigrationProcedure<Old, New>): any;
174
- export {};
@@ -1,310 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createMigration = exports.createDefaultMigration = exports.migrationRange = exports.migrate = void 0;
4
- const index_js_1 = require("./index.js");
5
- const emptySchema = {
6
- version: 0,
7
- collections: {},
8
- };
9
- function migrate(oldSchemaOrNewSchema, newSchemaOrProcedure, procedureIfTwoSchemas) {
10
- const isProcedureSecondArgument = typeof newSchemaOrProcedure === 'function';
11
- const oldSchema = isProcedureSecondArgument
12
- ? emptySchema
13
- : oldSchemaOrNewSchema;
14
- const newSchema = isProcedureSecondArgument
15
- ? oldSchemaOrNewSchema
16
- : newSchemaOrProcedure;
17
- const procedure = isProcedureSecondArgument
18
- ? newSchemaOrProcedure
19
- : procedureIfTwoSchemas;
20
- // diff to determine changed collections
21
- const changedCollections = Object.keys(newSchema.collections).filter((key) => oldSchema.collections[key] &&
22
- (0, index_js_1.stableStringify)(oldSchema.collections[key]) !==
23
- (0, index_js_1.stableStringify)(newSchema.collections[key]));
24
- const removedCollections = Object.keys(oldSchema.collections).filter((key) => !newSchema.collections[key]);
25
- const addedCollections = Object.keys(newSchema.collections).filter((key) => !oldSchema.collections[key]);
26
- // collections which added one or more field defaults
27
- const autoMigratedCollections = new Set();
28
- for (const collection of changedCollections) {
29
- const oldFields = oldSchema.collections[collection].fields;
30
- const newFields = newSchema.collections[collection].fields;
31
- // a new default was added - we can auto-migrate it
32
- if (Object.keys(newFields).some((key) => { var _a, _b; return !((_a = oldFields[key]) === null || _a === void 0 ? void 0 : _a.default) && ((_b = newFields[key]) === null || _b === void 0 ? void 0 : _b.default); })) {
33
- autoMigratedCollections.add(collection);
34
- }
35
- // a field was removed - we can auto-migrate it
36
- if (Object.keys(oldFields).some((key) => !newFields[key])) {
37
- autoMigratedCollections.add(collection);
38
- }
39
- }
40
- const addedIndexes = {};
41
- const removedIndexes = {};
42
- for (const changed of [...changedCollections, ...addedCollections]) {
43
- const oldIndexes = getIndexes(oldSchema.collections[changed]);
44
- const newIndexes = getIndexes(newSchema.collections[changed]);
45
- const added = newIndexes.filter((index) => !oldIndexes.find((i) => i.name === index.name));
46
- const removed = oldIndexes.filter((index) => !newIndexes.find((i) => i.name === index.name));
47
- if (added.length > 0) {
48
- addedIndexes[changed] = added;
49
- // FIXME: don't o(n^2) this
50
- if (changedCollections.includes(changed)) {
51
- autoMigratedCollections.add(changed);
52
- }
53
- }
54
- if (removed.length > 0) {
55
- removedIndexes[changed] = removed;
56
- // FIXME: don't o(n^2) this
57
- if (changedCollections.includes(changed)) {
58
- autoMigratedCollections.add(changed);
59
- }
60
- }
61
- }
62
- const withDefaults = (collectionName, val) => {
63
- return (0, index_js_1.addFieldDefaults)(newSchema.collections[collectionName], val);
64
- };
65
- const autoMigration = (collectionName) => (val) => {
66
- const collection = newSchema.collections[collectionName];
67
- return (0, index_js_1.addFieldDefaults)(collection, (0, index_js_1.removeExtraProperties)(collection, val));
68
- };
69
- return {
70
- version: newSchema.version,
71
- migrate: async (engine) => {
72
- const migratedCollections = [];
73
- await procedure({
74
- migrate: async (collection, strategy) => {
75
- const auto = autoMigration(collection);
76
- const wrapped = async (val) => {
77
- const baseValue = await strategy(val);
78
- // assign OID from original value in case user's strategy
79
- // involves cloning
80
- (0, index_js_1.assignOid)(baseValue, (0, index_js_1.getOid)(val));
81
- const result = auto(baseValue);
82
- return result;
83
- };
84
- // @ts-ignore
85
- await engine.migrate(collection, wrapped);
86
- migratedCollections.push(collection);
87
- // since the user migrated this one and we wrap their
88
- // strategy with auto-migration, we can remove it from
89
- // the auto-migration list
90
- autoMigratedCollections.delete(collection);
91
- },
92
- identity: (val) => val,
93
- withDefaults,
94
- info: {
95
- changedCollections,
96
- addedCollections,
97
- removedCollections,
98
- },
99
- queries: engine.queries,
100
- mutations: engine.mutations,
101
- });
102
- // mandatory migration of fields which had defaults added or
103
- // fields removed but weren't migrated by the user
104
- if (newSchema.version > 1) {
105
- engine.log('debug', 'auto-migrating collections with new defaults', autoMigratedCollections);
106
- for (const name of autoMigratedCollections) {
107
- await engine.migrate(name, autoMigration(name));
108
- migratedCollections.push(name);
109
- }
110
- const unmigrated = changedCollections.filter((collection) => !migratedCollections.includes(collection));
111
- if (unmigrated.length > 0) {
112
- // TODO: does this deserve a full-on error?
113
- console.error(`Unmigrated changed collections from version ${oldSchema.version} to version ${newSchema.version}:`, unmigrated);
114
- }
115
- }
116
- },
117
- removedCollections,
118
- addedIndexes,
119
- removedIndexes,
120
- allCollections: Object.keys(newSchema.collections),
121
- changedCollections,
122
- addedCollections,
123
- oldCollections: Object.keys(oldSchema.collections),
124
- oldSchema,
125
- newSchema,
126
- };
127
- }
128
- exports.migrate = migrate;
129
- function migrationRange(from, to) {
130
- return [...Array(to - from).keys()].map((i) => 1 + i + from);
131
- }
132
- exports.migrationRange = migrationRange;
133
- function getIndexes(collection) {
134
- if (!collection)
135
- return [];
136
- return [
137
- ...Object.keys(collection.indexes || {}).map((key) => ({
138
- name: key,
139
- multiEntry: ['array', 'string[]', 'number[]', 'boolean[]'].includes(collection.indexes[key].type),
140
- synthetic: true,
141
- compound: false,
142
- })),
143
- ...Object.keys(collection.compounds || {}).map((key) => ({
144
- name: key,
145
- multiEntry: collection.compounds[key].of.some((fieldName) => (collection.fields[fieldName] || collection.indexes[fieldName])
146
- .type === 'array'),
147
- synthetic: false,
148
- compound: true,
149
- })),
150
- ];
151
- }
152
- function createDefaultMigration(schema, newSchema) {
153
- let oldSchema = newSchema
154
- ? schema
155
- : {
156
- version: 0,
157
- collections: {},
158
- };
159
- return migrate(oldSchema, newSchema || schema, async ({ migrate, info }) => {
160
- if ((newSchema || schema).version === 1)
161
- return;
162
- for (const collection of info.changedCollections) {
163
- // @ts-ignore indefinite type resolution
164
- await migrate(collection, (old) => old);
165
- }
166
- });
167
- }
168
- exports.createDefaultMigration = createDefaultMigration;
169
- function createMigration(maybeOldSchema, maybeNewSchemaOrProcedure, maybeProcedure) {
170
- const isProcedureSecondArgument = typeof maybeNewSchemaOrProcedure === 'function' ||
171
- maybeNewSchemaOrProcedure === undefined;
172
- const oldSchema = isProcedureSecondArgument ? emptySchema : maybeOldSchema;
173
- const newSchema = isProcedureSecondArgument
174
- ? maybeOldSchema
175
- : maybeNewSchemaOrProcedure;
176
- const procedure = isProcedureSecondArgument
177
- ? maybeNewSchemaOrProcedure
178
- : maybeProcedure;
179
- (0, index_js_1.assert)(oldSchema, 'Invalid arguments to createMigration');
180
- (0, index_js_1.assert)(newSchema, 'Invalid arguments to createMigration');
181
- const { changedCollections, addedCollections, removedCollections, addedIndexes, removedIndexes, autoMigratedCollections, autoMigration, } = getMigrationInfo(oldSchema, newSchema);
182
- return {
183
- version: newSchema.version,
184
- migrate: async (engine) => {
185
- const migratedCollections = [];
186
- const migrate = async (collection, strategy) => {
187
- const auto = autoMigration(collection);
188
- const wrapped = async (val) => {
189
- const baseValue = await strategy(val);
190
- // assign OID from original value in case user's strategy
191
- // involves cloning
192
- (0, index_js_1.assignOid)(baseValue, (0, index_js_1.getOid)(val));
193
- const result = auto(baseValue);
194
- const validationError = (0, index_js_1.validateEntity)(newSchema.collections[collection].fields, result);
195
- if (validationError) {
196
- // TODO: what? throw?
197
- }
198
- return result;
199
- };
200
- // @ts-ignore
201
- await engine.migrate(collection, wrapped);
202
- migratedCollections.push(collection);
203
- // since the user migrated this one and we wrap their
204
- // strategy with auto-migration, we can remove it from
205
- // the auto-migration list
206
- autoMigratedCollections.delete(collection);
207
- };
208
- await (procedure === null || procedure === void 0 ? void 0 : procedure({
209
- migrate,
210
- info: {
211
- changedCollections,
212
- addedCollections,
213
- removedCollections,
214
- },
215
- queries: engine.queries,
216
- mutations: engine.mutations,
217
- }));
218
- // mandatory migration of fields which had defaults added or
219
- // fields removed but weren't migrated by the user
220
- if (newSchema.version > 1) {
221
- engine.log('debug', 'auto-migrating collections with new defaults', autoMigratedCollections);
222
- for (const name of autoMigratedCollections) {
223
- await engine.migrate(name, autoMigration(name));
224
- migratedCollections.push(name);
225
- }
226
- // delete all documents in deleted collections
227
- for (const name of removedCollections) {
228
- await engine.deleteCollection(name);
229
- }
230
- const unmigrated = changedCollections.filter((collection) => !migratedCollections.includes(collection));
231
- if (unmigrated.length > 0) {
232
- // TODO: does this deserve a full-on error?
233
- console.error(`Unmigrated changed collections from version ${oldSchema.version} to version ${newSchema.version}:`, unmigrated);
234
- }
235
- }
236
- },
237
- removedCollections,
238
- addedIndexes,
239
- removedIndexes,
240
- allCollections: Object.keys(newSchema.collections),
241
- changedCollections,
242
- addedCollections,
243
- oldCollections: Object.keys(oldSchema.collections),
244
- oldSchema,
245
- newSchema,
246
- };
247
- }
248
- exports.createMigration = createMigration;
249
- // common tools
250
- function getMigrationInfo(oldSchema, newSchema) {
251
- const changedCollections = Object.keys(newSchema.collections).filter((key) => oldSchema.collections[key] &&
252
- (0, index_js_1.stableStringify)(oldSchema.collections[key]) !==
253
- (0, index_js_1.stableStringify)(newSchema.collections[key]));
254
- const removedCollections = Object.keys(oldSchema.collections).filter((key) => !newSchema.collections[key]);
255
- const addedCollections = Object.keys(newSchema.collections).filter((key) => !oldSchema.collections[key]);
256
- // collections which added one or more field defaults
257
- const autoMigratedCollections = new Set();
258
- for (const collection of changedCollections) {
259
- const oldFields = oldSchema.collections[collection].fields;
260
- const newFields = newSchema.collections[collection].fields;
261
- // a new default was added - we can auto-migrate it
262
- if (Object.keys(newFields).some((key) => !(0, index_js_1.hasDefault)(oldFields[key]) && (0, index_js_1.hasDefault)(newFields[key]))) {
263
- autoMigratedCollections.add(collection);
264
- }
265
- // a field was removed - we can auto-migrate it
266
- if (Object.keys(oldFields).some((key) => !newFields[key])) {
267
- autoMigratedCollections.add(collection);
268
- }
269
- }
270
- const addedIndexes = {};
271
- const removedIndexes = {};
272
- for (const changed of [...changedCollections, ...addedCollections]) {
273
- const oldIndexes = getIndexes(oldSchema.collections[changed]);
274
- const newIndexes = getIndexes(newSchema.collections[changed]);
275
- const added = newIndexes.filter((index) => !oldIndexes.find((i) => i.name === index.name));
276
- const removed = oldIndexes.filter((index) => !newIndexes.find((i) => i.name === index.name));
277
- if (added.length > 0) {
278
- addedIndexes[changed] = added;
279
- // FIXME: don't o(n^2) this
280
- if (changedCollections.includes(changed)) {
281
- autoMigratedCollections.add(changed);
282
- }
283
- }
284
- if (removed.length > 0) {
285
- removedIndexes[changed] = removed;
286
- // FIXME: don't o(n^2) this
287
- if (changedCollections.includes(changed)) {
288
- autoMigratedCollections.add(changed);
289
- }
290
- }
291
- }
292
- const withDefaults = (collectionName, val) => {
293
- return (0, index_js_1.addFieldDefaults)(newSchema.collections[collectionName], val);
294
- };
295
- const autoMigration = (collectionName) => (val) => {
296
- const collection = newSchema.collections[collectionName];
297
- return (0, index_js_1.addFieldDefaults)(collection, (0, index_js_1.removeExtraProperties)(collection, val));
298
- };
299
- return {
300
- changedCollections,
301
- addedCollections,
302
- removedCollections,
303
- addedIndexes,
304
- removedIndexes,
305
- autoMigratedCollections,
306
- withDefaults,
307
- autoMigration,
308
- };
309
- }
310
- //# sourceMappingURL=migration.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"migration.js","sourceRoot":"","sources":["../../src/migration.ts"],"names":[],"mappings":"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"}
@@ -1,101 +0,0 @@
1
- import { ObjectRef } from './operation.js';
2
- /**
3
- * OIDs
4
- *
5
- * OIDs are used to identify objects in the document. They also encode
6
- * information about the object useful to identifying an object found
7
- * on its own and associating it back to its parent.
8
- *
9
- * An OID is structured as such:
10
- * <collection>/<root id>[/<key paths>]:<random>
11
- *
12
- * OIDs have a few characteristics:
13
- * - They include the collection name of the parent document
14
- * - They include the primary key of the parent document
15
- * - They include the key path of the object within the document
16
- * - They include a random sequence to identify different objects which
17
- * exist at the same key path
18
- *
19
- * Collection name and document key are used to link any isolated
20
- * object back to its parent document.
21
- *
22
- * The key path is used for authorization - to associate the object
23
- * (or an operation related to it by OID) with the field it inhabits
24
- * to utilize authorization rules from that field in the schema.
25
- *
26
- * The random sequence allows the application to encode different
27
- * identities for objects at the same position in a document for
28
- * conflict resolution purposes
29
- */
30
- export declare type ObjectIdentifier = string;
31
- export declare const LEGACY_OID_KEY = "__@@oid_do_not_use";
32
- export declare const OID_KEY = "@@id";
33
- export declare function getOid(obj: any): string;
34
- export declare function maybeGetOid(obj: any): ObjectIdentifier | undefined;
35
- export declare function assignOid(obj: any, oid: ObjectIdentifier): any;
36
- export declare function hasOid(obj: any): boolean;
37
- export declare function removeOid(obj: any): any;
38
- export declare function isOidKey(key: string): boolean;
39
- /**
40
- * For sub-objects, assign a random sub-OID if no OID
41
- * is already assigned.
42
- */
43
- export declare function ensureOid(obj: any, rootOid: ObjectIdentifier, createSubId?: () => string): string;
44
- export declare function ensureCompatibleOid(obj: any, rootOid: ObjectIdentifier, createSubId?: () => string): string;
45
- export declare function createOid(collection: string, documentId: string, subId?: string): string;
46
- export declare function createSubOid(root: ObjectIdentifier, createSubId?: () => string): string;
47
- export declare function decomposeOid(oid: ObjectIdentifier): {
48
- collection: string;
49
- id: string;
50
- subId?: string;
51
- };
52
- export declare function assertAllLevelsHaveOids(obj: any, root?: any): void;
53
- export declare function assignOidsToAllSubObjects(obj: any, createSubId?: () => string): void;
54
- export declare function assignOidProperty(obj: any, oid: ObjectIdentifier): any;
55
- export declare function maybeGetOidProperty(obj: any): any;
56
- /**
57
- * Assigns a special property to all objects in the given object
58
- * which have an OID
59
- */
60
- export declare function assignOidPropertiesToAllSubObjects(obj: any): void;
61
- /**
62
- *
63
- * Removes the special property from all objects in the given object
64
- * which have an OID, transferring the OID from the property to the OID
65
- * system in-memory.
66
- */
67
- export declare function removeOidPropertiesFromAllSubObjects(obj: any): void;
68
- export declare function removeOidsFromAllSubObjects(obj: any): void;
69
- export declare function createOidSubId(): string;
70
- export declare function createRef(oid: ObjectIdentifier): ObjectRef;
71
- export declare function normalize(obj: any, refs?: Map<ObjectIdentifier, any>): Map<ObjectIdentifier, any>;
72
- /**
73
- * Only normalizes direct children. The created map
74
- * of objects will still have nested objects.
75
- */
76
- export declare function normalizeFirstLevel(obj: any): {
77
- refs: Map<string, any>;
78
- oidKeyPairs: Map<string, string | number>;
79
- };
80
- export declare function getOidRoot(oid: ObjectIdentifier): string;
81
- /**
82
- * Returns an inclusive range of OIDs that represent
83
- * all of an OID's possible sub-objects.
84
- */
85
- export declare function getOidSubIdRange(oid: ObjectIdentifier): string[];
86
- export declare function getLegacyDotOidSubIdRange(oid: ObjectIdentifier): string[];
87
- export declare function getRoots(oids: ObjectIdentifier[]): string[];
88
- export declare function areOidsRelated(oidA: ObjectIdentifier, oidB: ObjectIdentifier): boolean;
89
- /**
90
- * Recursively rewrites any OIDs in an object which are 'foreign' -
91
- * i.e. relate to some other object/entity - to be local to the
92
- * current object. This is deterministic, so it can be done
93
- * on multiple clients independently with predictable results.
94
- */
95
- export declare function fixForeignOids(obj: any): void;
96
- export declare function isLegacyDotOid(oid: ObjectIdentifier): boolean;
97
- export declare function convertLegacyOid(oid: ObjectIdentifier): string;
98
- export declare const MATCH_LEGACY_OID_JSON_STRING: RegExp;
99
- export declare function replaceLegacyOidsInJsonString(string: string): string;
100
- export declare function replaceLegacyOidsInObject(obj: any): any;
101
- export declare function isRootOid(oid: ObjectIdentifier): boolean;