@platforma-sdk/model 1.53.1 → 1.53.2

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.
@@ -6,9 +6,10 @@ export type DataRecoverFn<T> = (version: DataVersionKey, data: unknown) => T;
6
6
  /**
7
7
  * Helper to define version keys with literal type inference and runtime validation.
8
8
  * - Validates that all version values are unique
9
+ * - Validates that no version value is empty
9
10
  * - Eliminates need for `as const` assertion
10
11
  *
11
- * @throws Error if duplicate version values are found
12
+ * @throws Error if duplicate or empty version values are found
12
13
  *
13
14
  * @example
14
15
  * const Version = defineDataVersions({
@@ -44,35 +45,190 @@ type MigrationStep = {
44
45
  toVersion: DataVersionKey;
45
46
  migrate: (data: unknown) => unknown;
46
47
  };
47
- /** Default recover function for unknown versions */
48
+ /**
49
+ * Default recover function for unknown versions.
50
+ * Use as fallback at the end of custom recover functions.
51
+ *
52
+ * @example
53
+ * .recover((version, data) => {
54
+ * if (version === 'legacy') {
55
+ * return transformLegacyData(data);
56
+ * }
57
+ * return defaultRecover(version, data);
58
+ * })
59
+ */
48
60
  export declare const defaultRecover: DataRecoverFn<never>;
