@builder.io/sdk-svelte 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.
Files changed (36) hide show
  1. package/lib/browser/components/content/components/enable-editor.svelte +9 -6
  2. package/lib/browser/constants/sdk-version.d.ts +1 -1
  3. package/lib/browser/constants/sdk-version.js +1 -1
  4. package/lib/browser/functions/evaluate/browser-runtime/browser.d.ts +5 -1
  5. package/lib/browser/functions/evaluate/browser-runtime/browser.js +22 -10
  6. package/lib/browser/functions/evaluate/choose-eval.js +2 -1
  7. package/lib/browser/functions/evaluate/should-force-browser-runtime-in-node.d.ts +1 -0
  8. package/lib/browser/functions/evaluate/should-force-browser-runtime-in-node.js +17 -0
  9. package/lib/browser/functions/is-node-runtime.js +1 -1
  10. package/lib/edge/components/content/components/enable-editor.svelte +9 -6
  11. package/lib/edge/constants/sdk-version.d.ts +1 -1
  12. package/lib/edge/constants/sdk-version.js +1 -1
  13. package/lib/edge/functions/evaluate/browser-runtime/browser.d.ts +5 -1
  14. package/lib/edge/functions/evaluate/browser-runtime/browser.js +22 -10
  15. package/lib/edge/functions/evaluate/choose-eval.js +2 -1
  16. package/lib/edge/functions/evaluate/should-force-browser-runtime-in-node.d.ts +1 -0
  17. package/lib/edge/functions/evaluate/should-force-browser-runtime-in-node.js +17 -0
  18. package/lib/edge/functions/is-node-runtime.js +1 -1
  19. package/lib/node/components/content/components/enable-editor.svelte +9 -6
  20. package/lib/node/constants/sdk-version.d.ts +1 -1
  21. package/lib/node/constants/sdk-version.js +1 -1
  22. package/lib/node/functions/evaluate/browser-runtime/browser.d.ts +5 -1
  23. package/lib/node/functions/evaluate/browser-runtime/browser.js +22 -10
  24. package/lib/node/functions/evaluate/choose-eval.js +2 -1
  25. package/lib/node/functions/evaluate/should-force-browser-runtime-in-node.d.ts +1 -0
  26. package/lib/node/functions/evaluate/should-force-browser-runtime-in-node.js +17 -0
  27. package/lib/node/functions/is-node-runtime.js +1 -1
  28. package/package.json +1 -1
  29. package/src/blocks/embed/embed.svelte +1 -0
  30. package/src/blocks/symbol/symbol.svelte +1 -0
  31. package/src/components/content/components/enable-editor.svelte +15 -8
  32. package/src/constants/sdk-version.ts +1 -1
  33. package/src/functions/evaluate/browser-runtime/browser.ts +30 -10
  34. package/src/functions/evaluate/choose-eval.ts +2 -1
  35. package/src/functions/evaluate/should-force-browser-runtime-in-node.ts +16 -0
  36. package/src/functions/is-node-runtime.ts +1 -1
@@ -289,18 +289,21 @@ $: onUpdateFn_1(...[shouldSendResetCookie]);
289
289
  function onUpdateFn_2(..._args) {
290
290
  evaluateJsCode();
291
291
  }
292
- $: onUpdateFn_2(...[
293
- $builderContextSignal.content?.data?.jsCode,
294
- $builderContextSignal.rootState,
295
- ]);
292
+ $: onUpdateFn_2_builderContextSignal_content__data__jsCode =
293
+ $builderContextSignal.content?.data?.jsCode;
294
+ $: onUpdateFn_2(...[onUpdateFn_2_builderContextSignal_content__data__jsCode]);
296
295
  function onUpdateFn_3(..._args) {
297
296
  runHttpRequests();
298
297
  }
