@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.
Files changed (55) hide show
  1. package/dist/index.cjs +0 -58
  2. package/dist/index.cjs.map +1 -1
  3. package/dist/index.js +0 -2
  4. package/dist/index.js.map +1 -1
  5. package/dist/middle_layer/frontend_path.cjs +0 -1
  6. package/dist/middle_layer/frontend_path.cjs.map +1 -1
  7. package/dist/middle_layer/frontend_path.js +0 -1
  8. package/dist/middle_layer/frontend_path.js.map +1 -1
  9. package/dist/middle_layer/middle_layer.cjs +5 -1
  10. package/dist/middle_layer/middle_layer.cjs.map +1 -1
  11. package/dist/middle_layer/middle_layer.d.ts +3 -1
  12. package/dist/middle_layer/middle_layer.d.ts.map +1 -1
  13. package/dist/middle_layer/middle_layer.js +5 -1
  14. package/dist/middle_layer/middle_layer.js.map +1 -1
  15. package/dist/middle_layer/project.cjs +8 -6
  16. package/dist/middle_layer/project.cjs.map +1 -1
  17. package/dist/middle_layer/project.d.ts.map +1 -1
  18. package/dist/middle_layer/project.js +9 -7
  19. package/dist/middle_layer/project.js.map +1 -1
  20. package/dist/middle_layer/project_overview.cjs +2 -2
  21. package/dist/middle_layer/project_overview.cjs.map +1 -1
  22. package/dist/middle_layer/project_overview.js +3 -3
  23. package/dist/middle_layer/project_overview.js.map +1 -1
  24. package/dist/model/index.d.ts +0 -1
  25. package/dist/model/index.d.ts.map +1 -1
  26. package/dist/model/project_helper.cjs +20 -32
  27. package/dist/model/project_helper.cjs.map +1 -1
  28. package/dist/model/project_helper.d.ts +3 -4
  29. package/dist/model/project_helper.d.ts.map +1 -1
  30. package/dist/model/project_helper.js +21 -33
  31. package/dist/model/project_helper.js.map +1 -1
  32. package/dist/mutator/block-pack/frontend.cjs +0 -1
  33. package/dist/mutator/block-pack/frontend.cjs.map +1 -1
  34. package/dist/mutator/block-pack/frontend.js +0 -1
  35. package/dist/mutator/block-pack/frontend.js.map +1 -1
  36. package/dist/mutator/project.cjs +28 -35
  37. package/dist/mutator/project.cjs.map +1 -1
  38. package/dist/mutator/project.d.ts.map +1 -1
  39. package/dist/mutator/project.js +29 -36
  40. package/dist/mutator/project.js.map +1 -1
  41. package/package.json +13 -13
  42. package/src/middle_layer/middle_layer.ts +7 -2
  43. package/src/middle_layer/project.ts +12 -7
  44. package/src/middle_layer/project_overview.ts +3 -3
  45. package/src/model/index.ts +0 -1
  46. package/src/model/project_helper.ts +33 -37
  47. package/src/mutator/project-v3.test.ts +9 -9
  48. package/src/mutator/project.ts +50 -74
  49. package/dist/model/block_storage_helper.cjs +0 -210
  50. package/dist/model/block_storage_helper.cjs.map +0 -1
  51. package/dist/model/block_storage_helper.d.ts +0 -98
  52. package/dist/model/block_storage_helper.d.ts.map +0 -1
  53. package/dist/model/block_storage_helper.js +0 -153
  54. package/dist/model/block_storage_helper.js.map +0 -1
  55. 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
- }