@milaboratories/pl-middle-layer 1.46.34 → 1.47.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.
- package/dist/index.cjs +0 -58
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +0 -2
- package/dist/index.js.map +1 -1
- package/dist/middle_layer/frontend_path.cjs +0 -1
- package/dist/middle_layer/frontend_path.cjs.map +1 -1
- package/dist/middle_layer/frontend_path.js +0 -1
- package/dist/middle_layer/frontend_path.js.map +1 -1
- package/dist/middle_layer/middle_layer.cjs +5 -1
- package/dist/middle_layer/middle_layer.cjs.map +1 -1
- package/dist/middle_layer/middle_layer.d.ts +3 -1
- package/dist/middle_layer/middle_layer.d.ts.map +1 -1
- package/dist/middle_layer/middle_layer.js +5 -1
- package/dist/middle_layer/middle_layer.js.map +1 -1
- package/dist/middle_layer/project.cjs +8 -6
- package/dist/middle_layer/project.cjs.map +1 -1
- package/dist/middle_layer/project.d.ts.map +1 -1
- package/dist/middle_layer/project.js +9 -7
- package/dist/middle_layer/project.js.map +1 -1
- package/dist/middle_layer/project_overview.cjs +2 -2
- package/dist/middle_layer/project_overview.cjs.map +1 -1
- package/dist/middle_layer/project_overview.js +3 -3
- package/dist/middle_layer/project_overview.js.map +1 -1
- package/dist/model/index.d.ts +0 -1
- package/dist/model/index.d.ts.map +1 -1
- package/dist/model/project_helper.cjs +20 -32
- package/dist/model/project_helper.cjs.map +1 -1
- package/dist/model/project_helper.d.ts +3 -4
- package/dist/model/project_helper.d.ts.map +1 -1
- package/dist/model/project_helper.js +21 -33
- package/dist/model/project_helper.js.map +1 -1
- package/dist/mutator/block-pack/frontend.cjs +0 -1
- package/dist/mutator/block-pack/frontend.cjs.map +1 -1
- package/dist/mutator/block-pack/frontend.js +0 -1
- package/dist/mutator/block-pack/frontend.js.map +1 -1
- package/dist/mutator/project.cjs +28 -35
- package/dist/mutator/project.cjs.map +1 -1
- package/dist/mutator/project.d.ts.map +1 -1
- package/dist/mutator/project.js +29 -36
- package/dist/mutator/project.js.map +1 -1
- package/package.json +13 -13
- package/src/middle_layer/middle_layer.ts +7 -2
- package/src/middle_layer/project.ts +12 -7
- package/src/middle_layer/project_overview.ts +3 -3
- package/src/model/index.ts +0 -1
- package/src/model/project_helper.ts +33 -37
- package/src/mutator/project-v3.test.ts +9 -9
- package/src/mutator/project.ts +50 -74
- package/dist/model/block_storage_helper.cjs +0 -210
- package/dist/model/block_storage_helper.cjs.map +0 -1
- package/dist/model/block_storage_helper.d.ts +0 -98
- package/dist/model/block_storage_helper.d.ts.map +0 -1
- package/dist/model/block_storage_helper.js +0 -153
- package/dist/model/block_storage_helper.js.map +0 -1
- package/src/model/block_storage_helper.ts +0 -213
|
@@ -1,213 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Block Storage Helper - Middle layer utilities for BlockStorage operations.
|
|
3
|
-
*
|
|
4
|
-
* This module provides the bridge between the SDK's BlockStorage abstraction
|
|
5
|
-
* and the middle layer's storage operations. Block developers never interact
|
|
6
|
-
* with this - they only see `state`.
|
|
7
|
-
*
|
|
8
|
-
* @module block_storage_helper
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
import type { BlockStorage, BlockStorageHandlers } from "@platforma-sdk/model";
|
|
12
|
-
import {
|
|
13
|
-
BLOCK_STORAGE_KEY,
|
|
14
|
-
BLOCK_STORAGE_SCHEMA_VERSION,
|
|
15
|
-
createBlockStorage,
|
|
16
|
-
defaultBlockStorageHandlers,
|
|
17
|
-
getPluginData,
|
|
18
|
-
getStorageData,
|
|
19
|
-
getStorageDataVersion,
|
|
20
|
-
isBlockStorage,
|
|
21
|
-
normalizeBlockStorage,
|
|
22
|
-
setPluginData,
|
|
23
|
-
updateStorageData,
|
|
24
|
-
updateStorageDataVersion,
|
|
25
|
-
} from "@platforma-sdk/model";
|
|
26
|
-
|
|
27
|
-
// Re-export types for convenience
|
|
28
|
-
export type { BlockStorage, BlockStorageHandlers };
|
|
29
|
-
|
|
30
|
-
// Re-export utilities that middle layer needs
|
|
31
|
-
export {
|
|
32
|
-
BLOCK_STORAGE_KEY,
|
|
33
|
-
BLOCK_STORAGE_SCHEMA_VERSION,
|
|
34
|
-
createBlockStorage,
|
|
35
|
-
defaultBlockStorageHandlers,
|
|
36
|
-
getPluginData,
|
|
37
|
-
getStorageData,
|
|
38
|
-
getStorageDataVersion,
|
|
39
|
-
isBlockStorage,
|
|
40
|
-
normalizeBlockStorage,
|
|
41
|
-
setPluginData,
|
|
42
|
-
updateStorageData,
|
|
43
|
-
updateStorageDataVersion,
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* Parses raw blockStorage data (from resource tree) into BlockStorage.
|
|
48
|
-
* Handles both legacy format (raw state) and new format (BlockStorage).
|
|
49
|
-
*
|
|
50
|
-
* @param rawData - Raw data from blockStorage field (may be string or parsed object)
|
|
51
|
-
* @returns Normalized BlockStorage object
|
|
52
|
-
*/
|
|
53
|
-
export function parseBlockStorage<TState = unknown>(rawData: unknown): BlockStorage<TState> {
|
|
54
|
-
if (rawData === undefined || rawData === null) {
|
|
55
|
-
return createBlockStorage<TState>({} as TState);
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
// If it's a string, parse it first
|
|
59
|
-
if (typeof rawData === "string") {
|
|
60
|
-
try {
|
|
61
|
-
const parsed = JSON.parse(rawData);
|
|
62
|
-
return normalizeBlockStorage<TState>(parsed);
|
|
63
|
-
} catch {
|
|
64
|
-
// If parsing fails, treat the string as the state itself
|
|
65
|
-
return createBlockStorage(rawData as unknown as TState);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
return normalizeBlockStorage<TState>(rawData);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
* Extracts the user-facing data from BlockStorage.
|
|
74
|
-
* This is what block developers see in their .args() callbacks.
|
|
75
|
-
*
|
|
76
|
-
* @param storage - The BlockStorage object
|
|
77
|
-
* @returns The data value that developers work with
|
|
78
|
-
*/
|
|
79
|
-
export function extractDataForDeveloper<TState>(storage: BlockStorage<TState>): TState {
|
|
80
|
-
return getStorageData(storage);
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
* Creates a new BlockStorage with updated state.
|
|
85
|
-
* Used when setState is called from the frontend.
|
|
86
|
-
*
|
|
87
|
-
* @param currentStorage - Current BlockStorage (or undefined for new blocks)
|
|
88
|
-
* @param newState - New state from developer
|
|
89
|
-
* @param handlers - Optional custom handlers (defaults to standard handlers)
|
|
90
|
-
* @returns Updated BlockStorage
|
|
91
|
-
*/
|
|
92
|
-
export function applyStateUpdate<TState>(
|
|
93
|
-
currentStorage: BlockStorage<TState> | undefined,
|
|
94
|
-
newState: TState,
|
|
95
|
-
handlers: BlockStorageHandlers<TState> = defaultBlockStorageHandlers as BlockStorageHandlers<TState>,
|
|
96
|
-
): BlockStorage<TState> {
|
|
97
|
-
const storage = currentStorage ?? createBlockStorage<TState>({} as TState);
|
|
98
|
-
const transform =
|
|
99
|
-
handlers.transformStateForStorage ?? defaultBlockStorageHandlers.transformStateForStorage;
|
|
100
|
-
return transform(storage, newState) as BlockStorage<TState>;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
/**
|
|
104
|
-
* Serializes BlockStorage for writing to the resource tree.
|
|
105
|
-
*
|
|
106
|
-
* @param storage - The BlockStorage to serialize
|
|
107
|
-
* @returns JSON string
|
|
108
|
-
*/
|
|
109
|
-
export function serializeBlockStorage(storage: BlockStorage): string {
|
|
110
|
-
return JSON.stringify(storage);
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
/**
|
|
114
|
-
* Checks if the storage needs migration based on version key.
|
|
115
|
-
*
|
|
116
|
-
* @param storage - Current BlockStorage
|
|
117
|
-
* @param targetVersion - Target version key
|
|
118
|
-
* @returns true if migration is needed
|
|
119
|
-
*/
|
|
120
|
-
export function needsMigration(storage: BlockStorage, targetVersion: string): boolean {
|
|
121
|
-
return getStorageDataVersion(storage) !== targetVersion;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
/**
|
|
125
|
-
* Migrates BlockStorage from one version to another.
|
|
126
|
-
*
|
|
127
|
-
* @param storage - Current BlockStorage
|
|
128
|
-
* @param fromVersion - Source version key
|
|
129
|
-
* @param toVersion - Target version key
|
|
130
|
-
* @param handlers - Optional custom handlers
|
|
131
|
-
* @returns Migrated BlockStorage
|
|
132
|
-
*/
|
|
133
|
-
export function migrateBlockStorage<TState>(
|
|
134
|
-
storage: BlockStorage<TState>,
|
|
135
|
-
fromVersion: string,
|
|
136
|
-
toVersion: string,
|
|
137
|
-
handlers: BlockStorageHandlers<TState> = defaultBlockStorageHandlers as BlockStorageHandlers<TState>,
|
|
138
|
-
): BlockStorage<TState> {
|
|
139
|
-
const migrate = handlers.migrateStorage ?? defaultBlockStorageHandlers.migrateStorage;
|
|
140
|
-
return migrate(storage, fromVersion, toVersion) as BlockStorage<TState>;
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
/**
|
|
144
|
-
* V1/V2 legacy format - state stored as { args, uiState }
|
|
145
|
-
*/
|
|
146
|
-
export interface LegacyV1V2State {
|
|
147
|
-
args?: unknown;
|
|
148
|
-
uiState?: unknown;
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
/**
|
|
152
|
-
* Checks if the raw data is in legacy V1/V2 format.
|
|
153
|
-
* V1/V2 blocks stored { args, uiState } directly, not wrapped in BlockStorage.
|
|
154
|
-
*
|
|
155
|
-
* @param rawData - Raw data from blockStorage field
|
|
156
|
-
* @returns true if data is in legacy format
|
|
157
|
-
*/
|
|
158
|
-
export function isLegacyV1V2Format(rawData: unknown): rawData is LegacyV1V2State {
|
|
159
|
-
if (rawData === null || typeof rawData !== "object") return false;
|
|
160
|
-
// If it has the discriminator, it's BlockStorage format
|
|
161
|
-
if (isBlockStorage(rawData)) return false;
|
|
162
|
-
|
|
163
|
-
const obj = rawData as Record<string, unknown>;
|
|
164
|
-
// Legacy format has 'args' and/or 'uiState' at top level, no discriminator
|
|
165
|
-
return "args" in obj || "uiState" in obj;
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
/**
|
|
169
|
-
* Converts legacy V1/V2 format to BlockStorage.
|
|
170
|
-
* For backward compatibility with existing blocks.
|
|
171
|
-
*
|
|
172
|
-
* @param legacyData - Data in { args, uiState } format
|
|
173
|
-
* @returns BlockStorage with legacy data as state
|
|
174
|
-
*/
|
|
175
|
-
export function convertLegacyToBlockStorage(
|
|
176
|
-
legacyData: LegacyV1V2State,
|
|
177
|
-
): BlockStorage<LegacyV1V2State> {
|
|
178
|
-
return createBlockStorage(legacyData);
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
/**
|
|
182
|
-
* Smart parser that handles all storage formats:
|
|
183
|
-
* - New BlockStorage format
|
|
184
|
-
* - Legacy V1/V2 format ({ args, uiState })
|
|
185
|
-
* - Raw state (any other format)
|
|
186
|
-
*
|
|
187
|
-
* @param rawData - Raw data from blockStorage field
|
|
188
|
-
* @returns Normalized BlockStorage
|
|
189
|
-
*/
|
|
190
|
-
export function parseBlockStorageSmart<TState = unknown>(rawData: unknown): BlockStorage<TState> {
|
|
191
|
-
if (rawData === undefined || rawData === null) {
|
|
192
|
-
return createBlockStorage<TState>({} as TState);
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
// If it's a string, parse it first
|
|
196
|
-
let parsed = rawData;
|
|
197
|
-
if (typeof rawData === "string") {
|
|
198
|
-
try {
|
|
199
|
-
parsed = JSON.parse(rawData);
|
|
200
|
-
} catch {
|
|
201
|
-
// If parsing fails, treat the string as the state itself
|
|
202
|
-
return createBlockStorage(rawData as unknown as TState);
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
// Check for legacy V1/V2 format
|
|
207
|
-
if (isLegacyV1V2Format(parsed)) {
|
|
208
|
-
return convertLegacyToBlockStorage(parsed) as unknown as BlockStorage<TState>;
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
// Use standard normalization
|
|
212
|
-
return normalizeBlockStorage<TState>(parsed);
|
|
213
|
-
}
|