@webstudio-is/react-sdk 0.142.0 → 0.144.0
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/index.js +36 -526
- package/lib/types/components/component-meta.d.ts +80 -0
- package/lib/types/context.d.ts +5 -0
- package/lib/types/css/css.d.ts +7 -10
- package/lib/types/css/normalize.d.ts +392 -0
- package/lib/types/embed-template.d.ts +205 -1
- package/lib/types/index.d.ts +0 -5
- package/package.json +6 -11
- package/lib/types/app/index.d.ts +0 -1
- package/lib/types/app/root.d.ts +0 -7
- package/lib/types/expression.d.ts +0 -94
- package/lib/types/generator.d.ts +0 -9
- package/lib/types/generator.test.d.ts +0 -1
- package/lib/types/page-meta-generator.d.ts +0 -52
- package/lib/types/page-meta-generator.test.d.ts +0 -1
- package/lib/types/resources-generator.d.ts +0 -49
- package/lib/types/resources-generator.test.d.ts +0 -1
- /package/lib/types/{expression.test.d.ts → css/css.test.d.ts} +0 -0
package/lib/index.js
CHANGED
|
@@ -233,11 +233,15 @@ var createImageValueTransformer = (assets, { assetBaseUrl }) => (styleValue) =>
|
|
|
233
233
|
};
|
|
234
234
|
}
|
|
235
235
|
};
|
|
236
|
-
var generateCss = (
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
236
|
+
var generateCss = ({
|
|
237
|
+
assets,
|
|
238
|
+
breakpoints,
|
|
239
|
+
styles,
|
|
240
|
+
styleSourceSelections,
|
|
241
|
+
componentMetas,
|
|
242
|
+
assetBaseUrl,
|
|
243
|
+
atomic
|
|
244
|
+
}) => {
|
|
241
245
|
const classesMap = /* @__PURE__ */ new Map();
|
|
242
246
|
const regularSheet = createRegularStyleSheet({ name: "ssr-regular" });
|
|
243
247
|
const atomicSheet = atomic ? createAtomicStyleSheet({ name: "ssr-atomic" }) : void 0;
|
|
@@ -245,7 +249,7 @@ var generateCss = (data, { assetBaseUrl, atomic = false }) => {
|
|
|
245
249
|
for (const breakpoint of breakpoints.values()) {
|
|
246
250
|
(atomicSheet ?? regularSheet).addMediaRule(breakpoint.id, breakpoint);
|
|
247
251
|
}
|
|
248
|
-
for (const [component, meta] of
|
|
252
|
+
for (const [component, meta] of componentMetas) {
|
|
249
253
|
const presetStyle = meta.presetStyle;
|
|
250
254
|
if (presetStyle === void 0) {
|
|
251
255
|
continue;
|
|
@@ -401,23 +405,6 @@ var createInstanceElement = ({
|
|
|
401
405
|
);
|
|
402
406
|
};
|
|
403
407
|
|
|
404
|
-
// src/app/root.tsx
|
|
405
|
-
import { Links, Meta, Outlet as DefaultOutlet } from "@remix-run/react";
|
|
406
|
-
import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
407
|
-
var Root = ({
|
|
408
|
-
Outlet = DefaultOutlet
|
|
409
|
-
}) => {
|
|
410
|
-
return /* @__PURE__ */ jsxs2("html", { lang: "en", children: [
|
|
411
|
-
/* @__PURE__ */ jsxs2("head", { children: [
|
|
412
|
-
/* @__PURE__ */ jsx2("meta", { charSet: "utf-8" }),
|
|
413
|
-
/* @__PURE__ */ jsx2("meta", { name: "viewport", content: "width=device-width,initial-scale=1" }),
|
|
414
|
-
/* @__PURE__ */ jsx2(Meta, {}),
|
|
415
|
-
/* @__PURE__ */ jsx2(Links, {})
|
|
416
|
-
] }),
|
|
417
|
-
/* @__PURE__ */ jsx2(Outlet, {})
|
|
418
|
-
] });
|
|
419
|
-
};
|
|
420
|
-
|
|
421
408
|
// src/core-components.ts
|
|
422
409
|
import { ListViewIcon } from "@webstudio-is/icons/svg";
|
|
423
410
|
var portalComponent = "Slot";
|
|
@@ -641,204 +628,11 @@ import { z as z2 } from "zod";
|
|
|
641
628
|
import { nanoid } from "nanoid";
|
|
642
629
|
import { titleCase } from "title-case";
|
|
643
630
|
import { noCase } from "change-case";
|
|
631
|
+
import {
|
|
632
|
+
encodeDataSourceVariable,
|
|
633
|
+
transpileExpression
|
|
634
|
+
} from "@webstudio-is/sdk";
|
|
644
635
|
import { StyleValue } from "@webstudio-is/css-engine";
|
|
645
|
-
|
|
646
|
-
// src/expression.ts
|
|
647
|
-
import jsep from "jsep";
|
|
648
|
-
import jsepAssignment from "@jsep-plugin/assignment";
|
|
649
|
-
import jsepObject from "@jsep-plugin/object";
|
|
650
|
-
jsep.literals["undefined"] = "undefined";
|
|
651
|
-
jsep.plugins.register(jsepAssignment);
|
|
652
|
-
jsep.plugins.register(jsepObject);
|
|
653
|
-
var generateCode = (node, failOnForbidden, options) => {
|
|
654
|
-
if (node.type === "Identifier") {
|
|
655
|
-
return options.transformIdentifier(node.name, false);
|
|
656
|
-
}
|
|
657
|
-
if (node.type === "MemberExpression") {
|
|
658
|
-
const object = generateCode(node.object, failOnForbidden, options);
|
|
659
|
-
const property = node.property;
|
|
660
|
-
let propertyString;
|
|
661
|
-
if (property.type === "Identifier" && node.computed === false) {
|
|
662
|
-
propertyString = property.name;
|
|
663
|
-
} else {
|
|
664
|
-
propertyString = generateCode(property, failOnForbidden, options);
|
|
665
|
-
}
|
|
666
|
-
if (node.computed) {
|
|
667
|
-
if (options.optional) {
|
|
668
|
-
return `${object}?.[${propertyString}]`;
|
|
669
|
-
} else {
|
|
670
|
-
return `${object}[${propertyString}]`;
|
|
671
|
-
}
|
|
672
|
-
}
|
|
673
|
-
if (options.optional) {
|
|
674
|
-
return `${object}?.${propertyString}`;
|
|
675
|
-
} else {
|
|
676
|
-
return `${object}.${propertyString}`;
|
|
677
|
-
}
|
|
678
|
-
}
|
|
679
|
-
if (node.type === "Literal") {
|
|
680
|
-
return node.raw;
|
|
681
|
-
}
|
|
682
|
-
if (node.type === "UnaryExpression") {
|
|
683
|
-
const arg = generateCode(node.argument, failOnForbidden, options);
|
|
684
|
-
return `${node.operator}${arg}`;
|
|
685
|
-
}
|
|
686
|
-
if (node.type === "BinaryExpression") {
|
|
687
|
-
const left = generateCode(node.left, failOnForbidden, options);
|
|
688
|
-
const right = generateCode(node.right, failOnForbidden, options);
|
|
689
|
-
return `${left} ${node.operator} ${right}`;
|
|
690
|
-
}
|
|
691
|
-
if (node.type === "ArrayExpression") {
|
|
692
|
-
const elements = node.elements.map(
|
|
693
|
-
(element) => generateCode(element, failOnForbidden, options)
|
|
694
|
-
);
|
|
695
|
-
return `[${elements.join(", ")}]`;
|
|
696
|
-
}
|
|
697
|
-
if (node.type === "CallExpression") {
|
|
698
|
-
if (failOnForbidden) {
|
|
699
|
-
const callee2 = generateCode(node.callee, false, options);
|
|
700
|
-
throw Error(`Cannot call "${callee2}"`);
|
|
701
|
-
}
|
|
702
|
-
const callee = generateCode(node.callee, failOnForbidden, options);
|
|
703
|
-
const args = node.arguments.map(
|
|
704
|
-
(arg) => generateCode(arg, failOnForbidden, options)
|
|
705
|
-
);
|
|
706
|
-
return `${callee}(${args.join(", ")})`;
|
|
707
|
-
}
|
|
708
|
-
if (node.type === "ThisExpression") {
|
|
709
|
-
if (failOnForbidden) {
|
|
710
|
-
throw Error(`"this" is not supported`);
|
|
711
|
-
}
|
|
712
|
-
return "this";
|
|
713
|
-
}
|
|
714
|
-
if (node.type === "ConditionalExpression") {
|
|
715
|
-
throw Error("Ternary operator is not supported");
|
|
716
|
-
}
|
|
717
|
-
if (node.type === "Compound") {
|
|
718
|
-
throw Error("Cannot use multiple expressions");
|
|
719
|
-
}
|
|
720
|
-
if (node.type === "AssignmentExpression") {
|
|
721
|
-
if (node.operator !== "=") {
|
|
722
|
-
throw Error(`Only "=" assignment operator is supported`);
|
|
723
|
-
}
|
|
724
|
-
if (options.effectful === false) {
|
|
725
|
-
throw Error(`Cannot use assignment in this expression`);
|
|
726
|
-
}
|
|
727
|
-
const left = generateCode(node.left, failOnForbidden, {
|
|
728
|
-
...options,
|
|
729
|
-
// override and mark all identifiers inside of left expression as assignee
|
|
730
|
-
transformIdentifier: (id) => options.transformIdentifier(id, true)
|
|
731
|
-
});
|
|
732
|
-
const right = generateCode(node.right, failOnForbidden, options);
|
|
733
|
-
return `${left} ${node.operator} ${right}`;
|
|
734
|
-
}
|
|
735
|
-
if (node.type === "UpdateExpression") {
|
|
736
|
-
throw Error(`"${node.operator}" operator is not supported`);
|
|
737
|
-
}
|
|
738
|
-
if (node.type === "ObjectExpression") {
|
|
739
|
-
const properties = node.properties.map(
|
|
740
|
-
(property) => generateCode(property, failOnForbidden, options)
|
|
741
|
-
);
|
|
742
|
-
return `{${properties.join(", ")}}`;
|
|
743
|
-
}
|
|
744
|
-
if (node.type === "Property") {
|
|
745
|
-
const key = node.key;
|
|
746
|
-
let keyString;
|
|
747
|
-
if (key.type === "Identifier" && node.computed === false) {
|
|
748
|
-
keyString = key.name;
|
|
749
|
-
} else {
|
|
750
|
-
keyString = generateCode(key, failOnForbidden, options);
|
|
751
|
-
}
|
|
752
|
-
const value = generateCode(node.value, failOnForbidden, options);
|
|
753
|
-
if (node.computed) {
|
|
754
|
-
return `[${keyString}]: ${value}`;
|
|
755
|
-
}
|
|
756
|
-
return `${keyString}: ${value}`;
|
|
757
|
-
}
|
|
758
|
-
node;
|
|
759
|
-
return "";
|
|
760
|
-
};
|
|
761
|
-
var validateExpression = (code, options) => {
|
|
762
|
-
const {
|
|
763
|
-
effectful = false,
|
|
764
|
-
optional = false,
|
|
765
|
-
transformIdentifier = (id) => id
|
|
766
|
-
} = options ?? {};
|
|
767
|
-
const expression = jsep(code);
|
|
768
|
-
return generateCode(expression, true, {
|
|
769
|
-
effectful,
|
|
770
|
-
optional,
|
|
771
|
-
transformIdentifier
|
|
772
|
-
});
|
|
773
|
-
};
|
|
774
|
-
var isLiteralNode = (node) => {
|
|
775
|
-
if (node.type === "Literal") {
|
|
776
|
-
return true;
|
|
777
|
-
}
|
|
778
|
-
if (node.type === "ArrayExpression") {
|
|
779
|
-
return node.elements.every(isLiteralNode);
|
|
780
|
-
}
|
|
781
|
-
if (node.type === "ObjectExpression") {
|
|
782
|
-
return node.properties.every((property) => {
|
|
783
|
-
const key = property.key;
|
|
784
|
-
const isIdentifierKey = key.type === "Identifier" && property.computed === false;
|
|
785
|
-
const isLiteralKey = key.type === "Literal";
|
|
786
|
-
return (isLiteralKey || isIdentifierKey) && isLiteralNode(property.value);
|
|
787
|
-
});
|
|
788
|
-
}
|
|
789
|
-
return false;
|
|
790
|
-
};
|
|
791
|
-
var isLiteralExpression = (expression) => {
|
|
792
|
-
try {
|
|
793
|
-
const node = jsep(expression);
|
|
794
|
-
return isLiteralNode(node);
|
|
795
|
-
} catch {
|
|
796
|
-
return false;
|
|
797
|
-
}
|
|
798
|
-
};
|
|
799
|
-
var dataSourceVariablePrefix = "$ws$dataSource$";
|
|
800
|
-
var encodeDataSourceVariable = (id) => {
|
|
801
|
-
const encoded = id.replaceAll("-", "__DASH__");
|
|
802
|
-
return `${dataSourceVariablePrefix}${encoded}`;
|
|
803
|
-
};
|
|
804
|
-
var decodeDataSourceVariable = (name) => {
|
|
805
|
-
if (name.startsWith(dataSourceVariablePrefix)) {
|
|
806
|
-
const encoded = name.slice(dataSourceVariablePrefix.length);
|
|
807
|
-
return encoded.replaceAll("__DASH__", "-");
|
|
808
|
-
}
|
|
809
|
-
return;
|
|
810
|
-
};
|
|
811
|
-
var generateExpression = ({
|
|
812
|
-
expression,
|
|
813
|
-
dataSources,
|
|
814
|
-
usedDataSources,
|
|
815
|
-
scope
|
|
816
|
-
}) => {
|
|
817
|
-
return validateExpression(expression, {
|
|
818
|
-
// parse any expression
|
|
819
|
-
effectful: true,
|
|
820
|
-
// transpile to safely executable member expressions
|
|
821
|
-
optional: true,
|
|
822
|
-
transformIdentifier: (identifier) => {
|
|
823
|
-
const depId = decodeDataSourceVariable(identifier);
|
|
824
|
-
const dep = depId ? dataSources.get(depId) : void 0;
|
|
825
|
-
if (dep) {
|
|
826
|
-
usedDataSources?.set(dep.id, dep);
|
|
827
|
-
return scope.getName(dep.id, dep.name);
|
|
828
|
-
}
|
|
829
|
-
return identifier;
|
|
830
|
-
}
|
|
831
|
-
});
|
|
832
|
-
};
|
|
833
|
-
var executeExpression = (expression) => {
|
|
834
|
-
try {
|
|
835
|
-
const fn = new Function(`return (${expression})`);
|
|
836
|
-
return fn();
|
|
837
|
-
} catch {
|
|
838
|
-
}
|
|
839
|
-
};
|
|
840
|
-
|
|
841
|
-
// src/embed-template.ts
|
|
842
636
|
var EmbedTemplateText = z2.object({
|
|
843
637
|
type: z2.literal("text"),
|
|
844
638
|
value: z2.string()
|
|
@@ -968,8 +762,9 @@ var createInstancesFromTemplate = (treeTemplate, instances, props, dataSourceByR
|
|
|
968
762
|
name: prop.name,
|
|
969
763
|
type: "expression",
|
|
970
764
|
// replace all references with variable names
|
|
971
|
-
value:
|
|
972
|
-
|
|
765
|
+
value: transpileExpression({
|
|
766
|
+
expression: prop.code,
|
|
767
|
+
replaceVariable: (ref) => {
|
|
973
768
|
const id = dataSourceByRef.get(ref)?.id ?? ref;
|
|
974
769
|
return encodeDataSourceVariable(id);
|
|
975
770
|
}
|
|
@@ -989,11 +784,11 @@ var createInstancesFromTemplate = (treeTemplate, instances, props, dataSourceByR
|
|
|
989
784
|
type: "execute",
|
|
990
785
|
args,
|
|
991
786
|
// replace all references with variable names
|
|
992
|
-
code:
|
|
993
|
-
|
|
994
|
-
|
|
787
|
+
code: transpileExpression({
|
|
788
|
+
expression: value.code,
|
|
789
|
+
replaceVariable: (ref) => {
|
|
995
790
|
if (args.includes(ref)) {
|
|
996
|
-
return
|
|
791
|
+
return;
|
|
997
792
|
}
|
|
998
793
|
const id = dataSourceByRef.get(ref)?.id ?? ref;
|
|
999
794
|
return encodeDataSourceVariable(id);
|
|
@@ -1110,8 +905,9 @@ var createInstancesFromTemplate = (treeTemplate, instances, props, dataSourceByR
|
|
|
1110
905
|
parentChildren.push({
|
|
1111
906
|
type: "expression",
|
|
1112
907
|
// replace all references with variable names
|
|
1113
|
-
value:
|
|
1114
|
-
|
|
908
|
+
value: transpileExpression({
|
|
909
|
+
expression: item.value,
|
|
910
|
+
replaceVariable: (ref) => {
|
|
1115
911
|
const id = dataSourceByRef.get(ref)?.id ?? ref;
|
|
1116
912
|
return encodeDataSourceVariable(id);
|
|
1117
913
|
}
|
|
@@ -1322,31 +1118,13 @@ var getClosestInstance = (instancePath, currentInstance, closestComponent) => {
|
|
|
1322
1118
|
}
|
|
1323
1119
|
};
|
|
1324
1120
|
|
|
1325
|
-
// src/generator.ts
|
|
1326
|
-
var generateUtilsExport = (siteData) => {
|
|
1327
|
-
const formsProperties = /* @__PURE__ */ new Map();
|
|
1328
|
-
for (const prop of siteData.props.values()) {
|
|
1329
|
-
if (prop.type === "string") {
|
|
1330
|
-
if (prop.name === "action" || prop.name === "method") {
|
|
1331
|
-
let properties = formsProperties.get(prop.instanceId);
|
|
1332
|
-
if (properties === void 0) {
|
|
1333
|
-
properties = {};
|
|
1334
|
-
}
|
|
1335
|
-
properties[prop.name] = prop.value;
|
|
1336
|
-
formsProperties.set(prop.instanceId, properties);
|
|
1337
|
-
}
|
|
1338
|
-
}
|
|
1339
|
-
}
|
|
1340
|
-
const generatedFormsProperties = `export const formsProperties = new Map<string, { method?: string, action?: string }>(${JSON.stringify(
|
|
1341
|
-
Array.from(formsProperties.entries())
|
|
1342
|
-
)})`;
|
|
1343
|
-
return `
|
|
1344
|
-
${generatedFormsProperties}
|
|
1345
|
-
`;
|
|
1346
|
-
};
|
|
1347
|
-
|
|
1348
1121
|
// src/component-generator.ts
|
|
1349
|
-
import {
|
|
1122
|
+
import {
|
|
1123
|
+
parseComponentName,
|
|
1124
|
+
generateExpression,
|
|
1125
|
+
decodeDataSourceVariable,
|
|
1126
|
+
transpileExpression as transpileExpression2
|
|
1127
|
+
} from "@webstudio-is/sdk";
|
|
1350
1128
|
var generateAction = ({
|
|
1351
1129
|
scope,
|
|
1352
1130
|
prop,
|
|
@@ -1358,12 +1136,12 @@ var generateAction = ({
|
|
|
1358
1136
|
let assignersCode = "";
|
|
1359
1137
|
for (const value of prop.value) {
|
|
1360
1138
|
args = value.args;
|
|
1361
|
-
assignersCode +=
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1139
|
+
assignersCode += transpileExpression2({
|
|
1140
|
+
expression: value.code,
|
|
1141
|
+
executable: true,
|
|
1142
|
+
replaceVariable: (identifier, assignee) => {
|
|
1365
1143
|
if (args?.includes(identifier)) {
|
|
1366
|
-
return
|
|
1144
|
+
return;
|
|
1367
1145
|
}
|
|
1368
1146
|
const depId = decodeDataSourceVariable(identifier);
|
|
1369
1147
|
const dep = depId ? dataSources.get(depId) : void 0;
|
|
@@ -1376,7 +1154,6 @@ var generateAction = ({
|
|
|
1376
1154
|
return valueName;
|
|
1377
1155
|
}
|
|
1378
1156
|
console.error(`Unknown dependency "${identifier}"`);
|
|
1379
|
-
return identifier;
|
|
1380
1157
|
}
|
|
1381
1158
|
});
|
|
1382
1159
|
assignersCode += `
|
|
@@ -1687,270 +1464,12 @@ var generateWebstudioComponent = ({
|
|
|
1687
1464
|
`;
|
|
1688
1465
|
return generatedComponent;
|
|
1689
1466
|
};
|
|
1690
|
-
|
|
1691
|
-
// src/resources-generator.ts
|
|
1692
|
-
var generateResourcesLoader = ({
|
|
1693
|
-
scope,
|
|
1694
|
-
page,
|
|
1695
|
-
dataSources,
|
|
1696
|
-
resources
|
|
1697
|
-
}) => {
|
|
1698
|
-
let generatedOutput = "";
|
|
1699
|
-
let generatedLoaders = "";
|
|
1700
|
-
let hasResources = false;
|
|
1701
|
-
const usedDataSources = /* @__PURE__ */ new Map();
|
|
1702
|
-
for (const dataSource of dataSources.values()) {
|
|
1703
|
-
if (dataSource.type === "resource") {
|
|
1704
|
-
const resource = resources.get(dataSource.resourceId);
|
|
1705
|
-
if (resource === void 0) {
|
|
1706
|
-
continue;
|
|
1707
|
-
}
|
|
1708
|
-
hasResources = true;
|
|
1709
|
-
const resourceName = scope.getName(resource.id, dataSource.name);
|
|
1710
|
-
generatedOutput += `${resourceName},
|
|
1711
|
-
`;
|
|
1712
|
-
generatedLoaders += `loadResource({
|
|
1713
|
-
`;
|
|
1714
|
-
generatedLoaders += `id: "${resource.id}",
|
|
1715
|
-
`;
|
|
1716
|
-
generatedLoaders += `name: ${JSON.stringify(resource.name)},
|
|
1717
|
-
`;
|
|
1718
|
-
const url = generateExpression({
|
|
1719
|
-
expression: resource.url,
|
|
1720
|
-
dataSources,
|
|
1721
|
-
usedDataSources,
|
|
1722
|
-
scope
|
|
1723
|
-
});
|
|
1724
|
-
generatedLoaders += `url: ${url},
|
|
1725
|
-
`;
|
|
1726
|
-
generatedLoaders += `method: "${resource.method}",
|
|
1727
|
-
`;
|
|
1728
|
-
generatedLoaders += `headers: [
|
|
1729
|
-
`;
|
|
1730
|
-
for (const header of resource.headers) {
|
|
1731
|
-
const value = generateExpression({
|
|
1732
|
-
expression: header.value,
|
|
1733
|
-
dataSources,
|
|
1734
|
-
usedDataSources,
|
|
1735
|
-
scope
|
|
1736
|
-
});
|
|
1737
|
-
generatedLoaders += `{ name: "${header.name}", value: ${value} },
|
|
1738
|
-
`;
|
|
1739
|
-
}
|
|
1740
|
-
generatedLoaders += `],
|
|
1741
|
-
`;
|
|
1742
|
-
if (resource.body !== void 0 && resource.body.length > 0) {
|
|
1743
|
-
const body = generateExpression({
|
|
1744
|
-
expression: resource.body,
|
|
1745
|
-
dataSources,
|
|
1746
|
-
usedDataSources,
|
|
1747
|
-
scope
|
|
1748
|
-
});
|
|
1749
|
-
generatedLoaders += `body: ${body},
|
|
1750
|
-
`;
|
|
1751
|
-
}
|
|
1752
|
-
generatedLoaders += `}),
|
|
1753
|
-
`;
|
|
1754
|
-
}
|
|
1755
|
-
}
|
|
1756
|
-
let generatedVariables = "";
|
|
1757
|
-
for (const dataSource of usedDataSources.values()) {
|
|
1758
|
-
if (dataSource.type === "variable") {
|
|
1759
|
-
const name = scope.getName(dataSource.id, dataSource.name);
|
|
1760
|
-
const value = JSON.stringify(dataSource.value.value);
|
|
1761
|
-
generatedVariables += `let ${name} = ${value}
|
|
1762
|
-
`;
|
|
1763
|
-
}
|
|
1764
|
-
if (dataSource.type === "parameter") {
|
|
1765
|
-
if (dataSource.id !== page.systemDataSourceId) {
|
|
1766
|
-
continue;
|
|
1767
|
-
}
|
|
1768
|
-
const name = scope.getName(dataSource.id, dataSource.name);
|
|
1769
|
-
generatedVariables += `const ${name} = _props.system
|
|
1770
|
-
`;
|
|
1771
|
-
}
|
|
1772
|
-
}
|
|
1773
|
-
let generated = "";
|
|
1774
|
-
generated += `import { loadResource, type System } from "@webstudio-is/sdk";
|
|
1775
|
-
`;
|
|
1776
|
-
generated += `export const loadResources = async (_props: { system: System }) => {
|
|
1777
|
-
`;
|
|
1778
|
-
generated += generatedVariables;
|
|
1779
|
-
if (hasResources) {
|
|
1780
|
-
generated += `const [
|
|
1781
|
-
`;
|
|
1782
|
-
generated += generatedOutput;
|
|
1783
|
-
generated += `] = await Promise.all([
|
|
1784
|
-
`;
|
|
1785
|
-
generated += generatedLoaders;
|
|
1786
|
-
generated += `])
|
|
1787
|
-
`;
|
|
1788
|
-
}
|
|
1789
|
-
generated += `return {
|
|
1790
|
-
`;
|
|
1791
|
-
generated += generatedOutput;
|
|
1792
|
-
generated += `} as Record<string, unknown>
|
|
1793
|
-
`;
|
|
1794
|
-
generated += `}
|
|
1795
|
-
`;
|
|
1796
|
-
return generated;
|
|
1797
|
-
};
|
|
1798
|
-
|
|
1799
|
-
// src/page-meta-generator.ts
|
|
1800
|
-
import {
|
|
1801
|
-
createScope
|
|
1802
|
-
} from "@webstudio-is/sdk";
|
|
1803
|
-
var generatePageMeta = ({
|
|
1804
|
-
globalScope,
|
|
1805
|
-
page,
|
|
1806
|
-
dataSources
|
|
1807
|
-
}) => {
|
|
1808
|
-
const localScope = createScope(["system", "resources"]);
|
|
1809
|
-
const usedDataSources = /* @__PURE__ */ new Map();
|
|
1810
|
-
const titleExpression = generateExpression({
|
|
1811
|
-
expression: page.title,
|
|
1812
|
-
dataSources,
|
|
1813
|
-
usedDataSources,
|
|
1814
|
-
scope: localScope
|
|
1815
|
-
});
|
|
1816
|
-
const descriptionExpression = generateExpression({
|
|
1817
|
-
expression: page.meta.description ?? "undefined",
|
|
1818
|
-
dataSources,
|
|
1819
|
-
usedDataSources,
|
|
1820
|
-
scope: localScope
|
|
1821
|
-
});
|
|
1822
|
-
const excludePageFromSearchExpression = generateExpression({
|
|
1823
|
-
expression: page.meta.excludePageFromSearch ?? "undefined",
|
|
1824
|
-
dataSources,
|
|
1825
|
-
usedDataSources,
|
|
1826
|
-
scope: localScope
|
|
1827
|
-
});
|
|
1828
|
-
const languageExpression = generateExpression({
|
|
1829
|
-
expression: page.meta.language ?? "undefined",
|
|
1830
|
-
dataSources,
|
|
1831
|
-
usedDataSources,
|
|
1832
|
-
scope: localScope
|
|
1833
|
-
});
|
|
1834
|
-
const socialImageAssetIdExpression = JSON.stringify(
|
|
1835
|
-
page.meta.socialImageAssetId
|
|
1836
|
-
);
|
|
1837
|
-
const socialImageUrlExpression = generateExpression({
|
|
1838
|
-
expression: page.meta.socialImageUrl ?? "undefined",
|
|
1839
|
-
dataSources,
|
|
1840
|
-
usedDataSources,
|
|
1841
|
-
scope: localScope
|
|
1842
|
-
});
|
|
1843
|
-
const statusExpression = generateExpression({
|
|
1844
|
-
expression: page.meta.status ?? "undefined",
|
|
1845
|
-
dataSources,
|
|
1846
|
-
usedDataSources,
|
|
1847
|
-
scope: localScope
|
|
1848
|
-
});
|
|
1849
|
-
const redirectExpression = generateExpression({
|
|
1850
|
-
expression: page.meta.redirect ?? "undefined",
|
|
1851
|
-
dataSources,
|
|
1852
|
-
usedDataSources,
|
|
1853
|
-
scope: localScope
|
|
1854
|
-
});
|
|
1855
|
-
let customExpression = "";
|
|
1856
|
-
customExpression += `[
|
|
1857
|
-
`;
|
|
1858
|
-
for (const customMeta of page.meta.custom ?? []) {
|
|
1859
|
-
if (customMeta.property.trim().length === 0) {
|
|
1860
|
-
continue;
|
|
1861
|
-
}
|
|
1862
|
-
const propertyExpression = JSON.stringify(customMeta.property);
|
|
1863
|
-
const contentExpression = generateExpression({
|
|
1864
|
-
expression: customMeta.content,
|
|
1865
|
-
dataSources,
|
|
1866
|
-
usedDataSources,
|
|
1867
|
-
scope: localScope
|
|
1868
|
-
});
|
|
1869
|
-
customExpression += ` {
|
|
1870
|
-
`;
|
|
1871
|
-
customExpression += ` property: ${propertyExpression},
|
|
1872
|
-
`;
|
|
1873
|
-
customExpression += ` content: ${contentExpression},
|
|
1874
|
-
`;
|
|
1875
|
-
customExpression += ` },
|
|
1876
|
-
`;
|
|
1877
|
-
}
|
|
1878
|
-
customExpression += ` ]`;
|
|
1879
|
-
let generated = "";
|
|
1880
|
-
generated += `export const getPageMeta = ({
|
|
1881
|
-
`;
|
|
1882
|
-
generated += ` system,
|
|
1883
|
-
`;
|
|
1884
|
-
generated += ` resources,
|
|
1885
|
-
`;
|
|
1886
|
-
generated += `}: {
|
|
1887
|
-
`;
|
|
1888
|
-
generated += ` system: System;
|
|
1889
|
-
`;
|
|
1890
|
-
generated += ` resources: Record<string, any>;
|
|
1891
|
-
`;
|
|
1892
|
-
generated += `}): PageMeta => {
|
|
1893
|
-
`;
|
|
1894
|
-
for (const dataSource of usedDataSources.values()) {
|
|
1895
|
-
if (dataSource.type === "variable") {
|
|
1896
|
-
const valueName = localScope.getName(dataSource.id, dataSource.name);
|
|
1897
|
-
const initialValueString = JSON.stringify(dataSource.value.value);
|
|
1898
|
-
generated += ` let ${valueName} = ${initialValueString}
|
|
1899
|
-
`;
|
|
1900
|
-
continue;
|
|
1901
|
-
}
|
|
1902
|
-
if (dataSource.type === "parameter") {
|
|
1903
|
-
if (dataSource.id === page.systemDataSourceId) {
|
|
1904
|
-
const valueName = localScope.getName(dataSource.id, dataSource.name);
|
|
1905
|
-
generated += ` let ${valueName} = system
|
|
1906
|
-
`;
|
|
1907
|
-
}
|
|
1908
|
-
continue;
|
|
1909
|
-
}
|
|
1910
|
-
if (dataSource.type === "resource") {
|
|
1911
|
-
const valueName = localScope.getName(dataSource.id, dataSource.name);
|
|
1912
|
-
const resourceName = globalScope.getName(
|
|
1913
|
-
dataSource.resourceId,
|
|
1914
|
-
dataSource.name
|
|
1915
|
-
);
|
|
1916
|
-
generated += ` let ${valueName} = resources.${resourceName}
|
|
1917
|
-
`;
|
|
1918
|
-
continue;
|
|
1919
|
-
}
|
|
1920
|
-
}
|
|
1921
|
-
generated += ` return {
|
|
1922
|
-
`;
|
|
1923
|
-
generated += ` title: ${titleExpression},
|
|
1924
|
-
`;
|
|
1925
|
-
generated += ` description: ${descriptionExpression},
|
|
1926
|
-
`;
|
|
1927
|
-
generated += ` excludePageFromSearch: ${excludePageFromSearchExpression},
|
|
1928
|
-
`;
|
|
1929
|
-
generated += ` language: ${languageExpression},
|
|
1930
|
-
`;
|
|
1931
|
-
generated += ` socialImageAssetId: ${socialImageAssetIdExpression},
|
|
1932
|
-
`;
|
|
1933
|
-
generated += ` socialImageUrl: ${socialImageUrlExpression},
|
|
1934
|
-
`;
|
|
1935
|
-
generated += ` status: ${statusExpression},
|
|
1936
|
-
`;
|
|
1937
|
-
generated += ` redirect: ${redirectExpression},
|
|
1938
|
-
`;
|
|
1939
|
-
generated += ` custom: ${customExpression},
|
|
1940
|
-
`;
|
|
1941
|
-
generated += ` };
|
|
1942
|
-
`;
|
|
1943
|
-
generated += `};
|
|
1944
|
-
`;
|
|
1945
|
-
return generated;
|
|
1946
|
-
};
|
|
1947
1467
|
export {
|
|
1948
1468
|
EmbedTemplateInstance,
|
|
1949
1469
|
EmbedTemplateProp,
|
|
1950
1470
|
EmbedTemplateStyleDecl,
|
|
1951
1471
|
PropMeta,
|
|
1952
1472
|
ReactSdkContext,
|
|
1953
|
-
Root,
|
|
1954
1473
|
WsComponentMeta,
|
|
1955
1474
|
WsEmbedTemplate,
|
|
1956
1475
|
addGlobalRules,
|
|
@@ -1963,20 +1482,13 @@ export {
|
|
|
1963
1482
|
createElementsTree,
|
|
1964
1483
|
createImageValueTransformer,
|
|
1965
1484
|
createInstanceChildrenElements,
|
|
1966
|
-
decodeDataSourceVariable,
|
|
1967
1485
|
defaultStates,
|
|
1968
|
-
encodeDataSourceVariable,
|
|
1969
|
-
executeExpression,
|
|
1970
1486
|
generateCss,
|
|
1971
1487
|
generateDataFromEmbedTemplate,
|
|
1972
|
-
generateExpression,
|
|
1973
1488
|
generateJsxChildren,
|
|
1974
1489
|
generateJsxElement,
|
|
1975
|
-
generatePageMeta,
|
|
1976
1490
|
generateRemixParams,
|
|
1977
1491
|
generateRemixRoute,
|
|
1978
|
-
generateResourcesLoader,
|
|
1979
|
-
generateUtilsExport,
|
|
1980
1492
|
generateWebstudioComponent,
|
|
1981
1493
|
getClosestInstance,
|
|
1982
1494
|
getIndexWithinAncestorFromComponentProps,
|
|
@@ -1986,7 +1498,6 @@ export {
|
|
|
1986
1498
|
getStyleRules,
|
|
1987
1499
|
idAttribute,
|
|
1988
1500
|
indexAttribute,
|
|
1989
|
-
isLiteralExpression,
|
|
1990
1501
|
namespaceMeta,
|
|
1991
1502
|
normalizeProps,
|
|
1992
1503
|
portalComponent,
|
|
@@ -1994,6 +1505,5 @@ export {
|
|
|
1994
1505
|
showAttribute,
|
|
1995
1506
|
stateCategories,
|
|
1996
1507
|
textContentAttribute,
|
|
1997
|
-
useResource
|
|
1998
|
-
validateExpression
|
|
1508
|
+
useResource
|
|
1999
1509
|
};
|