@digipair/skill-web-editor 0.91.0-0 → 0.91.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 (37) hide show
  1. package/blockly-to-json.cjs.js +338 -0
  2. package/blockly-to-json.esm.js +336 -0
  3. package/index.cjs.d.ts +1 -0
  4. package/index.cjs.js +12 -0
  5. package/index.cjs2.js +72611 -0
  6. package/index.esm.js +1 -0
  7. package/index.esm2.js +72608 -0
  8. package/libs/skill-web-editor/src/lib/blocks/json.d.ts +145 -0
  9. package/libs/skill-web-editor/src/lib/editor.element.d.ts +24 -0
  10. package/libs/skill-web-editor/src/lib/generator/blockly-to-json.d.ts +1 -0
  11. package/libs/skill-web-editor/src/lib/generator/json-to-blockly.d.ts +1 -0
  12. package/libs/skill-web-editor/src/lib/generator/pins-to-blockly.d.ts +139 -0
  13. package/libs/skill-web-editor/src/lib/schemas/web.fr.schema.d.ts +4028 -0
  14. package/libs/skill-web-editor/src/lib/schemas/web.schema.d.ts +4028 -0
  15. package/libs/skill-web-editor/src/lib/skill-web-editor.d.ts +1 -0
  16. package/package.json +5 -21
  17. package/pins-to-blockly.cjs.js +628 -0
  18. package/pins-to-blockly.esm.js +624 -0
  19. package/.swcrc +0 -28
  20. package/README.md +0 -7
  21. package/eslint.config.mjs +0 -22
  22. package/rollup.config.cjs +0 -28
  23. package/src/lib/blocks/json.ts +0 -145
  24. package/src/lib/editor.element.ts +0 -279
  25. package/src/lib/generator/blockly-to-json.ts +0 -360
  26. package/src/lib/generator/json-to-blockly.ts +0 -757
  27. package/src/lib/generator/pins-to-blockly.ts +0 -927
  28. package/src/lib/schemas/web.fr.schema.ts +0 -34473
  29. package/src/lib/schemas/web.schema.ts +0 -34473
  30. package/src/lib/skill-web-editor.spec.ts +0 -7
  31. package/src/lib/skill-web-editor.ts +0 -1
  32. package/tsconfig.json +0 -13
  33. package/tsconfig.lib.json +0 -19
  34. /package/{src/index.d.ts → index.d.ts} +0 -0
  35. /package/{src/index.ts → libs/skill-web-editor/src/index.d.ts} +0 -0
  36. /package/{src/schema.fr.json → schema.fr.json} +0 -0
  37. /package/{src/schema.json → schema.json} +0 -0
