@builder.io/sdk-solid 2.0.31 → 3.0.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/dist/index.d.ts +5 -0
- package/lib/browser/dev.js +142 -59
- package/lib/browser/dev.jsx +143 -55
- package/lib/browser/index.js +139 -59
- package/lib/browser/index.jsx +142 -55
- package/lib/edge/dev.js +142 -59
- package/lib/edge/dev.jsx +143 -55
- package/lib/edge/index.js +139 -59
- package/lib/edge/index.jsx +142 -55
- package/lib/node/dev.js +142 -59
- package/lib/node/dev.jsx +143 -55
- package/lib/node/index.js +139 -59
- package/lib/node/index.jsx +142 -55
- package/package.json +1 -1
package/lib/node/index.js
CHANGED
|
@@ -115,7 +115,8 @@ var builder_context_default = createContext({
|
|
|
115
115
|
inheritedStyles: {},
|
|
116
116
|
BlocksWrapper: "div",
|
|
117
117
|
BlocksWrapperProps: {},
|
|
118
|
-
nonce: ""
|
|
118
|
+
nonce: "",
|
|
119
|
+
model: ""
|
|
119
120
|
});
|
|
120
121
|
var components_context_default = createContext({ registeredComponents: {} });
|
|
121
122
|
|
|
@@ -581,6 +582,74 @@ function evaluate({
|
|
|
581
582
|
}
|
|
582
583
|
}
|
|
583
584
|
|
|
585
|
+
// src/functions/traverse.ts
|
|
586
|
+
function traverse(obj, callback, parent2 = null, key = null, visited = /* @__PURE__ */ new WeakSet()) {
|
|
587
|
+
if (obj == null || typeof obj !== "object") {
|
|
588
|
+
callback(obj, (newValue) => {
|
|
589
|
+
if (parent2 !== null && key !== null) {
|
|
590
|
+
parent2[key] = newValue;
|
|
591
|
+
}
|
|
592
|
+
});
|
|
593
|
+
return;
|
|
594
|
+
}
|
|
595
|
+
if (visited.has(obj)) {
|
|
596
|
+
return;
|
|
597
|
+
}
|
|
598
|
+
visited.add(obj);
|
|
599
|
+
if (Array.isArray(obj)) {
|
|
600
|
+
obj.forEach((item, index) => {
|
|
601
|
+
const update = (newValue) => {
|
|
602
|
+
obj[index] = newValue;
|
|
603
|
+
};
|
|
604
|
+
callback(item, update);
|
|
605
|
+
traverse(item, callback, obj, index, visited);
|
|
606
|
+
});
|
|
607
|
+
} else {
|
|
608
|
+
Object.entries(obj).forEach(([key2, value]) => {
|
|
609
|
+
const update = (newValue) => {
|
|
610
|
+
obj[key2] = newValue;
|
|
611
|
+
};
|
|
612
|
+
callback(value, update);
|
|
613
|
+
traverse(value, callback, obj, key2, visited);
|
|
614
|
+
});
|
|
615
|
+
}
|
|
616
|
+
}
|
|
617
|
+
|
|
618
|
+
// src/functions/extract-localized-values.ts
|
|
619
|
+
function isLocalizedField(value) {
|
|
620
|
+
return value && typeof value === "object" && value["@type"] === "@builder.io/core:LocalizedValue";
|
|
621
|
+
}
|
|
622
|
+
function containsLocalizedValues(data) {
|
|
623
|
+
if (!data || !Object.getOwnPropertyNames(data).length) {
|
|
624
|
+
return false;
|
|
625
|
+
}
|
|
626
|
+
let hasLocalizedValues = false;
|
|
627
|
+
traverse(data, (value) => {
|
|
628
|
+
if (isLocalizedField(value)) {
|
|
629
|
+
hasLocalizedValues = true;
|
|
630
|
+
return;
|
|
631
|
+
}
|
|
632
|
+
});
|
|
633
|
+
return hasLocalizedValues;
|
|
634
|
+
}
|
|
635
|
+
function extractLocalizedValues(data, locale) {
|
|
636
|
+
if (!data || !Object.getOwnPropertyNames(data).length) {
|
|
637
|
+
return {};
|
|
638
|
+
}
|
|
639
|
+
traverse(data, (value, update) => {
|
|
640
|
+
if (isLocalizedField(value)) {
|
|
641
|
+
update(value[locale] ?? void 0);
|
|
642
|
+
}
|
|
643
|
+
});
|
|
644
|
+
return data;
|
|
645
|
+
}
|
|
646
|
+
function resolveLocalizedValues(block, locale) {
|
|
647
|
+
if (block.component?.options && containsLocalizedValues(block.component?.options)) {
|
|
648
|
+
block.component.options = extractLocalizedValues(block.component.options, locale ?? "Default");
|
|
649
|
+
}
|
|
650
|
+
return block;
|
|
651
|
+
}
|
|
652
|
+
|
|
584
653
|
// src/functions/transform-block.ts
|
|
585
654
|
function transformBlock(block) {
|
|
586
655
|
return block;
|
|
@@ -666,7 +735,8 @@ function getProcessedBlock({
|
|
|
666
735
|
rootState,
|
|
667
736
|
rootSetState
|
|
668
737
|
}) {
|
|
669
|
-
|
|
738
|
+
let transformedBlock = resolveLocalizedValues(block, rootState.locale);
|
|
739
|
+
transformedBlock = transformBlock(transformedBlock);
|
|
670
740
|
if (shouldEvaluateBindings) {
|
|
671
741
|
return evaluateBindings({
|
|
672
742
|
block: transformedBlock,
|
|
@@ -923,16 +993,24 @@ function mapStyleObjToStrIfNeeded(style) {
|
|
|
923
993
|
}
|
|
924
994
|
|
|
925
995
|
// src/components/block/block.helpers.ts
|
|
996
|
+
var checkIsComponentRestricted = (component, model) => {
|
|
997
|
+
if (!component)
|
|
998
|
+
return true;
|
|
999
|
+
if (!model)
|
|
1000
|
+
return false;
|
|
1001
|
+
return component.models && component.models.length > 0 && !component.models.includes(model);
|
|
1002
|
+
};
|
|
926
1003
|
var getComponent = ({
|
|
927
1004
|
block,
|
|
928
|
-
registeredComponents
|
|
1005
|
+
registeredComponents,
|
|
1006
|
+
model
|
|
929
1007
|
}) => {
|
|
930
1008
|
const componentName = block.component?.name;
|
|
931
1009
|
if (!componentName) {
|
|
932
1010
|
return null;
|
|
933
1011
|
}
|
|
934
1012
|
const ref = registeredComponents[componentName];
|
|
935
|
-
if (!ref) {
|
|
1013
|
+
if (!ref || checkIsComponentRestricted(ref, model)) {
|
|
936
1014
|
return void 0;
|
|
937
1015
|
} else {
|
|
938
1016
|
return ref;
|
|
@@ -983,11 +1061,15 @@ var provideLinkComponent = (block, linkComponent) => {
|
|
|
983
1061
|
};
|
|
984
1062
|
return {};
|
|
985
1063
|
};
|
|
986
|
-
var provideRegisteredComponents = (block, registeredComponents) => {
|
|
987
|
-
if (block?.shouldReceiveBuilderProps?.builderComponents)
|
|
1064
|
+
var provideRegisteredComponents = (block, registeredComponents, model) => {
|
|
1065
|
+
if (block?.shouldReceiveBuilderProps?.builderComponents) {
|
|
1066
|
+
const filteredRegisteredComponents = Object.fromEntries(Object.entries(registeredComponents).filter(([_, component]) => {
|
|
1067
|
+
return !checkIsComponentRestricted(component, model);
|
|
1068
|
+
}));
|
|
988
1069
|
return {
|
|
989
|
-
builderComponents:
|
|
1070
|
+
builderComponents: filteredRegisteredComponents
|
|
990
1071
|
};
|
|
1072
|
+
}
|
|
991
1073
|
return {};
|
|
992
1074
|
};
|
|
993
1075
|
var provideBuilderBlock = (block, builderBlock) => {
|
|
@@ -1449,7 +1531,8 @@ function Block(props) {
|
|
|
1449
1531
|
const blockComponent = createMemo(() => {
|
|
1450
1532
|
return getComponent({
|
|
1451
1533
|
block: processedBlock(),
|
|
1452
|
-
registeredComponents: props.registeredComponents
|
|
1534
|
+
registeredComponents: props.registeredComponents,
|
|
1535
|
+
model: props.context.model
|
|
1453
1536
|
});
|
|
1454
1537
|
});
|
|
1455
1538
|
const Tag = createMemo(() => {
|
|
@@ -1482,7 +1565,7 @@ function Block(props) {
|
|
|
1482
1565
|
...provideBuilderBlock(blockComponent(), processedBlock()),
|
|
1483
1566
|
...provideBuilderContext(blockComponent(), props.context),
|
|
1484
1567
|
...provideLinkComponent(blockComponent(), props.linkComponent),
|
|
1485
|
-
...provideRegisteredComponents(blockComponent(), props.registeredComponents)
|
|
1568
|
+
...provideRegisteredComponents(blockComponent(), props.registeredComponents, props.context.model)
|
|
1486
1569
|
},
|
|
1487
1570
|
context: props.context,
|
|
1488
1571
|
linkComponent: props.linkComponent,
|
|
@@ -2080,16 +2163,16 @@ function getSrcSet(url) {
|
|
|
2080
2163
|
// src/blocks/image/image.tsx
|
|
2081
2164
|
var _tmpl$5 = /* @__PURE__ */ template(`<source type=image/webp>`);
|
|
2082
2165
|
var _tmpl$23 = /* @__PURE__ */ template(`<picture><img>`);
|
|
2083
|
-
var _tmpl$32 = /* @__PURE__ */ template(`<div class="builder-image-sizer div-
|
|
2084
|
-
var _tmpl$42 = /* @__PURE__ */ template(`<div class=div-
|
|
2085
|
-
var _tmpl$52 = /* @__PURE__ */ template(`<style>.img-
|
|
2166
|
+
var _tmpl$32 = /* @__PURE__ */ template(`<div class="builder-image-sizer div-070d7e88">`);
|
|
2167
|
+
var _tmpl$42 = /* @__PURE__ */ template(`<div class=div-070d7e88-2>`);
|
|
2168
|
+
var _tmpl$52 = /* @__PURE__ */ template(`<style>.img-070d7e88 {
|
|
2086
2169
|
opacity: 1;
|
|
2087
2170
|
transition: opacity 0.2s ease-in-out;
|
|
2088
|
-
}.div-
|
|
2171
|
+
}.div-070d7e88 {
|
|
2089
2172
|
width: 100%;
|
|
2090
2173
|
pointer-events: none;
|
|
2091
2174
|
font-size: 0;
|
|
2092
|
-
}.div-
|
|
2175
|
+
}.div-070d7e88-2 {
|
|
2093
2176
|
display: flex;
|
|
2094
2177
|
flex-direction: column;
|
|
2095
2178
|
align-items: stretch;
|
|
@@ -2105,7 +2188,7 @@ function Image(props) {
|
|
|
2105
2188
|
const url = imageToUse;
|
|
2106
2189
|
if (!url || // We can auto add srcset for cdn.builder.io and shopify
|
|
2107
2190
|
// images, otherwise you can supply this prop manually
|
|
2108
|
-
!(url.match(/builder\.io/) || url.match(/cdn\.shopify\.com/))) {
|
|
2191
|
+
!(typeof url === "string" && (url.match(/builder\.io/) || url.match(/cdn\.shopify\.com/)))) {
|
|
2109
2192
|
return props.srcset;
|
|
2110
2193
|
}
|
|
2111
2194
|
if (props.noWebp) {
|
|
@@ -2153,7 +2236,7 @@ function Image(props) {
|
|
|
2153
2236
|
}
|
|
2154
2237
|
}), _el$3);
|
|
2155
2238
|
effect((_p$) => {
|
|
2156
|
-
const _v$ = "builder-image" + (props.className ? " " + props.className : "") + " img-
|
|
2239
|
+
const _v$ = "builder-image" + (props.className ? " " + props.className : "") + " img-070d7e88", _v$2 = props.highPriority ? "eager" : "lazy", _v$3 = props.highPriority ? "high" : "auto", _v$4 = props.altText, _v$5 = props.altText ? void 0 : "presentation", _v$6 = {
|
|
2157
2240
|
"object-position": props.backgroundPosition || "center",
|
|
2158
2241
|
"object-fit": props.backgroundSize || "cover",
|
|
2159
2242
|
...aspectRatioCss()
|
|
@@ -3019,6 +3102,10 @@ var componentInfo4 = {
|
|
|
3019
3102
|
noWrap: true
|
|
3020
3103
|
};
|
|
3021
3104
|
|
|
3105
|
+
// src/constants/file-types.ts
|
|
3106
|
+
var IMAGE_FILE_TYPES = ["jpeg", "jpg", "png", "svg", "webp", "gif", "jfif", "pjpeg", "pjp", "apng", "avif", "tif", "tiff", "heif", "bmp", "eps", "raw", "cr2", "nef", "orf", "sr2", "psd", "heic", "dib", "ai"];
|
|
3107
|
+
var VIDEO_FILE_TYPES = ["mp4", "webm", "mkv", "flv", "vob", "ogv", "ogg", "drc", "gif", "gifv", "mng", "avi", "mov", "qt", "mts", "m2ts", "ts", "wmv", "yuv", "rm", "rmvb", "viv", "asf", "amv", "m4p", "mpeg", "mpe", "m2v", "m4v", "svi", "3gp", "3g2", "mxf", "roq", "nsv", "f4v", "f4p", "f4a", "f4b"];
|
|
3108
|
+
|
|
3022
3109
|
// src/blocks/image/component-info.ts
|
|
3023
3110
|
var componentInfo5 = {
|
|
3024
3111
|
name: "Image",
|
|
@@ -3035,7 +3122,7 @@ var componentInfo5 = {
|
|
|
3035
3122
|
name: "image",
|
|
3036
3123
|
type: "file",
|
|
3037
3124
|
bubble: true,
|
|
3038
|
-
allowedFileTypes:
|
|
3125
|
+
allowedFileTypes: IMAGE_FILE_TYPES,
|
|
3039
3126
|
required: true,
|
|
3040
3127
|
defaultValue: "https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F72c80f114dc149019051b6852a9e3b7a",
|
|
3041
3128
|
onChange: (options) => {
|
|
@@ -4564,7 +4651,7 @@ var componentInfo18 = {
|
|
|
4564
4651
|
name: "image",
|
|
4565
4652
|
bubble: true,
|
|
4566
4653
|
type: "file",
|
|
4567
|
-
allowedFileTypes:
|
|
4654
|
+
allowedFileTypes: IMAGE_FILE_TYPES,
|
|
4568
4655
|
required: true
|
|
4569
4656
|
}],
|
|
4570
4657
|
noWrap: true,
|
|
@@ -4608,14 +4695,14 @@ var componentInfo19 = {
|
|
|
4608
4695
|
inputs: [{
|
|
4609
4696
|
name: "video",
|
|
4610
4697
|
type: "file",
|
|
4611
|
-
allowedFileTypes:
|
|
4698
|
+
allowedFileTypes: VIDEO_FILE_TYPES,
|
|
4612
4699
|
bubble: true,
|
|
4613
4700
|
defaultValue: "https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fd27731a526464deba0016216f5f9e570%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=d27731a526464deba0016216f5f9e570&alt=media&optimized=true",
|
|
4614
4701
|
required: true
|
|
4615
4702
|
}, {
|
|
4616
4703
|
name: "posterImage",
|
|
4617
4704
|
type: "file",
|
|
4618
|
-
allowedFileTypes:
|
|
4705
|
+
allowedFileTypes: IMAGE_FILE_TYPES,
|
|
4619
4706
|
helperText: "Image to show before the video plays"
|
|
4620
4707
|
}, {
|
|
4621
4708
|
name: "autoPlay",
|
|
@@ -4871,7 +4958,7 @@ var createRegisterComponentMessage = (info) => ({
|
|
|
4871
4958
|
var serializeFn = (fnValue) => {
|
|
4872
4959
|
const fnStr = fnValue.toString().trim();
|
|
4873
4960
|
const isArrowWithoutParens = /^[a-zA-Z0-9_]+\s*=>/i.test(fnStr);
|
|
4874
|
-
const appendFunction = !fnStr.startsWith("function") && !fnStr.startsWith("(") && !isArrowWithoutParens;
|
|
4961
|
+
const appendFunction = !fnStr.startsWith("function") && !fnStr.startsWith("async") && !fnStr.startsWith("(") && !isArrowWithoutParens;
|
|
4875
4962
|
return `return (${appendFunction ? "function " : ""}${fnStr}).apply(this, arguments)`;
|
|
4876
4963
|
};
|
|
4877
4964
|
function serializeIncludingFunctions(info) {
|
|
@@ -4954,7 +5041,7 @@ function getPreviewContent(_searchParams) {
|
|
|
4954
5041
|
}
|
|
4955
5042
|
|
|
4956
5043
|
// src/constants/sdk-version.ts
|
|
4957
|
-
var SDK_VERSION = "
|
|
5044
|
+
var SDK_VERSION = "3.0.1";
|
|
4958
5045
|
|
|
4959
5046
|
// src/helpers/sdk-headers.ts
|
|
4960
5047
|
var getSdkHeaders = () => ({
|
|
@@ -5193,22 +5280,17 @@ var _processContentResult = async (options, content, url = generateContentUrl(op
|
|
|
5193
5280
|
return content.results;
|
|
5194
5281
|
};
|
|
5195
5282
|
async function fetchEntries(options) {
|
|
5196
|
-
|
|
5197
|
-
|
|
5198
|
-
|
|
5199
|
-
|
|
5200
|
-
|
|
5201
|
-
|
|
5202
|
-
|
|
5203
|
-
|
|
5204
|
-
|
|
5205
|
-
return null;
|
|
5206
|
-
}
|
|
5207
|
-
return _processContentResult(options, content);
|
|
5208
|
-
} catch (error2) {
|
|
5209
|
-
logger.error("Error fetching data. ", error2);
|
|
5210
|
-
return null;
|
|
5283
|
+
const url = generateContentUrl(options);
|
|
5284
|
+
const content = await _fetchContent(options);
|
|
5285
|
+
if (!checkContentHasResults(content)) {
|
|
5286
|
+
logger.error("Error fetching data. ", {
|
|
5287
|
+
url,
|
|
5288
|
+
content,
|
|
5289
|
+
options
|
|
5290
|
+
});
|
|
5291
|
+
throw content;
|
|
5211
5292
|
}
|
|
5293
|
+
return _processContentResult(options, content);
|
|
5212
5294
|
}
|
|
5213
5295
|
|
|
5214
5296
|
// src/functions/is-previewing.ts
|
|
@@ -5671,6 +5753,12 @@ var subscribeToEditor = (model, callback, options) => {
|
|
|
5671
5753
|
};
|
|
5672
5754
|
};
|
|
5673
5755
|
|
|
5756
|
+
// src/components/content/components/enable-editor.helpers.ts
|
|
5757
|
+
var SDKS_USING_ELEMENT_REF_APPROACH = ["svelte", "qwik", "vue"];
|
|
5758
|
+
var needsElementRefDivForEditing = () => {
|
|
5759
|
+
return SDKS_USING_ELEMENT_REF_APPROACH.includes(TARGET) && (isEditing() || isPreviewing());
|
|
5760
|
+
};
|
|
5761
|
+
|
|
5674
5762
|
// src/components/content/components/styles.helpers.ts
|
|
5675
5763
|
var getCssFromFont = (font) => {
|
|
5676
5764
|
const family = font.family + (font.kind && !font.kind.includes("#") ? ", " + font.kind : "");
|
|
@@ -5905,8 +5993,10 @@ function EnableEditor(props) {
|
|
|
5905
5993
|
} : {}
|
|
5906
5994
|
});
|
|
5907
5995
|
Object.values(props.builderContextSignal.componentInfos).forEach((registeredComponent) => {
|
|
5908
|
-
|
|
5909
|
-
|
|
5996
|
+
if (!props.model || !registeredComponent.models?.length || registeredComponent.models.includes(props.model)) {
|
|
5997
|
+
const message = createRegisterComponentMessage(registeredComponent);
|
|
5998
|
+
window.parent?.postMessage(message, "*");
|
|
5999
|
+
}
|
|
5910
6000
|
});
|
|
5911
6001
|
window.addEventListener("builder:component:stateChangeListenerActivated", emitStateUpdate);
|
|
5912
6002
|
}
|
|
@@ -5978,7 +6068,7 @@ function EnableEditor(props) {
|
|
|
5978
6068
|
get children() {
|
|
5979
6069
|
return createComponent(Show, {
|
|
5980
6070
|
get when() {
|
|
5981
|
-
return props.builderContextSignal.content;
|
|
6071
|
+
return props.builderContextSignal.content || needsElementRefDivForEditing();
|
|
5982
6072
|
},
|
|
5983
6073
|
get children() {
|
|
5984
6074
|
return createComponent(Dynamic, mergeProps({
|
|
@@ -5996,6 +6086,11 @@ function EnableEditor(props) {
|
|
|
5996
6086
|
},
|
|
5997
6087
|
get ["builder-model"]() {
|
|
5998
6088
|
return props.model;
|
|
6089
|
+
},
|
|
6090
|
+
get style() {
|
|
6091
|
+
return {
|
|
6092
|
+
display: !props.builderContextSignal.content && needsElementRefDivForEditing() ? "none" : void 0
|
|
6093
|
+
};
|
|
5999
6094
|
}
|
|
6000
6095
|
}, {}, showContentProps, () => props.contentWrapperProps, {
|
|
6001
6096
|
get component() {
|
|
@@ -6078,15 +6173,7 @@ function ContentComponent(props) {
|
|
|
6078
6173
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion, @typescript-eslint/no-non-null-asserted-optional-chain
|
|
6079
6174
|
contentId: props.content?.id
|
|
6080
6175
|
}));
|
|
6081
|
-
const [registeredComponents, setRegisteredComponents] = createSignal([...getDefaultRegisteredComponents(), ...props.customComponents
|
|
6082
|
-
models
|
|
6083
|
-
}) => {
|
|
6084
|
-
if (!models?.length)
|
|
6085
|
-
return true;
|
|
6086
|
-
if (!props.model)
|
|
6087
|
-
return true;
|
|
6088
|
-
return models.includes(props.model);
|
|
6089
|
-
}) || []].reduce((acc, {
|
|
6176
|
+
const [registeredComponents, setRegisteredComponents] = createSignal([...getDefaultRegisteredComponents(), ...props.customComponents || []].reduce((acc, {
|
|
6090
6177
|
component,
|
|
6091
6178
|
...info
|
|
6092
6179
|
}) => ({
|
|
@@ -6112,15 +6199,7 @@ function ContentComponent(props) {
|
|
|
6112
6199
|
canTrack: props.canTrack,
|
|
6113
6200
|
apiKey: props.apiKey,
|
|
6114
6201
|
apiVersion: props.apiVersion,
|
|
6115
|
-
componentInfos: [...getDefaultRegisteredComponents(), ...props.customComponents
|
|
6116
|
-
models
|
|
6117
|
-
}) => {
|
|
6118
|
-
if (!models?.length)
|
|
6119
|
-
return true;
|
|
6120
|
-
if (!props.model)
|
|
6121
|
-
return true;
|
|
6122
|
-
return models.includes(props.model);
|
|
6123
|
-
}) || []].reduce((acc, {
|
|
6202
|
+
componentInfos: [...getDefaultRegisteredComponents(), ...props.customComponents || []].reduce((acc, {
|
|
6124
6203
|
component: _,
|
|
6125
6204
|
...info
|
|
6126
6205
|
}) => ({
|
|
@@ -6130,7 +6209,8 @@ function ContentComponent(props) {
|
|
|
6130
6209
|
inheritedStyles: {},
|
|
6131
6210
|
BlocksWrapper: props.blocksWrapper || "div",
|
|
6132
6211
|
BlocksWrapperProps: props.blocksWrapperProps || {},
|
|
6133
|
-
nonce: props.nonce || ""
|
|
6212
|
+
nonce: props.nonce || "",
|
|
6213
|
+
model: props.model || ""
|
|
6134
6214
|
});
|
|
6135
6215
|
function contentSetState(newRootState) {
|
|
6136
6216
|
setBuilderContextSignal((PREVIOUS_VALUE) => ({
|