@platforma-sdk/model 1.58.3 → 1.58.9
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.
- package/dist/_virtual/_rolldown/runtime.cjs +43 -0
- package/dist/_virtual/_rolldown/runtime.js +18 -0
- package/dist/annotations/converter.cjs +15 -20
- package/dist/annotations/converter.cjs.map +1 -1
- package/dist/annotations/converter.d.ts +6 -2
- package/dist/annotations/converter.js +14 -18
- package/dist/annotations/converter.js.map +1 -1
- package/dist/annotations/index.cjs +1 -0
- package/dist/annotations/index.d.ts +2 -3
- package/dist/annotations/index.js +1 -0
- package/dist/annotations/types.d.ts +21 -16
- package/dist/bconfig/index.cjs +2 -0
- package/dist/bconfig/index.d.ts +5 -6
- package/dist/bconfig/index.js +2 -0
- package/dist/bconfig/lambdas.d.ts +52 -52
- package/dist/bconfig/normalization.cjs +13 -18
- package/dist/bconfig/normalization.cjs.map +1 -1
- package/dist/bconfig/normalization.d.ts +10 -6
- package/dist/bconfig/normalization.js +12 -16
- package/dist/bconfig/normalization.js.map +1 -1
- package/dist/bconfig/types.cjs +4 -3
- package/dist/bconfig/types.cjs.map +1 -1
- package/dist/bconfig/types.d.ts +10 -5
- package/dist/bconfig/types.js +4 -2
- package/dist/bconfig/types.js.map +1 -1
- package/dist/bconfig/util.d.ts +7 -4
- package/dist/bconfig/v3.d.ts +10 -6
- package/dist/block_api_v1.d.ts +62 -58
- package/dist/block_api_v2.d.ts +51 -47
- package/dist/block_api_v3.d.ts +33 -29
- package/dist/block_migrations.cjs +481 -413
- package/dist/block_migrations.cjs.map +1 -1
- package/dist/block_migrations.d.ts +258 -204
- package/dist/block_migrations.js +482 -408
- package/dist/block_migrations.js.map +1 -1
- package/dist/block_model.cjs +312 -343
- package/dist/block_model.cjs.map +1 -1
- package/dist/block_model.d.ts +143 -147
- package/dist/block_model.js +312 -341
- package/dist/block_model.js.map +1 -1
- package/dist/block_model_legacy.cjs +231 -255
- package/dist/block_model_legacy.cjs.map +1 -1
- package/dist/block_model_legacy.d.ts +108 -106
- package/dist/block_model_legacy.js +231 -253
- package/dist/block_model_legacy.js.map +1 -1
- package/dist/block_state_patch.d.ts +10 -10
- package/dist/block_state_util.cjs +15 -19
- package/dist/block_state_util.cjs.map +1 -1
- package/dist/block_state_util.d.ts +14 -13
- package/dist/block_state_util.js +15 -18
- package/dist/block_state_util.js.map +1 -1
- package/dist/block_storage.cjs +233 -238
- package/dist/block_storage.cjs.map +1 -1
- package/dist/block_storage.d.ts +62 -78
- package/dist/block_storage.js +234 -237
- package/dist/block_storage.js.map +1 -1
- package/dist/block_storage_callbacks.cjs +156 -195
- package/dist/block_storage_callbacks.cjs.map +1 -1
- package/dist/block_storage_callbacks.js +156 -192
- package/dist/block_storage_callbacks.js.map +1 -1
- package/dist/block_storage_facade.cjs +29 -85
- package/dist/block_storage_facade.cjs.map +1 -1
- package/dist/block_storage_facade.d.ts +83 -126
- package/dist/block_storage_facade.js +29 -83
- package/dist/block_storage_facade.js.map +1 -1
- package/dist/components/PFrameForGraphs.cjs +26 -24
- package/dist/components/PFrameForGraphs.cjs.map +1 -1
- package/dist/components/PFrameForGraphs.d.ts +12 -7
- package/dist/components/PFrameForGraphs.js +25 -22
- package/dist/components/PFrameForGraphs.js.map +1 -1
- package/dist/components/PlAnnotations/filter.d.ts +62 -79
- package/dist/components/PlAnnotations/filters_ui.cjs +135 -171
- package/dist/components/PlAnnotations/filters_ui.cjs.map +1 -1
- package/dist/components/PlAnnotations/filters_ui.d.ts +48 -46
- package/dist/components/PlAnnotations/filters_ui.js +135 -170
- package/dist/components/PlAnnotations/filters_ui.js.map +1 -1
- package/dist/components/PlAnnotations/index.d.ts +2 -3
- package/dist/components/PlDataTable/index.cjs +2 -0
- package/dist/components/PlDataTable/index.d.ts +3 -5
- package/dist/components/PlDataTable/index.js +2 -0
- package/dist/components/PlDataTable/labels.cjs +59 -81
- package/dist/components/PlDataTable/labels.cjs.map +1 -1
- package/dist/components/PlDataTable/labels.js +58 -79
- package/dist/components/PlDataTable/labels.js.map +1 -1
- package/dist/components/PlDataTable/state-migration.cjs +186 -144
- package/dist/components/PlDataTable/state-migration.cjs.map +1 -1
- package/dist/components/PlDataTable/state-migration.d.ts +85 -82
- package/dist/components/PlDataTable/state-migration.js +185 -142
- package/dist/components/PlDataTable/state-migration.js.map +1 -1
- package/dist/components/PlDataTable/table.cjs +172 -194
- package/dist/components/PlDataTable/table.cjs.map +1 -1
- package/dist/components/PlDataTable/table.d.ts +16 -12
- package/dist/components/PlDataTable/table.js +171 -192
- package/dist/components/PlDataTable/table.js.map +1 -1
- package/dist/components/PlDataTable/v4.d.ts +84 -119
- package/dist/components/PlDataTable/v5.d.ts +80 -103
- package/dist/components/PlMultiSequenceAlignment.cjs +27 -29
- package/dist/components/PlMultiSequenceAlignment.cjs.map +1 -1
- package/dist/components/PlMultiSequenceAlignment.d.ts +36 -27
- package/dist/components/PlMultiSequenceAlignment.js +26 -27
- package/dist/components/PlMultiSequenceAlignment.js.map +1 -1
- package/dist/components/PlSelectionModel.cjs +7 -6
- package/dist/components/PlSelectionModel.cjs.map +1 -1
- package/dist/components/PlSelectionModel.d.ts +10 -8
- package/dist/components/PlSelectionModel.js +7 -5
- package/dist/components/PlSelectionModel.js.map +1 -1
- package/dist/components/index.cjs +8 -0
- package/dist/components/index.d.ts +11 -6
- package/dist/components/index.js +8 -0
- package/dist/config/actions.cjs +138 -171
- package/dist/config/actions.cjs.map +1 -1
- package/dist/config/actions.d.ts +47 -47
- package/dist/config/actions.js +146 -178
- package/dist/config/actions.js.map +1 -1
- package/dist/config/actions_kinds.d.ts +114 -121
- package/dist/config/index.cjs +1 -0
- package/dist/config/index.d.ts +6 -7
- package/dist/config/index.js +1 -0
- package/dist/config/model.d.ts +131 -127
- package/dist/config/model_meta.d.ts +4 -1
- package/dist/config/type_engine.d.ts +22 -21
- package/dist/config/type_util.d.ts +12 -10
- package/dist/env_value.cjs +5 -6
- package/dist/env_value.cjs.map +1 -1
- package/dist/env_value.d.ts +4 -1
- package/dist/env_value.js +5 -5
- package/dist/env_value.js.map +1 -1
- package/dist/filters/converters/filterToQuery.cjs +273 -239
- package/dist/filters/converters/filterToQuery.cjs.map +1 -1
- package/dist/filters/converters/filterToQuery.d.ts +6 -2
- package/dist/filters/converters/filterToQuery.js +272 -237
- package/dist/filters/converters/filterToQuery.js.map +1 -1
- package/dist/filters/converters/filterUiToExpressionImpl.cjs +56 -85
- package/dist/filters/converters/filterUiToExpressionImpl.cjs.map +1 -1
- package/dist/filters/converters/filterUiToExpressionImpl.d.ts +8 -4
- package/dist/filters/converters/filterUiToExpressionImpl.js +55 -83
- package/dist/filters/converters/filterUiToExpressionImpl.js.map +1 -1
- package/dist/filters/converters/index.cjs +2 -0
- package/dist/filters/converters/index.d.ts +2 -3
- package/dist/filters/converters/index.js +2 -0
- package/dist/filters/distill.cjs +59 -50
- package/dist/filters/distill.cjs.map +1 -1
- package/dist/filters/distill.d.ts +6 -3
- package/dist/filters/distill.js +58 -48
- package/dist/filters/distill.js.map +1 -1
- package/dist/filters/index.cjs +4 -0
- package/dist/filters/index.d.ts +5 -4
- package/dist/filters/index.js +4 -0
- package/dist/filters/traverse.cjs +31 -40
- package/dist/filters/traverse.cjs.map +1 -1
- package/dist/filters/traverse.js +31 -39
- package/dist/filters/traverse.js.map +1 -1
- package/dist/filters/types.d.ts +10 -7
- package/dist/index.cjs +193 -187
- package/dist/index.d.ts +61 -28
- package/dist/index.js +49 -41
- package/dist/internal.cjs +48 -62
- package/dist/internal.cjs.map +1 -1
- package/dist/internal.js +49 -60
- package/dist/internal.js.map +1 -1
- package/dist/package.cjs +12 -0
- package/dist/package.cjs.map +1 -0
- package/dist/package.js +6 -0
- package/dist/package.js.map +1 -0
- package/dist/pframe.cjs +32 -37
- package/dist/pframe.cjs.map +1 -1
- package/dist/pframe.d.ts +14 -10
- package/dist/pframe.js +32 -35
- package/dist/pframe.js.map +1 -1
- package/dist/pframe_utils/axes.cjs +81 -114
- package/dist/pframe_utils/axes.cjs.map +1 -1
- package/dist/pframe_utils/axes.d.ts +10 -13
- package/dist/pframe_utils/axes.js +80 -112
- package/dist/pframe_utils/axes.js.map +1 -1
- package/dist/pframe_utils/columns.cjs +61 -81
- package/dist/pframe_utils/columns.cjs.map +1 -1
- package/dist/pframe_utils/columns.d.ts +15 -6
- package/dist/pframe_utils/columns.js +60 -79
- package/dist/pframe_utils/columns.js.map +1 -1
- package/dist/pframe_utils/index.cjs +232 -253
- package/dist/pframe_utils/index.cjs.map +1 -1
- package/dist/pframe_utils/index.d.ts +39 -35
- package/dist/pframe_utils/index.js +231 -251
- package/dist/pframe_utils/index.js.map +1 -1
- package/dist/platforma.d.ts +48 -46
- package/dist/plugin_handle.cjs +6 -14
- package/dist/plugin_handle.cjs.map +1 -1
- package/dist/plugin_handle.d.ts +20 -25
- package/dist/plugin_handle.js +6 -13
- package/dist/plugin_handle.js.map +1 -1
- package/dist/plugin_model.cjs +364 -163
- package/dist/plugin_model.cjs.map +1 -1
- package/dist/plugin_model.d.ts +280 -129
- package/dist/plugin_model.js +362 -163
- package/dist/plugin_model.js.map +1 -1
- package/dist/raw_globals.cjs +10 -22
- package/dist/raw_globals.cjs.map +1 -1
- package/dist/raw_globals.d.ts +8 -5
- package/dist/raw_globals.js +10 -20
- package/dist/raw_globals.js.map +1 -1
- package/dist/ref_util.cjs +14 -13
- package/dist/ref_util.cjs.map +1 -1
- package/dist/ref_util.d.ts +18 -12
- package/dist/ref_util.js +14 -11
- package/dist/ref_util.js.map +1 -1
- package/dist/render/accessor.cjs +213 -226
- package/dist/render/accessor.cjs.map +1 -1
- package/dist/render/accessor.d.ts +115 -120
- package/dist/render/accessor.js +212 -224
- package/dist/render/accessor.js.map +1 -1
- package/dist/render/api.cjs +478 -580
- package/dist/render/api.cjs.map +1 -1
- package/dist/render/api.d.ts +207 -209
- package/dist/render/api.js +476 -578
- package/dist/render/api.js.map +1 -1
- package/dist/render/future.cjs +28 -32
- package/dist/render/future.cjs.map +1 -1
- package/dist/render/future.d.ts +15 -11
- package/dist/render/future.js +28 -30
- package/dist/render/future.js.map +1 -1
- package/dist/render/index.cjs +8 -0
- package/dist/render/index.d.ts +10 -8
- package/dist/render/index.js +8 -0
- package/dist/render/internal.cjs +33 -29
- package/dist/render/internal.cjs.map +1 -1
- package/dist/render/internal.d.ts +78 -72
- package/dist/render/internal.js +29 -26
- package/dist/render/internal.js.map +1 -1
- package/dist/render/traversal_ops.d.ts +42 -43
- package/dist/render/util/axis_filtering.cjs +63 -86
- package/dist/render/util/axis_filtering.cjs.map +1 -1
- package/dist/render/util/axis_filtering.d.ts +10 -7
- package/dist/render/util/axis_filtering.js +63 -85
- package/dist/render/util/axis_filtering.js.map +1 -1
- package/dist/render/util/column_collection.cjs +266 -321
- package/dist/render/util/column_collection.cjs.map +1 -1
- package/dist/render/util/column_collection.d.ts +47 -47
- package/dist/render/util/column_collection.js +264 -319
- package/dist/render/util/column_collection.js.map +1 -1
- package/dist/render/util/index.cjs +4 -0
- package/dist/render/util/index.d.ts +4 -5
- package/dist/render/util/index.js +4 -0
- package/dist/render/util/label.cjs +129 -163
- package/dist/render/util/label.cjs.map +1 -1
- package/dist/render/util/label.d.ts +45 -46
- package/dist/render/util/label.js +128 -161
- package/dist/render/util/label.js.map +1 -1
- package/dist/render/util/pcolumn_data.cjs +315 -375
- package/dist/render/util/pcolumn_data.cjs.map +1 -1
- package/dist/render/util/pcolumn_data.d.ts +33 -32
- package/dist/render/util/pcolumn_data.js +314 -373
- package/dist/render/util/pcolumn_data.js.map +1 -1
- package/dist/render/util/pframe_upgraders.cjs +37 -42
- package/dist/render/util/pframe_upgraders.cjs.map +1 -1
- package/dist/render/util/pframe_upgraders.js +37 -41
- package/dist/render/util/pframe_upgraders.js.map +1 -1
- package/dist/render/util/split_selectors.d.ts +13 -9
- package/dist/version.cjs +6 -8
- package/dist/version.cjs.map +1 -1
- package/dist/version.d.ts +7 -4
- package/dist/version.js +5 -5
- package/dist/version.js.map +1 -1
- package/package.json +9 -3
- package/src/block_migrations.test.ts +184 -14
- package/src/block_migrations.ts +185 -30
- package/src/block_model.ts +111 -66
- package/src/block_storage.test.ts +147 -3
- package/src/block_storage.ts +43 -8
- package/src/block_storage_callbacks.ts +9 -4
- package/src/env_value.ts +0 -2
- package/src/filters/distill.ts +17 -6
- package/src/index.ts +12 -11
- package/src/internal.ts +0 -1
- package/src/platforma.ts +4 -4
- package/src/plugin_handle.ts +1 -1
- package/src/plugin_model.test.ts +217 -21
- package/src/plugin_model.ts +450 -55
- package/src/raw_globals.ts +0 -1
- package/dist/annotations/converter.d.ts.map +0 -1
- package/dist/annotations/index.d.ts.map +0 -1
- package/dist/annotations/types.d.ts.map +0 -1
- package/dist/bconfig/index.d.ts.map +0 -1
- package/dist/bconfig/lambdas.d.ts.map +0 -1
- package/dist/bconfig/normalization.d.ts.map +0 -1
- package/dist/bconfig/types.d.ts.map +0 -1
- package/dist/bconfig/util.d.ts.map +0 -1
- package/dist/bconfig/v3.d.ts.map +0 -1
- package/dist/block_api_v1.d.ts.map +0 -1
- package/dist/block_api_v2.d.ts.map +0 -1
- package/dist/block_api_v3.d.ts.map +0 -1
- package/dist/block_migrations.d.ts.map +0 -1
- package/dist/block_model.d.ts.map +0 -1
- package/dist/block_model_legacy.d.ts.map +0 -1
- package/dist/block_state_patch.d.ts.map +0 -1
- package/dist/block_state_util.d.ts.map +0 -1
- package/dist/block_storage.d.ts.map +0 -1
- package/dist/block_storage_callbacks.d.ts +0 -115
- package/dist/block_storage_callbacks.d.ts.map +0 -1
- package/dist/block_storage_facade.d.ts.map +0 -1
- package/dist/components/PFrameForGraphs.d.ts.map +0 -1
- package/dist/components/PlAnnotations/filter.d.ts.map +0 -1
- package/dist/components/PlAnnotations/filters_ui.d.ts.map +0 -1
- package/dist/components/PlAnnotations/index.d.ts.map +0 -1
- package/dist/components/PlAnnotations/types.d.ts +0 -3
- package/dist/components/PlAnnotations/types.d.ts.map +0 -1
- package/dist/components/PlDataTable/index.d.ts.map +0 -1
- package/dist/components/PlDataTable/labels.d.ts +0 -7
- package/dist/components/PlDataTable/labels.d.ts.map +0 -1
- package/dist/components/PlDataTable/state-migration.d.ts.map +0 -1
- package/dist/components/PlDataTable/table.d.ts.map +0 -1
- package/dist/components/PlDataTable/v4.d.ts.map +0 -1
- package/dist/components/PlDataTable/v5.d.ts.map +0 -1
- package/dist/components/PlMultiSequenceAlignment.d.ts.map +0 -1
- package/dist/components/PlSelectionModel.d.ts.map +0 -1
- package/dist/components/index.d.ts.map +0 -1
- package/dist/config/actions.d.ts.map +0 -1
- package/dist/config/actions_kinds.d.ts.map +0 -1
- package/dist/config/index.d.ts.map +0 -1
- package/dist/config/model.d.ts.map +0 -1
- package/dist/config/model_meta.d.ts.map +0 -1
- package/dist/config/type_engine.d.ts.map +0 -1
- package/dist/config/type_util.d.ts.map +0 -1
- package/dist/env_value.d.ts.map +0 -1
- package/dist/filters/converters/filterToQuery.d.ts.map +0 -1
- package/dist/filters/converters/filterUiToExpressionImpl.d.ts.map +0 -1
- package/dist/filters/converters/index.d.ts.map +0 -1
- package/dist/filters/distill.d.ts.map +0 -1
- package/dist/filters/index.d.ts.map +0 -1
- package/dist/filters/traverse.d.ts +0 -27
- package/dist/filters/traverse.d.ts.map +0 -1
- package/dist/filters/types.d.ts.map +0 -1
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/internal.d.ts +0 -36
- package/dist/internal.d.ts.map +0 -1
- package/dist/package.json.cjs +0 -6
- package/dist/package.json.cjs.map +0 -1
- package/dist/package.json.js +0 -4
- package/dist/package.json.js.map +0 -1
- package/dist/pframe.d.ts.map +0 -1
- package/dist/pframe_utils/axes.d.ts.map +0 -1
- package/dist/pframe_utils/columns.d.ts.map +0 -1
- package/dist/pframe_utils/index.d.ts.map +0 -1
- package/dist/pframe_utils/querySpec.d.ts +0 -2
- package/dist/pframe_utils/querySpec.d.ts.map +0 -1
- package/dist/platforma.d.ts.map +0 -1
- package/dist/plugin_handle.d.ts.map +0 -1
- package/dist/plugin_model.d.ts.map +0 -1
- package/dist/raw_globals.d.ts.map +0 -1
- package/dist/ref_util.d.ts.map +0 -1
- package/dist/render/accessor.d.ts.map +0 -1
- package/dist/render/api.d.ts.map +0 -1
- package/dist/render/future.d.ts.map +0 -1
- package/dist/render/index.d.ts.map +0 -1
- package/dist/render/internal.d.ts.map +0 -1
- package/dist/render/traversal_ops.d.ts.map +0 -1
- package/dist/render/util/axis_filtering.d.ts.map +0 -1
- package/dist/render/util/column_collection.d.ts.map +0 -1
- package/dist/render/util/index.d.ts.map +0 -1
- package/dist/render/util/label.d.ts.map +0 -1
- package/dist/render/util/pcolumn_data.d.ts.map +0 -1
- package/dist/render/util/pframe_upgraders.d.ts +0 -3
- package/dist/render/util/pframe_upgraders.d.ts.map +0 -1
- package/dist/render/util/split_selectors.d.ts.map +0 -1
- package/dist/version.d.ts.map +0 -1
|
@@ -1,29 +1,37 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
//#region src/block_migrations.d.ts
|
|
2
|
+
type DataVersionKey = string;
|
|
3
|
+
type DataMigrateFn<From, To> = (prev: Readonly<From>) => To;
|
|
4
|
+
type DataCreateFn<T> = () => T;
|
|
5
|
+
type DataRecoverFn<T> = (version: DataVersionKey, data: unknown) => T;
|
|
6
|
+
/**
|
|
7
|
+
* Minimal interface that .transfer() accepts. PluginInstance implements this.
|
|
8
|
+
* Defined here to avoid circular dependency with plugin_model.ts.
|
|
9
|
+
*/
|
|
10
|
+
interface TransferTarget<Id extends string = string, TransferData = never> {
|
|
11
|
+
readonly id: Id;
|
|
12
|
+
/** Version key in the plugin's data model chain where transferred data enters. */
|
|
13
|
+
readonly transferVersion: string;
|
|
14
|
+
/** @internal Phantom field for TransferData type extraction */
|
|
15
|
+
readonly __transferBrand?: TransferData;
|
|
16
|
+
}
|
|
17
|
+
/** Internal record of a single transfer step in the migration chain. */
|
|
18
|
+
type TransferStep = {
|
|
19
|
+
pluginId: string; /** Capture data before this step index executes. */
|
|
20
|
+
beforeStepIndex: number;
|
|
21
|
+
extract: (data: unknown) => unknown; /** Version key in the plugin's data model chain where the transferred data enters. */
|
|
22
|
+
targetVersion: string;
|
|
23
|
+
};
|
|
24
|
+
/** Map of plugin ID → versioned data extracted during migration. */
|
|
25
|
+
type TransferRecord = Record<string, DataVersioned<unknown>>;
|
|
5
26
|
/** Versioned data wrapper for persistence */
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
27
|
+
type DataVersioned<T> = {
|
|
28
|
+
version: DataVersionKey;
|
|
29
|
+
data: T;
|
|
9
30
|
};
|
|
10
|
-
/** Create a DataVersioned wrapper with correct shape */
|
|
11
|
-
export declare function makeDataVersioned<T>(version: DataVersionKey, data: T): DataVersioned<T>;
|
|
12
|
-
/** Thrown when a migration step fails. */
|
|
13
|
-
export declare class DataMigrationError extends Error {
|
|
14
|
-
name: string;
|
|
15
|
-
constructor(message: string);
|
|
16
|
-
}
|
|
17
|
-
/** Thrown by recover() to signal unrecoverable data. */
|
|
18
|
-
export declare class DataUnrecoverableError extends Error {
|
|
19
|
-
name: string;
|
|
20
|
-
constructor(dataVersion: DataVersionKey);
|
|
21
|
-
}
|
|
22
|
-
export declare function isDataUnrecoverableError(error: unknown): error is DataUnrecoverableError;
|
|
23
31
|
type MigrationStep = {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
32
|
+
fromVersion: DataVersionKey;
|
|
33
|
+
toVersion: DataVersionKey;
|
|
34
|
+
migrate: (data: unknown) => unknown;
|
|
27
35
|
};
|
|
28
36
|
/**
|
|
29
37
|
* Default recover function for unknown versions.
|
|
@@ -37,27 +45,27 @@ type MigrationStep = {
|
|
|
37
45
|
* return defaultRecover(version, data);
|
|
38
46
|
* })
|
|
39
47
|
*/
|
|
40
|
-
export declare const defaultRecover: DataRecoverFn<never>;
|
|
41
48
|
/** Symbol for internal builder creation method */
|
|
42
49
|
declare const FROM_BUILDER: unique symbol;
|
|
43
50
|
/** Legacy V1 model state shape: { args, uiState } */
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
51
|
+
type LegacyV1State<Args, UiState> = {
|
|
52
|
+
args: Args;
|
|
53
|
+
uiState: UiState;
|
|
47
54
|
};
|
|
48
55
|
/** Internal state passed from builder to DataModel */
|
|
49
56
|
type BuilderState<S> = {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
+
versionChain: DataVersionKey[];
|
|
58
|
+
steps: MigrationStep[];
|
|
59
|
+
transferSteps: TransferStep[];
|
|
60
|
+
initialDataFn: () => S;
|
|
61
|
+
recoverFn?: (version: DataVersionKey, data: unknown) => unknown;
|
|
62
|
+
/** Index of the first step to run after recovery. Equals the number of steps
|
|
63
|
+
* present at the time recover() was called. */
|
|
64
|
+
recoverFromIndex?: number;
|
|
57
65
|
};
|
|
58
66
|
type RecoverState = {
|
|
59
|
-
|
|
60
|
-
|
|
67
|
+
recoverFn?: (version: DataVersionKey, data: unknown) => unknown;
|
|
68
|
+
recoverFromIndex?: number;
|
|
61
69
|
};
|
|
62
70
|
/**
|
|
63
71
|
* Abstract base for both migration chain types.
|
|
@@ -68,52 +76,66 @@ type RecoverState = {
|
|
|
68
76
|
*
|
|
69
77
|
* @internal
|
|
70
78
|
*/
|
|
71
|
-
declare abstract class MigrationChainBase<Current> {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
79
|
+
declare abstract class MigrationChainBase<Current, Transfers extends Record<string, unknown> = {}> {
|
|
80
|
+
protected readonly versionChain: DataVersionKey[];
|
|
81
|
+
protected readonly migrationSteps: MigrationStep[];
|
|
82
|
+
protected readonly transferSteps: TransferStep[];
|
|
83
|
+
protected constructor(state: {
|
|
84
|
+
versionChain: DataVersionKey[];
|
|
85
|
+
steps: MigrationStep[];
|
|
86
|
+
transferSteps?: TransferStep[];
|
|
87
|
+
});
|
|
88
|
+
/** Appends a migration step and returns the new versionChain and steps arrays. */
|
|
89
|
+
protected buildStep<Next>(nextVersion: string, fn: DataMigrateFn<Current, Next>): {
|
|
90
|
+
versionChain: DataVersionKey[];
|
|
91
|
+
steps: MigrationStep[];
|
|
92
|
+
};
|
|
93
|
+
/** Validates uniqueness and records a TransferStep. */
|
|
94
|
+
protected buildTransfer<Id extends string, L>(target: TransferTarget<Id, L>, extract: (data: Current) => L): {
|
|
95
|
+
transferSteps: TransferStep[];
|
|
96
|
+
};
|
|
97
|
+
/** Returns recover-specific fields for DataModel construction. Overridden by WithRecover. */
|
|
98
|
+
protected recoverState(): RecoverState;
|
|
99
|
+
/**
|
|
100
|
+
* Finalize the DataModel with initial data factory.
|
|
101
|
+
*
|
|
102
|
+
* @param initialData - Factory function returning the initial state
|
|
103
|
+
* @returns Finalized DataModel instance
|
|
104
|
+
*/
|
|
105
|
+
init(initialData: DataCreateFn<Current>): DataModel<Current, Transfers>;
|
|
92
106
|
}
|
|
93
107
|
/**
|
|
94
108
|
* Migration chain after recover() or upgradeLegacy() has been called.
|
|
95
|
-
* Further migrate() calls are allowed; recover() and upgradeLegacy() are not
|
|
109
|
+
* Further migrate() and transfer() calls are allowed; recover() and upgradeLegacy() are not
|
|
96
110
|
* (enforced by type — no such methods on this class).
|
|
97
111
|
*
|
|
98
112
|
* @typeParam Current - Data type at the current point in the chain
|
|
113
|
+
* @typeParam Transfers - Accumulated transfer types keyed by plugin ID
|
|
99
114
|
* @internal
|
|
100
115
|
*/
|
|
101
|
-
declare class DataModelMigrationChainWithRecover<Current> extends MigrationChainBase<Current> {
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
116
|
+
declare class DataModelMigrationChainWithRecover<Current, Transfers extends Record<string, unknown> = {}> extends MigrationChainBase<Current, Transfers> {
|
|
117
|
+
private readonly recoverFn?;
|
|
118
|
+
private readonly recoverFromIndex?;
|
|
119
|
+
/** @internal */
|
|
120
|
+
constructor(state: {
|
|
121
|
+
versionChain: DataVersionKey[];
|
|
122
|
+
steps: MigrationStep[];
|
|
123
|
+
transferSteps?: TransferStep[];
|
|
124
|
+
recoverFn?: (version: DataVersionKey, data: unknown) => unknown;
|
|
125
|
+
recoverFromIndex?: number;
|
|
126
|
+
});
|
|
127
|
+
protected recoverState(): RecoverState;
|
|
128
|
+
/**
|
|
129
|
+
* Add a migration step. Same semantics as on the base chain.
|
|
130
|
+
* recover() and upgradeLegacy() are not available — one has already been called.
|
|
131
|
+
*/
|
|
132
|
+
migrate<Next>(nextVersion: string, fn: DataMigrateFn<Current, Next>): DataModelMigrationChainWithRecover<Next, Transfers>;
|
|
133
|
+
/**
|
|
134
|
+
* Extract data at the current chain position for seeding a new plugin.
|
|
135
|
+
* The extract function's return type must match the plugin's transfer data type.
|
|
136
|
+
* Duplicate plugin IDs are rejected at both type and runtime level.
|
|
137
|
+
*/
|
|
138
|
+
transfer<Id extends string, L>(target: TransferTarget<Id & (Id extends keyof Transfers ? never : string), L>, extract: (data: Current) => L): DataModelMigrationChainWithRecover<Current, Transfers & Record<Id, L>>;
|
|
117
139
|
}
|
|
118
140
|
/**
|
|
119
141
|
* Migration chain builder.
|
|
@@ -122,50 +144,70 @@ declare class DataModelMigrationChainWithRecover<Current> extends MigrationChain
|
|
|
122
144
|
* Duplicate version keys throw at runtime.
|
|
123
145
|
*
|
|
124
146
|
* @typeParam Current - Data type at the current point in the migration chain
|
|
147
|
+
* @typeParam Transfers - Accumulated transfer types keyed by plugin ID
|
|
125
148
|
* @internal
|
|
126
149
|
*/
|
|
127
|
-
declare class DataModelMigrationChain<Current> extends MigrationChainBase<Current> {
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
150
|
+
declare class DataModelMigrationChain<Current, Transfers extends Record<string, unknown> = {}> extends MigrationChainBase<Current, Transfers> {
|
|
151
|
+
/** @internal */
|
|
152
|
+
constructor({
|
|
153
|
+
versionChain,
|
|
154
|
+
steps,
|
|
155
|
+
transferSteps
|
|
156
|
+
}: {
|
|
157
|
+
versionChain: DataVersionKey[];
|
|
158
|
+
steps?: MigrationStep[];
|
|
159
|
+
transferSteps?: TransferStep[];
|
|
160
|
+
});
|
|
161
|
+
/**
|
|
162
|
+
* Add a migration step transforming data from the current version to the next.
|
|
163
|
+
*
|
|
164
|
+
* @typeParam Next - Data type of the next version
|
|
165
|
+
* @param nextVersion - Version key to migrate to (must be unique in the chain)
|
|
166
|
+
* @param fn - Migration function
|
|
167
|
+
* @returns Builder with the next version as current
|
|
168
|
+
*
|
|
169
|
+
* @example
|
|
170
|
+
* .migrate<BlockDataV2>("v2", (v1) => ({ ...v1, labels: [] }))
|
|
171
|
+
*/
|
|
172
|
+
migrate<Next>(nextVersion: string, fn: DataMigrateFn<Current, Next>): DataModelMigrationChain<Next, Transfers>;
|
|
173
|
+
/**
|
|
174
|
+
* Extract data at the current chain position for seeding a new plugin.
|
|
175
|
+
* The extract function's return type must match the plugin's transfer data type.
|
|
176
|
+
* Duplicate plugin IDs are rejected at both type and runtime level.
|
|
177
|
+
*
|
|
178
|
+
* Calling .transfer() on DataModelInitialChain returns DataModelMigrationChain,
|
|
179
|
+
* which removes .upgradeLegacy() from the chain (preventing a problematic combination).
|
|
180
|
+
*
|
|
181
|
+
* @example
|
|
182
|
+
* .from<V1>("v1")
|
|
183
|
+
* .transfer(tablePlugin, (v1) => ({ state: v1.tableState }))
|
|
184
|
+
* .migrate<V2>("v2", ({ tableState: _, ...rest }) => rest)
|
|
185
|
+
*/
|
|
186
|
+
transfer<Id extends string, L>(target: TransferTarget<Id & (Id extends keyof Transfers ? never : string), L>, extract: (data: Current) => L): DataModelMigrationChain<Current, Transfers & Record<Id, L>>;
|
|
187
|
+
/**
|
|
188
|
+
* Set a recovery handler for unknown or legacy versions.
|
|
189
|
+
*
|
|
190
|
+
* The recover function is called when data has a version not in the migration chain.
|
|
191
|
+
* It must return data of the type at this point in the chain (Current). Any migrate()
|
|
192
|
+
* steps added after recover() will then run on the recovered data.
|
|
193
|
+
*
|
|
194
|
+
* Can only be called once — the returned chain has no recover() method.
|
|
195
|
+
*
|
|
196
|
+
* @param fn - Recovery function returning Current (the type at this chain position)
|
|
197
|
+
* @returns Builder with migrate() and init() but without recover()
|
|
198
|
+
*
|
|
199
|
+
* @example
|
|
200
|
+
* // Recover between migrations — recovered data goes through v3 migration
|
|
201
|
+
* new DataModelBuilder<V1>("v1")
|
|
202
|
+
* .migrate<V2>("v2", (v1) => ({ ...v1, label: "" }))
|
|
203
|
+
* .recover((version, data) => {
|
|
204
|
+
* if (version === 'legacy') return transformLegacy(data); // returns V2
|
|
205
|
+
* return defaultRecover(version, data);
|
|
206
|
+
* })
|
|
207
|
+
* .migrate<V3>("v3", (v2) => ({ ...v2, description: "" }))
|
|
208
|
+
* .init(() => ({ count: 0, label: "", description: "" }));
|
|
209
|
+
*/
|
|
210
|
+
recover(fn: DataRecoverFn<Current>): DataModelMigrationChainWithRecover<Current, Transfers>;
|
|
169
211
|
}
|
|
170
212
|
/**
|
|
171
213
|
* Initial migration chain returned by `.from()`.
|
|
@@ -173,44 +215,45 @@ declare class DataModelMigrationChain<Current> extends MigrationChainBase<Curren
|
|
|
173
215
|
* any `.migrate()` calls, since legacy data always arrives at the initial version.
|
|
174
216
|
*
|
|
175
217
|
* @typeParam Current - Data type at the initial version
|
|
218
|
+
* @typeParam Transfers - Accumulated transfer types keyed by plugin ID
|
|
176
219
|
* @internal
|
|
177
220
|
*/
|
|
178
|
-
declare class DataModelInitialChain<Current> extends DataModelMigrationChain<Current> {
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
221
|
+
declare class DataModelInitialChain<Current, Transfers extends Record<string, unknown> = {}> extends DataModelMigrationChain<Current, Transfers> {
|
|
222
|
+
/**
|
|
223
|
+
* Handle legacy V1 model state ({ args, uiState }) when upgrading a block from
|
|
224
|
+
* BlockModel V1 to BlockModelV3.
|
|
225
|
+
*
|
|
226
|
+
* When a V1 block is upgraded, its stored state `{ args, uiState }` is normalized
|
|
227
|
+
* to the internal default version. This method inserts a migration step from that
|
|
228
|
+
* internal version to the version specified in `.from()`, using the provided typed
|
|
229
|
+
* callback to transform the legacy shape. Non-legacy data passes through unchanged.
|
|
230
|
+
*
|
|
231
|
+
* Must be called right after `.from()` — not available after `.migrate()` calls.
|
|
232
|
+
* Any `.migrate()` steps added after `upgradeLegacy()` will run on the transformed result.
|
|
233
|
+
*
|
|
234
|
+
* Can only be called once — the returned chain has no upgradeLegacy() method.
|
|
235
|
+
* Mutually exclusive with recover().
|
|
236
|
+
*
|
|
237
|
+
* @typeParam Args - Type of the legacy block args
|
|
238
|
+
* @typeParam UiState - Type of the legacy block uiState
|
|
239
|
+
* @param fn - Typed transform from { args, uiState } to Current
|
|
240
|
+
* @returns Builder with migrate() and init() but without recover() or upgradeLegacy()
|
|
241
|
+
*
|
|
242
|
+
* @example
|
|
243
|
+
* type OldArgs = { inputFile: string; threshold: number };
|
|
244
|
+
* type OldUiState = { selectedTab: string };
|
|
245
|
+
* type BlockData = { inputFile: string; threshold: number; selectedTab: string };
|
|
246
|
+
*
|
|
247
|
+
* const dataModel = new DataModelBuilder()
|
|
248
|
+
* .from<BlockData>("v1")
|
|
249
|
+
* .upgradeLegacy<OldArgs, OldUiState>(({ args, uiState }) => ({
|
|
250
|
+
* inputFile: args.inputFile,
|
|
251
|
+
* threshold: args.threshold,
|
|
252
|
+
* selectedTab: uiState.selectedTab,
|
|
253
|
+
* }))
|
|
254
|
+
* .init(() => ({ inputFile: '', threshold: 0, selectedTab: 'main' }));
|
|
255
|
+
*/
|
|
256
|
+
upgradeLegacy<Args, UiState = unknown>(fn: (legacy: LegacyV1State<Args, UiState>) => Current): DataModelMigrationChainWithRecover<Current, Transfers>;
|
|
214
257
|
}
|
|
215
258
|
/**
|
|
216
259
|
* Builder entry point for creating DataModel with type-safe migrations.
|
|
@@ -258,15 +301,15 @@ declare class DataModelInitialChain<Current> extends DataModelMigrationChain<Cur
|
|
|
258
301
|
* }))
|
|
259
302
|
* .init(() => ({ inputFile: '', selectedTab: 'main' }));
|
|
260
303
|
*/
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
304
|
+
declare class DataModelBuilder {
|
|
305
|
+
/**
|
|
306
|
+
* Start the migration chain with the given initial data type and version key.
|
|
307
|
+
*
|
|
308
|
+
* @typeParam T - Data type for the initial version
|
|
309
|
+
* @param initialVersion - Version key string (e.g. "v1")
|
|
310
|
+
* @returns Migration chain builder
|
|
311
|
+
*/
|
|
312
|
+
from<T>(initialVersion: string): DataModelInitialChain<T>;
|
|
270
313
|
}
|
|
271
314
|
/**
|
|
272
315
|
* DataModel defines the block's data structure, initial values, and migrations.
|
|
@@ -287,48 +330,59 @@ export declare class DataModelBuilder {
|
|
|
287
330
|
* .migrate<V3>("v3", (v2) => ({ ...v2, description: "" }))
|
|
288
331
|
* .init(() => ({ count: 0, label: "", description: "" }));
|
|
289
332
|
*/
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
333
|
+
declare class DataModel<State, Transfers extends Record<string, unknown> = {}> {
|
|
334
|
+
/** @internal Phantom field to anchor the Transfers type parameter. */
|
|
335
|
+
readonly __transfers?: Transfers;
|
|
336
|
+
/** Latest version key — O(1) access for the common "already current" check. */
|
|
337
|
+
private readonly latestVersion;
|
|
338
|
+
/** Maps each known version key to the index of the first step to run from it. O(1) lookup. */
|
|
339
|
+
private readonly stepsByFromVersion;
|
|
340
|
+
private readonly steps;
|
|
341
|
+
private readonly transferSteps;
|
|
342
|
+
private readonly initialDataFn;
|
|
343
|
+
private readonly recoverFn;
|
|
344
|
+
private readonly recoverFromIndex;
|
|
345
|
+
private constructor();
|
|
346
|
+
/**
|
|
347
|
+
* Internal method for creating DataModel from builder.
|
|
348
|
+
* Uses Symbol key to prevent external access.
|
|
349
|
+
* @internal
|
|
350
|
+
*/
|
|
351
|
+
static [FROM_BUILDER]<S, T extends Record<string, unknown> = {}>(state: BuilderState<S>): DataModel<S, T>;
|
|
352
|
+
/**
|
|
353
|
+
* The latest (current) version key in the migration chain.
|
|
354
|
+
*/
|
|
355
|
+
get version(): DataVersionKey;
|
|
356
|
+
/**
|
|
357
|
+
* Get a fresh copy of the initial data.
|
|
358
|
+
*/
|
|
359
|
+
initialData(): State;
|
|
360
|
+
/**
|
|
361
|
+
* Get initial data wrapped with current version.
|
|
362
|
+
* Used when creating new blocks or resetting to defaults.
|
|
363
|
+
*/
|
|
364
|
+
getDefaultData(): DataVersioned<State>;
|
|
365
|
+
private recoverFrom;
|
|
366
|
+
/**
|
|
367
|
+
* Migrate versioned data from any version to the latest.
|
|
368
|
+
* Collects transfer extractions at their designated chain positions.
|
|
369
|
+
*
|
|
370
|
+
* - If version is in chain, applies needed migrations (O(1) lookup)
|
|
371
|
+
* - If version is unknown, attempts recovery; falls back to initial data
|
|
372
|
+
* - If a migration step fails, throws so the caller can preserve original data
|
|
373
|
+
*
|
|
374
|
+
* Transfers only fire during normal step-by-step migration:
|
|
375
|
+
* - Recovery path: returns empty transfers
|
|
376
|
+
* - Fast-path (already at latest): returns empty transfers
|
|
377
|
+
*
|
|
378
|
+
* @param versioned - Data with version tag
|
|
379
|
+
* @returns Migrated data at the latest version with transfer record
|
|
380
|
+
* @throws If a migration step from a known version fails
|
|
381
|
+
*/
|
|
382
|
+
migrate(versioned: DataVersioned<unknown>): DataVersioned<State> & {
|
|
383
|
+
transfers: TransferRecord;
|
|
384
|
+
};
|
|
332
385
|
}
|
|
333
|
-
|
|
386
|
+
//#endregion
|
|
387
|
+
export { DataModel, DataModelBuilder, DataRecoverFn, DataVersioned, TransferRecord, TransferTarget };
|
|
334
388
|
//# sourceMappingURL=block_migrations.d.ts.map
|