@@ -0,0 +1,338 @@
1
+ 'use strict';
2
+
3
+ var index = require('./index.cjs2.js');
4
+
5
+ const jsonGenerator = new Blockly.Generator('JSON');
6
+ jsonGenerator.PRECEDENCE = 0;
7
+ jsonGenerator['generic-scene-block'] = function(block) {
8
+ function safeParse(jsonString, defaultValue) {
9
+ try {
10
+ if (jsonString && jsonString.trim() !== '') {
11
+ return JSON.parse(jsonString);
12
+ }
13
+ } catch (e) {
14
+ console.error('JSON parsing error:', e);
15
+ }
16
+ return defaultValue;
17
+ }
18
+ const pinsCode = jsonGenerator.valueToCode(block, 'EXECUTE_PINS', jsonGenerator.PRECEDENCE) || 'null';
19
+ const metadataCode = jsonGenerator.valueToCode(block, 'METADATA_INPUT', jsonGenerator.PRECEDENCE) || '{}';
20
+ const eventsCode = jsonGenerator.valueToCode(block, 'EVENTS_INPUT', jsonGenerator.PRECEDENCE) || '{}';
21
+ const pinsData = safeParse(pinsCode, null);
22
+ const metadata = safeParse(metadataCode, {});
23
+ const events = safeParse(eventsCode, {});
24
+ const objectToSerialize = index._extends({
25
+ type: block.getFieldValue('SCENE_TYPE') || null,
26
+ metadata: metadata
27
+ }, pinsData !== null ? pinsData : {}, {
28
+ events: events
29
+ });
30
+ const serializedCode = JSON.stringify(objectToSerialize);
31
+ return [
32
+ serializedCode,
33
+ jsonGenerator.PRECEDENCE
34
+ ];
35
+ };
36
+ jsonGenerator['logic_null'] = function(block) {
37
+ return [
38
+ 'null',
39
+ jsonGenerator.PRECEDENCE
40
+ ];
41
+ };
42
+ jsonGenerator['text_multiline'] = function(block) {
43
+ const textValue = block.getFieldValue('TEXT');
44
+ const code = `${JSON.stringify(textValue)}`;
45
+ return [
46
+ code,
47
+ jsonGenerator.PRECEDENCE
48
+ ];
49
+ };
50
+ jsonGenerator['math_number'] = function(block) {
51
+ const code = String(block.getFieldValue('NUM'));
52
+ return [
53
+ code,
54
+ jsonGenerator.PRECEDENCE
55
+ ];
56
+ };
57
+ jsonGenerator['logic_boolean'] = function(block) {
58
+ const code = block.getFieldValue('BOOL') === 'TRUE' ? 'true' : 'false';
59
+ return [
60
+ code,
61
+ jsonGenerator.PRECEDENCE
62
+ ];
63
+ };
64
+ jsonGenerator['member'] = function(block) {
65
+ const name = block.getFieldValue('MEMBER_NAME');
66
+ const value = jsonGenerator.valueToCode(block, 'MEMBER_VALUE', jsonGenerator.PRECEDENCE);
67
+ const code = `"${name}": ${value}`;
68
+ return [
69
+ code,
70
+ jsonGenerator.PRECEDENCE
71
+ ];
72
+ };
73
+ jsonGenerator['array-input'] = function(block) {
74
+ const value = jsonGenerator.valueToCode(block, 'MEMBER_VALUE', jsonGenerator.PRECEDENCE);
75
+ const code = `${value}`;
76
+ return [
77
+ code,
78
+ jsonGenerator.PRECEDENCE
79
+ ];
80
+ };
81
+ jsonGenerator['array'] = function(block) {
82
+ const statementMembers = jsonGenerator.customStatementToCode(block, 'MEMBERS');
83
+ const code = '[\n' + statementMembers + '\n]';
84
+ return [
85
+ code,
86
+ jsonGenerator.PRECEDENCE
87
+ ];
88
+ };
89
+ jsonGenerator['object'] = function(block) {
90
+ const statementMembers = jsonGenerator.customStatementToCode(block, 'MEMBERS');
91
+ const code = '{\n' + statementMembers + '\n}';
92
+ return [
93
+ code,
94
+ jsonGenerator.PRECEDENCE
95
+ ];
96
+ };
97
+ jsonGenerator['unknown-format'] = function(block) {
98
+ const code = '"unknown-format"';
99
+ return [
100
+ code,
101
+ jsonGenerator.PRECEDENCE
102
+ ];
103
+ };
104
+ jsonGenerator['unknown-pins'] = function(block) {
105
+ const code = '"unknown-pins"';
106
+ return [
107
+ code,
108
+ jsonGenerator.PRECEDENCE
109
+ ];
110
+ };
111
+ jsonGenerator['unknown-component'] = function(block) {
112
+ const code = '"unknown-component"';
113
+ return [
114
+ code,
115
+ jsonGenerator.PRECEDENCE
116
+ ];
117
+ };
118
+ jsonGenerator.scrub_ = function(block, code, thisOnly) {
119
+ const nextBlock = block.nextConnection && block.nextConnection.targetBlock();
120
+ if (nextBlock && !thisOnly) {
121
+ return code + ',\n' + jsonGenerator.blockToCode(nextBlock);
122
+ }
123
+ return code;
124
+ };
125
+ jsonGenerator.generatePin = function(block) {
126
+ let code = '{\n';
127
+ const elementName = block.type.split('/__PINS__/')[1];
128
+ const libraryName = block.type.split('/__PINS__/')[0];
129
+ code += ` "library": "${libraryName}",`;
130
+ code += `\n "element": "${elementName}",`;
131
+ let propertiesCode = '';
132
+ let eventCode = '';
133
+ let conditionCode = '';
134
+ for(let i = 0, input; input = block.inputList[i]; i++){
135
+ const inputName = input.name;
136
+ const connectedBlock = input.connection && input.connection.targetBlock();
137
+ if (connectedBlock) {
138
+ if (inputName !== 'pins' && input.type == 3) {
139
+ const inputCode = jsonGenerator.customStatementToCode(block, inputName);
140
+ if (inputName.includes('__EVENT__/')) {
141
+ eventCode += ` "${inputName.split('__EVENT__/')[1]}": [${inputCode}],`;
142
+ } else if (inputName.includes('__CONDITION__/')) {
143
+ conditionCode += ` "${inputName.split('__CONDITION__/')[1]}": [${inputCode}],`;
144
+ } else {
145
+ propertiesCode += ` "${inputName}": [${inputCode}],`;
146
+ }
147
+ } else {
148
+ const codeToAdd = getCodeFromBlock(connectedBlock);
149
+ const inputCode = jsonGenerator.customStatementToCode(block, inputName);
150
+ if (inputName === 'pins') {
151
+ code += ` "${inputName}": [${inputCode}],`;
152
+ } else if (inputName.includes('__CONDITION__/')) {
153
+ conditionCode += ` "${inputName.split('__CONDITION__/')[1].replace(/__EVALUATE$/g, '')}": ${inputCode},`;
154
+ } else if (codeToAdd !== 'undefined') {
155
+ propertiesCode += ` "${inputName.replace(/__EVALUATE$/g, '')}": ${codeToAdd},`;
156
+ }
157
+ }
158
+ }
159
+ }
160
+ if (propertiesCode !== '') {
161
+ if (propertiesCode.endsWith(',')) {
162
+ propertiesCode = propertiesCode.slice(0, -1);
163
+ }
164
+ code += '\n"properties": {\n' + propertiesCode + '\n },';
165
+ }
166
+ if (eventCode !== '') {
167
+ if (eventCode.endsWith(',')) {
168
+ eventCode = eventCode.slice(0, -1);
169
+ }
170
+ code += '\n"events": {\n' + eventCode + '\n },';
171
+ }
172
+ if (conditionCode !== '') {
173
+ if (conditionCode.endsWith(',')) {
174
+ conditionCode = conditionCode.slice(0, -1);
175
+ }
176
+ code += '\n"conditions": {\n' + conditionCode + '\n },';
177
+ }
178
+ if (code.endsWith(',')) {
179
+ code = code.slice(0, -1);
180
+ }
181
+ code += '}';
182
+ return [
183
+ code,
184
+ jsonGenerator.PRECEDENCE
185
+ ];
186
+ };
187
+ jsonGenerator.generateComponent = function(block) {
188
+ let code = '{\n';
189
+ for(let i = 0, input; input = block.inputList[i]; i++){
190
+ const inputName = input.name;
191
+ const connectedBlock = input.connection && input.connection.targetBlock();
192
+ let codeToAdd;
193
+ if (connectedBlock) {
194
+ if (input.type == 3) {
195
+ const code = jsonGenerator.customStatementToCode(block, inputName);
196
+ codeToAdd = '[' + code + ']';
197
+ } else {
198
+ codeToAdd = getCodeFromBlock(connectedBlock);
199
+ }
200
+ if (codeToAdd !== 'undefined') {
201
+ code += ` "${inputName.replace(/__EVALUATE$/g, '')}": ${codeToAdd},`;
202
+ }
203
+ }
204
+ }
205
+ if (code.endsWith(',')) {
206
+ code = code.slice(0, -1);
207
+ }
208
+ code += '\n}';
209
+ return [
210
+ code,
211
+ jsonGenerator.PRECEDENCE
212
+ ];
213
+ };
214
+ Blockly.Generator.prototype.blockToCode = function(block) {
215
+ if (!block) {
216
+ return '';
217
+ }
218
+ if (isPins(block)) {
219
+ return this.generatePin(block);
220
+ } else if (isComponent(block)) {
221
+ return this.generateComponent(block);
222
+ } else if (isSceneBlock(block)) {
223
+ return this.generateSceneBlock(block);
224
+ }
225
+ const func = this[block.type];
226
+ if (typeof func === 'function') {
227
+ const result = func.call(this, block);
228
+ if (Array.isArray(result) && result.length === 2) {
229
+ return result;
230
+ } else {
231
+ console.log('Unexpected result from generator for block type:', block.type, result);
232
+ return [
233
+ '',
234
+ 0
235
+ ];
236
+ }
237
+ }
238
+ };
239
+ jsonGenerator.customStatementToCode = function(block, inputName) {
240
+ let code = '';
241
+ let connectedBlock = block.getInputTargetBlock(inputName);
242
+ while(connectedBlock){
243
+ code += getCodeFromBlock(connectedBlock) + ',';
244
+ connectedBlock = connectedBlock.nextConnection && connectedBlock.nextConnection.targetBlock();
245
+ }
246
+ if (code.endsWith(',')) {
247
+ code = code.slice(0, -1);
248
+ }
249
+ return code;
250
+ };
251
+ function isPins(block) {
252
+ const blockType = block.type;
253
+ if (blockType.includes('/__PINS__/')) {
254
+ return true;
255
+ }
256
+ return false;
257
+ }
258
+ function isComponent(block) {
259
+ const blockType = block.type;
260
+ if (blockType.includes('/__COMPONENTS__/')) {
261
+ return true;
262
+ }
263
+ return false;
264
+ }
265
+ function isSceneBlock(block) {
266
+ const blockType = block.type;
267
+ if (blockType.includes('/__SCENEBLOCK__/')) {
268
+ return true;
269
+ }
270
+ return false;
271
+ }
272
+ jsonGenerator.generateSceneBlock = function(block) {
273
+ function safeParse(jsonString, defaultValue) {
274
+ try {
275
+ if (jsonString && jsonString.trim() !== '') {
276
+ return JSON.parse(jsonString);
277
+ }
278
+ } catch (e) {
279
+ console.error('JSON parsing error:', e);
280
+ }
281
+ return defaultValue;
282
+ }
283
+ const pinsCode = jsonGenerator.customStatementToCode(block, 'EXECUTE_PINS', jsonGenerator.PRECEDENCE) || '';
284
+ const pinsData = safeParse('[' + pinsCode + ']', null);
285
+ const metadata = {};
286
+ const properties = {};
287
+ block.inputList.forEach(function(input) {
288
+ if (input.name !== 'EXECUTE_PINS') {
289
+ const isMetadata = input.name.startsWith('metadata--');
290
+ const target = isMetadata ? metadata : properties;
291
+ const name = isMetadata ? input.name.replace('metadata--', '') : input.name;
292
+ const fieldValue = valueToCode(block, input);
293
+ if (fieldValue) {
294
+ target[name.replace(/__EVALUATE$/g, '')] = safeParse(fieldValue, {});
295
+ }
296
+ }
297
+ });
298
+ const element = block.type.split('/__SCENEBLOCK__/')[1];
299
+ const library = block.type.split('/__SCENEBLOCK__/')[0];
300
+ const objectToSerialize = {
301
+ library,
302
+ element,
303
+ metadata,
304
+ properties,
305
+ pins: pinsData !== null ? pinsData : []
306
+ };
307
+ const serializedCode = JSON.stringify(objectToSerialize);
308
+ return [
309
+ serializedCode,
310
+ jsonGenerator.PRECEDENCE
311
+ ];
312
+ };
313
+ function getCodeFromBlock(block) {
314
+ let code = '';
315
+ if (isPins(block)) {
316
+ const pinCode = jsonGenerator.generatePin(block);
317
+ code += pinCode[0];
318
+ } else if (isComponent(block)) {
319
+ const componentCode = jsonGenerator.generateComponent(block);
320
+ code += componentCode[0];
321
+ } else {
322
+ const generalCode = jsonGenerator[block.type](block);
323
+ code += generalCode[0];
324
+ }
325
+ return code;
326
+ }
327
+ function valueToCode(block, input) {
328
+ let result = '';
329
+ if (input.type === 3) {
330
+ const code = jsonGenerator.customStatementToCode(block, input.name);
331
+ result = '[' + code + ']';
332
+ } else {
333
+ result = jsonGenerator.valueToCode(block, input.name, jsonGenerator.PRECEDENCE);
334
+ }
335
+ return result;
336
+ }
337
+
338
+ exports.jsonGenerator = jsonGenerator;
@@ -0,0 +1,336 @@
1
+ import { _ as _extends } from './index.esm2.js';
2
+
3
+ const jsonGenerator = new Blockly.Generator('JSON');
4
+ jsonGenerator.PRECEDENCE = 0;
5
+ jsonGenerator['generic-scene-block'] = function(block) {
6
+ function safeParse(jsonString, defaultValue) {
7
+ try {
8
+ if (jsonString && jsonString.trim() !== '') {
9
+ return JSON.parse(jsonString);
10
+ }
11
+ } catch (e) {
12
+ console.error('JSON parsing error:', e);
13
+ }
14
+ return defaultValue;
15
+ }
16
+ const pinsCode = jsonGenerator.valueToCode(block, 'EXECUTE_PINS', jsonGenerator.PRECEDENCE) || 'null';
17
+ const metadataCode = jsonGenerator.valueToCode(block, 'METADATA_INPUT', jsonGenerator.PRECEDENCE) || '{}';
18
+ const eventsCode = jsonGenerator.valueToCode(block, 'EVENTS_INPUT', jsonGenerator.PRECEDENCE) || '{}';
19
+ const pinsData = safeParse(pinsCode, null);
20
+ const metadata = safeParse(metadataCode, {});
21
+ const events = safeParse(eventsCode, {});
22
+ const objectToSerialize = _extends({
23
+ type: block.getFieldValue('SCENE_TYPE') || null,
24
+ metadata: metadata
25
+ }, pinsData !== null ? pinsData : {}, {
26
+ events: events
27
+ });
28
+ const serializedCode = JSON.stringify(objectToSerialize);
29
+ return [
30
+ serializedCode,
31
+ jsonGenerator.PRECEDENCE
32
+ ];
33
+ };
34
+ jsonGenerator['logic_null'] = function(block) {
35
+ return [
36
+ 'null',
37
+ jsonGenerator.PRECEDENCE
38
+ ];
39
+ };
40
+ jsonGenerator['text_multiline'] = function(block) {
41
+ const textValue = block.getFieldValue('TEXT');
42
+ const code = `${JSON.stringify(textValue)}`;
43
+ return [
44
+ code,
45
+ jsonGenerator.PRECEDENCE
46
+ ];
47
+ };
48
+ jsonGenerator['math_number'] = function(block) {
49
+ const code = String(block.getFieldValue('NUM'));
50
+ return [
51
+ code,
52
+ jsonGenerator.PRECEDENCE
53
+ ];
54
+ };
55
+ jsonGenerator['logic_boolean'] = function(block) {
56
+ const code = block.getFieldValue('BOOL') === 'TRUE' ? 'true' : 'false';
57
+ return [
58
+ code,
59
+ jsonGenerator.PRECEDENCE
60
+ ];
61
+ };
62
+ jsonGenerator['member'] = function(block) {
63
+ const name = block.getFieldValue('MEMBER_NAME');
64
+ const value = jsonGenerator.valueToCode(block, 'MEMBER_VALUE', jsonGenerator.PRECEDENCE);
65
+ const code = `"${name}": ${value}`;
66
+ return [
67
+ code,
68
+ jsonGenerator.PRECEDENCE
69
+ ];
70
+ };
71
+ jsonGenerator['array-input'] = function(block) {
72
+ const value = jsonGenerator.valueToCode(block, 'MEMBER_VALUE', jsonGenerator.PRECEDENCE);
73
+ const code = `${value}`;
74
+ return [
75
+ code,
76
+ jsonGenerator.PRECEDENCE
77
+ ];
78
+ };
79
+ jsonGenerator['array'] = function(block) {
80
+ const statementMembers = jsonGenerator.customStatementToCode(block, 'MEMBERS');
81
+ const code = '[\n' + statementMembers + '\n]';
82
+ return [
83
+ code,
84
+ jsonGenerator.PRECEDENCE
85
+ ];
86
+ };
87
+ jsonGenerator['object'] = function(block) {
88
+ const statementMembers = jsonGenerator.customStatementToCode(block, 'MEMBERS');
89
+ const code = '{\n' + statementMembers + '\n}';
90
+ return [
91
+ code,
92
+ jsonGenerator.PRECEDENCE
93
+ ];
94
+ };
95
+ jsonGenerator['unknown-format'] = function(block) {
96
+ const code = '"unknown-format"';
97
+ return [
98
+ code,
99
+ jsonGenerator.PRECEDENCE
100
+ ];
101
+ };
102
+ jsonGenerator['unknown-pins'] = function(block) {
103
+ const code = '"unknown-pins"';
104
+ return [
105
+ code,
106
+ jsonGenerator.PRECEDENCE
107
+ ];
108
+ };
109
+ jsonGenerator['unknown-component'] = function(block) {
110
+ const code = '"unknown-component"';
111
+ return [
112
+ code,
113
+ jsonGenerator.PRECEDENCE
114
+ ];
115
+ };
116
+ jsonGenerator.scrub_ = function(block, code, thisOnly) {
117
+ const nextBlock = block.nextConnection && block.nextConnection.targetBlock();
118
+ if (nextBlock && !thisOnly) {
119
+ return code + ',\n' + jsonGenerator.blockToCode(nextBlock);
120
+ }
121
+ return code;
122
+ };
123
+ jsonGenerator.generatePin = function(block) {
124
+ let code = '{\n';
125
+ const elementName = block.type.split('/__PINS__/')[1];
126
+ const libraryName = block.type.split('/__PINS__/')[0];
127
+ code += ` "library": "${libraryName}",`;
128
+ code += `\n "element": "${elementName}",`;
129
+ let propertiesCode = '';
130
+ let eventCode = '';
131
+ let conditionCode = '';
132
+ for(let i = 0, input; input = block.inputList[i]; i++){
133
+ const inputName = input.name;
134
+ const connectedBlock = input.connection && input.connection.targetBlock();
135
+ if (connectedBlock) {
136
+ if (inputName !== 'pins' && input.type == 3) {
137
+ const inputCode = jsonGenerator.customStatementToCode(block, inputName);
138
+ if (inputName.includes('__EVENT__/')) {
139
+ eventCode += ` "${inputName.split('__EVENT__/')[1]}": [${inputCode}],`;
140
+ } else if (inputName.includes('__CONDITION__/')) {
141
+ conditionCode += ` "${inputName.split('__CONDITION__/')[1]}": [${inputCode}],`;
142
+ } else {
143
+ propertiesCode += ` "${inputName}": [${inputCode}],`;
144
+ }
145
+ } else {
146
+ const codeToAdd = getCodeFromBlock(connectedBlock);
147
+ const inputCode = jsonGenerator.customStatementToCode(block, inputName);
148
+ if (inputName === 'pins') {
149
+ code += ` "${inputName}": [${inputCode}],`;
150
+ } else if (inputName.includes('__CONDITION__/')) {
151
+ conditionCode += ` "${inputName.split('__CONDITION__/')[1].replace(/__EVALUATE$/g, '')}": ${inputCode},`;
152
+ } else if (codeToAdd !== 'undefined') {
153
+ propertiesCode += ` "${inputName.replace(/__EVALUATE$/g, '')}": ${codeToAdd},`;
154
+ }
155
+ }
156
+ }
157
+ }
158
+ if (propertiesCode !== '') {
159
+ if (propertiesCode.endsWith(',')) {
160
+ propertiesCode = propertiesCode.slice(0, -1);
161
+ }
162
+ code += '\n"properties": {\n' + propertiesCode + '\n },';
163
+ }
164
+ if (eventCode !== '') {
165
+ if (eventCode.endsWith(',')) {
166
+ eventCode = eventCode.slice(0, -1);
167
+ }
168
+ code += '\n"events": {\n' + eventCode + '\n },';
169
+ }
170
+ if (conditionCode !== '') {
171
+ if (conditionCode.endsWith(',')) {
172
+ conditionCode = conditionCode.slice(0, -1);
173
+ }
174
+ code += '\n"conditions": {\n' + conditionCode + '\n },';
175
+ }
176
+ if (code.endsWith(',')) {
177
+ code = code.slice(0, -1);
178
+ }
179
+ code += '}';
180
+ return [
181
+ code,
182
+ jsonGenerator.PRECEDENCE
183
+ ];
184
+ };
185
+ jsonGenerator.generateComponent = function(block) {
186
+ let code = '{\n';
187
+ for(let i = 0, input; input = block.inputList[i]; i++){
188
+ const inputName = input.name;
189
+ const connectedBlock = input.connection && input.connection.targetBlock();
190
+ let codeToAdd;
191
+ if (connectedBlock) {
192
+ if (input.type == 3) {
193
+ const code = jsonGenerator.customStatementToCode(block, inputName);
194
+ codeToAdd = '[' + code + ']';
195
+ } else {
196
+ codeToAdd = getCodeFromBlock(connectedBlock);
197
+ }
198
+ if (codeToAdd !== 'undefined') {
199
+ code += ` "${inputName.replace(/__EVALUATE$/g, '')}": ${codeToAdd},`;
200
+ }
201
+ }
202
+ }
203
+ if (code.endsWith(',')) {
204
+ code = code.slice(0, -1);
205
+ }
206
+ code += '\n}';
207
+ return [
208
+ code,
209
+ jsonGenerator.PRECEDENCE
210
+ ];
211
+ };
212
+ Blockly.Generator.prototype.blockToCode = function(block) {
213
+ if (!block) {
214
+ return '';
215
+ }
216
+ if (isPins(block)) {
217
+ return this.generatePin(block);
218
+ } else if (isComponent(block)) {
219
+ return this.generateComponent(block);
220
+ } else if (isSceneBlock(block)) {
221
+ return this.generateSceneBlock(block);
222
+ }
223
+ const func = this[block.type];
224
+ if (typeof func === 'function') {
225
+ const result = func.call(this, block);
226
+ if (Array.isArray(result) && result.length === 2) {
227
+ return result;
228
+ } else {
229
+ console.log('Unexpected result from generator for block type:', block.type, result);
230
+ return [
231
+ '',
232
+ 0
233
+ ];
234
+ }
235
+ }
236
+ };
237
+ jsonGenerator.customStatementToCode = function(block, inputName) {
238
+ let code = '';
239
+ let connectedBlock = block.getInputTargetBlock(inputName);
240
+ while(connectedBlock){
241
+ code += getCodeFromBlock(connectedBlock) + ',';
242
+ connectedBlock = connectedBlock.nextConnection && connectedBlock.nextConnection.targetBlock();
243
+ }
244
+ if (code.endsWith(',')) {
245
+ code = code.slice(0, -1);
246
+ }
247
+ return code;
248
+ };
249
+ function isPins(block) {
250
+ const blockType = block.type;
251
+ if (blockType.includes('/__PINS__/')) {
252
+ return true;
253
+ }
254
+ return false;
255
+ }
256
+ function isComponent(block) {
257
+ const blockType = block.type;
258
+ if (blockType.includes('/__COMPONENTS__/')) {
259
+ return true;
260
+ }
261
+ return false;
262
+ }
263
+ function isSceneBlock(block) {
264
+ const blockType = block.type;
265
+ if (blockType.includes('/__SCENEBLOCK__/')) {
266
+ return true;
267
+ }
268
+ return false;
269
+ }
270
+ jsonGenerator.generateSceneBlock = function(block) {
271
+ function safeParse(jsonString, defaultValue) {
272
+ try {
273
+ if (jsonString && jsonString.trim() !== '') {
274
+ return JSON.parse(jsonString);
275
+ }
276
+ } catch (e) {
277
+ console.error('JSON parsing error:', e);
278
+ }
279
+ return defaultValue;
280
+ }
281
+ const pinsCode = jsonGenerator.customStatementToCode(block, 'EXECUTE_PINS', jsonGenerator.PRECEDENCE) || '';
282
+ const pinsData = safeParse('[' + pinsCode + ']', null);
283
+ const metadata = {};
284
+ const properties = {};
285
+ block.inputList.forEach(function(input) {
286
+ if (input.name !== 'EXECUTE_PINS') {
287
+ const isMetadata = input.name.startsWith('metadata--');
288
+ const target = isMetadata ? metadata : properties;
289
+ const name = isMetadata ? input.name.replace('metadata--', '') : input.name;
290
+ const fieldValue = valueToCode(block, input);
291
+ if (fieldValue) {
292
+ target[name.replace(/__EVALUATE$/g, '')] = safeParse(fieldValue, {});
293
+ }
294
+ }
295
+ });
296
+ const element = block.type.split('/__SCENEBLOCK__/')[1];
297
+ const library = block.type.split('/__SCENEBLOCK__/')[0];
298
+ const objectToSerialize = {
299
+ library,
300
+ element,
301
+ metadata,
302
+ properties,
303
+ pins: pinsData !== null ? pinsData : []
304
+ };
305
+ const serializedCode = JSON.stringify(objectToSerialize);
306
+ return [
307
+ serializedCode,
308
+ jsonGenerator.PRECEDENCE
309
+ ];
310
+ };
311
+ function getCodeFromBlock(block) {
312
+ let code = '';
313
+ if (isPins(block)) {
314
+ const pinCode = jsonGenerator.generatePin(block);
315
+ code += pinCode[0];
316
+ } else if (isComponent(block)) {
317
+ const componentCode = jsonGenerator.generateComponent(block);
318
+ code += componentCode[0];
319
+ } else {
320
+ const generalCode = jsonGenerator[block.type](block);
321
+ code += generalCode[0];
322
+ }
323
+ return code;
324
+ }
325
+ function valueToCode(block, input) {
326
+ let result = '';
327
+ if (input.type === 3) {
328
+ const code = jsonGenerator.customStatementToCode(block, input.name);
329
+ result = '[' + code + ']';
330
+ } else {
331
+ result = jsonGenerator.valueToCode(block, input.name, jsonGenerator.PRECEDENCE);
332
+ }
333
+ return result;
334
+ }
335
+
336
+ export { jsonGenerator };
package/index.cjs.d.ts ADDED
@@ -0,0 +1 @@
1
+ export * from "./src/index";
package/index.cjs.js ADDED
@@ -0,0 +1,12 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var index = require('./index.cjs2.js');
6
+
7
+
8
+
9
+ Object.defineProperty(exports, 'EditorElement', {
10
+ enumerable: true,
11
+ get: function () { return index.EditorElement; }
12
+ });