@builder.io/sdk-svelte 2.0.25 → 2.0.28

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 (63) hide show
  1. package/lib/browser/blocks/columns/columns.svelte +23 -15
  2. package/lib/browser/components/content/components/enable-editor.svelte +5 -1
  3. package/lib/browser/components/content/components/enable-editor.svelte.d.ts +3 -1
  4. package/lib/browser/components/content/content.svelte +4 -1
  5. package/lib/browser/components/content/content.svelte.d.ts +2 -1
  6. package/lib/browser/components/content-variants/content-variants.svelte +3 -0
  7. package/lib/browser/components/content-variants/content-variants.svelte.d.ts +1 -0
  8. package/lib/browser/components/content-variants/content-variants.types.d.ts +4 -0
  9. package/lib/browser/constants/sdk-version.d.ts +1 -1
  10. package/lib/browser/constants/sdk-version.js +1 -1
  11. package/lib/browser/functions/evaluate/node-runtime/node-runtime.js +5 -4
  12. package/lib/browser/functions/evaluate/node-runtime/setIvm.d.ts +1 -0
  13. package/lib/browser/functions/evaluate/node-runtime/setIvm.js +1 -0
  14. package/lib/browser/functions/get-content/generate-content-url.js +3 -2
  15. package/lib/browser/functions/get-content/types.d.ts +4 -0
  16. package/lib/browser/functions/track/index.d.ts +3 -1
  17. package/lib/browser/functions/track/index.js +3 -2
  18. package/lib/edge/blocks/columns/columns.svelte +23 -15
  19. package/lib/edge/components/content/components/enable-editor.svelte +5 -1
  20. package/lib/edge/components/content/components/enable-editor.svelte.d.ts +3 -1
  21. package/lib/edge/components/content/content.svelte +4 -1
  22. package/lib/edge/components/content/content.svelte.d.ts +2 -1
  23. package/lib/edge/components/content-variants/content-variants.svelte +3 -0
  24. package/lib/edge/components/content-variants/content-variants.svelte.d.ts +1 -0
  25. package/lib/edge/components/content-variants/content-variants.types.d.ts +4 -0
  26. package/lib/edge/constants/sdk-version.d.ts +1 -1
  27. package/lib/edge/constants/sdk-version.js +1 -1
  28. package/lib/edge/functions/evaluate/node-runtime/node-runtime.js +5 -4
  29. package/lib/edge/functions/evaluate/node-runtime/setIvm.d.ts +1 -0
  30. package/lib/edge/functions/evaluate/node-runtime/setIvm.js +1 -0
  31. package/lib/edge/functions/get-content/generate-content-url.js +3 -2
  32. package/lib/edge/functions/get-content/types.d.ts +4 -0
  33. package/lib/edge/functions/track/index.d.ts +3 -1
  34. package/lib/edge/functions/track/index.js +3 -2
  35. package/lib/node/blocks/columns/columns.svelte +23 -15
  36. package/lib/node/components/content/components/enable-editor.svelte +5 -1
  37. package/lib/node/components/content/components/enable-editor.svelte.d.ts +3 -1
  38. package/lib/node/components/content/content.svelte +4 -1
  39. package/lib/node/components/content/content.svelte.d.ts +2 -1
  40. package/lib/node/components/content-variants/content-variants.svelte +3 -0
  41. package/lib/node/components/content-variants/content-variants.svelte.d.ts +1 -0
  42. package/lib/node/components/content-variants/content-variants.types.d.ts +4 -0
  43. package/lib/node/constants/sdk-version.d.ts +1 -1
  44. package/lib/node/constants/sdk-version.js +1 -1
  45. package/lib/node/functions/evaluate/node-runtime/node-runtime.js +5 -4
  46. package/lib/node/functions/evaluate/node-runtime/setIvm.d.ts +1 -0
  47. package/lib/node/functions/evaluate/node-runtime/setIvm.js +1 -0
  48. package/lib/node/functions/get-content/generate-content-url.js +3 -2
  49. package/lib/node/functions/get-content/types.d.ts +4 -0
  50. package/lib/node/functions/track/index.d.ts +3 -1
  51. package/lib/node/functions/track/index.js +3 -2
  52. package/package.json +1 -1
  53. package/src/blocks/columns/columns.svelte +19 -13
  54. package/src/components/content/components/enable-editor.svelte +5 -2
  55. package/src/components/content/content.svelte +4 -1
  56. package/src/components/content-variants/content-variants.svelte +3 -0
  57. package/src/components/content-variants/content-variants.types.ts +5 -0
  58. package/src/constants/sdk-version.ts +1 -1
  59. package/src/functions/evaluate/node-runtime/node-runtime.ts +3 -3
  60. package/src/functions/evaluate/node-runtime/setIvm.ts +1 -0
  61. package/src/functions/get-content/generate-content-url.ts +4 -2
  62. package/src/functions/get-content/types.ts +5 -0
  63. package/src/functions/track/index.ts +8 -2