299
- $: onUpdateFn_3(...[$builderContextSignal.content?.data?.httpRequests]);
298
+ $: onUpdateFn_3_builderContextSignal_content__data__httpRequests =
299
+ $builderContextSignal.content?.data?.httpRequests;
300
+ $: onUpdateFn_3(...[onUpdateFn_3_builderContextSignal_content__data__httpRequests]);
300
301
  function onUpdateFn_4(..._args) {
301
302
  emitStateUpdate();
302
303
  }
303
- $: onUpdateFn_4(...[$builderContextSignal.rootState]);
304
+ $: onUpdateFn_4_builderContextSignal_rootState =
305
+ $builderContextSignal.rootState;
306
+ $: onUpdateFn_4(...[onUpdateFn_4_builderContextSignal_rootState]);
304
307
  function onUpdateFn_5(..._args) {
305
308
  if (data) {
306
309
  mergeNewRootState(data);
@@ -1 +1 @@
1
- export declare const SDK_VERSION = "0.12.4";
1
+ export declare const SDK_VERSION = "0.12.6";
@@ -1 +1 @@
1
- export const SDK_VERSION = "0.12.4";
1
+ export const SDK_VERSION = "0.12.6";
@@ -1,4 +1,8 @@
1
1
  import type { BuilderRenderState } from '../../../context/types.js';
2
2
  import type { ExecutorArgs } from '../helpers.js';
3
3
  export declare const runInBrowser: ({ code, builder, context, event, localState, rootSetState, rootState }: ExecutorArgs) => any;
4
- export declare function flattenState(rootState: Record<string | symbol, any>, localState: Record<string | symbol, any> | undefined, rootSetState: ((rootState: BuilderRenderState) => void) | undefined): BuilderRenderState;
4
+ export declare function flattenState({ rootState, localState, rootSetState }: {
5
+ rootState: Record<string | symbol, any>;
6
+ localState: Record<string | symbol, any> | undefined;
7
+ rootSetState: ((rootState: BuilderRenderState) => void) | undefined;
8
+ }): BuilderRenderState;
@@ -4,27 +4,39 @@ export const runInBrowser = ({ code, builder, context, event, localState, rootSe
4
4
  builder,
5
5
  context,
6
6
  event,
7
- state: flattenState(rootState, localState, rootSetState)
7
+ state: flattenState({
8
+ rootState,
9
+ localState,
10
+ rootSetState
11
+ })
8
12
  });
9
13
  return new Function(...functionArgs.map(([name]) => name), code)(...functionArgs.map(([, value]) => value));
10
14
  };
11
- export function flattenState(rootState, localState, rootSetState) {
12
- if (rootState === localState) {
13
- throw new Error('rootState === localState');
14
- }
15
+ export function flattenState({ rootState, localState, rootSetState }) {
15
16
  return new Proxy(rootState, {
16
- get: (_, prop) => {
17
+ get: (target, prop) => {
17
18
  if (localState && prop in localState) {
18
19
  return localState[prop];
19
20
  }
20
- return rootState[prop];
21
+ const val = target[prop];
22
+ if (typeof val === 'object') {
23
+ return flattenState({
24
+ rootState: val,
25
+ localState: undefined,
26
+ rootSetState: rootSetState ? subState => {
27
+ target[prop] = subState;
28
+ rootSetState(target);
29
+ } : undefined
30
+ });
31
+ }
32
+ return val;
21
33
  },
22
- set: (_, prop, value) => {
34
+ set: (target, prop, value) => {
23
35
  if (localState && prop in localState) {
24
36
  throw new Error('Writing to local state is not allowed as it is read-only.');
25
37
  }
26
- rootState[prop] = value;
27
- rootSetState?.(rootState);
38
+ target[prop] = value;
39
+ rootSetState?.(target);
28
40
  return true;
29
41
  }
30
42
  });
@@ -12,8 +12,9 @@ import { runInBrowser } from './browser-runtime/browser.js';
12
12
  * types can be resolved correctly.
13
13
  */
14
14
  import { evaluator } from '../../../browser/functions/evaluate/browser-runtime/index.js';
15
+ import { shouldForceBrowserRuntimeInNode } from './should-force-browser-runtime-in-node.js';
15
16
  /**
16
17
  * Even though we have separate runtimes for browser/node/edge, sometimes frameworks will
17
18
  * end up sending the server runtime code to the browser (most notably in dev mode).
18
19
  */
19
- export const chooseBrowserOrServerEval = (args) => isBrowser() ? runInBrowser(args) : evaluator(args);
20
+ export const chooseBrowserOrServerEval = (args) => isBrowser() || shouldForceBrowserRuntimeInNode() ? runInBrowser(args) : evaluator(args);
@@ -0,0 +1 @@
1
+ export declare const shouldForceBrowserRuntimeInNode: () => boolean;
@@ -0,0 +1,17 @@
1
+ import { logger } from '../../helpers/logger.js';
2
+ import { isNodeRuntime } from '../is-node-runtime.js';
3
+ export const shouldForceBrowserRuntimeInNode = () => {
4
+ if (!isNodeRuntime())
5
+ return false;
6
+ const isArm64 = process.arch === 'arm64';
7
+ const isNode20 = process.version.startsWith('v20');
8
+ const hasNoNodeSnapshotNodeOption = process.env.NODE_OPTIONS?.includes('--no-node-snapshot');
9
+ if (isArm64 && isNode20 && !hasNoNodeSnapshotNodeOption) {
10
+ logger.log(`Skipping usage of \`isolated-vm\` to avoid crashes in Node v20 on an arm64 machine.
11
+ 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.
12
+ See https://github.com/BuilderIO/builder/blob/main/packages/sdks/README.md#node-v20--m1-macs-apple-silicon-support for more information.
13
+ `);
14
+ return true;
15
+ }
16
+ return false;
17
+ };
@@ -1,4 +1,4 @@
1
- import { checkIsDefined } from '../helpers/nullable';
1
+ import { checkIsDefined } from '../helpers/nullable.js';
2
2
  /**
3
3
  * Identifies node runtime
4
4
  */
@@ -289,18 +289,21 @@ $: onUpdateFn_1(...[shouldSendResetCookie]);
289
289
  function onUpdateFn_2(..._args) {
290
290
  evaluateJsCode();
291
291
  }
292
- $: onUpdateFn_2(...[
293
- $builderContextSignal.content?.data?.jsCode,
294
- $builderContextSignal.rootState,
295
- ]);
292
+ $: onUpdateFn_2_builderContextSignal_content__data__jsCode =
293
+ $builderContextSignal.content?.data?.jsCode;
294
+ $: onUpdateFn_2(...[onUpdateFn_2_builderContextSignal_content__data__jsCode]);
296
295
  function onUpdateFn_3(..._args) {
297
296
  runHttpRequests();
298
297
  }
299
- $: onUpdateFn_3(...[$builderContextSignal.content?.data?.httpRequests]);
298
+ $: onUpdateFn_3_builderContextSignal_content__data__httpRequests =
299
+ $builderContextSignal.content?.data?.httpRequests;
300
+ $: onUpdateFn_3(...[onUpdateFn_3_builderContextSignal_content__data__httpRequests]);
300
301
  function onUpdateFn_4(..._args) {
301
302
  emitStateUpdate();
302
303
  }
303
- $: onUpdateFn_4(...[$builderContextSignal.rootState]);
304
+ $: onUpdateFn_4_builderContextSignal_rootState =
305
+ $builderContextSignal.rootState;
306
+ $: onUpdateFn_4(...[onUpdateFn_4_builderContextSignal_rootState]);
304
307
  function onUpdateFn_5(..._args) {
305
308
  if (data) {
306
309
  mergeNewRootState(data);
@@ -1 +1 @@
1
- export declare const SDK_VERSION = "0.12.4";
1
+ export declare const SDK_VERSION = "0.12.6";
@@ -1 +1 @@
1
- export const SDK_VERSION = "0.12.4";
1
+ export const SDK_VERSION = "0.12.6";
@@ -1,4 +1,8 @@
1
1
  import type { BuilderRenderState } from '../../../context/types.js';
2
2
  import type { ExecutorArgs } from '../helpers.js';
3
3
  export declare const runInBrowser: ({ code, builder, context, event, localState, rootSetState, rootState }: ExecutorArgs) => any;
4
- export declare function flattenState(rootState: Record<string | symbol, any>, localState: Record<string | symbol, any> | undefined, rootSetState: ((rootState: BuilderRenderState) => void) | undefined): BuilderRenderState;
4
+ export declare function flattenState({ rootState, localState, rootSetState }: {
5
+ rootState: Record<string | symbol, any>;
6
+ localState: Record<string | symbol, any> | undefined;
7
+ rootSetState: ((rootState: BuilderRenderState) => void) | undefined;
8
+ }): BuilderRenderState;
@@ -4,27 +4,39 @@ export const runInBrowser = ({ code, builder, context, event, localState, rootSe
4
4
  builder,
5
5
  context,
6
6
  event,
7
- state: flattenState(rootState, localState, rootSetState)
7
+ state: flattenState({
8
+ rootState,
9
+ localState,
10
+ rootSetState
11
+ })
8
12
  });
9
13
  return new Function(...functionArgs.map(([name]) => name), code)(...functionArgs.map(([, value]) => value));
10
14
  };
11
- export function flattenState(rootState, localState, rootSetState) {
12
- if (rootState === localState) {
13
- throw new Error('rootState === localState');
14
- }
15
+ export function flattenState({ rootState, localState, rootSetState }) {
15
16
  return new Proxy(rootState, {
16
- get: (_, prop) => {
17
+ get: (target, prop) => {
17
18
  if (localState && prop in localState) {
18
19
  return localState[prop];
19
20
  }
20
- return rootState[prop];
21
+ const val = target[prop];
22
+ if (typeof val === 'object') {
23
+ return flattenState({
24
+ rootState: val,
25
+ localState: undefined,
26
+ rootSetState: rootSetState ? subState => {
27
+ target[prop] = subState;
28
+ rootSetState(target);
29
+ } : undefined
30
+ });
31
+ }
32
+ return val;
21
33
  },
22
- set: (_, prop, value) => {
34
+ set: (target, prop, value) => {
23
35
  if (localState && prop in localState) {
24
36
  throw new Error('Writing to local state is not allowed as it is read-only.');
25
37
  }
26
- rootState[prop] = value;
27
- rootSetState?.(rootState);
38
+ target[prop] = value;
39
+ rootSetState?.(target);
28
40
  return true;
29
41
  }
30
42
  });
@@ -12,8 +12,9 @@ import { runInBrowser } from './browser-runtime/browser.js';
12
12
  * types can be resolved correctly.
13
13
  */
14
14
  import { evaluator } from '../../../edge/functions/evaluate/edge-runtime/index.js';
15
+ import { shouldForceBrowserRuntimeInNode } from './should-force-browser-runtime-in-node.js';
15
16
  /**
16
17
  * Even though we have separate runtimes for browser/node/edge, sometimes frameworks will
17
18
  * end up sending the server runtime code to the browser (most notably in dev mode).
18
19
  */
19
- export const chooseBrowserOrServerEval = (args) => isBrowser() ? runInBrowser(args) : evaluator(args);
20
+ export const chooseBrowserOrServerEval = (args) => isBrowser() || shouldForceBrowserRuntimeInNode() ? runInBrowser(args) : evaluator(args);
@@ -0,0 +1 @@
1
+ export declare const shouldForceBrowserRuntimeInNode: () => boolean;
@@ -0,0 +1,17 @@
1
+ import { logger } from '../../helpers/logger.js';
2
+ import { isNodeRuntime } from '../is-node-runtime.js';
3
+ export const shouldForceBrowserRuntimeInNode = () => {
4
+ if (!isNodeRuntime())
5
+ return false;
6
+ const isArm64 = process.arch === 'arm64';
7
+ const isNode20 = process.version.startsWith('v20');
8
+ const hasNoNodeSnapshotNodeOption = process.env.NODE_OPTIONS?.includes('--no-node-snapshot');
9
+ if (isArm64 && isNode20 && !hasNoNodeSnapshotNodeOption) {
10
+ logger.log(`Skipping usage of \`isolated-vm\` to avoid crashes in Node v20 on an arm64 machine.
11
+ 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.
12
+ See https://github.com/BuilderIO/builder/blob/main/packages/sdks/README.md#node-v20--m1-macs-apple-silicon-support for more information.
13
+ `);
14
+ return true;
15
+ }
16
+ return false;
17
+ };
@@ -1,4 +1,4 @@
1
- import { checkIsDefined } from '../helpers/nullable';
1
+ import { checkIsDefined } from '../helpers/nullable.js';
2
2
  /**
3
3
  * Identifies node runtime
4
4
  */
@@ -289,18 +289,21 @@ $: onUpdateFn_1(...[shouldSendResetCookie]);
289
289
  function onUpdateFn_2(..._args) {
290
290
  evaluateJsCode();
291
291
  }
292
- $: onUpdateFn_2(...[
293
- $builderContextSignal.content?.data?.jsCode,
294
- $builderContextSignal.rootState,
295
- ]);
292
+ $: onUpdateFn_2_builderContextSignal_content__data__jsCode =
293
+ $builderContextSignal.content?.data?.jsCode;
294
+ $: onUpdateFn_2(...[onUpdateFn_2_builderContextSignal_content__data__jsCode]);
296
295
  function onUpdateFn_3(..._args) {
297
296
  runHttpRequests();
298
297
  }
299
- $: onUpdateFn_3(...[$builderContextSignal.content?.data?.httpRequests]);
298
+ $: onUpdateFn_3_builderContextSignal_content__data__httpRequests =
299
+ $builderContextSignal.content?.data?.httpRequests;
300
+ $: onUpdateFn_3(...[onUpdateFn_3_builderContextSignal_content__data__httpRequests]);
300
301
  function onUpdateFn_4(..._args) {
301
302
  emitStateUpdate();
302
303
  }
303
- $: onUpdateFn_4(...[$builderContextSignal.rootState]);
304
+ $: onUpdateFn_4_builderContextSignal_rootState =
305
+ $builderContextSignal.rootState;
306
+ $: onUpdateFn_4(...[onUpdateFn_4_builderContextSignal_rootState]);
304
307
  function onUpdateFn_5(..._args) {
305
308
  if (data) {
306
309
  mergeNewRootState(data);
@@ -1 +1 @@
1
- export declare const SDK_VERSION = "0.12.4";
1
+ export declare const SDK_VERSION = "0.12.6";
@@ -1 +1 @@
1
- export const SDK_VERSION = "0.12.4";
1
+ export const SDK_VERSION = "0.12.6";
@@ -1,4 +1,8 @@
1
1
  import type { BuilderRenderState } from '../../../context/types.js';
2
2
  import type { ExecutorArgs } from '../helpers.js';
3
3
  export declare const runInBrowser: ({ code, builder, context, event, localState, rootSetState, rootState }: ExecutorArgs) => any;
4
- export declare function flattenState(rootState: Record<string | symbol, any>, localState: Record<string | symbol, any> | undefined, rootSetState: ((rootState: BuilderRenderState) => void) | undefined): BuilderRenderState;
4
+ export declare function flattenState({ rootState, localState, rootSetState }: {
5
+ rootState: Record<string | symbol, any>;
6
+ localState: Record<string | symbol, any> | undefined;
7
+ rootSetState: ((rootState: BuilderRenderState) => void) | undefined;
8
+ }): BuilderRenderState;
@@ -4,27 +4,39 @@ export const runInBrowser = ({ code, builder, context, event, localState, rootSe
4
4
  builder,
5
5
  context,
6
6
  event,
7
- state: flattenState(rootState, localState, rootSetState)
7
+ state: flattenState({
8
+ rootState,
9
+ localState,
10
+ rootSetState
11
+ })
8
12
  });
9
13
  return new Function(...functionArgs.map(([name]) => name), code)(...functionArgs.map(([, value]) => value));
10
14
  };
11
- export function flattenState(rootState, localState, rootSetState) {
12
- if (rootState === localState) {
13
- throw new Error('rootState === localState');
14
- }
15
+ export function flattenState({ rootState, localState, rootSetState }) {
15
16
  return new Proxy(rootState, {
16
- get: (_, prop) => {
17
+ get: (target, prop) => {
17
18
  if (localState && prop in localState) {
18
19
  return localState[prop];
19
20
  }
20
- return rootState[prop];
21
+ const val = target[prop];
22
+ if (typeof val === 'object') {
23
+ return flattenState({
24
+ rootState: val,
25
+ localState: undefined,
26
+ rootSetState: rootSetState ? subState => {
27
+ target[prop] = subState;
28
+ rootSetState(target);
29
+ } : undefined
30
+ });
31
+ }
32
+ return val;
21
33
  },
22
- set: (_, prop, value) => {
34
+ set: (target, prop, value) => {
23
35
  if (localState && prop in localState) {
24
36
  throw new Error('Writing to local state is not allowed as it is read-only.');
25
37
  }
26
- rootState[prop] = value;
27
- rootSetState?.(rootState);
38
+ target[prop] = value;
39
+ rootSetState?.(target);
28
40
  return true;
29
41
  }
30
42
  });
@@ -12,8 +12,9 @@ import { runInBrowser } from './browser-runtime/browser.js';
12
12
  * types can be resolved correctly.
13
13
  */
14
14
  import { evaluator } from '../../../node/functions/evaluate/node-runtime/index.js';
15
+ import { shouldForceBrowserRuntimeInNode } from './should-force-browser-runtime-in-node.js';
15
16
  /**
16
17
  * Even though we have separate runtimes for browser/node/edge, sometimes frameworks will
17
18
  * end up sending the server runtime code to the browser (most notably in dev mode).
18
19
  */
19
- export const chooseBrowserOrServerEval = (args) => isBrowser() ? runInBrowser(args) : evaluator(args);
20
+ export const chooseBrowserOrServerEval = (args) => isBrowser() || shouldForceBrowserRuntimeInNode() ? runInBrowser(args) : evaluator(args);
@@ -0,0 +1 @@
1
+ export declare const shouldForceBrowserRuntimeInNode: () => boolean;
@@ -0,0 +1,17 @@
1
+ import { logger } from '../../helpers/logger.js';
2
+ import { isNodeRuntime } from '../is-node-runtime.js';
3
+ export const shouldForceBrowserRuntimeInNode = () => {
4
+ if (!isNodeRuntime())
5
+ return false;
6
+ const isArm64 = process.arch === 'arm64';
7
+ const isNode20 = process.version.startsWith('v20');
8
+ const hasNoNodeSnapshotNodeOption = process.env.NODE_OPTIONS?.includes('--no-node-snapshot');
9
+ if (isArm64 && isNode20 && !hasNoNodeSnapshotNodeOption) {
10
+ logger.log(`Skipping usage of \`isolated-vm\` to avoid crashes in Node v20 on an arm64 machine.
11
+ 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.
12
+ See https://github.com/BuilderIO/builder/blob/main/packages/sdks/README.md#node-v20--m1-macs-apple-silicon-support for more information.
13
+ `);
14
+ return true;
15
+ }
16
+ return false;
17
+ };
@@ -1,4 +1,4 @@
1
- import { checkIsDefined } from '../helpers/nullable';
1
+ import { checkIsDefined } from '../helpers/nullable.js';
2
2
  /**
3
3
  * Identifies node runtime
4
4
  */
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@builder.io/sdk-svelte",
3
3
  "description": "Builder.io SDK for Svelte",
4
- "version": "0.12.4",
4
+ "version": "0.12.6",
5
5
  "type": "module",
6
6
  "files": [
7
7
  "lib",
@@ -43,6 +43,7 @@
43
43
  findAndRunScripts();
44
44
  }
45
45
  }
46
+
46
47
  $: onUpdateFn_0(...[elem, ranInitFn]);
47
48
  </script>
48
49
 
@@ -53,6 +53,7 @@
53
53
  function onUpdateFn_0(..._args: any[]) {
54
54
  setContent();
55
55
  }
56
+
56
57
  $: onUpdateFn_0(...[symbol]);
57
58
  </script>
58
59
 
@@ -343,31 +343,37 @@
343
343
  mergeNewContent(content);
344
344
  }
345
345
  }
346
+
346
347
  $: onUpdateFn_0(...[content]);
347
348
  function onUpdateFn_1(..._args: any[]) {}
349
+
348
350
  $: onUpdateFn_1(...[shouldSendResetCookie]);
349
351
  function onUpdateFn_2(..._args: any[]) {
350
352
  evaluateJsCode();
351
353
  }
352
- $: onUpdateFn_2(
353
- ...[
354
- $builderContextSignal.content?.data?.jsCode,
355
- $builderContextSignal.rootState,
356
- ]
357
- );
354
+ $: onUpdateFn_2_builderContextSignal_content__data__jsCode =
355
+ $builderContextSignal.content?.data?.jsCode;
356
+ $: onUpdateFn_2(...[onUpdateFn_2_builderContextSignal_content__data__jsCode]);
358
357
  function onUpdateFn_3(..._args: any[]) {
359
358
  runHttpRequests();
360
359
  }
361
- $: onUpdateFn_3(...[$builderContextSignal.content?.data?.httpRequests]);
360
+ $: onUpdateFn_3_builderContextSignal_content__data__httpRequests =
361
+ $builderContextSignal.content?.data?.httpRequests;
362
+ $: onUpdateFn_3(
363
+ ...[onUpdateFn_3_builderContextSignal_content__data__httpRequests]
364
+ );
362
365
  function onUpdateFn_4(..._args: any[]) {
363
366
  emitStateUpdate();
364
367
  }
365
- $: onUpdateFn_4(...[$builderContextSignal.rootState]);
368
+ $: onUpdateFn_4_builderContextSignal_rootState =
369
+ $builderContextSignal.rootState;
370
+ $: onUpdateFn_4(...[onUpdateFn_4_builderContextSignal_rootState]);
366
371
  function onUpdateFn_5(..._args: any[]) {
367
372
  if (data) {
368
373
  mergeNewRootState(data);
369
374
  }
370
375
  }
376
+
371
377
  $: onUpdateFn_5(...[data]);
372
378
  function onUpdateFn_6(..._args: any[]) {
373
379
  if (locale) {
@@ -376,6 +382,7 @@
376
382
  });
377
383
  }
378
384
  }
385
+
379
386
  $: onUpdateFn_6(...[locale]);
380
387
 
381
388
  setContext(builderContext.key, builderContextSignal);
@@ -1 +1 @@
1
- export const SDK_VERSION = "0.12.4"
1
+ export const SDK_VERSION = "0.12.6"
@@ -14,27 +14,47 @@ export const runInBrowser = ({
14
14
  builder,
15
15
  context,
16
16
  event,
17
- state: flattenState(rootState, localState, rootSetState)
17
+ state: flattenState({
18
+ rootState,
19
+ localState,
20
+ rootSetState
21
+ })
18
22
  });
19
23
  return new Function(...functionArgs.map(([name]) => name), code)(...functionArgs.map(([, value]) => value));
20
24
  };
21
- export function flattenState(rootState: Record<string | symbol, any>, localState: Record<string | symbol, any> | undefined, rootSetState: ((rootState: BuilderRenderState) => void) | undefined): BuilderRenderState {
22
- if (rootState === localState) {
23
- throw new Error('rootState === localState');
24
- }
25
+ export function flattenState({
26
+ rootState,
27
+ localState,
28
+ rootSetState
29
+ }: {
30
+ rootState: Record<string | symbol, any>;
31
+ localState: Record<string | symbol, any> | undefined;
32
+ rootSetState: ((rootState: BuilderRenderState) => void) | undefined;
33
+ }): BuilderRenderState {
25
34
  return new Proxy(rootState, {
26
- get: (_, prop) => {
35
+ get: (target, prop) => {
27
36
  if (localState && prop in localState) {
28
37
  return localState[prop];
29
38
  }
30
- return rootState[(prop as string)];
39
+ const val = target[prop];
40
+ if (typeof val === 'object') {
41
+ return flattenState({
42
+ rootState: val,
43
+ localState: undefined,
44
+ rootSetState: rootSetState ? subState => {
45
+ target[prop] = subState;
46
+ rootSetState(target);
47
+ } : undefined
48
+ });
49
+ }
50
+ return val;
31
51
  },
32
- set: (_, prop, value) => {
52
+ set: (target, prop, value) => {
33
53
  if (localState && prop in localState) {
34
54
  throw new Error('Writing to local state is not allowed as it is read-only.');
35
55
  }
36
- rootState[(prop as string)] = value;
37
- rootSetState?.(rootState);
56
+ target[prop] = value;
57
+ rootSetState?.(target);
38
58
  return true;
39
59
  }
40
60
  });
@@ -14,9 +14,10 @@ import type { ExecutorArgs } from './helpers.js';
14
14
  * types can be resolved correctly.
15
15
  */
16
16
  import { evaluator } from 'placeholder-runtime';
17
+ import { shouldForceBrowserRuntimeInNode } from './should-force-browser-runtime-in-node.js';
17
18
 
18
19
  /**
19
20
  * Even though we have separate runtimes for browser/node/edge, sometimes frameworks will
20
21
  * end up sending the server runtime code to the browser (most notably in dev mode).
21
22
  */
22
- export const chooseBrowserOrServerEval = (args: ExecutorArgs) => isBrowser() ? runInBrowser(args) : evaluator(args)
23
+ export const chooseBrowserOrServerEval = (args: ExecutorArgs) => isBrowser() || shouldForceBrowserRuntimeInNode() ? runInBrowser(args) : evaluator(args)
@@ -0,0 +1,16 @@
1
+ import { logger } from '../../helpers/logger.js';
2
+ import { isNodeRuntime } from '../is-node-runtime.js';
3
+ export const shouldForceBrowserRuntimeInNode = () => {
4
+ if (!isNodeRuntime()) return false;
5
+ const isArm64 = process.arch === 'arm64';
6
+ const isNode20 = process.version.startsWith('v20');
7
+ const hasNoNodeSnapshotNodeOption = process.env.NODE_OPTIONS?.includes('--no-node-snapshot');
8
+ if (isArm64 && isNode20 && !hasNoNodeSnapshotNodeOption) {
9
+ logger.log(`Skipping usage of \`isolated-vm\` to avoid crashes in Node v20 on an arm64 machine.
10
+ 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.
11
+ See https://github.com/BuilderIO/builder/blob/main/packages/sdks/README.md#node-v20--m1-macs-apple-silicon-support for more information.
12
+ `);
13
+ return true;
14
+ }
15
+ return false;
16
+ }
@@ -1,4 +1,4 @@
1
- import { checkIsDefined } from '../helpers/nullable';
1
+ import { checkIsDefined } from '../helpers/nullable.js';
2
2
 
3
3
  /**
4
4
  * Identifies node runtime