@builder.io/sdk-solid 0.12.4 → 0.12.6

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/lib/node/index.js CHANGED
@@ -243,27 +243,43 @@ var runInBrowser = ({
243
243
  builder,
244
244
  context,
245
245
  event,
246
- state: flattenState(rootState, localState, rootSetState)
246
+ state: flattenState({
247
+ rootState,
248
+ localState,
249
+ rootSetState
250
+ })
247
251
  });
248
252
  return new Function(...functionArgs.map(([name]) => name), code)(...functionArgs.map(([, value]) => value));
249
253
  };
250
- function flattenState(rootState, localState, rootSetState) {
251
- if (rootState === localState) {
252
- throw new Error("rootState === localState");
253
- }
254
+ function flattenState({
255
+ rootState,
256
+ localState,
257
+ rootSetState
258
+ }) {
254
259
  return new Proxy(rootState, {
255
- get: (_, prop) => {
260
+ get: (target, prop) => {
256
261
  if (localState && prop in localState) {
257
262
  return localState[prop];
258
263
  }
259
- return rootState[prop];
264
+ const val = target[prop];
265
+ if (typeof val === "object") {
266
+ return flattenState({
267
+ rootState: val,
268
+ localState: void 0,
269
+ rootSetState: rootSetState ? (subState) => {
270
+ target[prop] = subState;
271
+ rootSetState(target);
272
+ } : void 0
273
+ });
274
+ }
275
+ return val;
260
276
  },
261
- set: (_, prop, value) => {
277
+ set: (target, prop, value) => {
262
278
  if (localState && prop in localState) {
263
279
  throw new Error("Writing to local state is not allowed as it is read-only.");
264
280
  }
265
- rootState[prop] = value;
266
- rootSetState?.(rootState);
281
+ target[prop] = value;
282
+ rootSetState?.(target);
267
283
  return true;
268
284
  }
269
285
  });
@@ -404,8 +420,33 @@ var runInNode = ({
404
420
  }
405
421
  };
406
422
 
423
+ // src/helpers/nullable.ts
424
+ var checkIsDefined = (maybeT) => maybeT !== null && maybeT !== void 0;
425
+
426
+ // src/functions/is-node-runtime.ts
427
+ function isNodeRuntime() {
428
+ return typeof process !== "undefined" && checkIsDefined(process?.versions?.node);
429
+ }
430
+
431
+ // src/functions/evaluate/should-force-browser-runtime-in-node.ts
432
+ var shouldForceBrowserRuntimeInNode = () => {
433
+ if (!isNodeRuntime())
434
+ return false;
435
+ const isArm64 = process.arch === "arm64";
436
+ const isNode20 = process.version.startsWith("v20");
437
+ const hasNoNodeSnapshotNodeOption = process.env.NODE_OPTIONS?.includes("--no-node-snapshot");
438
+ if (isArm64 && isNode20 && !hasNoNodeSnapshotNodeOption) {
439
+ logger.log(`Skipping usage of \`isolated-vm\` to avoid crashes in Node v20 on an arm64 machine.
440
+ If you would like to use the \`isolated-vm\` package on this machine, please provide the \`NODE_OPTIONS=--no-node-snapshot\` config to your Node process.
441
+ See https://github.com/BuilderIO/builder/blob/main/packages/sdks/README.md#node-v20--m1-macs-apple-silicon-support for more information.
442
+ `);
443
+ return true;
444
+ }
445
+ return false;
446
+ };
447
+
407
448
  // src/functions/evaluate/choose-eval.ts
408
- var chooseBrowserOrServerEval = (args) => isBrowser() ? runInBrowser(args) : runInNode(args);
449
+ var chooseBrowserOrServerEval = (args) => isBrowser() || shouldForceBrowserRuntimeInNode() ? runInBrowser(args) : runInNode(args);
409
450
 
410
451
  // src/functions/evaluate/evaluate.ts
411
452
  function evaluate({
@@ -618,9 +659,6 @@ var getSizesForBreakpoints = ({
618
659
  // src/functions/camel-to-kebab-case.ts
619
660
  var camelToKebabCase = (string) => string.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g, "$1-$2").toLowerCase();
620
661
 
621
- // src/helpers/nullable.ts
622
- var checkIsDefined = (maybeT) => maybeT !== null && maybeT !== void 0;
623
-
624
662
  // src/helpers/css.ts
625
663
  var convertStyleMapToCSSArray = (style) => {
626
664
  const cssProps = Object.entries(style).map(([key, value]) => {
@@ -3481,7 +3519,7 @@ var getInteractionPropertiesForEvent = (event) => {
3481
3519
  };
3482
3520
 
3483
3521
  // src/constants/sdk-version.ts
3484
- var SDK_VERSION = "0.12.4";
3522
+ var SDK_VERSION = "0.12.6";
3485
3523
 
3486
3524
  // src/functions/register.ts
3487
3525
  var registry = {};
@@ -3856,7 +3894,7 @@ function EnableEditor(props) {
3856
3894
  function onUpdateFn_2() {
3857
3895
  evaluateJsCode();
3858
3896
  }
3859
- createEffect(on(() => [props.builderContextSignal.content?.data?.jsCode, props.builderContextSignal.rootState], onUpdateFn_2));
3897
+ createEffect(on(() => [props.builderContextSignal.content?.data?.jsCode], onUpdateFn_2));
3860
3898
  function onUpdateFn_3() {
3861
3899
  runHttpRequests();
3862
3900
  }
@@ -229,27 +229,43 @@ var runInBrowser = ({
229
229
  builder,
230
230
  context,
231
231
  event,
232
- state: flattenState(rootState, localState, rootSetState)
232
+ state: flattenState({
233
+ rootState,
234
+ localState,
235
+ rootSetState
236
+ })
233
237
  });
234
238
  return new Function(...functionArgs.map(([name]) => name), code)(...functionArgs.map(([, value]) => value));
235
239
  };
236
- function flattenState(rootState, localState, rootSetState) {
237
- if (rootState === localState) {
238
- throw new Error("rootState === localState");
239
- }
240
+ function flattenState({
241
+ rootState,
242
+ localState,
243
+ rootSetState
244
+ }) {
240
245
  return new Proxy(rootState, {
241
- get: (_, prop) => {
246
+ get: (target, prop) => {
242
247
  if (localState && prop in localState) {
243
248
  return localState[prop];
244
249
  }
245
- return rootState[prop];
250
+ const val = target[prop];
251
+ if (typeof val === "object") {
252
+ return flattenState({
253
+ rootState: val,
254
+ localState: void 0,
255
+ rootSetState: rootSetState ? (subState) => {
256
+ target[prop] = subState;
257
+ rootSetState(target);
258
+ } : void 0
259
+ });
260
+ }
261
+ return val;
246
262
  },
247
- set: (_, prop, value) => {
263
+ set: (target, prop, value) => {
248
264
  if (localState && prop in localState) {
249
265
  throw new Error("Writing to local state is not allowed as it is read-only.");
250
266
  }
251
- rootState[prop] = value;
252
- rootSetState?.(rootState);
267
+ target[prop] = value;
268
+ rootSetState?.(target);
253
269
  return true;
254
270
  }
255
271
  });
@@ -393,8 +409,33 @@ var runInNode = ({
393
409
  }
394
410
  };
395
411
 
412
+ // src/helpers/nullable.ts
413
+ var checkIsDefined = (maybeT) => maybeT !== null && maybeT !== void 0;
414
+
415
+ // src/functions/is-node-runtime.ts
416
+ function isNodeRuntime() {
417
+ return typeof process !== "undefined" && checkIsDefined(process?.versions?.node);
418
+ }
419
+
420
+ // src/functions/evaluate/should-force-browser-runtime-in-node.ts
421
+ var shouldForceBrowserRuntimeInNode = () => {
422
+ if (!isNodeRuntime())
423
+ return false;
424
+ const isArm64 = process.arch === "arm64";
425
+ const isNode20 = process.version.startsWith("v20");
426
+ const hasNoNodeSnapshotNodeOption = process.env.NODE_OPTIONS?.includes("--no-node-snapshot");
427
+ if (isArm64 && isNode20 && !hasNoNodeSnapshotNodeOption) {
428
+ logger.log(`Skipping usage of \`isolated-vm\` to avoid crashes in Node v20 on an arm64 machine.
429
+ If you would like to use the \`isolated-vm\` package on this machine, please provide the \`NODE_OPTIONS=--no-node-snapshot\` config to your Node process.
430
+ See https://github.com/BuilderIO/builder/blob/main/packages/sdks/README.md#node-v20--m1-macs-apple-silicon-support for more information.
431
+ `);
432
+ return true;
433
+ }
434
+ return false;
435
+ };
436
+
396
437
  // src/functions/evaluate/choose-eval.ts
397
- var chooseBrowserOrServerEval = (args) => isBrowser() ? runInBrowser(args) : runInNode(args);
438
+ var chooseBrowserOrServerEval = (args) => isBrowser() || shouldForceBrowserRuntimeInNode() ? runInBrowser(args) : runInNode(args);
398
439
 
399
440
  // src/functions/evaluate/evaluate.ts
400
441
  function evaluate({
@@ -610,9 +651,6 @@ var getSizesForBreakpoints = ({
610
651
  // src/functions/camel-to-kebab-case.ts
611
652
  var camelToKebabCase = (string) => string.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g, "$1-$2").toLowerCase();
612
653
 
613
- // src/helpers/nullable.ts
614
- var checkIsDefined = (maybeT) => maybeT !== null && maybeT !== void 0;
615
-
616
654
  // src/helpers/css.ts
617
655
  var convertStyleMapToCSSArray = (style) => {
618
656
  const cssProps = Object.entries(style).map(([key, value]) => {
@@ -3155,7 +3193,7 @@ var getInteractionPropertiesForEvent = (event) => {
3155
3193
  };
3156
3194
 
3157
3195
  // src/constants/sdk-version.ts
3158
- var SDK_VERSION = "0.12.4";
3196
+ var SDK_VERSION = "0.12.6";
3159
3197
 
3160
3198
  // src/functions/register.ts
3161
3199
  var registry = {};
@@ -3542,13 +3580,7 @@ function EnableEditor(props) {
3542
3580
  evaluateJsCode();
3543
3581
  }
3544
3582
  createEffect2(
3545
- on2(
3546
- () => [
3547
- props.builderContextSignal.content?.data?.jsCode,
3548
- props.builderContextSignal.rootState
3549
- ],
3550
- onUpdateFn_2
3551
- )
3583
+ on2(() => [props.builderContextSignal.content?.data?.jsCode], onUpdateFn_2)
3552
3584
  );
3553
3585
  function onUpdateFn_3() {
3554
3586
  runHttpRequests();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@builder.io/sdk-solid",
3
- "version": "0.12.4",
3
+ "version": "0.12.6",
4
4
  "description": "",
5
5
  "files": [
6
6
  "dist",