@@ -32,30 +32,30 @@ function getTagName(column) {
32
32
  return column.link ? builderLinkComponent || "a" : "div";
33
33
  }
34
34
  function getWidth(index) {
35
- return cols[index]?.width || 100 / cols.length;
35
+ return cols()[index]?.width || 100 / cols().length;
36
36
  }
37
37
  function getColumnCssWidth(index) {
38
38
  const width = getWidth(index);
39
- const subtractWidth = gutterSize * (cols.length - 1) * (width / 100);
39
+ const subtractWidth = gutterSize() * (cols().length - 1) * (width / 100);
40
40
  return `calc(${width}% - ${subtractWidth}px)`;
41
41
  }
42
42
  function getTabletStyle({ stackedStyle, desktopStyle, }) {
43
- return stackAt === "tablet" ? stackedStyle : desktopStyle;
43
+ return stackAt() === "tablet" ? stackedStyle : desktopStyle;
44
44
  }
45
45
  function getMobileStyle({ stackedStyle, desktopStyle, }) {
46
- return stackAt === "never" ? desktopStyle : stackedStyle;
46
+ return stackAt() === "never" ? desktopStyle : stackedStyle;
47
47
  }
48
48
  function columnsCssVars() {
49
49
  return {
50
- "--flex-dir": flexDir,
50
+ "--flex-dir": flexDir(),
51
51
  "--flex-dir-tablet": getTabletStyle({
52
- stackedStyle: flexDir,
52
+ stackedStyle: flexDir(),
53
53
  desktopStyle: "row",
54
54
  }),
55
55
  };
56
56
  }
57
57
  function columnCssVars(index) {
58
- const gutter = index === 0 ? 0 : gutterSize;
58
+ const gutter = index === 0 ? 0 : gutterSize();
59
59
  const width = getColumnCssWidth(index);
60
60
  const gutterPixels = `${gutter}px`;
61
61
  const mobileWidth = "100%";
@@ -132,14 +132,22 @@ function getAttributes(column, index) {
132
132
  style: mapStyleObjToStrIfNeeded(columnCssVars(index)),
133
133
  };
134
134
  }
135
- let gutterSize = typeof space === "number" ? space || 0 : 20;
136
- let cols = columns || [];
137
- let stackAt = stackColumnsAt || "tablet";
138
- let flexDir = stackColumnsAt === "never"
139
- ? "row"
140
- : reverseColumnsWhenStacked
141
- ? "column-reverse"
142
- : "column";
135
+ $: gutterSize = () => {
136
+ return typeof space === "number" ? space || 0 : 20;
137
+ };
138
+ $: cols = () => {
139
+ return columns || [];
140
+ };
141
+ $: stackAt = () => {
142
+ return stackColumnsAt || "tablet";
143
+ };
144
+ $: flexDir = () => {
145
+ return stackColumnsAt === "never"
146
+ ? "row"
147
+ : reverseColumnsWhenStacked
148
+ ? "column-reverse"
149
+ : "column";
150
+ };
143
151
  </script>
144
152
 
145
153
  <div
@@ -18,9 +18,11 @@ import { registerInsertMenu, setupBrowserForEditing, } from "../../../scripts/in
18
18
  import { triggerAnimation } from "../../block/animator";
19
19
  import "../../dynamic-div.svelte";
20
20
  import { getWrapperClassName } from "./styles.helpers";
21
+ export let isNestedRender = undefined;
21
22
  export let builderContextSignal;
22
23
  export let canTrack = undefined;
23
24
  export let apiKey;
25
+ export let apiHost = undefined;
24
26
  export let locale = undefined;
25
27
  export let enrich = undefined;
26
28
  export let trustedHosts = undefined;
