@milaboratories/pl-middle-layer 1.10.12

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 (179) hide show
  1. package/dist/block_registry/index.d.ts +4 -0
  2. package/dist/block_registry/index.d.ts.map +1 -0
  3. package/dist/block_registry/registry.d.ts +37 -0
  4. package/dist/block_registry/registry.d.ts.map +1 -0
  5. package/dist/block_registry/registry_spec.d.ts +12 -0
  6. package/dist/block_registry/registry_spec.d.ts.map +1 -0
  7. package/dist/block_registry/watcher.d.ts +15 -0
  8. package/dist/block_registry/watcher.d.ts.map +1 -0
  9. package/dist/block_registry/well_known_registries.d.ts +4 -0
  10. package/dist/block_registry/well_known_registries.d.ts.map +1 -0
  11. package/dist/cfg_render/executor.d.ts +8 -0
  12. package/dist/cfg_render/executor.d.ts.map +1 -0
  13. package/dist/cfg_render/operation.d.ts +29 -0
  14. package/dist/cfg_render/operation.d.ts.map +1 -0
  15. package/dist/cfg_render/renderer.d.ts +6 -0
  16. package/dist/cfg_render/renderer.d.ts.map +1 -0
  17. package/dist/cfg_render/traverse.d.ts +3 -0
  18. package/dist/cfg_render/traverse.d.ts.map +1 -0
  19. package/dist/cfg_render/util.d.ts +5 -0
  20. package/dist/cfg_render/util.d.ts.map +1 -0
  21. package/dist/dev/index.d.ts +21 -0
  22. package/dist/dev/index.d.ts.map +1 -0
  23. package/dist/dev/util.d.ts +3 -0
  24. package/dist/dev/util.d.ts.map +1 -0
  25. package/dist/index.d.ts +13 -0
  26. package/dist/index.d.ts.map +1 -0
  27. package/dist/index.js +2 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/index.mjs +3587 -0
  30. package/dist/index.mjs.map +1 -0
  31. package/dist/js_render/context.d.ts +68 -0
  32. package/dist/js_render/context.d.ts.map +1 -0
  33. package/dist/js_render/index.d.ts +6 -0
  34. package/dist/js_render/index.d.ts.map +1 -0
  35. package/dist/middle_layer/active_cfg.d.ts +6 -0
  36. package/dist/middle_layer/active_cfg.d.ts.map +1 -0
  37. package/dist/middle_layer/block.d.ts +9 -0
  38. package/dist/middle_layer/block.d.ts.map +1 -0
  39. package/dist/middle_layer/block_ctx.d.ts +20 -0
  40. package/dist/middle_layer/block_ctx.d.ts.map +1 -0
  41. package/dist/middle_layer/block_ctx_unsafe.d.ts +16 -0
  42. package/dist/middle_layer/block_ctx_unsafe.d.ts.map +1 -0
  43. package/dist/middle_layer/driver_kit.d.ts +31 -0
  44. package/dist/middle_layer/driver_kit.d.ts.map +1 -0
  45. package/dist/middle_layer/frontend_path.d.ts +6 -0
  46. package/dist/middle_layer/frontend_path.d.ts.map +1 -0
  47. package/dist/middle_layer/index.d.ts +5 -0
  48. package/dist/middle_layer/index.d.ts.map +1 -0
  49. package/dist/middle_layer/middle_layer.d.ts +78 -0
  50. package/dist/middle_layer/middle_layer.d.ts.map +1 -0
  51. package/dist/middle_layer/navigation_states.d.ts +10 -0
  52. package/dist/middle_layer/navigation_states.d.ts.map +1 -0
  53. package/dist/middle_layer/ops.d.ts +64 -0
  54. package/dist/middle_layer/ops.d.ts.map +1 -0
  55. package/dist/middle_layer/project.d.ts +110 -0
  56. package/dist/middle_layer/project.d.ts.map +1 -0
  57. package/dist/middle_layer/project_list.d.ts +11 -0
  58. package/dist/middle_layer/project_list.d.ts.map +1 -0
  59. package/dist/middle_layer/project_overview.d.ts +8 -0
  60. package/dist/middle_layer/project_overview.d.ts.map +1 -0
  61. package/dist/middle_layer/render.d.ts +6 -0
  62. package/dist/middle_layer/render.d.ts.map +1 -0
  63. package/dist/middle_layer/types.d.ts +11 -0
  64. package/dist/middle_layer/types.d.ts.map +1 -0
  65. package/dist/middle_layer/util.d.ts +3 -0
  66. package/dist/middle_layer/util.d.ts.map +1 -0
  67. package/dist/model/args.d.ts +12 -0
  68. package/dist/model/args.d.ts.map +1 -0
  69. package/dist/model/block_pack.d.ts +8 -0
  70. package/dist/model/block_pack.d.ts.map +1 -0
  71. package/dist/model/block_pack_spec.d.ts +40 -0
  72. package/dist/model/block_pack_spec.d.ts.map +1 -0
  73. package/dist/model/frontend.d.ts +10 -0
  74. package/dist/model/frontend.d.ts.map +1 -0
  75. package/dist/model/index.d.ts +3 -0
  76. package/dist/model/index.d.ts.map +1 -0
  77. package/dist/model/project_model.d.ts +67 -0
  78. package/dist/model/project_model.d.ts.map +1 -0
  79. package/dist/model/project_model_util.d.ts +29 -0
  80. package/dist/model/project_model_util.d.ts.map +1 -0
  81. package/dist/model/template_spec.d.ts +16 -0
  82. package/dist/model/template_spec.d.ts.map +1 -0
  83. package/dist/mutator/block-pack/block_pack.d.ts +17 -0
  84. package/dist/mutator/block-pack/block_pack.d.ts.map +1 -0
  85. package/dist/mutator/block-pack/frontend.d.ts +4 -0
  86. package/dist/mutator/block-pack/frontend.d.ts.map +1 -0
  87. package/dist/mutator/context_export.d.ts +9 -0
  88. package/dist/mutator/context_export.d.ts.map +1 -0
  89. package/dist/mutator/project.d.ts +121 -0
  90. package/dist/mutator/project.d.ts.map +1 -0
  91. package/dist/mutator/template/render_block.d.ts +32 -0
  92. package/dist/mutator/template/render_block.d.ts.map +1 -0
  93. package/dist/mutator/template/render_template.d.ts +12 -0
  94. package/dist/mutator/template/render_template.d.ts.map +1 -0
  95. package/dist/mutator/template/template_loading.d.ts +13 -0
  96. package/dist/mutator/template/template_loading.d.ts.map +1 -0
  97. package/dist/pool/data.d.ts +24 -0
  98. package/dist/pool/data.d.ts.map +1 -0
  99. package/dist/pool/driver.d.ts +22 -0
  100. package/dist/pool/driver.d.ts.map +1 -0
  101. package/dist/pool/index.d.ts +3 -0
  102. package/dist/pool/index.d.ts.map +1 -0
  103. package/dist/pool/p_object_collection.d.ts +29 -0
  104. package/dist/pool/p_object_collection.d.ts.map +1 -0
  105. package/dist/pool/ref_count_pool.d.ts +25 -0
  106. package/dist/pool/ref_count_pool.d.ts.map +1 -0
  107. package/dist/pool/result_pool.d.ts +25 -0
  108. package/dist/pool/result_pool.d.ts.map +1 -0
  109. package/dist/test/block_packs.d.ts +6 -0
  110. package/dist/test/block_packs.d.ts.map +1 -0
  111. package/dist/test/explicit_templates.d.ts +3 -0
  112. package/dist/test/explicit_templates.d.ts.map +1 -0
  113. package/dist/test/known_templates.d.ts +6 -0
  114. package/dist/test/known_templates.d.ts.map +1 -0
  115. package/package.json +55 -0
  116. package/src/block_registry/index.ts +3 -0
  117. package/src/block_registry/registry.test.ts +35 -0
  118. package/src/block_registry/registry.ts +180 -0
  119. package/src/block_registry/registry_spec.ts +13 -0
  120. package/src/block_registry/watcher.ts +72 -0
  121. package/src/block_registry/well_known_registries.ts +13 -0
  122. package/src/cfg_render/executor.test.ts +120 -0
  123. package/src/cfg_render/executor.ts +253 -0
  124. package/src/cfg_render/operation.ts +38 -0
  125. package/src/cfg_render/renderer.ts +540 -0
  126. package/src/cfg_render/traverse.ts +58 -0
  127. package/src/cfg_render/util.ts +29 -0
  128. package/src/dev/index.ts +89 -0
  129. package/src/dev/util.ts +13 -0
  130. package/src/index.ts +21 -0
  131. package/src/js_render/context.ts +768 -0
  132. package/src/js_render/index.ts +41 -0
  133. package/src/middle_layer/active_cfg.ts +56 -0
  134. package/src/middle_layer/block.ts +70 -0
  135. package/src/middle_layer/block_ctx.ts +90 -0
  136. package/src/middle_layer/block_ctx_unsafe.ts +29 -0
  137. package/src/middle_layer/driver_kit.ts +107 -0
  138. package/src/middle_layer/frontend_path.ts +83 -0
  139. package/src/middle_layer/index.ts +4 -0
  140. package/src/middle_layer/middle_layer.test.ts +720 -0
  141. package/src/middle_layer/middle_layer.ts +235 -0
  142. package/src/middle_layer/navigation_states.ts +48 -0
  143. package/src/middle_layer/ops.ts +147 -0
  144. package/src/middle_layer/project.ts +380 -0
  145. package/src/middle_layer/project_list.ts +59 -0
  146. package/src/middle_layer/project_overview.ts +220 -0
  147. package/src/middle_layer/render.test.ts +129 -0
  148. package/src/middle_layer/render.ts +19 -0
  149. package/src/middle_layer/types.ts +16 -0
  150. package/src/middle_layer/util.ts +22 -0
  151. package/src/model/args.ts +62 -0
  152. package/src/model/block_pack.ts +8 -0
  153. package/src/model/block_pack_spec.ts +52 -0
  154. package/src/model/frontend.ts +10 -0
  155. package/src/model/index.ts +2 -0
  156. package/src/model/project_model.test.ts +26 -0
  157. package/src/model/project_model.ts +142 -0
  158. package/src/model/project_model_util.test.ts +88 -0
  159. package/src/model/project_model_util.ts +169 -0
  160. package/src/model/template_spec.ts +18 -0
  161. package/src/mutator/block-pack/block_pack.test.ts +53 -0
  162. package/src/mutator/block-pack/block_pack.ts +187 -0
  163. package/src/mutator/block-pack/frontend.ts +29 -0
  164. package/src/mutator/context_export.ts +25 -0
  165. package/src/mutator/project.test.ts +272 -0
  166. package/src/mutator/project.ts +1112 -0
  167. package/src/mutator/template/render_block.ts +91 -0
  168. package/src/mutator/template/render_template.ts +40 -0
  169. package/src/mutator/template/template_loading.ts +77 -0
  170. package/src/mutator/template/template_render.test.ts +272 -0
  171. package/src/pool/data.ts +239 -0
  172. package/src/pool/driver.ts +325 -0
  173. package/src/pool/index.ts +2 -0
  174. package/src/pool/p_object_collection.ts +122 -0
  175. package/src/pool/ref_count_pool.ts +76 -0
  176. package/src/pool/result_pool.ts +284 -0
  177. package/src/test/block_packs.ts +23 -0
  178. package/src/test/explicit_templates.ts +8 -0
  179. package/src/test/known_templates.ts +24 -0
