@webstudio-is/react-sdk 0.126.0 → 0.128.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 +53 -85
- package/lib/types/expression.d.ts +1 -128
- package/lib/types/index.d.ts +1 -1
- package/package.json +6 -6
package/lib/index.js
CHANGED
|
@@ -802,82 +802,6 @@ var generateExpression = ({
|
|
|
802
802
|
}
|
|
803
803
|
});
|
|
804
804
|
};
|
|
805
|
-
var generateDataSources = ({
|
|
806
|
-
scope,
|
|
807
|
-
typed = false,
|
|
808
|
-
dataSources,
|
|
809
|
-
props
|
|
810
|
-
}) => {
|
|
811
|
-
const variables = /* @__PURE__ */ new Map();
|
|
812
|
-
let body = "";
|
|
813
|
-
const output = /* @__PURE__ */ new Map();
|
|
814
|
-
for (const dataSource of dataSources.values()) {
|
|
815
|
-
if (dataSource.type === "variable") {
|
|
816
|
-
const valueName = scope.getName(dataSource.id, dataSource.name);
|
|
817
|
-
const setterName = scope.getName(
|
|
818
|
-
`set$${dataSource.id}`,
|
|
819
|
-
`set$${dataSource.name}`
|
|
820
|
-
);
|
|
821
|
-
const initialValue = dataSource.value.value;
|
|
822
|
-
output.set(dataSource.id, valueName);
|
|
823
|
-
variables.set(dataSource.id, { valueName, setterName, initialValue });
|
|
824
|
-
}
|
|
825
|
-
}
|
|
826
|
-
for (const prop of props.values()) {
|
|
827
|
-
if (prop.type === "action") {
|
|
828
|
-
const name = scope.getName(prop.id, prop.name);
|
|
829
|
-
output.set(prop.id, name);
|
|
830
|
-
const setters = /* @__PURE__ */ new Set();
|
|
831
|
-
let args = [];
|
|
832
|
-
let newCode = "";
|
|
833
|
-
for (const value of prop.value) {
|
|
834
|
-
args = value.args;
|
|
835
|
-
newCode += validateExpression(value.code, {
|
|
836
|
-
optional: true,
|
|
837
|
-
effectful: true,
|
|
838
|
-
transformIdentifier: (identifier, assignee) => {
|
|
839
|
-
if (args?.includes(identifier)) {
|
|
840
|
-
return identifier;
|
|
841
|
-
}
|
|
842
|
-
const depId = decodeDataSourceVariable(identifier);
|
|
843
|
-
const dep = depId ? dataSources.get(depId) : void 0;
|
|
844
|
-
if (dep) {
|
|
845
|
-
const name2 = scope.getName(dep.id, dep.name);
|
|
846
|
-
if (assignee) {
|
|
847
|
-
setters.add(dep.id);
|
|
848
|
-
}
|
|
849
|
-
return name2;
|
|
850
|
-
}
|
|
851
|
-
console.error(`Unknown dependency "${identifier}"`);
|
|
852
|
-
return identifier;
|
|
853
|
-
}
|
|
854
|
-
});
|
|
855
|
-
newCode += `
|
|
856
|
-
`;
|
|
857
|
-
}
|
|
858
|
-
if (typed) {
|
|
859
|
-
args = args.map((arg) => `${arg}: any`);
|
|
860
|
-
}
|
|
861
|
-
body += `let ${name} = (${args.join(", ")}) => {
|
|
862
|
-
`;
|
|
863
|
-
body += newCode;
|
|
864
|
-
for (const dataSourceId of setters.values()) {
|
|
865
|
-
const variable = variables.get(dataSourceId);
|
|
866
|
-
if (variable) {
|
|
867
|
-
body += `${variable.setterName}(${variable.valueName})
|
|
868
|
-
`;
|
|
869
|
-
}
|
|
870
|
-
}
|
|
871
|
-
body += `}
|
|
872
|
-
`;
|
|
873
|
-
}
|
|
874
|
-
}
|
|
875
|
-
return {
|
|
876
|
-
variables,
|
|
877
|
-
body,
|
|
878
|
-
output
|
|
879
|
-
};
|
|
880
|
-
};
|
|
881
805
|
|
|
882
806
|
// src/embed-template.ts
|
|
883
807
|
var EmbedTemplateText = z2.object({
|
|
@@ -1399,6 +1323,58 @@ var generateUtilsExport = (siteData) => {
|
|
|
1399
1323
|
|
|
1400
1324
|
// src/component-generator.ts
|
|
1401
1325
|
import { parseComponentName } from "@webstudio-is/sdk";
|
|
1326
|
+
var generateAction = ({
|
|
1327
|
+
scope,
|
|
1328
|
+
prop,
|
|
1329
|
+
dataSources
|
|
1330
|
+
}) => {
|
|
1331
|
+
const setters = /* @__PURE__ */ new Set();
|
|
1332
|
+
let args = [];
|
|
1333
|
+
let assignersCode = "";
|
|
1334
|
+
for (const value of prop.value) {
|
|
1335
|
+
args = value.args;
|
|
1336
|
+
assignersCode += validateExpression(value.code, {
|
|
1337
|
+
optional: true,
|
|
1338
|
+
effectful: true,
|
|
1339
|
+
transformIdentifier: (identifier, assignee) => {
|
|
1340
|
+
if (args?.includes(identifier)) {
|
|
1341
|
+
return identifier;
|
|
1342
|
+
}
|
|
1343
|
+
const depId = decodeDataSourceVariable(identifier);
|
|
1344
|
+
const dep = depId ? dataSources.get(depId) : void 0;
|
|
1345
|
+
if (dep) {
|
|
1346
|
+
if (assignee) {
|
|
1347
|
+
setters.add(dep);
|
|
1348
|
+
}
|
|
1349
|
+
const valueName = scope.getName(dep.id, dep.name);
|
|
1350
|
+
return valueName;
|
|
1351
|
+
}
|
|
1352
|
+
console.error(`Unknown dependency "${identifier}"`);
|
|
1353
|
+
return identifier;
|
|
1354
|
+
}
|
|
1355
|
+
});
|
|
1356
|
+
assignersCode += `
|
|
1357
|
+
`;
|
|
1358
|
+
}
|
|
1359
|
+
let settersCode = "";
|
|
1360
|
+
for (const dataSource of setters) {
|
|
1361
|
+
const valueName = scope.getName(dataSource.id, dataSource.name);
|
|
1362
|
+
const setterName = scope.getName(
|
|
1363
|
+
`set$${dataSource.id}`,
|
|
1364
|
+
`set$${dataSource.name}`
|
|
1365
|
+
);
|
|
1366
|
+
settersCode += `${setterName}(${valueName})
|
|
1367
|
+
`;
|
|
1368
|
+
}
|
|
1369
|
+
const argsList = args.map((arg) => `${arg}: any`).join(", ");
|
|
1370
|
+
let generated = "";
|
|
1371
|
+
generated += `(${argsList}) => {
|
|
1372
|
+
`;
|
|
1373
|
+
generated += assignersCode;
|
|
1374
|
+
generated += settersCode;
|
|
1375
|
+
generated += `}`;
|
|
1376
|
+
return generated;
|
|
1377
|
+
};
|
|
1402
1378
|
var generatePropValue = ({
|
|
1403
1379
|
scope,
|
|
1404
1380
|
prop,
|
|
@@ -1425,7 +1401,7 @@ var generatePropValue = ({
|
|
|
1425
1401
|
});
|
|
1426
1402
|
}
|
|
1427
1403
|
if (prop.type === "action") {
|
|
1428
|
-
return scope
|
|
1404
|
+
return generateAction({ scope, prop, dataSources });
|
|
1429
1405
|
}
|
|
1430
1406
|
prop;
|
|
1431
1407
|
};
|
|
@@ -1601,12 +1577,6 @@ var generatePageComponent = ({
|
|
|
1601
1577
|
if (instance === void 0) {
|
|
1602
1578
|
return "";
|
|
1603
1579
|
}
|
|
1604
|
-
const { body: dataSourcesBody } = generateDataSources({
|
|
1605
|
-
typed: true,
|
|
1606
|
-
scope,
|
|
1607
|
-
dataSources,
|
|
1608
|
-
props
|
|
1609
|
-
});
|
|
1610
1580
|
let generatedDataSources = "";
|
|
1611
1581
|
for (const dataSource of dataSources.values()) {
|
|
1612
1582
|
if (dataSource.type === "variable") {
|
|
@@ -1638,7 +1608,6 @@ var generatePageComponent = ({
|
|
|
1638
1608
|
`;
|
|
1639
1609
|
}
|
|
1640
1610
|
}
|
|
1641
|
-
generatedDataSources += dataSourcesBody;
|
|
1642
1611
|
const generatedJsx = generateJsxElement({
|
|
1643
1612
|
scope,
|
|
1644
1613
|
instance,
|
|
@@ -1797,7 +1766,6 @@ export {
|
|
|
1797
1766
|
encodeDataSourceVariable,
|
|
1798
1767
|
generateCss,
|
|
1799
1768
|
generateDataFromEmbedTemplate,
|
|
1800
|
-
generateDataSources,
|
|
1801
1769
|
generateJsxChildren,
|
|
1802
1770
|
generateJsxElement,
|
|
1803
1771
|
generatePageComponent,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { DataSources,
|
|
1
|
+
import type { DataSources, Scope } from "@webstudio-is/sdk";
|
|
2
2
|
type TransformIdentifier = (id: string, assignee: boolean) => string;
|
|
3
3
|
export declare const validateExpression: (code: string, options?: {
|
|
4
4
|
/**
|
|
@@ -51,131 +51,4 @@ export declare const generateExpression: ({ expression, dataSources, scope, }: {
|
|
|
51
51
|
}>;
|
|
52
52
|
scope: Scope;
|
|
53
53
|
}) => string;
|
|
54
|
-
type VariableName = string;
|
|
55
|
-
export declare const generateDataSources: ({ scope, typed, dataSources, props, }: {
|
|
56
|
-
scope: Scope;
|
|
57
|
-
typed?: boolean | undefined;
|
|
58
|
-
dataSources: Map<string, {
|
|
59
|
-
value: {
|
|
60
|
-
value: number;
|
|
61
|
-
type: "number";
|
|
62
|
-
} | {
|
|
63
|
-
value: string;
|
|
64
|
-
type: "string";
|
|
65
|
-
} | {
|
|
66
|
-
value: boolean;
|
|
67
|
-
type: "boolean";
|
|
68
|
-
} | {
|
|
69
|
-
value: string[];
|
|
70
|
-
type: "string[]";
|
|
71
|
-
} | {
|
|
72
|
-
type: "json";
|
|
73
|
-
value?: unknown;
|
|
74
|
-
};
|
|
75
|
-
type: "variable";
|
|
76
|
-
name: string;
|
|
77
|
-
id: string;
|
|
78
|
-
scopeInstanceId?: string | undefined;
|
|
79
|
-
} | {
|
|
80
|
-
type: "parameter";
|
|
81
|
-
name: string;
|
|
82
|
-
id: string;
|
|
83
|
-
scopeInstanceId?: string | undefined;
|
|
84
|
-
} | {
|
|
85
|
-
type: "resource";
|
|
86
|
-
name: string;
|
|
87
|
-
id: string;
|
|
88
|
-
resourceId: string;
|
|
89
|
-
scopeInstanceId?: string | undefined;
|
|
90
|
-
}>;
|
|
91
|
-
props: Map<string, {
|
|
92
|
-
value: number;
|
|
93
|
-
type: "number";
|
|
94
|
-
name: string;
|
|
95
|
-
id: string;
|
|
96
|
-
instanceId: string;
|
|
97
|
-
required?: boolean | undefined;
|
|
98
|
-
} | {
|
|
99
|
-
value: string;
|
|
100
|
-
type: "string";
|
|
101
|
-
name: string;
|
|
102
|
-
id: string;
|
|
103
|
-
instanceId: string;
|
|
104
|
-
required?: boolean | undefined;
|
|
105
|
-
} | {
|
|
106
|
-
value: boolean;
|
|
107
|
-
type: "boolean";
|
|
108
|
-
name: string;
|
|
109
|
-
id: string;
|
|
110
|
-
instanceId: string;
|
|
111
|
-
required?: boolean | undefined;
|
|
112
|
-
} | {
|
|
113
|
-
type: "json";
|
|
114
|
-
name: string;
|
|
115
|
-
id: string;
|
|
116
|
-
instanceId: string;
|
|
117
|
-
value?: unknown;
|
|
118
|
-
required?: boolean | undefined;
|
|
119
|
-
} | {
|
|
120
|
-
value: string;
|
|
121
|
-
type: "asset";
|
|
122
|
-
name: string;
|
|
123
|
-
id: string;
|
|
124
|
-
instanceId: string;
|
|
125
|
-
required?: boolean | undefined;
|
|
126
|
-
} | {
|
|
127
|
-
value: (string | {
|
|
128
|
-
instanceId: string;
|
|
129
|
-
pageId: string;
|
|
130
|
-
}) & (string | {
|
|
131
|
-
instanceId: string;
|
|
132
|
-
pageId: string;
|
|
133
|
-
} | undefined);
|
|
134
|
-
type: "page";
|
|
135
|
-
name: string;
|
|
136
|
-
id: string;
|
|
137
|
-
instanceId: string;
|
|
138
|
-
required?: boolean | undefined;
|
|
139
|
-
} | {
|
|
140
|
-
value: string[];
|
|
141
|
-
type: "string[]";
|
|
142
|
-
name: string;
|
|
143
|
-
id: string;
|
|
144
|
-
instanceId: string;
|
|
145
|
-
required?: boolean | undefined;
|
|
146
|
-
} | {
|
|
147
|
-
value: string;
|
|
148
|
-
type: "parameter";
|
|
149
|
-
name: string;
|
|
150
|
-
id: string;
|
|
151
|
-
instanceId: string;
|
|
152
|
-
required?: boolean | undefined;
|
|
153
|
-
} | {
|
|
154
|
-
value: string;
|
|
155
|
-
type: "expression";
|
|
156
|
-
name: string;
|
|
157
|
-
id: string;
|
|
158
|
-
instanceId: string;
|
|
159
|
-
required?: boolean | undefined;
|
|
160
|
-
} | {
|
|
161
|
-
value: {
|
|
162
|
-
code: string;
|
|
163
|
-
type: "execute";
|
|
164
|
-
args: string[];
|
|
165
|
-
}[];
|
|
166
|
-
type: "action";
|
|
167
|
-
name: string;
|
|
168
|
-
id: string;
|
|
169
|
-
instanceId: string;
|
|
170
|
-
required?: boolean | undefined;
|
|
171
|
-
}>;
|
|
172
|
-
}) => {
|
|
173
|
-
variables: Map<string, {
|
|
174
|
-
valueName: VariableName;
|
|
175
|
-
setterName: VariableName;
|
|
176
|
-
initialValue: unknown;
|
|
177
|
-
}>;
|
|
178
|
-
body: string;
|
|
179
|
-
output: Map<string, string>;
|
|
180
|
-
};
|
|
181
54
|
export {};
|
package/lib/types/index.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ export { type WsComponentPropsMeta, type ComponentState, type PresetStyle, WsCom
|
|
|
9
9
|
export * from "./embed-template";
|
|
10
10
|
export * from "./props";
|
|
11
11
|
export * from "./context";
|
|
12
|
-
export { validateExpression, encodeDataSourceVariable, decodeDataSourceVariable,
|
|
12
|
+
export { validateExpression, encodeDataSourceVariable, decodeDataSourceVariable, } from "./expression";
|
|
13
13
|
export { getIndexesWithinAncestors } from "./instance-utils";
|
|
14
14
|
export * from "./hook";
|
|
15
15
|
export { generateUtilsExport } from "./generator";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webstudio-is/react-sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.128.0",
|
|
4
4
|
"description": "Webstudio JavaScript / TypeScript API",
|
|
5
5
|
"author": "Webstudio <github@webstudio.is>",
|
|
6
6
|
"homepage": "https://webstudio.is",
|
|
@@ -33,11 +33,11 @@
|
|
|
33
33
|
"jsep": "^1.3.8",
|
|
34
34
|
"nanoid": "^5.0.1",
|
|
35
35
|
"title-case": "^4.1.0",
|
|
36
|
-
"@webstudio-is/fonts": "0.
|
|
37
|
-
"@webstudio-is/
|
|
38
|
-
"@webstudio-is/
|
|
39
|
-
"@webstudio-is/
|
|
40
|
-
"@webstudio-is/sdk": "0.
|
|
36
|
+
"@webstudio-is/fonts": "0.128.0",
|
|
37
|
+
"@webstudio-is/css-engine": "0.128.0",
|
|
38
|
+
"@webstudio-is/icons": "^0.128.0",
|
|
39
|
+
"@webstudio-is/image": "0.128.0",
|
|
40
|
+
"@webstudio-is/sdk": "0.128.0"
|
|
41
41
|
},
|
|
42
42
|
"exports": {
|
|
43
43
|
".": {
|