@@ -92,6 +94,7 @@ function onClick(event) {
92
94
  const variationId = $builderContextSignal.content?.testVariationId;
93
95
  const contentId = $builderContextSignal.content?.id;
94
96
  _track({
97
+ apiHost: apiHost,
95
98
  type: "click",
96
99
  canTrack: getDefaultCanTrack(canTrack),
97
100
  contentId,
@@ -223,7 +226,7 @@ runHttpRequests();
223
226
  emitStateUpdate();
224
227
  onMount(() => {
225
228
  if (isBrowser()) {
226
- if (isEditing()) {
229
+ if (isEditing() && !isNestedRender) {
227
230
  if (elementRef) {
228
231
  elementRef.dispatchEvent(new CustomEvent("initeditingbldr"));
229
232
  }
@@ -234,6 +237,7 @@ onMount(() => {
234
237
  const contentId = $builderContextSignal.content?.id;
235
238
  const apiKeyProp = apiKey;
236
239
  _track({
240
+ apiHost: apiHost,
237
241
  type: "impression",
238
242
  canTrack: true,
239
243
  contentId,
@@ -1,5 +1,5 @@
1
1
  import { SvelteComponent } from "svelte";
2
- type BuilderEditorProps = Omit<ContentProps, "customComponents" | "apiVersion" | "isSsrAbTest" | "blocksWrapper" | "blocksWrapperProps" | "isNestedRender" | "linkComponent"> & {
2
+ type BuilderEditorProps = Omit<ContentProps, "customComponents" | "apiVersion" | "isSsrAbTest" | "blocksWrapper" | "blocksWrapperProps" | "linkComponent"> & {
3
3
  builderContextSignal: Writable<BuilderContextInterface>;
4
4
  setBuilderContextSignal?: (signal: any) => any;
5
5
  children?: any;
@@ -9,9 +9,11 @@ import type { ContentProps } from "../content.types";
9
9
  import type { Writable } from "svelte/store";
10
10
  declare const __propDef: {
11
11
  props: {
12
+ isNestedRender?: BuilderEditorProps["isNestedRender"];
12
13
  builderContextSignal: BuilderEditorProps["builderContextSignal"];
13
14
  canTrack?: BuilderEditorProps["canTrack"];
14
15
  apiKey: BuilderEditorProps["apiKey"];
16
+ apiHost?: BuilderEditorProps["apiHost"];
15
17
  locale?: BuilderEditorProps["locale"];
16
18
  enrich?: BuilderEditorProps["enrich"];
17
19
  trustedHosts?: BuilderEditorProps["trustedHosts"];
@@ -26,13 +26,14 @@ export let apiVersion = undefined;
26
26
  export let blocksWrapper = undefined;
27
27
  export let blocksWrapperProps = undefined;
28
28
  export let nonce = undefined;
29
+ export let apiHost = undefined;
29
30
  export let enrich = undefined;
30
31
  export let showContent;
31
32
  export let contentWrapper = undefined;
32
33
  export let contentWrapperProps = undefined;
33
34
  export let trustedHosts = undefined;
34
- export let isSsrAbTest;
35
35
  export let isNestedRender = undefined;
36
+ export let isSsrAbTest;
36
37
  export let linkComponent = undefined;
37
38
  function contentSetState(newRootState) {
38
39
  $builderContextSignal.rootState = newRootState;
@@ -116,6 +117,7 @@ setContext(ComponentsContext.key, {
116
117
  </script>
117
118
 
118
119
  <EnableEditor
120
+ {apiHost}
119
121
  {nonce}
120
122
  {content}
121
123
  {data}
@@ -130,6 +132,7 @@ setContext(ComponentsContext.key, {
130
132
  {contentWrapper}
131
133
  {contentWrapperProps}
132
134
  {trustedHosts}
135
+ {isNestedRender}
133
136
  {...{}}
134
137
  >
135
138
  {#if isSsrAbTest}
@@ -14,13 +14,14 @@ declare const __propDef: {
14
14
  blocksWrapper?: ContentProps["blocksWrapper"];
15
15
  blocksWrapperProps?: ContentProps["blocksWrapperProps"];
16
16
  nonce?: ContentProps["nonce"];
17
+ apiHost?: ContentProps["apiHost"];
17
18
  enrich?: ContentProps["enrich"];
18
19
  showContent: ContentProps["showContent"];
19
20
  contentWrapper?: ContentProps["contentWrapper"];
20
21
  contentWrapperProps?: ContentProps["contentWrapperProps"];
21
22
  trustedHosts?: ContentProps["trustedHosts"];
22
- isSsrAbTest: ContentProps["isSsrAbTest"];
23
23
  isNestedRender?: ContentProps["isNestedRender"];
24
+ isSsrAbTest: ContentProps["isSsrAbTest"];
24
25
  linkComponent?: ContentProps["linkComponent"];
25
26
  };
26
27
  events: {
@@ -12,6 +12,7 @@ export let canTrack = undefined;
12
12
  export let content = undefined;
13
13
  export let isNestedRender = undefined;
14
14
  export let nonce = undefined;
15
+ export let apiHost = undefined;
15
16
  export let model = undefined;
16
17
  export let data = undefined;
17
18
  export let context = undefined;
@@ -82,6 +83,7 @@ onMount(() => {
82
83
 
83
84
  {#each getVariants(content) as variant (variant.testVariationId)}
84
85
  <ContentComponent
86
+ {apiHost}
85
87
  {isNestedRender}
86
88
  {nonce}
87
89
  content={variant}
@@ -107,6 +109,7 @@ onMount(() => {
107
109
  {/each}
108
110
  {/if}
109
111
  <ContentComponent
112
+ {apiHost}
110
113
  {nonce}
111
114
  {isNestedRender}
112
115
  {...{}}
@@ -12,6 +12,7 @@ declare const __propDef: {
12
12
  content?: VariantsProviderProps["content"];
13
13
  isNestedRender?: VariantsProviderProps["isNestedRender"];
14
14
  nonce?: VariantsProviderProps["nonce"];
15
+ apiHost?: VariantsProviderProps["apiHost"];
15
16
  model?: VariantsProviderProps["model"];
16
17
  data?: VariantsProviderProps["data"];
17
18
  context?: VariantsProviderProps["context"];
@@ -26,6 +26,10 @@ export interface ContentVariantsPrps extends ExtraFrameworkProps {
26
26
  * Your API Key: needed to enable visual editing, and to dynamically fetch symbols (required).
27
27
  */
28
28
  apiKey: string;
29
+ /**
30
+ * Sets the host of Builder API calls. (Defaults to global `https://cdn.builder.io`)
31
+ */
32
+ apiHost?: string;
29
33
  apiVersion?: ApiVersion;
30
34
  /**
31
35
  * An array of custom components to register (optional).
@@ -1 +1 @@
1
- export declare const SDK_VERSION = "2.0.25";
1
+ export declare const SDK_VERSION = "2.0.28";
@@ -1 +1 @@
1
- export const SDK_VERSION = "2.0.25";
1
+ export const SDK_VERSION = "2.0.28";
@@ -63,6 +63,8 @@ let IVM_CONTEXT = null;
63
63
  * `safeDynamicRequire` trick to import the `isolated-vm` package.
64
64
  */
65
65
  export const setIvm = (ivm, options = {}) => {
66
+ if (IVM_INSTANCE)
67
+ return;
66
68
  IVM_INSTANCE = ivm;
67
69
  setIsolateContext(options);
68
70
  };
@@ -92,6 +94,8 @@ const getIvm = () => {
92
94
  function setIsolateContext(options = {
93
95
  memoryLimit: 128
94
96
  }) {
97
+ if (IVM_CONTEXT)
98
+ return IVM_CONTEXT;
95
99
  const ivm = getIvm();
96
100
  const isolate = new ivm.Isolate(options);
97
101
  const context = isolate.createContextSync();
@@ -108,10 +112,7 @@ function setIsolateContext(options = {
108
112
  return context;
109
113
  }
110
114
  const getIsolateContext = () => {
111
- if (IVM_CONTEXT)
112
- return IVM_CONTEXT;
113
- const context = setIsolateContext();
114
- return context;
115
+ return setIsolateContext();
115
116
  };
116
117
  export const runInNode = ({ code, builder, context, event, localState, rootSetState, rootState }) => {
117
118
  const ivm = getIvm();
@@ -0,0 +1 @@
1
+ export { setIvm } from './node-runtime';
@@ -0,0 +1 @@
1
+ export { setIvm } from './node-runtime';
@@ -4,7 +4,7 @@ import { DEFAULT_API_VERSION } from '../../types/api-version';
4
4
  import { getBuilderSearchParamsFromWindow } from '../get-builder-search-params/index';
5
5
  const isPositiveNumber = (thing) => typeof thing === 'number' && !isNaN(thing) && thing >= 0;
6
6
  export const generateContentUrl = (options) => {
7
- const { limit = 30, userAttributes, query, model, apiKey, enrich, locale, apiVersion = DEFAULT_API_VERSION, fields, omit, offset, cacheSeconds, staleCacheSeconds, sort, includeUnpublished } = options;
7
+ const { limit = 30, userAttributes, query, model, apiKey, enrich, locale, apiVersion = DEFAULT_API_VERSION, fields, omit, offset, cacheSeconds, staleCacheSeconds, sort, includeUnpublished, apiHost } = options;
8
8
  if (!apiKey) {
9
9
  throw new Error('Missing API key');
10
10
  }
@@ -13,7 +13,8 @@ export const generateContentUrl = (options) => {
13
13
  }
14
14
  // if we are fetching an array of content, we disable noTraverse for perf reasons.
15
15
  const noTraverse = limit !== 1;
16
- const url = new URL(`https://cdn.builder.io/api/${apiVersion}/content/${model}`);
16
+ const baseUrl = apiHost || 'https://cdn.builder.io';
17
+ const url = new URL(`${baseUrl}/api/${apiVersion}/content/${model}`);
17
18
  url.searchParams.set('apiKey', apiKey);
18
19
  url.searchParams.set('limit', String(limit));
19
20
  url.searchParams.set('noTraverse', String(noTraverse));
@@ -136,4 +136,8 @@ export interface GetContentOptions {
136
136
  * Optional fetch options to be passed as the second argument to the `fetch` function.
137
137
  */
138
138
  fetchOptions?: object;
139
+ /**
140
+ * Sets the host of Builder API calls. (Defaults to global `https://cdn.builder.io`)
141
+ */
142
+ apiHost?: string;
139
143
  }
@@ -46,6 +46,8 @@ type EventProperties = Pick<Event, 'type'> & Pick<Event['data'], 'contentId' | '
46
46
  [index: string]: any;
47
47
  };
48
48
  export type EventProps = EventProperties & CanTrack;
49
- export declare function _track(eventProps: EventProps): Promise<void | Response>;
49
+ export declare function _track({ apiHost, ...eventProps }: EventProps & {
50
+ apiHost?: string;
51
+ }): Promise<void | Response>;
50
52
  export declare const track: (args: EventProperties) => Promise<void | Response>;
51
53
  export {};
@@ -39,7 +39,7 @@ const createEvent = async ({ type: eventType, canTrack, apiKey, metadata, ...pro
39
39
  ownerId: apiKey
40
40
  }
41
41
  });
42
- export async function _track(eventProps) {
42
+ export async function _track({ apiHost, ...eventProps }) {
43
43
  if (!eventProps.apiKey) {
44
44
  logger.error('Missing API key for track call. Please provide your API key.');
45
45
  return;
@@ -53,7 +53,8 @@ export async function _track(eventProps) {
53
53
  if (!(isBrowser() || TARGET === 'reactNative')) {
54
54
  return;
55
55
  }
56
- return fetch(`https://cdn.builder.io/api/v1/track`, {
56
+ const baseUrl = apiHost || 'https://cdn.builder.io';
57
+ return fetch(`${baseUrl}/api/v1/track`, {
57
58
  method: 'POST',
58
59
  body: JSON.stringify({
59
60
  events: [await createEvent(eventProps)]
@@ -32,30 +32,30 @@ function getTagName(column) {
32
32
  return column.link ? builderLinkComponent || "a" : "div";
33
33
  }
34
34
  function getWidth(index) {
35
- return cols[index]?.width || 100 / cols.length;
35
+ return cols()[index]?.width || 100 / cols().length;
36
36
  }
37
37
  function getColumnCssWidth(index) {
38
38
  const width = getWidth(index);
39
- const subtractWidth = gutterSize * (cols.length - 1) * (width / 100);
39
+ const subtractWidth = gutterSize() * (cols().length - 1) * (width / 100);
40
40
  return `calc(${width}% - ${subtractWidth}px)`;
41
41
  }
42
42
  function getTabletStyle({ stackedStyle, desktopStyle, }) {
43
- return stackAt === "tablet" ? stackedStyle : desktopStyle;
43
+ return stackAt() === "tablet" ? stackedStyle : desktopStyle;
44
44
  }
45
45
  function getMobileStyle({ stackedStyle, desktopStyle, }) {
46
- return stackAt === "never" ? desktopStyle : stackedStyle;
46
+ return stackAt() === "never" ? desktopStyle : stackedStyle;
47
47
  }
48
48
  function columnsCssVars() {
49
49
  return {
50
- "--flex-dir": flexDir,
50
+ "--flex-dir": flexDir(),
51
51
  "--flex-dir-tablet": getTabletStyle({
52
- stackedStyle: flexDir,
52
+ stackedStyle: flexDir(),
53
53
  desktopStyle: "row",
54
54
  }),
55
55
  };
56
56
  }
57
57
  function columnCssVars(index) {
58
- const gutter = index === 0 ? 0 : gutterSize;
58
+ const gutter = index === 0 ? 0 : gutterSize();
59
59
  const width = getColumnCssWidth(index);
60
60
  const gutterPixels = `${gutter}px`;
61
61
  const mobileWidth = "100%";
@@ -132,14 +132,22 @@ function getAttributes(column, index) {
132
132
  style: mapStyleObjToStrIfNeeded(columnCssVars(index)),
133
133
  };
134
134
  }
135
- let gutterSize = typeof space === "number" ? space || 0 : 20;
136
- let cols = columns || [];
137
- let stackAt = stackColumnsAt || "tablet";
138
- let flexDir = stackColumnsAt === "never"
139
- ? "row"
140
- : reverseColumnsWhenStacked
141
- ? "column-reverse"
142
- : "column";
135
+ $: gutterSize = () => {
136
+ return typeof space === "number" ? space || 0 : 20;
137
+ };
138
+ $: cols = () => {
139
+ return columns || [];
140
+ };
141
+ $: stackAt = () => {
142
+ return stackColumnsAt || "tablet";
143
+ };
144
+ $: flexDir = () => {
145
+ return stackColumnsAt === "never"
146
+ ? "row"
147
+ : reverseColumnsWhenStacked
148
+ ? "column-reverse"
149
+ : "column";
150
+ };
143
151
  </script>
144
152
 
145
153
  <div
@@ -18,9 +18,11 @@ import { registerInsertMenu, setupBrowserForEditing, } from "../../../scripts/in
18
18
  import { triggerAnimation } from "../../block/animator";
19
19
  import "../../dynamic-div.svelte";
20
20
  import { getWrapperClassName } from "./styles.helpers";
21
+ export let isNestedRender = undefined;
21
22
  export let builderContextSignal;
22
23
  export let canTrack = undefined;
23
24
  export let apiKey;
25
+ export let apiHost = undefined;
24
26
  export let locale = undefined;
25
27
  export let enrich = undefined;
26
28
  export let trustedHosts = undefined;
@@ -92,6 +94,7 @@ function onClick(event) {
92
94
  const variationId = $builderContextSignal.content?.testVariationId;
93
95
  const contentId = $builderContextSignal.content?.id;
94
96
  _track({
97
+ apiHost: apiHost,
95
98
  type: "click",
96
99
  canTrack: getDefaultCanTrack(canTrack),
97
100
  contentId,
@@ -223,7 +226,7 @@ runHttpRequests();
223
226
  emitStateUpdate();
224
227
  onMount(() => {
225
228
  if (isBrowser()) {
226
- if (isEditing()) {
229
+ if (isEditing() && !isNestedRender) {
227
230
  if (elementRef) {
228
231
  elementRef.dispatchEvent(new CustomEvent("initeditingbldr"));
229
232
  }
@@ -234,6 +237,7 @@ onMount(() => {
234
237
  const contentId = $builderContextSignal.content?.id;
235
238
  const apiKeyProp = apiKey;
236
239
  _track({
240
+ apiHost: apiHost,
237
241
  type: "impression",
238
242
  canTrack: true,
239
243
  contentId,
@@ -1,5 +1,5 @@
1
1
  import { SvelteComponent } from "svelte";
2
- type BuilderEditorProps = Omit<ContentProps, "customComponents" | "apiVersion" | "isSsrAbTest" | "blocksWrapper" | "blocksWrapperProps" | "isNestedRender" | "linkComponent"> & {
2
+ type BuilderEditorProps = Omit<ContentProps, "customComponents" | "apiVersion" | "isSsrAbTest" | "blocksWrapper" | "blocksWrapperProps" | "linkComponent"> & {
3
3
  builderContextSignal: Writable<BuilderContextInterface>;
4
4
  setBuilderContextSignal?: (signal: any) => any;
5
5
  children?: any;
@@ -9,9 +9,11 @@ import type { ContentProps } from "../content.types";
9
9
  import type { Writable } from "svelte/store";
10
10
  declare const __propDef: {
11
11
  props: {
12
+ isNestedRender?: BuilderEditorProps["isNestedRender"];
12
13
  builderContextSignal: BuilderEditorProps["builderContextSignal"];
13
14
  canTrack?: BuilderEditorProps["canTrack"];
14
15
  apiKey: BuilderEditorProps["apiKey"];
16
+ apiHost?: BuilderEditorProps["apiHost"];
15
17
  locale?: BuilderEditorProps["locale"];
16
18
  enrich?: BuilderEditorProps["enrich"];
17
19
  trustedHosts?: BuilderEditorProps["trustedHosts"];
@@ -26,13 +26,14 @@ export let apiVersion = undefined;
26
26
  export let blocksWrapper = undefined;
27
27
  export let blocksWrapperProps = undefined;
28
28
  export let nonce = undefined;
29
+ export let apiHost = undefined;
29
30
  export let enrich = undefined;
30
31
  export let showContent;
31
32
  export let contentWrapper = undefined;
32
33
  export let contentWrapperProps = undefined;
33
34
  export let trustedHosts = undefined;
34
- export let isSsrAbTest;
35
35
  export let isNestedRender = undefined;
36
+ export let isSsrAbTest;
36
37
  export let linkComponent = undefined;
37
38
  function contentSetState(newRootState) {
38
39
  $builderContextSignal.rootState = newRootState;
@@ -116,6 +117,7 @@ setContext(ComponentsContext.key, {
116
117
  </script>
117
118
 
118
119
  <EnableEditor
120
+ {apiHost}
119
121
  {nonce}
120
122
  {content}
121
123
  {data}
@@ -130,6 +132,7 @@ setContext(ComponentsContext.key, {
130
132
  {contentWrapper}
131
133
  {contentWrapperProps}
132
134
  {trustedHosts}
135
+ {isNestedRender}
133
136
  {...{}}
134
137
  >
135
138
  {#if isSsrAbTest}
@@ -14,13 +14,14 @@ declare const __propDef: {
14
14
  blocksWrapper?: ContentProps["blocksWrapper"];
15
15
  blocksWrapperProps?: ContentProps["blocksWrapperProps"];
16
16
  nonce?: ContentProps["nonce"];
17
+ apiHost?: ContentProps["apiHost"];
17
18
  enrich?: ContentProps["enrich"];
18
19
  showContent: ContentProps["showContent"];
19
20
  contentWrapper?: ContentProps["contentWrapper"];
20
21
  contentWrapperProps?: ContentProps["contentWrapperProps"];
21
22
  trustedHosts?: ContentProps["trustedHosts"];
22
- isSsrAbTest: ContentProps["isSsrAbTest"];
23
23
  isNestedRender?: ContentProps["isNestedRender"];
24
+ isSsrAbTest: ContentProps["isSsrAbTest"];
24
25
  linkComponent?: ContentProps["linkComponent"];
25
26
  };
26
27
  events: {
@@ -12,6 +12,7 @@ export let canTrack = undefined;
12
12
  export let content = undefined;
13
13
  export let isNestedRender = undefined;
14
14
  export let nonce = undefined;
15
+ export let apiHost = undefined;
15
16
  export let model = undefined;
16
17
  export let data = undefined;
17
18
  export let context = undefined;
@@ -82,6 +83,7 @@ onMount(() => {
82
83
 
83
84
  {#each getVariants(content) as variant (variant.testVariationId)}
84
85
  <ContentComponent
86
+ {apiHost}
85
87
  {isNestedRender}
86
88
  {nonce}
87
89
  content={variant}
@@ -107,6 +109,7 @@ onMount(() => {
107
109
  {/each}
108
110
  {/if}
109
111
  <ContentComponent
112
+ {apiHost}
110
113
  {nonce}
111
114
  {isNestedRender}
112
115
  {...{}}
@@ -12,6 +12,7 @@ declare const __propDef: {
12
12
  content?: VariantsProviderProps["content"];
13
13
  isNestedRender?: VariantsProviderProps["isNestedRender"];
14
14
  nonce?: VariantsProviderProps["nonce"];
15
+ apiHost?: VariantsProviderProps["apiHost"];
15
16
  model?: VariantsProviderProps["model"];
16
17
  data?: VariantsProviderProps["data"];
17
18
  context?: VariantsProviderProps["context"];
@@ -26,6 +26,10 @@ export interface ContentVariantsPrps extends ExtraFrameworkProps {
26
26
  * Your API Key: needed to enable visual editing, and to dynamically fetch symbols (required).
27
27
  */
28
28
  apiKey: string;
29
+ /**
30
+ * Sets the host of Builder API calls. (Defaults to global `https://cdn.builder.io`)
31
+ */
32
+ apiHost?: string;
29
33
  apiVersion?: ApiVersion;
30
34
  /**
31
35
  * An array of custom components to register (optional).
@@ -1 +1 @@
1
- export declare const SDK_VERSION = "2.0.25";
1
+ export declare const SDK_VERSION = "2.0.28";
@@ -1 +1 @@
1
- export const SDK_VERSION = "2.0.25";
1
+ export const SDK_VERSION = "2.0.28";
@@ -63,6 +63,8 @@ let IVM_CONTEXT = null;
63
63
  * `safeDynamicRequire` trick to import the `isolated-vm` package.
64
64
  */
65
65
  export const setIvm = (ivm, options = {}) => {
66
+ if (IVM_INSTANCE)
67
+ return;
66
68
  IVM_INSTANCE = ivm;
67
69
  setIsolateContext(options);
68
70
  };
@@ -92,6 +94,8 @@ const getIvm = () => {
92
94
  function setIsolateContext(options = {
93
95
  memoryLimit: 128
94
96
  }) {
97
+ if (IVM_CONTEXT)
98
+ return IVM_CONTEXT;
95
99
  const ivm = getIvm();
96
100
  const isolate = new ivm.Isolate(options);
97
101
  const context = isolate.createContextSync();
@@ -108,10 +112,7 @@ function setIsolateContext(options = {
108
112
  return context;
109
113
  }
110
114
  const getIsolateContext = () => {
111
- if (IVM_CONTEXT)
112
- return IVM_CONTEXT;
113
- const context = setIsolateContext();
114
- return context;
115
+ return setIsolateContext();
115
116
  };
116
117
  export const runInNode = ({ code, builder, context, event, localState, rootSetState, rootState }) => {
117
118
  const ivm = getIvm();
@@ -0,0 +1 @@
1
+ export { setIvm } from './node-runtime';
@@ -0,0 +1 @@
1
+ export { setIvm } from './node-runtime';
@@ -4,7 +4,7 @@ import { DEFAULT_API_VERSION } from '../../types/api-version';
4
4
  import { getBuilderSearchParamsFromWindow } from '../get-builder-search-params/index';
5
5
  const isPositiveNumber = (thing) => typeof thing === 'number' && !isNaN(thing) && thing >= 0;
6
6
  export const generateContentUrl = (options) => {
7
- const { limit = 30, userAttributes, query, model, apiKey, enrich, locale, apiVersion = DEFAULT_API_VERSION, fields, omit, offset, cacheSeconds, staleCacheSeconds, sort, includeUnpublished } = options;
7
+ const { limit = 30, userAttributes, query, model, apiKey, enrich, locale, apiVersion = DEFAULT_API_VERSION, fields, omit, offset, cacheSeconds, staleCacheSeconds, sort, includeUnpublished, apiHost } = options;
8
8
  if (!apiKey) {
9
9
  throw new Error('Missing API key');
10
10
  }
@@ -13,7 +13,8 @@ export const generateContentUrl = (options) => {
13
13
  }
14
14
  // if we are fetching an array of content, we disable noTraverse for perf reasons.
15
15
  const noTraverse = limit !== 1;
16
- const url = new URL(`https://cdn.builder.io/api/${apiVersion}/content/${model}`);
16
+ const baseUrl = apiHost || 'https://cdn.builder.io';
17
+ const url = new URL(`${baseUrl}/api/${apiVersion}/content/${model}`);
17
18
  url.searchParams.set('apiKey', apiKey);
18
19
  url.searchParams.set('limit', String(limit));
19
20
  url.searchParams.set('noTraverse', String(noTraverse));
@@ -136,4 +136,8 @@ export interface GetContentOptions {
136
136
  * Optional fetch options to be passed as the second argument to the `fetch` function.
137
137
  */
138
138
  fetchOptions?: object;
139
+ /**
140
+ * Sets the host of Builder API calls. (Defaults to global `https://cdn.builder.io`)
141
+ */
142
+ apiHost?: string;
139
143
  }
@@ -46,6 +46,8 @@ type EventProperties = Pick<Event, 'type'> & Pick<Event['data'], 'contentId' | '
46
46
  [index: string]: any;
47
47
  };
48
48
  export type EventProps = EventProperties & CanTrack;
49
- export declare function _track(eventProps: EventProps): Promise<void | Response>;
49
+ export declare function _track({ apiHost, ...eventProps }: EventProps & {
50
+ apiHost?: string;
51
+ }): Promise<void | Response>;
50
52
  export declare const track: (args: EventProperties) => Promise<void | Response>;
51
53
  export {};