49
- /** Internal builder for chaining migrations */
50
- declare class DataModelBuilder<VersionedData extends DataVersionMap, CurrentVersion extends keyof VersionedData & string> {
61
+ /** Symbol for internal builder creation method */
62
+ declare const FROM_BUILDER: unique symbol;
63
+ /** Internal state passed from builder to DataModel */
64
+ type BuilderState<S> = {
65
+ versionChain: DataVersionKey[];
66
+ steps: MigrationStep[];
67
+ initialDataFn: () => S;
68
+ recoverFn?: DataRecoverFn<S>;
69
+ };
70
+ /**
71
+ * Final builder state after recover() is called.
72
+ * Only allows calling create() to finalize the DataModel.
73
+ *
74
+ * @typeParam VersionedData - Map of version keys to their data types
75
+ * @typeParam CurrentVersion - The current (final) version in the chain
76
+ * @internal
77
+ */
78
+ declare class DataModelBuilderWithRecover<VersionedData extends DataVersionMap, CurrentVersion extends keyof VersionedData & string> {
51
79
  private readonly versionChain;
52
80
  private readonly migrationSteps;
53
- private readonly recoverFn?;
54
- private constructor();
55
- /** Start a migration chain from an initial version */
56
- static from<VersionedData extends DataVersionMap, InitialVersion extends keyof VersionedData & string = keyof VersionedData & string>(initialVersion: InitialVersion): DataModelBuilder<VersionedData, InitialVersion>;
57
- /** Add a migration step to the target version */
58
- migrate<NextVersion extends keyof VersionedData & string>(nextVersion: NextVersion, fn: DataMigrateFn<VersionedData[CurrentVersion], VersionedData[NextVersion]>): DataModelBuilder<VersionedData, NextVersion>;
59
- /** Set recovery handler for unknown or unsupported versions */
60
- recover(fn: DataRecoverFn<VersionedData[CurrentVersion]>): DataModelBuilder<VersionedData, CurrentVersion>;
61
- /** Finalize with initial data, creating the DataModel */
62
- create<S extends VersionedData[CurrentVersion]>(initialData: DataCreateFn<S>, ..._: [VersionedData[CurrentVersion]] extends [S] ? [] : [never]): DataModel<S>;
81
+ private readonly recoverFn;
82
+ /** @internal */
83
+ constructor({ versionChain, steps, recoverFn, }: {
84
+ versionChain: DataVersionKey[];
85
+ steps: MigrationStep[];
86
+ recoverFn: DataRecoverFn<VersionedData[CurrentVersion]>;
87
+ });
88
+ /**
89
+ * Finalize the DataModel with initial data factory.
90
+ *
91
+ * The initial data factory is called when creating new blocks or when
92
+ * migration/recovery fails and data must be reset.
93
+ *
94
+ * @param initialData - Factory function returning initial state (must exactly match CurrentVersion's data type)
95
+ * @returns Finalized DataModel instance
96
+ *
97
+ * @example
98
+ * .init(() => ({ numbers: [], labels: [], description: '' }))
99
+ */
100
+ init<S extends VersionedData[CurrentVersion]>(initialData: DataCreateFn<S>, ..._noExtraKeys: Exclude<keyof S, keyof VersionedData[CurrentVersion]> extends never ? [] : [never]): DataModel<VersionedData[CurrentVersion]>;
101
+ }
102
+ /**
103
+ * Internal builder for constructing DataModel with type-safe migration chains.
104
+ *
105
+ * Tracks the current version through the generic type system, ensuring:
106
+ * - Migration functions receive correctly typed input
107
+ * - Migration functions must return the correct output type
108
+ * - Version keys must exist in the VersionedData map
109
+ * - All versions must be covered before calling init()
110
+ *
111
+ * @typeParam VersionedData - Map of version keys to their data types
112
+ * @typeParam CurrentVersion - The current version in the migration chain
113
+ * @typeParam RemainingVersions - Versions not yet covered by migrations
114
+ * @internal
115
+ */
116
+ declare class DataModelMigrationChain<VersionedData extends DataVersionMap, CurrentVersion extends keyof VersionedData & string, RemainingVersions extends keyof VersionedData & string = Exclude<keyof VersionedData & string, CurrentVersion>> {
117
+ private readonly versionChain;
118
+ private readonly migrationSteps;
119
+ /** @internal */
120
+ constructor({ versionChain, steps, }: {
121
+ versionChain: DataVersionKey[];
122
+ steps?: MigrationStep[];
123
+ });
124
+ /**
125
+ * Add a migration step to transform data from current version to next version.
126
+ *
127
+ * Migration functions:
128
+ * - Receive data typed as the current version's data type (readonly)
129
+ * - Must return data matching the target version's data type
130
+ * - Should be pure functions (no side effects)
131
+ * - May throw errors (will result in data reset with warning)
132
+ *
133
+ * @typeParam NextVersion - The target version key (must be in RemainingVersions)
134
+ * @param nextVersion - The version key to migrate to
135
+ * @param fn - Migration function transforming current data to next version
136
+ * @returns Builder with updated current version
137
+ *
138
+ * @example
139
+ * .migrate(Version.V2, (data) => ({ ...data, labels: [] }))
140
+ */
141
+ migrate<NextVersion extends RemainingVersions>(nextVersion: NextVersion, fn: DataMigrateFn<VersionedData[CurrentVersion], VersionedData[NextVersion]>): DataModelMigrationChain<VersionedData, NextVersion, Exclude<RemainingVersions, NextVersion>>;
142
+ /**
143
+ * Set a recovery handler for unknown or legacy versions.
144
+ *
145
+ * The recover function is called when data has a version not in the migration chain.
146
+ * It should either:
147
+ * - Transform the data to the current version's format and return it
148
+ * - Call `defaultRecover(version, data)` to signal unrecoverable data
149
+ *
150
+ * Can only be called once. After calling, only `init()` is available.
151
+ *
152
+ * @param fn - Recovery function that transforms unknown data or throws
153
+ * @returns Builder with only init() method available
154
+ *
155
+ * @example
156
+ * .recover((version, data) => {
157
+ * if (version === 'legacy' && isLegacyFormat(data)) {
158
+ * return transformLegacy(data);
159
+ * }
160
+ * return defaultRecover(version, data);
161
+ * })
162
+ */
163
+ recover(fn: DataRecoverFn<VersionedData[CurrentVersion]>): DataModelBuilderWithRecover<VersionedData, CurrentVersion>;
164
+ /**
165
+ * Finalize the DataModel with initial data factory.
166
+ *
167
+ * Can only be called when all versions in VersionedData have been covered
168
+ * by the migration chain (RemainingVersions is empty).
169
+ *
170
+ * The initial data factory is called when creating new blocks or when
171
+ * migration/recovery fails and data must be reset.
172
+ *
173
+ * @param initialData - Factory function returning initial state (must exactly match CurrentVersion's data type)
174
+ * @returns Finalized DataModel instance
175
+ *
176
+ * @example
177
+ * .init(() => ({ numbers: [], labels: [], description: '' }))
178
+ */
179
+ init<S extends VersionedData[CurrentVersion]>(this: DataModelMigrationChain<VersionedData, CurrentVersion, never>, initialData: DataCreateFn<S>, ..._noExtraKeys: Exclude<keyof S, keyof VersionedData[CurrentVersion]> extends never ? [] : [never]): DataModel<VersionedData[CurrentVersion]>;
180
+ }
181
+ /**
182
+ * Builder entry point for creating DataModel with type-safe migrations.
183
+ *
184
+ * @typeParam VersionedData - Map of version keys to their data types
185
+ *
186
+ * @example
187
+ * const Version = defineDataVersions({
188
+ * V1: 'v1',
189
+ * V2: 'v2',
190
+ * });
191
+ *
192
+ * type VersionedData = {
193
+ * [Version.V1]: { count: number };
194
+ * [Version.V2]: { count: number; label: string };
195
+ * };
196
+ *
197
+ * const dataModel = new DataModelBuilder<VersionedData>()
198
+ * .from(Version.V1)
199
+ * .migrate(Version.V2, (data) => ({ ...data, label: '' }))
200
+ * .init(() => ({ count: 0, label: '' }));
201
+ */
202
+ export declare class DataModelBuilder<VersionedData extends DataVersionMap> {
203
+ /**
204
+ * Start a migration chain from an initial version.
205
+ *
206
+ * @typeParam InitialVersion - The starting version key (inferred from argument)
207
+ * @param initialVersion - The version key to start from
208
+ * @returns Migration chain builder for adding migrations
209
+ *
210
+ * @example
211
+ * new DataModelBuilder<VersionedData>()
212
+ * .from(Version.V1)
213
+ * .migrate(Version.V2, (data) => ({ ...data, newField: '' }))
214
+ */
215
+ from<InitialVersion extends keyof VersionedData & string>(initialVersion: InitialVersion): DataModelMigrationChain<VersionedData, InitialVersion, Exclude<keyof VersionedData & string, InitialVersion>>;
63
216
  }
64
217
  /**
65
218
  * DataModel defines the block's data structure, initial values, and migrations.
66
219
  * Used by BlockModelV3 to manage data state.
67
220
  *
221
+ * Two ways to create a DataModel:
222
+ *
223
+ * 1. **Simple (no migrations)** - Use `DataModel.create()`:
68
224
  * @example
69
- * // Simple data model (no migrations)
70
225
  * const dataModel = DataModel.create<BlockData>(() => ({
71
226
  * numbers: [],
72
227
  * labels: [],
73
228
  * }));
74
229
  *
75
- * // Data model with migrations
230
+ * 2. **With migrations** - Use `new DataModelBuilder<VersionedData>()`:
231
+ * @example
76
232
  * const Version = defineDataVersions({
77
233
  * V1: 'v1',
78
234
  * V2: 'v2',
@@ -85,8 +241,8 @@ declare class DataModelBuilder<VersionedData extends DataVersionMap, CurrentVers
85
241
  * [Version.V3]: { numbers: number[]; labels: string[]; description: string };
86
242
  * };
87
243
  *
88
- * const dataModel = DataModel
89
- * .from<VersionedData>(Version.V1)
244
+ * const dataModel = new DataModelBuilder<VersionedData>()
245
+ * .from(Version.V1)
90
246
  * .migrate(Version.V2, (data) => ({ ...data, labels: [] }))
91
247
  * .migrate(Version.V3, (data) => ({ ...data, description: '' }))
92
248
  * .recover((version, data) => {
@@ -95,7 +251,7 @@ declare class DataModelBuilder<VersionedData extends DataVersionMap, CurrentVers
95
251
  * }
96
252
  * return defaultRecover(version, data);
97
253
  * })
98
- * .create(() => ({ numbers: [], labels: [], description: '' }));
254
+ * .init(() => ({ numbers: [], labels: [], description: '' }));
99
255
  */
100
256
  export declare class DataModel<State> {
101
257
  private readonly versionChain;
@@ -103,37 +259,65 @@ export declare class DataModel<State> {
103
259
  private readonly initialDataFn;
104
260
  private readonly recoverFn;
105
261
  private constructor();
106
- /** Start a migration chain from an initial type */
107
- static from<VersionedData extends DataVersionMap, InitialVersion extends keyof VersionedData & string = keyof VersionedData & string>(initialVersion: InitialVersion): DataModelBuilder<VersionedData, InitialVersion>;
108
- /** Create a data model with just initial data (no migrations) */
262
+ /**
263
+ * Create a DataModel with just initial data (no migrations).
264
+ *
265
+ * Use this for simple blocks that don't need version migrations.
266
+ * The version will be set to an internal default value.
267
+ *
268
+ * @typeParam S - The state type
269
+ * @param initialData - Factory function returning initial state
270
+ * @param version - Optional custom version key (defaults to internal version)
271
+ * @returns Finalized DataModel instance
272
+ *
273
+ * @example
274
+ * const dataModel = DataModel.create<BlockData>(() => ({
275
+ * numbers: [],
276
+ * labels: [],
277
+ * }));
278
+ */
109
279
  static create<S>(initialData: () => S, version?: DataVersionKey): DataModel<S>;
110
- /** Create from builder (internal use) */
111
- static _fromBuilder<S>(versionChain: DataVersionKey[], steps: MigrationStep[], initialData: () => S, recover?: DataRecoverFn<S>): DataModel<S>;
112
280
  /**
113
- * Latest version key.
281
+ * Internal method for creating DataModel from builder.
282
+ * Uses Symbol key to prevent external access.
283
+ * @internal
284
+ */
285
+ static [FROM_BUILDER]<S>(state: BuilderState<S>): DataModel<S>;
286
+ /**
287
+ * The latest (current) version key in the migration chain.
114
288
  */
115
289
  get version(): DataVersionKey;
116
- /** Number of migration steps */
290
+ /**
291
+ * Number of migration steps defined.
292
+ */
117
293
  get migrationCount(): number;
118
- /** Get initial data */
294
+ /**
295
+ * Get a fresh copy of the initial data.
296
+ */
119
297
  initialData(): State;
120
- /** Get default data wrapped with current version */
298
+ /**
299
+ * Get initial data wrapped with current version.
300
+ * Used when creating new blocks or resetting to defaults.
301
+ */
121
302
  getDefaultData(): DataVersioned<State>;
122
303
  private recoverFrom;
123
304
  /**
124
305
  * Migrate versioned data from any version to the latest.
125
- * Applies only the migrations needed (skips already-applied ones).
126
- * If a migration fails, returns default data with a warning.
306
+ *
307
+ * - If data is already at latest version, returns as-is
308
+ * - If version is in chain, applies needed migrations
309
+ * - If version is unknown, calls recover function
310
+ * - If migration/recovery fails, returns default data with warning
311
+ *
312
+ * @param versioned - Data with version tag
313
+ * @returns Migration result with data at latest version
127
314
  */
128
315
  migrate(versioned: DataVersioned<unknown>): DataMigrationResult<State>;
129
316
  /**
130
317
  * Register callbacks for use in the VM.
131
318
  * Called by BlockModelV3.create() to set up internal callbacks.
132
319
  *
133
- * All callbacks are prefixed with `__pl_` to indicate internal SDK use:
134
- * - `__pl_data_initial`: returns initial data for new blocks
135
- * - `__pl_data_migrate`: migrates versioned data from any version to latest
136
- * - `__pl_storage_initial`: returns initial BlockStorage as JSON string
320
+ * @internal
137
321
  */
138
322
  registerCallbacks(): void;
139
323
  }
@@ -1 +1 @@
1
- {"version":3,"file":"block_migrations.d.ts","sourceRoot":"","sources":["../src/block_migrations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"block_migrations.d.ts","sourceRoot":"","sources":["../src/block_migrations.ts"],"names":[],"mappings":"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"}