@builder.io/sdk-react-nextjs 0.5.9 → 0.6.1
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/browser/USE_CLIENT_BUNDLE-12f42430.js +23 -0
- package/lib/browser/USE_CLIENT_BUNDLE-a8b60f05.mjs +664 -0
- package/lib/browser/USE_SERVER_BUNDLE-9abdf89a.js +1 -0
- package/lib/browser/USE_SERVER_BUNDLE-df74a63e.mjs +11 -0
- package/lib/browser/bundle-0ec2f27e.js +76 -0
- package/lib/browser/bundle-474f2dd7.mjs +2419 -0
- package/lib/browser/index.cjs +1 -0
- package/lib/browser/index.mjs +34 -0
- package/lib/edge/USE_CLIENT_BUNDLE-71a5598d.mjs +664 -0
- package/lib/edge/USE_CLIENT_BUNDLE-ec253910.js +23 -0
- package/lib/edge/USE_SERVER_BUNDLE-7cbf6eb1.js +1 -0
- package/lib/edge/USE_SERVER_BUNDLE-fdc79a6a.mjs +11 -0
- package/lib/edge/bundle-5d80175b.js +96 -0
- package/lib/edge/bundle-9492bb4e.mjs +4863 -0
- package/lib/edge/index.cjs +1 -0
- package/lib/edge/index.mjs +34 -0
- package/lib/node/USE_CLIENT_BUNDLE-12f42430.js +23 -0
- package/lib/node/USE_CLIENT_BUNDLE-a8b60f05.mjs +664 -0
- package/lib/node/USE_SERVER_BUNDLE-9abdf89a.js +1 -0
- package/lib/node/USE_SERVER_BUNDLE-df74a63e.mjs +11 -0
- package/lib/node/bundle-0ec2f27e.js +76 -0
- package/lib/node/bundle-474f2dd7.mjs +2419 -0
- package/lib/node/index.cjs +1 -0
- package/lib/node/index.mjs +34 -0
- package/package.json +100 -13
- package/types/constants/sdk-version.d.ts +1 -0
- package/types/functions/deopt.d.ts +4 -0
- package/types/functions/evaluate/browser-runtime/index.d.ts +1 -0
- package/{dist → types}/functions/fetch-builder-props.d.ts +2 -1
- package/{dist → types}/functions/get-content/index.d.ts +4 -5
- package/{dist → types}/index-helpers/blocks-exports.d.ts +2 -2
- package/dist/blocks/button/button.js +0 -12
- package/dist/blocks/button/component-info.js +0 -34
- package/dist/blocks/columns/columns.js +0 -119
- package/dist/blocks/columns/component-info.js +0 -219
- package/dist/blocks/custom-code/component-info.js +0 -23
- package/dist/blocks/custom-code/custom-code.js +0 -51
- package/dist/blocks/embed/component-info.js +0 -39
- package/dist/blocks/embed/embed.js +0 -42
- package/dist/blocks/embed/helpers.js +0 -2
- package/dist/blocks/fragment/component-info.js +0 -7
- package/dist/blocks/fragment/fragment.js +0 -6
- package/dist/blocks/helpers.js +0 -40
- package/dist/blocks/image/component-info.js +0 -122
- package/dist/blocks/image/image.helpers.js +0 -47
- package/dist/blocks/image/image.js +0 -82
- package/dist/blocks/img/component-info.js +0 -15
- package/dist/blocks/img/img.js +0 -10
- package/dist/blocks/section/component-info.js +0 -40
- package/dist/blocks/section/section.js +0 -17
- package/dist/blocks/symbol/component-info.js +0 -34
- package/dist/blocks/symbol/symbol.helpers.js +0 -31
- package/dist/blocks/symbol/symbol.js +0 -29
- package/dist/blocks/text/component-info.js +0 -19
- package/dist/blocks/text/text.js +0 -7
- package/dist/blocks/video/component-info.js +0 -82
- package/dist/blocks/video/video.js +0 -50
- package/dist/components/block/block.helpers.js +0 -69
- package/dist/components/block/block.js +0 -92
- package/dist/components/block/components/block-styles.js +0 -65
- package/dist/components/block/components/block-wrapper.js +0 -36
- package/dist/components/block/components/component-ref/component-ref.helpers.js +0 -22
- package/dist/components/block/components/component-ref/component-ref.js +0 -21
- package/dist/components/block/components/interactive-element.js +0 -20
- package/dist/components/block/components/repeated-block.js +0 -7
- package/dist/components/block/types.js +0 -1
- package/dist/components/blocks/blocks-wrapper.js +0 -38
- package/dist/components/blocks/blocks.js +0 -10
- package/dist/components/content/components/enable-editor.js +0 -250
- package/dist/components/content/components/styles.helpers.js +0 -58
- package/dist/components/content/components/styles.js +0 -30
- package/dist/components/content/content.helpers.js +0 -30
- package/dist/components/content/content.js +0 -74
- package/dist/components/content/content.types.js +0 -1
- package/dist/components/content/wrap-component-ref.js +0 -6
- package/dist/components/content-variants/content-variants.js +0 -45
- package/dist/components/content-variants/content-variants.types.js +0 -1
- package/dist/components/content-variants/helpers.js +0 -189
- package/dist/components/inlined-script.js +0 -5
- package/dist/components/inlined-styles.js +0 -5
- package/dist/constants/builder-registered-components.js +0 -60
- package/dist/constants/device-sizes.js +0 -45
- package/dist/constants/sdk-version.d.ts +0 -1
- package/dist/constants/sdk-version.js +0 -1
- package/dist/constants/target.js +0 -2
- package/dist/context/builder.context.js +0 -12
- package/dist/context/components.context.js +0 -2
- package/dist/context/types.js +0 -1
- package/dist/functions/camel-to-kebab-case.js +0 -1
- package/dist/functions/evaluate/browser-runtime/browser.js +0 -31
- package/dist/functions/evaluate/evaluate.js +0 -47
- package/dist/functions/evaluate/helpers.js +0 -10
- package/dist/functions/evaluate/index.js +0 -1
- package/dist/functions/evaluate/non-node-runtime/acorn-interpreter.d.ts +0 -2
- package/dist/functions/evaluate/non-node-runtime/acorn-interpreter.js +0 -3111
- package/dist/functions/evaluate/non-node-runtime/index.d.ts +0 -1
- package/dist/functions/evaluate/non-node-runtime/index.js +0 -2
- package/dist/functions/evaluate/non-node-runtime/non-node-runtime.d.ts +0 -2
- package/dist/functions/evaluate/non-node-runtime/non-node-runtime.js +0 -83
- package/dist/functions/event-handler-name.js +0 -4
- package/dist/functions/extract-text-styles.js +0 -22
- package/dist/functions/fast-clone.js +0 -4
- package/dist/functions/fetch-builder-props.js +0 -25
- package/dist/functions/get-block-actions-handler.js +0 -10
- package/dist/functions/get-block-actions.js +0 -28
- package/dist/functions/get-block-component-options.js +0 -10
- package/dist/functions/get-block-properties.js +0 -72
- package/dist/functions/get-builder-search-params/index.js +0 -38
- package/dist/functions/get-content/generate-content-url.js +0 -33
- package/dist/functions/get-content/index.js +0 -100
- package/dist/functions/get-content/types.js +0 -1
- package/dist/functions/get-fetch.js +0 -11
- package/dist/functions/get-global-this.js +0 -15
- package/dist/functions/get-processed-block.js +0 -46
- package/dist/functions/get-react-native-block-styles.js +0 -17
- package/dist/functions/is-browser.js +0 -3
- package/dist/functions/is-editing.js +0 -5
- package/dist/functions/is-iframe.js +0 -4
- package/dist/functions/is-non-node-server.d.ts +0 -4
- package/dist/functions/is-non-node-server.js +0 -8
- package/dist/functions/is-previewing.js +0 -11
- package/dist/functions/register-component.js +0 -38
- package/dist/functions/register.js +0 -27
- package/dist/functions/sanitize-react-native-block-styles.js +0 -61
- package/dist/functions/set-editor-settings.js +0 -12
- package/dist/functions/set.js +0 -14
- package/dist/functions/track/helpers.js +0 -51
- package/dist/functions/track/index.js +0 -71
- package/dist/functions/track/interaction.js +0 -53
- package/dist/functions/transform-block-properties.js +0 -5
- package/dist/functions/transform-block.js +0 -4
- package/dist/helpers/ab-tests.js +0 -122
- package/dist/helpers/canTrack.js +0 -2
- package/dist/helpers/cookie.js +0 -55
- package/dist/helpers/css.js +0 -27
- package/dist/helpers/flatten.js +0 -19
- package/dist/helpers/localStorage.js +0 -24
- package/dist/helpers/logger.js +0 -7
- package/dist/helpers/nullable.js +0 -1
- package/dist/helpers/preview-lru-cache/get.js +0 -9
- package/dist/helpers/preview-lru-cache/helpers.js +0 -9
- package/dist/helpers/preview-lru-cache/init.js +0 -15
- package/dist/helpers/preview-lru-cache/set.js +0 -7
- package/dist/helpers/preview-lru-cache/types.js +0 -6
- package/dist/helpers/sessionId.js +0 -30
- package/dist/helpers/url.js +0 -15
- package/dist/helpers/uuid.js +0 -15
- package/dist/helpers/visitorId.js +0 -30
- package/dist/index-helpers/blocks-exports.js +0 -19
- package/dist/index-helpers/top-of-file.js +0 -4
- package/dist/index.js +0 -7
- package/dist/scripts/init-editing.js +0 -110
- package/dist/server-index.js +0 -10
- package/dist/types/api-version.js +0 -1
- package/dist/types/builder-block.js +0 -1
- package/dist/types/builder-content.js +0 -1
- package/dist/types/builder-props.js +0 -1
- package/dist/types/can-track.js +0 -1
- package/dist/types/components.js +0 -1
- package/dist/types/deep-partial.js +0 -1
- package/dist/types/element.js +0 -1
- package/dist/types/enforced-partials.js +0 -1
- package/dist/types/input.js +0 -1
- package/dist/types/targets.js +0 -1
- package/dist/types/typescript.js +0 -1
- /package/{dist → types}/blocks/button/button.d.ts +0 -0
- /package/{dist → types}/blocks/button/component-info.d.ts +0 -0
- /package/{dist → types}/blocks/columns/columns.d.ts +0 -0
- /package/{dist → types}/blocks/columns/component-info.d.ts +0 -0
- /package/{dist → types}/blocks/custom-code/component-info.d.ts +0 -0
- /package/{dist → types}/blocks/custom-code/custom-code.d.ts +0 -0
- /package/{dist → types}/blocks/embed/component-info.d.ts +0 -0
- /package/{dist → types}/blocks/embed/embed.d.ts +0 -0
- /package/{dist → types}/blocks/embed/helpers.d.ts +0 -0
- /package/{dist → types}/blocks/fragment/component-info.d.ts +0 -0
- /package/{dist → types}/blocks/fragment/fragment.d.ts +0 -0
- /package/{dist → types}/blocks/helpers.d.ts +0 -0
- /package/{dist → types}/blocks/image/component-info.d.ts +0 -0
- /package/{dist → types}/blocks/image/image.d.ts +0 -0
- /package/{dist → types}/blocks/image/image.helpers.d.ts +0 -0
- /package/{dist → types}/blocks/img/component-info.d.ts +0 -0
- /package/{dist → types}/blocks/img/img.d.ts +0 -0
- /package/{dist → types}/blocks/section/component-info.d.ts +0 -0
- /package/{dist → types}/blocks/section/section.d.ts +0 -0
- /package/{dist → types}/blocks/symbol/component-info.d.ts +0 -0
- /package/{dist → types}/blocks/symbol/symbol.d.ts +0 -0
- /package/{dist → types}/blocks/symbol/symbol.helpers.d.ts +0 -0
- /package/{dist → types}/blocks/text/component-info.d.ts +0 -0
- /package/{dist → types}/blocks/text/text.d.ts +0 -0
- /package/{dist → types}/blocks/video/component-info.d.ts +0 -0
- /package/{dist → types}/blocks/video/video.d.ts +0 -0
- /package/{dist → types}/components/block/block.d.ts +0 -0
- /package/{dist → types}/components/block/block.helpers.d.ts +0 -0
- /package/{dist → types}/components/block/components/block-styles.d.ts +0 -0
- /package/{dist → types}/components/block/components/block-wrapper.d.ts +0 -0
- /package/{dist → types}/components/block/components/component-ref/component-ref.d.ts +0 -0
- /package/{dist → types}/components/block/components/component-ref/component-ref.helpers.d.ts +0 -0
- /package/{dist → types}/components/block/components/interactive-element.d.ts +0 -0
- /package/{dist → types}/components/block/components/repeated-block.d.ts +0 -0
- /package/{dist → types}/components/block/types.d.ts +0 -0
- /package/{dist → types}/components/blocks/blocks-wrapper.d.ts +0 -0
- /package/{dist → types}/components/blocks/blocks.d.ts +0 -0
- /package/{dist → types}/components/content/components/enable-editor.d.ts +0 -0
- /package/{dist → types}/components/content/components/styles.d.ts +0 -0
- /package/{dist → types}/components/content/components/styles.helpers.d.ts +0 -0
- /package/{dist → types}/components/content/content.d.ts +0 -0
- /package/{dist → types}/components/content/content.helpers.d.ts +0 -0
- /package/{dist → types}/components/content/content.types.d.ts +0 -0
- /package/{dist → types}/components/content/wrap-component-ref.d.ts +0 -0
- /package/{dist → types}/components/content-variants/content-variants.d.ts +0 -0
- /package/{dist → types}/components/content-variants/content-variants.types.d.ts +0 -0
- /package/{dist → types}/components/content-variants/helpers.d.ts +0 -0
- /package/{dist → types}/components/inlined-script.d.ts +0 -0
- /package/{dist → types}/components/inlined-styles.d.ts +0 -0
- /package/{dist → types}/constants/builder-registered-components.d.ts +0 -0
- /package/{dist → types}/constants/device-sizes.d.ts +0 -0
- /package/{dist → types}/constants/target.d.ts +0 -0
- /package/{dist → types}/context/builder.context.d.ts +0 -0
- /package/{dist → types}/context/components.context.d.ts +0 -0
- /package/{dist → types}/context/types.d.ts +0 -0
- /package/{dist → types}/functions/camel-to-kebab-case.d.ts +0 -0
- /package/{dist → types}/functions/evaluate/browser-runtime/browser.d.ts +0 -0
- /package/{dist → types}/functions/evaluate/evaluate.d.ts +0 -0
- /package/{dist → types}/functions/evaluate/helpers.d.ts +0 -0
- /package/{dist → types}/functions/evaluate/index.d.ts +0 -0
- /package/{dist → types}/functions/event-handler-name.d.ts +0 -0
- /package/{dist → types}/functions/extract-text-styles.d.ts +0 -0
- /package/{dist → types}/functions/fast-clone.d.ts +0 -0
- /package/{dist → types}/functions/get-block-actions-handler.d.ts +0 -0
- /package/{dist → types}/functions/get-block-actions.d.ts +0 -0
- /package/{dist → types}/functions/get-block-component-options.d.ts +0 -0
- /package/{dist → types}/functions/get-block-properties.d.ts +0 -0
- /package/{dist → types}/functions/get-builder-search-params/index.d.ts +0 -0
- /package/{dist → types}/functions/get-content/generate-content-url.d.ts +0 -0
- /package/{dist → types}/functions/get-content/types.d.ts +0 -0
- /package/{dist → types}/functions/get-fetch.d.ts +0 -0
- /package/{dist → types}/functions/get-global-this.d.ts +0 -0
- /package/{dist → types}/functions/get-processed-block.d.ts +0 -0
- /package/{dist → types}/functions/get-react-native-block-styles.d.ts +0 -0
- /package/{dist → types}/functions/is-browser.d.ts +0 -0
- /package/{dist → types}/functions/is-editing.d.ts +0 -0
- /package/{dist → types}/functions/is-iframe.d.ts +0 -0
- /package/{dist → types}/functions/is-previewing.d.ts +0 -0
- /package/{dist → types}/functions/register-component.d.ts +0 -0
- /package/{dist → types}/functions/register.d.ts +0 -0
- /package/{dist → types}/functions/sanitize-react-native-block-styles.d.ts +0 -0
- /package/{dist → types}/functions/set-editor-settings.d.ts +0 -0
- /package/{dist → types}/functions/set.d.ts +0 -0
- /package/{dist → types}/functions/track/helpers.d.ts +0 -0
- /package/{dist → types}/functions/track/index.d.ts +0 -0
- /package/{dist → types}/functions/track/interaction.d.ts +0 -0
- /package/{dist → types}/functions/transform-block-properties.d.ts +0 -0
- /package/{dist → types}/functions/transform-block.d.ts +0 -0
- /package/{dist → types}/helpers/ab-tests.d.ts +0 -0
- /package/{dist → types}/helpers/canTrack.d.ts +0 -0
- /package/{dist → types}/helpers/cookie.d.ts +0 -0
- /package/{dist → types}/helpers/css.d.ts +0 -0
- /package/{dist → types}/helpers/flatten.d.ts +0 -0
- /package/{dist → types}/helpers/localStorage.d.ts +0 -0
- /package/{dist → types}/helpers/logger.d.ts +0 -0
- /package/{dist → types}/helpers/nullable.d.ts +0 -0
- /package/{dist → types}/helpers/preview-lru-cache/get.d.ts +0 -0
- /package/{dist → types}/helpers/preview-lru-cache/helpers.d.ts +0 -0
- /package/{dist → types}/helpers/preview-lru-cache/init.d.ts +0 -0
- /package/{dist → types}/helpers/preview-lru-cache/set.d.ts +0 -0
- /package/{dist → types}/helpers/preview-lru-cache/types.d.ts +0 -0
- /package/{dist → types}/helpers/sessionId.d.ts +0 -0
- /package/{dist → types}/helpers/url.d.ts +0 -0
- /package/{dist → types}/helpers/uuid.d.ts +0 -0
- /package/{dist → types}/helpers/visitorId.d.ts +0 -0
- /package/{dist → types}/index-helpers/top-of-file.d.ts +0 -0
- /package/{dist → types}/index.d.ts +0 -0
- /package/{dist → types}/scripts/init-editing.d.ts +0 -0
- /package/{dist → types}/server-index.d.ts +0 -0
- /package/{dist → types}/types/api-version.d.ts +0 -0
- /package/{dist → types}/types/builder-block.d.ts +0 -0
- /package/{dist → types}/types/builder-content.d.ts +0 -0
- /package/{dist → types}/types/builder-props.d.ts +0 -0
- /package/{dist → types}/types/can-track.d.ts +0 -0
- /package/{dist → types}/types/components.d.ts +0 -0
- /package/{dist → types}/types/deep-partial.d.ts +0 -0
- /package/{dist → types}/types/element.d.ts +0 -0
- /package/{dist → types}/types/enforced-partials.d.ts +0 -0
- /package/{dist → types}/types/input.d.ts +0 -0
- /package/{dist → types}/types/targets.d.ts +0 -0
- /package/{dist → types}/types/typescript.d.ts +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { runInNonNode } from './non-node-runtime.js';
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
import { logger } from '../../../helpers/logger.js';
|
|
2
|
-
import { set } from '../../set.js';
|
|
3
|
-
import Interpreter from './acorn-interpreter.js';
|
|
4
|
-
import { getFunctionArguments } from '../helpers.js';
|
|
5
|
-
const processCode = (code) => {
|
|
6
|
-
return code.split('\n').map(line => {
|
|
7
|
-
const trimmed = line.trim();
|
|
8
|
-
// this async wrapper doesn't work in JS-interpreter, so we drop it.
|
|
9
|
-
if (line.includes('__awaiter'))
|
|
10
|
-
return undefined;
|
|
11
|
-
// we find all state setter expressions and append a call to setRootState afterwards
|
|
12
|
-
const isStateSetter = trimmed.startsWith('state.');
|
|
13
|
-
if (!isStateSetter)
|
|
14
|
-
return line;
|
|
15
|
-
const [lhs, rhs] = trimmed.split('=');
|
|
16
|
-
const setStr = lhs.replace('state.', '').trim();
|
|
17
|
-
const setExpr = `setRootState('${setStr}', ${rhs.trim()})`;
|
|
18
|
-
return `
|
|
19
|
-
${line}
|
|
20
|
-
${setExpr}
|
|
21
|
-
`;
|
|
22
|
-
}).filter(Boolean).join('\n');
|
|
23
|
-
};
|
|
24
|
-
const getJSONValName = (val) => val + 'JSON';
|
|
25
|
-
export const runInNonNode = ({ builder, context, event, rootState, localState, rootSetState, code }) => {
|
|
26
|
-
const state = {
|
|
27
|
-
...rootState,
|
|
28
|
-
...localState
|
|
29
|
-
};
|
|
30
|
-
const properties = getFunctionArguments({
|
|
31
|
-
builder,
|
|
32
|
-
context,
|
|
33
|
-
event,
|
|
34
|
-
state
|
|
35
|
-
});
|
|
36
|
-
/**
|
|
37
|
-
* Deserialize all properties from JSON strings to JS objects
|
|
38
|
-
*/
|
|
39
|
-
const prependedCode = properties.map(([key]) => `var ${key} = JSON.parse(${getJSONValName(key)});`).join('\n');
|
|
40
|
-
const cleanedCode = processCode(code);
|
|
41
|
-
if (cleanedCode === '') {
|
|
42
|
-
logger.warn('Skipping evaluation of empty code block.');
|
|
43
|
-
return;
|
|
44
|
-
}
|
|
45
|
-
const transformed = `
|
|
46
|
-
function theFunction() {
|
|
47
|
-
${prependedCode}
|
|
48
|
-
|
|
49
|
-
${cleanedCode}
|
|
50
|
-
}
|
|
51
|
-
theFunction();
|
|
52
|
-
`;
|
|
53
|
-
const setRootState = (prop, value) => {
|
|
54
|
-
const newState = set(state, prop, value);
|
|
55
|
-
rootSetState?.(newState);
|
|
56
|
-
};
|
|
57
|
-
const initFunc = function (interpreter, globalObject) {
|
|
58
|
-
/**
|
|
59
|
-
* serialize all function args to JSON strings
|
|
60
|
-
*/
|
|
61
|
-
properties.forEach(([key, val]) => {
|
|
62
|
-
const jsonVal = JSON.stringify(val);
|
|
63
|
-
interpreter.setProperty(globalObject, getJSONValName(key), jsonVal);
|
|
64
|
-
});
|
|
65
|
-
/**
|
|
66
|
-
* Add a JavaScript function "setRootState" to the interpreter's global object, that will be called whenever a
|
|
67
|
-
* state property is set. This function will update the state object.
|
|
68
|
-
*/
|
|
69
|
-
interpreter.setProperty(globalObject, 'setRootState', interpreter.createNativeFunction(setRootState));
|
|
70
|
-
};
|
|
71
|
-
try {
|
|
72
|
-
const myInterpreter = new Interpreter(transformed, initFunc);
|
|
73
|
-
myInterpreter.run();
|
|
74
|
-
const output = myInterpreter.pseudoToNative(myInterpreter.value);
|
|
75
|
-
return output;
|
|
76
|
-
}
|
|
77
|
-
catch (e) {
|
|
78
|
-
logger.warn('Custom code error in non-node runtime. SDK can only execute ES5 JavaScript.', {
|
|
79
|
-
e
|
|
80
|
-
});
|
|
81
|
-
return;
|
|
82
|
-
}
|
|
83
|
-
};
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
const TEXT_STYLE_KEYS = ['color', 'whiteSpace', 'direction', 'hyphens', 'overflowWrap'];
|
|
2
|
-
/**
|
|
3
|
-
* Check if the key represent a CSS style property that applies to text
|
|
4
|
-
* See MDN docs for refrence of what properties apply to text.
|
|
5
|
-
* https://developer.mozilla.org/en-US/docs/Learn/CSS/Styling_text/Fundamentals#summary
|
|
6
|
-
*/
|
|
7
|
-
const isTextStyle = (key) => {
|
|
8
|
-
return TEXT_STYLE_KEYS.includes(key) || key.startsWith('font') || key.startsWith('text') || key.startsWith('letter') || key.startsWith('line') || key.startsWith('word') || key.startsWith('writing');
|
|
9
|
-
};
|
|
10
|
-
/**
|
|
11
|
-
* Extract styles that apply to text from a style object.
|
|
12
|
-
*/
|
|
13
|
-
export const extractTextStyles = (styles) => {
|
|
14
|
-
const textStyles = {};
|
|
15
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
16
|
-
Object.entries(styles).forEach(([key, value]) => {
|
|
17
|
-
if (isTextStyle(key)) {
|
|
18
|
-
textStyles[key] = value;
|
|
19
|
-
}
|
|
20
|
-
});
|
|
21
|
-
return textStyles;
|
|
22
|
-
};
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { getBuilderSearchParams } from './get-builder-search-params/index.js';
|
|
2
|
-
import { fetchOneEntry } from './get-content/index.js';
|
|
3
|
-
/**
|
|
4
|
-
* Fetches builder content, and returns it along with sensible defaults for other props that `Content` needs to render.
|
|
5
|
-
*/
|
|
6
|
-
export const fetchBuilderProps = async (_args) => {
|
|
7
|
-
const urlPath = _args.path || _args.url?.pathname || _args.userAttributes?.urlPath;
|
|
8
|
-
const getContentArgs = {
|
|
9
|
-
..._args,
|
|
10
|
-
apiKey: _args.apiKey,
|
|
11
|
-
model: _args.model || 'page',
|
|
12
|
-
userAttributes: {
|
|
13
|
-
..._args.userAttributes,
|
|
14
|
-
...(urlPath ? {
|
|
15
|
-
urlPath
|
|
16
|
-
} : {})
|
|
17
|
-
},
|
|
18
|
-
options: getBuilderSearchParams(_args.searchParams || _args.url?.searchParams || _args.options)
|
|
19
|
-
};
|
|
20
|
-
return {
|
|
21
|
-
apiKey: getContentArgs.apiKey,
|
|
22
|
-
model: getContentArgs.model,
|
|
23
|
-
content: await fetchOneEntry(getContentArgs)
|
|
24
|
-
};
|
|
25
|
-
};
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { evaluate } from './evaluate/index.js';
|
|
2
|
-
export const createEventHandler = (value, options) => event => evaluate({
|
|
3
|
-
code: value,
|
|
4
|
-
context: options.context,
|
|
5
|
-
localState: options.localState,
|
|
6
|
-
rootState: options.rootState,
|
|
7
|
-
rootSetState: options.rootSetState,
|
|
8
|
-
event,
|
|
9
|
-
isExpression: false
|
|
10
|
-
});
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { TARGET } from '../constants/target.js';
|
|
2
|
-
import { getEventHandlerName } from './event-handler-name.js';
|
|
3
|
-
import { createEventHandler } from './get-block-actions-handler.js';
|
|
4
|
-
export function getBlockActions(options) {
|
|
5
|
-
const obj = {};
|
|
6
|
-
const optionActions = options.block.actions ?? {};
|
|
7
|
-
for (const key in optionActions) {
|
|
8
|
-
// eslint-disable-next-line no-prototype-builtins
|
|
9
|
-
if (!optionActions.hasOwnProperty(key)) {
|
|
10
|
-
continue;
|
|
11
|
-
}
|
|
12
|
-
const value = optionActions[key];
|
|
13
|
-
let eventHandlerName = getEventHandlerName(key);
|
|
14
|
-
if (options.stripPrefix) {
|
|
15
|
-
switch (TARGET) {
|
|
16
|
-
case 'vue2':
|
|
17
|
-
case 'vue3':
|
|
18
|
-
eventHandlerName = eventHandlerName.replace('v-on:', '');
|
|
19
|
-
break;
|
|
20
|
-
case 'svelte':
|
|
21
|
-
eventHandlerName = eventHandlerName.replace('on:', '');
|
|
22
|
-
break;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
obj[eventHandlerName] = createEventHandler(value, options);
|
|
26
|
-
}
|
|
27
|
-
return obj;
|
|
28
|
-
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
export function getBlockComponentOptions(block) {
|
|
2
|
-
return {
|
|
3
|
-
...block.component?.options,
|
|
4
|
-
...block.options,
|
|
5
|
-
/**
|
|
6
|
-
* Our built-in components frequently make use of the block, so we provide all of it under `builderBlock`
|
|
7
|
-
*/
|
|
8
|
-
builderBlock: block
|
|
9
|
-
};
|
|
10
|
-
}
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import { TARGET } from '../constants/target.js';
|
|
2
|
-
import { convertStyleMapToCSSArray } from '../helpers/css.js';
|
|
3
|
-
import { getReactNativeBlockStyles } from './get-react-native-block-styles.js';
|
|
4
|
-
import { transformBlockProperties } from './transform-block-properties.js';
|
|
5
|
-
const extractRelevantRootBlockProperties = (block) => {
|
|
6
|
-
// currently we are only spreading the `href` property
|
|
7
|
-
// TO-DO: potentially spread all properties from block, but only if they are not already defined by BuilderBlock
|
|
8
|
-
// const {
|
|
9
|
-
// '@type': _type,
|
|
10
|
-
// '@version': _version,
|
|
11
|
-
// id: _id,
|
|
12
|
-
// tagName: _tagName,
|
|
13
|
-
// layerName: _layerName,
|
|
14
|
-
// groupLocked: _groupLocked,
|
|
15
|
-
// layerLocked: _layerLocked,
|
|
16
|
-
// class: _class,
|
|
17
|
-
// children: _children,
|
|
18
|
-
// responsiveStyles: _responsiveStyles,
|
|
19
|
-
// component: _component,
|
|
20
|
-
// bindings: _bindings,
|
|
21
|
-
// meta: _meta,
|
|
22
|
-
// actions: _actions,
|
|
23
|
-
// properties: _properties,
|
|
24
|
-
// code: _code,
|
|
25
|
-
// repeat: _repeat,
|
|
26
|
-
// animations: _animations,
|
|
27
|
-
// style: _style,
|
|
28
|
-
// hide: _hide,
|
|
29
|
-
// show: _show,
|
|
30
|
-
// // anything set by dynamic bindings outside of predefined `BuilderBlock` properties
|
|
31
|
-
// ...remainingBlockProperties
|
|
32
|
-
// } = block;
|
|
33
|
-
return {
|
|
34
|
-
href: block.href
|
|
35
|
-
};
|
|
36
|
-
};
|
|
37
|
-
export function getBlockProperties({ block, context }) {
|
|
38
|
-
const properties = {
|
|
39
|
-
...extractRelevantRootBlockProperties(block),
|
|
40
|
-
...block.properties,
|
|
41
|
-
'builder-id': block.id,
|
|
42
|
-
style: block.style ? getStyleAttribute(block.style) : undefined,
|
|
43
|
-
class: [block.id, 'builder-block', block.class, block.properties?.class].filter(Boolean).join(' ')
|
|
44
|
-
};
|
|
45
|
-
if (TARGET === 'reactNative') {
|
|
46
|
-
properties.style = getReactNativeBlockStyles({
|
|
47
|
-
block,
|
|
48
|
-
context,
|
|
49
|
-
blockStyles: properties.style
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
return transformBlockProperties(properties);
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Svelte does not support style attribute as an object so we need to flatten it.
|
|
56
|
-
*
|
|
57
|
-
* Additionally, Svelte, Vue and other frameworks use kebab-case styles, so we need to convert them.
|
|
58
|
-
*/
|
|
59
|
-
function getStyleAttribute(style) {
|
|
60
|
-
switch (TARGET) {
|
|
61
|
-
case 'svelte':
|
|
62
|
-
case 'vue2':
|
|
63
|
-
case 'vue3':
|
|
64
|
-
case 'solid':
|
|
65
|
-
return convertStyleMapToCSSArray(style).join(' ');
|
|
66
|
-
case 'qwik':
|
|
67
|
-
case 'reactNative':
|
|
68
|
-
case 'react':
|
|
69
|
-
case 'rsc':
|
|
70
|
-
return style;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { isBrowser } from '../is-browser.js';
|
|
2
|
-
const BUILDER_SEARCHPARAMS_PREFIX = 'builder.';
|
|
3
|
-
const BUILDER_OPTIONS_PREFIX = 'options.';
|
|
4
|
-
export const convertSearchParamsToQueryObject = (searchParams) => {
|
|
5
|
-
const options = {};
|
|
6
|
-
searchParams.forEach((value, key) => {
|
|
7
|
-
options[key] = value;
|
|
8
|
-
});
|
|
9
|
-
return options;
|
|
10
|
-
};
|
|
11
|
-
/**
|
|
12
|
-
* Receives a `URLSearchParams` object or a regular query object, and returns the subset of query params that are
|
|
13
|
-
* relevant to the Builder SDK.
|
|
14
|
-
*
|
|
15
|
-
* @returns
|
|
16
|
-
*/
|
|
17
|
-
export const getBuilderSearchParams = (_options) => {
|
|
18
|
-
if (!_options) {
|
|
19
|
-
return {};
|
|
20
|
-
}
|
|
21
|
-
const options = normalizeSearchParams(_options);
|
|
22
|
-
const newOptions = {};
|
|
23
|
-
Object.keys(options).forEach(key => {
|
|
24
|
-
if (key.startsWith(BUILDER_SEARCHPARAMS_PREFIX)) {
|
|
25
|
-
const trimmedKey = key.replace(BUILDER_SEARCHPARAMS_PREFIX, '').replace(BUILDER_OPTIONS_PREFIX, '');
|
|
26
|
-
newOptions[trimmedKey] = options[key];
|
|
27
|
-
}
|
|
28
|
-
});
|
|
29
|
-
return newOptions;
|
|
30
|
-
};
|
|
31
|
-
export const getBuilderSearchParamsFromWindow = () => {
|
|
32
|
-
if (!isBrowser()) {
|
|
33
|
-
return {};
|
|
34
|
-
}
|
|
35
|
-
const searchParams = new URLSearchParams(window.location.search);
|
|
36
|
-
return getBuilderSearchParams(searchParams);
|
|
37
|
-
};
|
|
38
|
-
export const normalizeSearchParams = (searchParams) => searchParams instanceof URLSearchParams ? convertSearchParamsToQueryObject(searchParams) : searchParams;
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { flatten } from '../../helpers/flatten.js';
|
|
2
|
-
import { getBuilderSearchParamsFromWindow, normalizeSearchParams } from '../get-builder-search-params/index.js';
|
|
3
|
-
import { DEFAULT_API_VERSION } from '../../types/api-version.js';
|
|
4
|
-
export const generateContentUrl = (options) => {
|
|
5
|
-
const { limit = 30, userAttributes, query, noTraverse = false, model, apiKey, includeRefs = true, enrich, locale, apiVersion = DEFAULT_API_VERSION } = options;
|
|
6
|
-
if (!apiKey) {
|
|
7
|
-
throw new Error('Missing API key');
|
|
8
|
-
}
|
|
9
|
-
if (!['v2', 'v3'].includes(apiVersion)) {
|
|
10
|
-
throw new Error(`Invalid apiVersion: expected 'v2' or 'v3', received '${apiVersion}'`);
|
|
11
|
-
}
|
|
12
|
-
const url = new URL(`https://cdn.builder.io/api/${apiVersion}/content/${model}?apiKey=${apiKey}&limit=${limit}&noTraverse=${noTraverse}&includeRefs=${includeRefs}${locale ? `&locale=${locale}` : ''}${enrich ? `&enrich=${enrich}` : ''}`);
|
|
13
|
-
const queryOptions = {
|
|
14
|
-
...getBuilderSearchParamsFromWindow(),
|
|
15
|
-
...normalizeSearchParams(options.options || {})
|
|
16
|
-
};
|
|
17
|
-
const flattened = flatten(queryOptions);
|
|
18
|
-
for (const key in flattened) {
|
|
19
|
-
url.searchParams.set(key, String(flattened[key]));
|
|
20
|
-
}
|
|
21
|
-
if (userAttributes) {
|
|
22
|
-
url.searchParams.set('userAttributes', JSON.stringify(userAttributes));
|
|
23
|
-
}
|
|
24
|
-
if (query) {
|
|
25
|
-
const flattened = flatten({
|
|
26
|
-
query
|
|
27
|
-
});
|
|
28
|
-
for (const key in flattened) {
|
|
29
|
-
url.searchParams.set(key, JSON.stringify(flattened[key]));
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
return url;
|
|
33
|
-
};
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
import { TARGET } from '../../constants/target.js';
|
|
2
|
-
import { handleABTesting } from '../../helpers/ab-tests.js';
|
|
3
|
-
import { getDefaultCanTrack } from '../../helpers/canTrack.js';
|
|
4
|
-
import { logger } from '../../helpers/logger.js';
|
|
5
|
-
import { getPreviewContent } from '../../helpers/preview-lru-cache/get.js';
|
|
6
|
-
import { fetch } from '../get-fetch.js';
|
|
7
|
-
import { isBrowser } from '../is-browser.js';
|
|
8
|
-
import { generateContentUrl } from './generate-content-url.js';
|
|
9
|
-
const checkContentHasResults = (content) => 'results' in content;
|
|
10
|
-
/**
|
|
11
|
-
* Returns a the first entry that matches the given options.
|
|
12
|
-
*/
|
|
13
|
-
export async function fetchOneEntry(options) {
|
|
14
|
-
const allContent = await fetchEntries({
|
|
15
|
-
...options,
|
|
16
|
-
limit: 1
|
|
17
|
-
});
|
|
18
|
-
if (allContent) {
|
|
19
|
-
return allContent.results[0] || null;
|
|
20
|
-
}
|
|
21
|
-
return null;
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* @deprecated
|
|
25
|
-
* Consider using `fetchBuilderProps` instead for easier setup.
|
|
26
|
-
*
|
|
27
|
-
* NOTE: `getContent` was renamed to `fetchOneEntry` and will be removed in a future release.
|
|
28
|
-
*/
|
|
29
|
-
export const getContent = fetchOneEntry;
|
|
30
|
-
const _fetchContent = async (options) => {
|
|
31
|
-
const url = generateContentUrl(options);
|
|
32
|
-
const res = await fetch(url.href);
|
|
33
|
-
const content = await res.json();
|
|
34
|
-
return content;
|
|
35
|
-
};
|
|
36
|
-
/**
|
|
37
|
-
* Exported only for testing purposes. Should not be used directly.
|
|
38
|
-
*/
|
|
39
|
-
export const _processContentResult = async (options, content, url = generateContentUrl(options)) => {
|
|
40
|
-
const canTrack = getDefaultCanTrack(options.canTrack);
|
|
41
|
-
const isPreviewing = url.search.includes(`preview=`);
|
|
42
|
-
if (TARGET === 'rsc' && isPreviewing) {
|
|
43
|
-
const newResults = [];
|
|
44
|
-
for (const item of content.results) {
|
|
45
|
-
const previewContent = getPreviewContent(url.searchParams);
|
|
46
|
-
newResults.push(previewContent || item);
|
|
47
|
-
}
|
|
48
|
-
content.results = newResults;
|
|
49
|
-
}
|
|
50
|
-
if (!canTrack)
|
|
51
|
-
return content;
|
|
52
|
-
if (!(isBrowser() || TARGET === 'reactNative'))
|
|
53
|
-
return content;
|
|
54
|
-
/**
|
|
55
|
-
* For client-side navigations, it is ideal to handle AB testing at this point instead of using our
|
|
56
|
-
* complex multi-rendering variants approach, which is only needed for SSR'd content.
|
|
57
|
-
*
|
|
58
|
-
* This is also where react-native would handle AB testing.
|
|
59
|
-
*/
|
|
60
|
-
try {
|
|
61
|
-
const newResults = [];
|
|
62
|
-
for (const item of content.results) {
|
|
63
|
-
newResults.push(await handleABTesting({
|
|
64
|
-
item,
|
|
65
|
-
canTrack
|
|
66
|
-
}));
|
|
67
|
-
}
|
|
68
|
-
content.results = newResults;
|
|
69
|
-
}
|
|
70
|
-
catch (e) {
|
|
71
|
-
logger.error('Could not process A/B tests. ', e);
|
|
72
|
-
}
|
|
73
|
-
return content;
|
|
74
|
-
};
|
|
75
|
-
/**
|
|
76
|
-
* Returns a paginated array of entries that match the given options.
|
|
77
|
-
*/
|
|
78
|
-
export async function fetchEntries(options) {
|
|
79
|
-
try {
|
|
80
|
-
const url = generateContentUrl(options);
|
|
81
|
-
const content = await _fetchContent(options);
|
|
82
|
-
if (!checkContentHasResults(content)) {
|
|
83
|
-
logger.error('Error fetching data. ', {
|
|
84
|
-
url,
|
|
85
|
-
content,
|
|
86
|
-
options
|
|
87
|
-
});
|
|
88
|
-
return null;
|
|
89
|
-
}
|
|
90
|
-
return _processContentResult(options, content);
|
|
91
|
-
}
|
|
92
|
-
catch (error) {
|
|
93
|
-
logger.error('Error fetching data. ', error);
|
|
94
|
-
return null;
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* @deprecated Use `fetchEntries` instead.
|
|
99
|
-
*/
|
|
100
|
-
export const getAllContent = fetchEntries;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { getGlobalThis } from './get-global-this.js';
|
|
2
|
-
function getFetch() {
|
|
3
|
-
const globalFetch = getGlobalThis().fetch;
|
|
4
|
-
if (typeof globalFetch === 'undefined') {
|
|
5
|
-
console.warn(`Builder SDK could not find a global fetch function. Make sure you have a polyfill for fetch in your project.
|
|
6
|
-
For more information, read https://github.com/BuilderIO/this-package-uses-fetch`);
|
|
7
|
-
throw new Error('Builder SDK could not find a global `fetch` function');
|
|
8
|
-
}
|
|
9
|
-
return globalFetch;
|
|
10
|
-
}
|
|
11
|
-
export const fetch = getFetch();
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
export function getGlobalThis() {
|
|
2
|
-
if (typeof globalThis !== 'undefined') {
|
|
3
|
-
return globalThis;
|
|
4
|
-
}
|
|
5
|
-
if (typeof window !== 'undefined') {
|
|
6
|
-
return window;
|
|
7
|
-
}
|
|
8
|
-
if (typeof global !== 'undefined') {
|
|
9
|
-
return global;
|
|
10
|
-
}
|
|
11
|
-
if (typeof self !== 'undefined') {
|
|
12
|
-
return self;
|
|
13
|
-
}
|
|
14
|
-
return globalThis;
|
|
15
|
-
}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import { evaluate } from './evaluate/index.js';
|
|
2
|
-
import { fastClone } from './fast-clone.js';
|
|
3
|
-
import { set } from './set.js';
|
|
4
|
-
import { transformBlock } from './transform-block.js';
|
|
5
|
-
const evaluateBindings = ({ block, context, localState, rootState, rootSetState }) => {
|
|
6
|
-
if (!block.bindings) {
|
|
7
|
-
return block;
|
|
8
|
-
}
|
|
9
|
-
const copy = fastClone(block);
|
|
10
|
-
const copied = {
|
|
11
|
-
...copy,
|
|
12
|
-
properties: {
|
|
13
|
-
...copy.properties
|
|
14
|
-
},
|
|
15
|
-
actions: {
|
|
16
|
-
...copy.actions
|
|
17
|
-
}
|
|
18
|
-
};
|
|
19
|
-
for (const binding in block.bindings) {
|
|
20
|
-
const expression = block.bindings[binding];
|
|
21
|
-
const value = evaluate({
|
|
22
|
-
code: expression,
|
|
23
|
-
localState,
|
|
24
|
-
rootState,
|
|
25
|
-
rootSetState,
|
|
26
|
-
context
|
|
27
|
-
});
|
|
28
|
-
set(copied, binding, value);
|
|
29
|
-
}
|
|
30
|
-
return copied;
|
|
31
|
-
};
|
|
32
|
-
export function getProcessedBlock({ block, context, shouldEvaluateBindings, localState, rootState, rootSetState }) {
|
|
33
|
-
const transformedBlock = transformBlock(block);
|
|
34
|
-
if (shouldEvaluateBindings) {
|
|
35
|
-
return evaluateBindings({
|
|
36
|
-
block: transformedBlock,
|
|
37
|
-
localState,
|
|
38
|
-
rootState,
|
|
39
|
-
rootSetState,
|
|
40
|
-
context
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
else {
|
|
44
|
-
return transformedBlock;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { sanitizeReactNativeBlockStyles } from './sanitize-react-native-block-styles.js';
|
|
2
|
-
export function getReactNativeBlockStyles({ block, context, blockStyles }) {
|
|
3
|
-
const responsiveStyles = block.responsiveStyles;
|
|
4
|
-
if (!responsiveStyles) {
|
|
5
|
-
return {};
|
|
6
|
-
}
|
|
7
|
-
const styles = {
|
|
8
|
-
// recursively apply inherited styles so that they can be passed down to children `Text` blocks
|
|
9
|
-
...context.inheritedStyles,
|
|
10
|
-
...(responsiveStyles.large || {}),
|
|
11
|
-
...(responsiveStyles.medium || {}),
|
|
12
|
-
...(responsiveStyles.small || {}),
|
|
13
|
-
...blockStyles
|
|
14
|
-
};
|
|
15
|
-
const newStyles = sanitizeReactNativeBlockStyles(styles);
|
|
16
|
-
return newStyles;
|
|
17
|
-
}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { isBrowser } from './is-browser.js';
|
|
2
|
-
/**
|
|
3
|
-
* Identifies non-node server runtimes (edge, workers, serverless, etc.)
|
|
4
|
-
*/
|
|
5
|
-
export function isNonNodeServer() {
|
|
6
|
-
const hasNode = () => typeof process !== 'undefined' && process?.versions?.node;
|
|
7
|
-
return !isBrowser() && !hasNode();
|
|
8
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { isBrowser } from './is-browser.js';
|
|
2
|
-
import { isEditing } from './is-editing.js';
|
|
3
|
-
export function isPreviewing() {
|
|
4
|
-
if (!isBrowser()) {
|
|
5
|
-
return false;
|
|
6
|
-
}
|
|
7
|
-
if (isEditing()) {
|
|
8
|
-
return false;
|
|
9
|
-
}
|
|
10
|
-
return Boolean(location.search.indexOf('builder.preview=') !== -1);
|
|
11
|
-
}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { fastClone } from './fast-clone.js';
|
|
2
|
-
/**
|
|
3
|
-
* @deprecated. Use the `customComponents` prop in RenderContent instead to provide your custom components to the builder SDK.
|
|
4
|
-
*/
|
|
5
|
-
export const components = [];
|
|
6
|
-
/**
|
|
7
|
-
* @deprecated. Use the `customComponents` prop in RenderContent instead to provide your custom components to the builder SDK.
|
|
8
|
-
*/
|
|
9
|
-
export function registerComponent(component, info) {
|
|
10
|
-
components.push({
|
|
11
|
-
component,
|
|
12
|
-
...info
|
|
13
|
-
});
|
|
14
|
-
console.warn('registerComponent is deprecated. Use the `customComponents` prop in RenderContent instead to provide your custom components to the builder SDK.');
|
|
15
|
-
return component;
|
|
16
|
-
}
|
|
17
|
-
export const createRegisterComponentMessage = (info) => ({
|
|
18
|
-
type: 'builder.registerComponent',
|
|
19
|
-
data: serializeComponentInfo(info)
|
|
20
|
-
});
|
|
21
|
-
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
22
|
-
const serializeFn = (fnValue) => {
|
|
23
|
-
const fnStr = fnValue.toString().trim();
|
|
24
|
-
// we need to account for a few different fn syntaxes:
|
|
25
|
-
// 1. `function name(args) => {code}`
|
|
26
|
-
// 2. `name(args) => {code}`
|
|
27
|
-
// 3. `(args) => {}`
|
|
28
|
-
const appendFunction = !fnStr.startsWith('function') && !fnStr.startsWith('(');
|
|
29
|
-
return `return (${appendFunction ? 'function ' : ''}${fnStr}).apply(this, arguments)`;
|
|
30
|
-
};
|
|
31
|
-
const serializeValue = (value) => typeof value === 'function' ? serializeFn(value) : fastClone(value);
|
|
32
|
-
export const serializeComponentInfo = ({ inputs, ...info }) => ({
|
|
33
|
-
...fastClone(info),
|
|
34
|
-
inputs: inputs?.map(input => Object.entries(input).reduce((acc, [key, value]) => ({
|
|
35
|
-
...acc,
|
|
36
|
-
[key]: serializeValue(value)
|
|
37
|
-
}), {}))
|
|
38
|
-
});
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { isBrowser } from './is-browser.js';
|
|
2
|
-
const registry = {};
|
|
3
|
-
export function register(type, info) {
|
|
4
|
-
let typeList = registry[type];
|
|
5
|
-
if (!typeList) {
|
|
6
|
-
typeList = registry[type] = [];
|
|
7
|
-
}
|
|
8
|
-
typeList.push(info);
|
|
9
|
-
if (isBrowser()) {
|
|
10
|
-
const message = {
|
|
11
|
-
type: 'builder.register',
|
|
12
|
-
data: {
|
|
13
|
-
type,
|
|
14
|
-
info
|
|
15
|
-
}
|
|
16
|
-
};
|
|
17
|
-
try {
|
|
18
|
-
parent.postMessage(message, '*');
|
|
19
|
-
if (parent !== window) {
|
|
20
|
-
window.postMessage(message, '*');
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
catch (err) {
|
|
24
|
-
console.debug('Could not postmessage', err);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
}
|