@@ -0,0 +1,272 @@
1
+ import { field, poll, TestHelpers, toGlobalResourceId } from '@milaboratories/pl-client';
2
+ import { createProject, ProjectMutator, withProject } from './project';
3
+ import { outputRef } from '../model/args';
4
+ import {
5
+ blockFrontendStateKey,
6
+ BlockRenderingStateKey,
7
+ projectFieldName,
8
+ ProjectRenderingState
9
+ } from '../model/project_model';
10
+ import {
11
+ BPSpecEnterV041NotPrepared,
12
+ BPSpecSumV042NotPrepared,
13
+ TestBPPreparer
14
+ } from '../test/block_packs';
15
+
16
+ test('simple test #1', async () => {
17
+ await TestHelpers.withTempRoot(async (pl) => {
18
+ const prj = await pl.withWriteTx('CreatingProject', async (tx) => {
19
+ const prjRef = await createProject(tx);
20
+ tx.createField(field(tx.clientRoot, 'prj'), 'Dynamic', prjRef);
21
+ await tx.commit();
22
+ return await toGlobalResourceId(prjRef);
23
+ });
24
+
25
+ await pl.withWriteTx('AddBlock1', async (tx) => {
26
+ const mut = await ProjectMutator.load(tx, prj);
27
+ mut.addBlock(
28
+ { id: 'block1', label: 'Block1', renderingMode: 'Heavy' },
29
+ {
30
+ args: JSON.stringify({ numbers: [1, 2, 3] }),
31
+ blockPack: await TestBPPreparer.prepare(BPSpecEnterV041NotPrepared)
32
+ }
33
+ );
34
+ mut.save();
35
+ await tx.commit();
36
+ });
37
+
38
+ await pl.withWriteTx('AddBlock2', async (tx) => {
39
+ const mut = await ProjectMutator.load(tx, prj);
40
+ mut.addBlock(
41
+ { id: 'block2', label: 'Block2', renderingMode: 'Heavy' },
42
+ {
43
+ args: JSON.stringify({ numbers: [3, 4, 5] }),
44
+ blockPack: await TestBPPreparer.prepare(BPSpecEnterV041NotPrepared)
45
+ }
46
+ );
47
+ mut.renderProduction(['block1', 'block2']);
48
+ mut.save();
49
+ await tx.commit();
50
+ });
51
+
52
+ await pl.withWriteTx('AddBlock3', async (tx) => {
53
+ const mut = await ProjectMutator.load(tx, prj);
54
+ mut.addBlock(
55
+ { id: 'block3', label: 'Block3', renderingMode: 'Heavy' },
56
+ {
57
+ args: JSON.stringify({
58
+ sources: [outputRef('block1', 'column'), outputRef('block2', 'column')]
59
+ }),
60
+ blockPack: await TestBPPreparer.prepare(BPSpecSumV042NotPrepared)
61
+ }
62
+ );
63
+ const rendered = mut.renderProduction(['block3'], true);
64
+ expect([...rendered]).toEqual(['block3']);
65
+ mut.setUiState('block2', '{"some":1}');
66
+ mut.setUiState('block3', '{"some":2}');
67
+ mut.doRefresh();
68
+ mut.save();
69
+ await tx.commit();
70
+ });
71
+
72
+ await poll(pl, async (tx) => {
73
+ const prjR = await tx.get(prj);
74
+ const outputs = await prjR
75
+ .get(projectFieldName('block3', 'prodOutput'))
76
+ .then((r) => r.final());
77
+ const all = await outputs.getAllFinal();
78
+ expect(new Set(Object.keys(all))).toEqual(new Set(['sum', 'dependsOnBlocks']));
79
+ const v = await outputs.get('sum');
80
+ console.log(Buffer.from(v.data.data!).toString());
81
+ });
82
+
83
+ await poll(pl, async (tx) => {
84
+ const prjR = await tx.get(prj);
85
+ const outputs = await prjR
86
+ .get(projectFieldName('block3', 'stagingOutput'))
87
+ .then((r) => r.final());
88
+ const all = await outputs.getAllFinal();
89
+ expect(new Set(Object.keys(all))).toEqual(new Set(['opts', 'dependsOnBlocks']));
90
+ });
91
+
92
+ await pl.withReadTx('CheckFrontendStatePresent', async (tx) => {
93
+ expect(await tx.getKValueString(prj, blockFrontendStateKey('block2'))).toEqual('{"some":1}');
94
+ expect(await tx.getKValueString(prj, blockFrontendStateKey('block3'))).toEqual('{"some":2}');
95
+ });
96
+
97
+ await pl.withWriteTx('DeleteBlock2', async (tx) => {
98
+ const mut = await ProjectMutator.load(tx, prj);
99
+ mut.deleteBlock('block2');
100
+ mut.save();
101
+ await tx.commit();
102
+ });
103
+
104
+ await pl.withReadTx('CheckFrontendStateAbsent', async (tx) => {
105
+ expect(
106
+ await tx.getKValueStringIfExists(prj, blockFrontendStateKey('block2'))
107
+ ).toBeUndefined();
108
+ });
109
+
110
+ await withProject(pl, prj, (mut) => {
111
+ mut.setUiState('block3', undefined);
112
+ });
113
+
114
+ await pl.withReadTx('CheckFrontendStatePresent', async (tx) => {
115
+ expect(
116
+ await tx.getKValueStringIfExists(prj, blockFrontendStateKey('block3'))
117
+ ).toBeUndefined();
118
+ });
119
+
120
+ await withProject(pl, prj, (mut) => {
121
+ mut.setUiState('block3', undefined);
122
+ });
123
+
124
+ await pl.withReadTx('CheckFrontendStatePresent', async (tx) => {
125
+ expect(
126
+ await tx.getKValueStringIfExists(prj, blockFrontendStateKey('block3'))
127
+ ).toBeUndefined();
128
+ });
129
+
130
+ await poll(pl, async (tx) => {
131
+ const prjR = await tx.get(prj);
132
+ expect(prjR.data.fields.map((f) => f.name)).not.toContain(
133
+ projectFieldName('block3', 'stagingOutput')
134
+ );
135
+ const renderingState = await prjR.getKValueObj<ProjectRenderingState>(BlockRenderingStateKey);
136
+ expect(renderingState.blocksInLimbo).toContain('block3');
137
+ });
138
+
139
+ await pl.withWriteTx('Refresh', async (tx) => {
140
+ const mut = await ProjectMutator.load(tx, prj);
141
+ mut.doRefresh();
142
+ mut.save();
143
+ await tx.commit();
144
+ });
145
+
146
+ await poll(pl, async (tx) => {
147
+ const prjR = await tx.get(prj);
148
+ const outputs = await prjR
149
+ .get(projectFieldName('block3', 'stagingOutput'))
150
+ .then((r) => r.final());
151
+ const all = await outputs.getAllFinal();
152
+ expect(new Set(Object.keys(all))).toEqual(new Set(['opts', 'dependsOnBlocks']));
153
+ const renderingState = await prjR.getKValueObj<ProjectRenderingState>(BlockRenderingStateKey);
154
+ expect(renderingState.blocksInLimbo).toContain('block3');
155
+ });
156
+
157
+ await pl.withWriteTx('RenderProduction', async (tx) => {
158
+ const mut = await ProjectMutator.load(tx, prj);
159
+ mut.renderProduction(['block1', 'block3']);
160
+ mut.doRefresh();
161
+ mut.save();
162
+ await tx.commit();
163
+ });
164
+
165
+ await poll(pl, async (tx) => {
166
+ const prjR = await tx.get(prj);
167
+ const outputs = await prjR
168
+ .get(projectFieldName('block3', 'prodOutput'))
169
+ .then((r) => r.final());
170
+ const v = await outputs.get('sum');
171
+ // there should be an error here telling that one of the upstream blocks not found
172
+ // console.log(Buffer.from(v.data.data!).toString());
173
+ const renderingState = await prjR.getKValueObj<ProjectRenderingState>(BlockRenderingStateKey);
174
+ expect(renderingState.blocksInLimbo).not.toContain('block3');
175
+ });
176
+ });
177
+ });
178
+
179
+ test('simple test #2 with bp migration', async () => {
180
+ await TestHelpers.withTempRoot(async (pl) => {
181
+ const prj = await pl.withWriteTx('CreatingProject', async (tx) => {
182
+ const prjRef = await createProject(tx);
183
+ tx.createField(field(tx.clientRoot, 'prj'), 'Dynamic', prjRef);
184
+ await tx.commit();
185
+ return await toGlobalResourceId(prjRef);
186
+ });
187
+
188
+ await pl.withWriteTx('AddBlock1', async (tx) => {
189
+ const mut = await ProjectMutator.load(tx, prj);
190
+ mut.addBlock(
191
+ { id: 'block1', label: 'Block1', renderingMode: 'Heavy' },
192
+ {
193
+ args: JSON.stringify({ numbers: [1, 2, 3] }),
194
+ blockPack: await TestBPPreparer.prepare(BPSpecEnterV041NotPrepared)
195
+ }
196
+ );
197
+ mut.addBlock(
198
+ { id: 'block2', label: 'Block2', renderingMode: 'Heavy' },
199
+ {
200
+ args: JSON.stringify({ numbers: [3, 4, 5] }),
201
+ blockPack: await TestBPPreparer.prepare(BPSpecEnterV041NotPrepared)
202
+ }
203
+ );
204
+ mut.addBlock(
205
+ { id: 'block3', label: 'Block3', renderingMode: 'Heavy' },
206
+ {
207
+ args: JSON.stringify({
208
+ sources: [outputRef('block1', 'column'), outputRef('block2', 'column')]
209
+ }),
210
+ blockPack: await TestBPPreparer.prepare(BPSpecSumV042NotPrepared)
211
+ }
212
+ );
213
+ mut.renderProduction(['block2', 'block3'], true);
214
+ mut.doRefresh();
215
+ mut.save();
216
+ await tx.commit();
217
+ });
218
+
219
+ await poll(pl, async (tx) => {
220
+ const prjR = await tx.get(prj);
221
+ const outputs = await prjR
222
+ .get(projectFieldName('block3', 'prodOutput'))
223
+ .then((r) => r.final());
224
+ const all = await outputs.getAllFinal();
225
+ expect(new Set(Object.keys(all))).toEqual(new Set(['sum', 'dependsOnBlocks']));
226
+ const v = await outputs.get('sum');
227
+ console.log(Buffer.from(v.data.data!).toString());
228
+ });
229
+
230
+ await poll(pl, async (tx) => {
231
+ const prjR = await tx.get(prj);
232
+ const outputs = await prjR
233
+ .get(projectFieldName('block3', 'stagingOutput'))
234
+ .then((r) => r.final());
235
+ const all = await outputs.getAllFinal();
236
+ expect(new Set(Object.keys(all))).toEqual(new Set(['opts', 'dependsOnBlocks']));
237
+ });
238
+
239
+ await pl.withWriteTx('MigrateBlock2', async (tx) => {
240
+ const mut = await ProjectMutator.load(tx, prj);
241
+ // TODO change to dev
242
+ mut.migrateBlockPack('block2', await TestBPPreparer.prepare(BPSpecEnterV041NotPrepared));
243
+ mut.save();
244
+ await tx.commit();
245
+ });
246
+
247
+ await poll(pl, async (tx) => {
248
+ const prjR = await tx.get(prj);
249
+ expect(prjR.data.fields.map((f) => f.name)).not.toContain(
250
+ projectFieldName('block3', 'stagingOutput')
251
+ );
252
+ const renderingState = await prjR.getKValueObj<ProjectRenderingState>(BlockRenderingStateKey);
253
+ expect(renderingState.blocksInLimbo).toContain('block3');
254
+ });
255
+
256
+ await pl.withWriteTx('Refresh', async (tx) => {
257
+ const mut = await ProjectMutator.load(tx, prj);
258
+ mut.doRefresh();
259
+ mut.save();
260
+ await tx.commit();
261
+ });
262
+
263
+ await poll(pl, async (tx) => {
264
+ const prjR = await tx.get(prj);
265
+ expect(prjR.data.fields.map((f) => f.name)).toContain(
266
+ projectFieldName('block3', 'stagingOutput')
267
+ );
268
+ const renderingState = await prjR.getKValueObj<ProjectRenderingState>(BlockRenderingStateKey);
269
+ expect(renderingState.blocksInLimbo).toContain('block3');
270
+ });
271
+ });
272
+ });