@webiny/sdk-frontend 0.0.0-unstable.9f53ea597d → 6.6.0-alpha.2
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/ComponentsSdk.d.ts +39 -0
- package/ComponentsSdk.js +146 -0
- package/ComponentsSdk.js.map +1 -0
- package/FrontendSdk.d.ts +2 -0
- package/FrontendSdk.js +11 -1
- package/FrontendSdk.js.map +1 -1
- package/index.d.ts +4 -2
- package/index.js +3 -2
- package/package.json +7 -6
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { WebinyConfig } from "@webiny/sdk";
|
|
2
|
+
import { Result, HttpError, ApiError, NetworkError } from "@webiny/sdk";
|
|
3
|
+
export interface RemoteComponentEntry {
|
|
4
|
+
id: string;
|
|
5
|
+
name: string;
|
|
6
|
+
label: string;
|
|
7
|
+
bundledJs: string;
|
|
8
|
+
bundledJsSha256: string;
|
|
9
|
+
bundledCss: string;
|
|
10
|
+
bundledCssSha256: string;
|
|
11
|
+
sdkVersion: string;
|
|
12
|
+
status: string;
|
|
13
|
+
}
|
|
14
|
+
export interface LoadComponentsOptions {
|
|
15
|
+
fetchOptions?: RequestInit;
|
|
16
|
+
}
|
|
17
|
+
export interface HydrateComponentDependencies {
|
|
18
|
+
sdk: unknown;
|
|
19
|
+
React: unknown;
|
|
20
|
+
}
|
|
21
|
+
export interface HydrateComponentOptions {
|
|
22
|
+
tenantId?: string;
|
|
23
|
+
locale?: string;
|
|
24
|
+
mode?: "server" | "browser";
|
|
25
|
+
}
|
|
26
|
+
export interface HydratedComponent {
|
|
27
|
+
component: any;
|
|
28
|
+
manifest: any;
|
|
29
|
+
css: string;
|
|
30
|
+
scopeClassName: string;
|
|
31
|
+
}
|
|
32
|
+
export declare class ComponentsSdk {
|
|
33
|
+
private config;
|
|
34
|
+
private fetchFn;
|
|
35
|
+
constructor(config: WebinyConfig);
|
|
36
|
+
loadComponents(options?: LoadComponentsOptions): Promise<Result<RemoteComponentEntry[], HttpError | ApiError | NetworkError>>;
|
|
37
|
+
hydrateComponent(entry: RemoteComponentEntry, dependencies: HydrateComponentDependencies, options?: HydrateComponentOptions): HydratedComponent | null;
|
|
38
|
+
scopeCss(rawCss: string, componentName: string): string;
|
|
39
|
+
}
|
package/ComponentsSdk.js
ADDED
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { ApiError, HttpError, NetworkError, Result } from "@webiny/sdk";
|
|
2
|
+
import * as __rspack_external_css_tree_6b21abdd from "css-tree";
|
|
3
|
+
const LIST_REMOTE_COMPONENTS = `
|
|
4
|
+
query ListRemoteComponents {
|
|
5
|
+
remoteComponents {
|
|
6
|
+
listRemoteComponents {
|
|
7
|
+
data {
|
|
8
|
+
id
|
|
9
|
+
name
|
|
10
|
+
label
|
|
11
|
+
bundledJs
|
|
12
|
+
bundledJsSha256
|
|
13
|
+
bundledCss
|
|
14
|
+
bundledCssSha256
|
|
15
|
+
sdkVersion
|
|
16
|
+
status
|
|
17
|
+
}
|
|
18
|
+
error {
|
|
19
|
+
code
|
|
20
|
+
message
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
`;
|
|
26
|
+
class ComponentsSdk {
|
|
27
|
+
constructor(config){
|
|
28
|
+
this.config = config;
|
|
29
|
+
this.fetchFn = config.fetch ?? fetch;
|
|
30
|
+
}
|
|
31
|
+
async loadComponents(options) {
|
|
32
|
+
const url = `${this.config.endpoint}/graphql`;
|
|
33
|
+
const headers = {
|
|
34
|
+
"Content-Type": "application/json",
|
|
35
|
+
"x-tenant": this.config.tenant ?? "root",
|
|
36
|
+
...this.config.headers
|
|
37
|
+
};
|
|
38
|
+
if (this.config.token && !headers.Authorization) {
|
|
39
|
+
const token = "function" == typeof this.config.token ? await this.config.token() : this.config.token;
|
|
40
|
+
headers.Authorization = `Bearer ${token}`;
|
|
41
|
+
}
|
|
42
|
+
let response;
|
|
43
|
+
try {
|
|
44
|
+
response = await this.fetchFn(url, {
|
|
45
|
+
method: "POST",
|
|
46
|
+
headers,
|
|
47
|
+
body: JSON.stringify({
|
|
48
|
+
query: LIST_REMOTE_COMPONENTS
|
|
49
|
+
}),
|
|
50
|
+
...options?.fetchOptions
|
|
51
|
+
});
|
|
52
|
+
} catch (error) {
|
|
53
|
+
return Result.fail(new NetworkError(error instanceof Error ? error.message : "Network request failed"));
|
|
54
|
+
}
|
|
55
|
+
if (!response.ok) return Result.fail(new HttpError(response.status, `HTTP error! status: ${response.status}`));
|
|
56
|
+
let json;
|
|
57
|
+
try {
|
|
58
|
+
json = await response.json();
|
|
59
|
+
} catch {
|
|
60
|
+
return Result.fail(new NetworkError("Failed to parse response JSON"));
|
|
61
|
+
}
|
|
62
|
+
if (json.errors) {
|
|
63
|
+
const error = json.errors[0];
|
|
64
|
+
return Result.fail(new ApiError(error?.message || "GraphQL error"));
|
|
65
|
+
}
|
|
66
|
+
const envelope = json.data?.remoteComponents?.listRemoteComponents;
|
|
67
|
+
if (!envelope) return Result.fail(new ApiError("Unexpected response — is the remote-components API extension deployed?"));
|
|
68
|
+
if (envelope.error) return Result.fail(new ApiError(envelope.error.message, envelope.error.code));
|
|
69
|
+
return Result.ok(envelope.data ?? []);
|
|
70
|
+
}
|
|
71
|
+
hydrateComponent(entry, dependencies, options) {
|
|
72
|
+
const runtimeSdk = {
|
|
73
|
+
version: "1",
|
|
74
|
+
dependencies: {
|
|
75
|
+
sdk: dependencies.sdk,
|
|
76
|
+
React: dependencies.React
|
|
77
|
+
},
|
|
78
|
+
environment: {
|
|
79
|
+
tenantId: options?.tenantId ?? this.config.tenant ?? "root",
|
|
80
|
+
locale: options?.locale ?? "en-US",
|
|
81
|
+
mode: options?.mode ?? "browser"
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
try {
|
|
85
|
+
const fn = new Function(`
|
|
86
|
+
var __remoteComponent__;
|
|
87
|
+
${entry.bundledJs}
|
|
88
|
+
return __remoteComponent__;
|
|
89
|
+
`);
|
|
90
|
+
const mod = fn();
|
|
91
|
+
const component = mod.createComponent(runtimeSdk);
|
|
92
|
+
if (!component) return null;
|
|
93
|
+
const scopeClass = toScopeClassName(entry.name);
|
|
94
|
+
const R = dependencies.React;
|
|
95
|
+
const OriginalComponent = component.component;
|
|
96
|
+
const ScopedComponent = (props)=>R.createElement("div", {
|
|
97
|
+
className: scopeClass
|
|
98
|
+
}, R.createElement(OriginalComponent, props));
|
|
99
|
+
ScopedComponent.displayName = `RemoteScope(${scopeClass})`;
|
|
100
|
+
return {
|
|
101
|
+
component: ScopedComponent,
|
|
102
|
+
manifest: component.manifest,
|
|
103
|
+
css: entry.bundledCss ?? "",
|
|
104
|
+
scopeClassName: scopeClass
|
|
105
|
+
};
|
|
106
|
+
} catch (error) {
|
|
107
|
+
console.error(`[ComponentsSdk] Failed to hydrate component "${entry.name}":`, error);
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
scopeCss(rawCss, componentName) {
|
|
112
|
+
return scopeCss(rawCss, toScopeClassName(componentName));
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
function toScopeClassName(name) {
|
|
116
|
+
return `rc-${name.replace(/\//g, "-").toLowerCase()}`;
|
|
117
|
+
}
|
|
118
|
+
function scopeCss(rawCss, scopeName) {
|
|
119
|
+
if (!rawCss) return "";
|
|
120
|
+
try {
|
|
121
|
+
const ast = __rspack_external_css_tree_6b21abdd.parse(rawCss);
|
|
122
|
+
__rspack_external_css_tree_6b21abdd.walk(ast, {
|
|
123
|
+
visit: "Rule",
|
|
124
|
+
enter (node) {
|
|
125
|
+
const selectorList = node.prelude;
|
|
126
|
+
if (!selectorList || "SelectorList" !== selectorList.type) return;
|
|
127
|
+
const newSelectors = new __rspack_external_css_tree_6b21abdd.List();
|
|
128
|
+
selectorList.children.forEach((selector)=>{
|
|
129
|
+
const raw = __rspack_external_css_tree_6b21abdd.generate(selector).trim();
|
|
130
|
+
if (raw.startsWith(":root")) return void newSelectors.appendData(selector);
|
|
131
|
+
const scoped = __rspack_external_css_tree_6b21abdd.parse(`.${scopeName} ${raw}`, {
|
|
132
|
+
context: "selector"
|
|
133
|
+
});
|
|
134
|
+
newSelectors.appendData(scoped);
|
|
135
|
+
});
|
|
136
|
+
selectorList.children = newSelectors;
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
return __rspack_external_css_tree_6b21abdd.generate(ast);
|
|
140
|
+
} catch {
|
|
141
|
+
return rawCss;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
export { ComponentsSdk };
|
|
145
|
+
|
|
146
|
+
//# sourceMappingURL=ComponentsSdk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ComponentsSdk.js","sources":["../src/ComponentsSdk.ts"],"sourcesContent":["import type { WebinyConfig } from \"@webiny/sdk\";\nimport { Result, HttpError, ApiError, NetworkError } from \"@webiny/sdk\";\n// @ts-expect-error No types available\nimport * as csstree from \"css-tree\";\n\nexport interface RemoteComponentEntry {\n id: string;\n name: string;\n label: string;\n bundledJs: string;\n bundledJsSha256: string;\n bundledCss: string;\n bundledCssSha256: string;\n sdkVersion: string;\n status: string;\n}\n\nexport interface LoadComponentsOptions {\n fetchOptions?: RequestInit;\n}\n\nexport interface HydrateComponentDependencies {\n sdk: unknown;\n React: unknown;\n}\n\nexport interface HydrateComponentOptions {\n tenantId?: string;\n locale?: string;\n mode?: \"server\" | \"browser\";\n}\n\nexport interface HydratedComponent {\n component: any;\n manifest: any;\n css: string;\n scopeClassName: string;\n}\n\nconst LIST_REMOTE_COMPONENTS = /* GraphQL */ `\n query ListRemoteComponents {\n remoteComponents {\n listRemoteComponents {\n data {\n id\n name\n label\n bundledJs\n bundledJsSha256\n bundledCss\n bundledCssSha256\n sdkVersion\n status\n }\n error {\n code\n message\n }\n }\n }\n }\n`;\n\ninterface ListRemoteComponentsResponse {\n remoteComponents: {\n listRemoteComponents: {\n data: RemoteComponentEntry[] | null;\n error: { code: string; message: string } | null;\n };\n };\n}\n\nexport class ComponentsSdk {\n private config: WebinyConfig;\n private fetchFn: typeof fetch;\n\n constructor(config: WebinyConfig) {\n this.config = config;\n this.fetchFn = config.fetch ?? fetch;\n }\n\n async loadComponents(\n options?: LoadComponentsOptions\n ): Promise<Result<RemoteComponentEntry[], HttpError | ApiError | NetworkError>> {\n const url = `${this.config.endpoint}/graphql`;\n\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n \"x-tenant\": this.config.tenant ?? \"root\",\n ...this.config.headers\n };\n\n if (this.config.token && !headers.Authorization) {\n const token =\n typeof this.config.token === \"function\"\n ? await this.config.token()\n : this.config.token;\n headers.Authorization = `Bearer ${token}`;\n }\n\n let response: Response;\n try {\n response = await this.fetchFn(url, {\n method: \"POST\",\n headers,\n body: JSON.stringify({ query: LIST_REMOTE_COMPONENTS }),\n ...options?.fetchOptions\n });\n } catch (error) {\n return Result.fail(\n new NetworkError(error instanceof Error ? error.message : \"Network request failed\")\n );\n }\n\n if (!response.ok) {\n return Result.fail(\n new HttpError(response.status, `HTTP error! status: ${response.status}`)\n );\n }\n\n let json: { data?: ListRemoteComponentsResponse; errors?: Array<{ message: string }> };\n try {\n json = await response.json();\n } catch {\n return Result.fail(new NetworkError(\"Failed to parse response JSON\"));\n }\n\n if (json.errors) {\n const error = json.errors[0];\n return Result.fail(new ApiError(error?.message || \"GraphQL error\"));\n }\n\n const envelope = json.data?.remoteComponents?.listRemoteComponents;\n if (!envelope) {\n return Result.fail(\n new ApiError(\n \"Unexpected response — is the remote-components API extension deployed?\"\n )\n );\n }\n\n if (envelope.error) {\n return Result.fail(new ApiError(envelope.error.message, envelope.error.code));\n }\n\n return Result.ok(envelope.data ?? []);\n }\n\n hydrateComponent(\n entry: RemoteComponentEntry,\n dependencies: HydrateComponentDependencies,\n options?: HydrateComponentOptions\n ): HydratedComponent | null {\n const runtimeSdk = {\n version: \"1\" as const,\n dependencies: {\n sdk: dependencies.sdk,\n React: dependencies.React\n },\n environment: {\n tenantId: options?.tenantId ?? this.config.tenant ?? \"root\",\n locale: options?.locale ?? \"en-US\",\n mode: options?.mode ?? \"browser\"\n }\n };\n\n try {\n const fn = new Function(`\n var __remoteComponent__;\n ${entry.bundledJs}\n return __remoteComponent__;\n `);\n const mod = fn();\n const component = mod.createComponent(runtimeSdk);\n if (!component) {\n return null;\n }\n\n const scopeClass = toScopeClassName(entry.name);\n const R = dependencies.React as typeof import(\"react\");\n const OriginalComponent = component.component;\n\n const ScopedComponent = (props: Record<string, unknown>) =>\n R.createElement(\n \"div\",\n { className: scopeClass },\n R.createElement(OriginalComponent, props)\n );\n ScopedComponent.displayName = `RemoteScope(${scopeClass})`;\n\n return {\n component: ScopedComponent,\n manifest: component.manifest,\n css: entry.bundledCss ?? \"\",\n scopeClassName: scopeClass\n };\n } catch (error) {\n console.error(`[ComponentsSdk] Failed to hydrate component \"${entry.name}\":`, error);\n return null;\n }\n }\n\n scopeCss(rawCss: string, componentName: string): string {\n return scopeCss(rawCss, toScopeClassName(componentName));\n }\n}\n\nfunction toScopeClassName(name: string): string {\n return `rc-${name.replace(/\\//g, \"-\").toLowerCase()}`;\n}\n\nfunction scopeCss(rawCss: string, scopeName: string): string {\n if (!rawCss) {\n return \"\";\n }\n\n try {\n const ast = csstree.parse(rawCss);\n\n csstree.walk(ast, {\n visit: \"Rule\",\n enter(node: any) {\n const selectorList = node.prelude;\n if (!selectorList || selectorList.type !== \"SelectorList\") {\n return;\n }\n\n const newSelectors = new csstree.List();\n\n selectorList.children.forEach((selector: any) => {\n const raw = csstree.generate(selector).trim();\n if (raw.startsWith(\":root\")) {\n newSelectors.appendData(selector);\n return;\n }\n\n const scoped = csstree.parse(`.${scopeName} ${raw}`, {\n context: \"selector\"\n });\n newSelectors.appendData(scoped);\n });\n\n selectorList.children = newSelectors;\n }\n });\n\n return csstree.generate(ast);\n } catch {\n return rawCss;\n }\n}\n"],"names":["LIST_REMOTE_COMPONENTS","ComponentsSdk","config","fetch","options","url","headers","token","response","JSON","error","Result","NetworkError","Error","HttpError","json","ApiError","envelope","entry","dependencies","runtimeSdk","fn","Function","mod","component","scopeClass","toScopeClassName","R","OriginalComponent","ScopedComponent","props","console","rawCss","componentName","scopeCss","name","scopeName","ast","csstree","node","selectorList","newSelectors","selector","raw","scoped"],"mappings":"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"}
|
package/FrontendSdk.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { LanguagesSdk, FileManagerSdk, TenantManagerSdk, TasksSdk, WebhooksSdk } from "@webiny/sdk";
|
|
2
2
|
import { CmsSdk } from "./CmsSdk.js";
|
|
3
3
|
import { WbSdk } from "./WbSdk.js";
|
|
4
|
+
import { ComponentsSdk } from "./ComponentsSdk.js";
|
|
4
5
|
import type { ContentSdkConfig } from "./types.js";
|
|
5
6
|
export declare class FrontendSdk {
|
|
6
7
|
private sdk?;
|
|
@@ -12,6 +13,7 @@ export declare class FrontendSdk {
|
|
|
12
13
|
get tenantManager(): TenantManagerSdk;
|
|
13
14
|
get tasks(): TasksSdk;
|
|
14
15
|
get webhooks(): WebhooksSdk;
|
|
16
|
+
get components(): ComponentsSdk;
|
|
15
17
|
init(config: ContentSdkConfig): void;
|
|
16
18
|
isEditing(): boolean;
|
|
17
19
|
isServer(): boolean;
|
package/FrontendSdk.js
CHANGED
|
@@ -3,6 +3,7 @@ import { contentSdk, environment } from "@webiny/cms-sdk";
|
|
|
3
3
|
import { contentSdk as website_builder_sdk_contentSdk } from "@webiny/website-builder-sdk";
|
|
4
4
|
import { CmsSdk } from "./CmsSdk.js";
|
|
5
5
|
import { WbSdk } from "./WbSdk.js";
|
|
6
|
+
import { ComponentsSdk } from "./ComponentsSdk.js";
|
|
6
7
|
class FrontendSdk {
|
|
7
8
|
get initialized() {
|
|
8
9
|
if (!this.sdk) throw new Error("SDK is not initialized. Call sdk.init() first.");
|
|
@@ -29,6 +30,9 @@ class FrontendSdk {
|
|
|
29
30
|
get webhooks() {
|
|
30
31
|
return this.initialized.webiny.webhooks;
|
|
31
32
|
}
|
|
33
|
+
get components() {
|
|
34
|
+
return this.initialized.components;
|
|
35
|
+
}
|
|
32
36
|
init(config) {
|
|
33
37
|
const webiny = new Webiny({
|
|
34
38
|
endpoint: config.endpoint,
|
|
@@ -39,7 +43,13 @@ class FrontendSdk {
|
|
|
39
43
|
this.sdk = {
|
|
40
44
|
webiny,
|
|
41
45
|
cms: new CmsSdk(webiny),
|
|
42
|
-
wb: new WbSdk()
|
|
46
|
+
wb: new WbSdk(),
|
|
47
|
+
components: new ComponentsSdk({
|
|
48
|
+
endpoint: config.endpoint,
|
|
49
|
+
token: config.token,
|
|
50
|
+
tenant: config.tenant || "root",
|
|
51
|
+
fetch: config.fetch
|
|
52
|
+
})
|
|
43
53
|
};
|
|
44
54
|
contentSdk.init({
|
|
45
55
|
apiHost: config.endpoint,
|
package/FrontendSdk.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FrontendSdk.js","sources":["../src/FrontendSdk.ts"],"sourcesContent":["import { Webiny } from \"@webiny/sdk\";\nimport type {\n LanguagesSdk,\n FileManagerSdk,\n TenantManagerSdk,\n TasksSdk,\n WebhooksSdk\n} from \"@webiny/sdk\";\nimport { contentSdk as cmsContentSdk, environment as cmsEnvironment } from \"@webiny/cms-sdk\";\nimport { contentSdk as wbContentSdk } from \"@webiny/website-builder-sdk\";\nimport { CmsSdk } from \"./CmsSdk.js\";\nimport { WbSdk } from \"./WbSdk.js\";\nimport type { ContentSdkConfig } from \"./types.js\";\n\ninterface InitializedSdk {\n webiny: Webiny;\n cms: CmsSdk;\n wb: WbSdk;\n}\n\nexport class FrontendSdk {\n private sdk?: InitializedSdk;\n\n private get initialized(): InitializedSdk {\n if (!this.sdk) {\n throw new Error(\"SDK is not initialized. Call sdk.init() first.\");\n }\n return this.sdk;\n }\n\n get cms(): CmsSdk {\n return this.initialized.cms;\n }\n\n get wb(): WbSdk {\n return this.initialized.wb;\n }\n\n get languages(): LanguagesSdk {\n return this.initialized.webiny.languages;\n }\n\n get fileManager(): FileManagerSdk {\n return this.initialized.webiny.fileManager;\n }\n\n get tenantManager(): TenantManagerSdk {\n return this.initialized.webiny.tenantManager;\n }\n\n get tasks(): TasksSdk {\n return this.initialized.webiny.tasks;\n }\n\n get webhooks(): WebhooksSdk {\n return this.initialized.webiny.webhooks;\n }\n\n init(config: ContentSdkConfig): void {\n const webiny = new Webiny({\n endpoint: config.endpoint,\n token: config.token,\n tenant: config.tenant || \"root\",\n fetch: config.fetch\n });\n\n this.sdk = {\n webiny,\n cms: new CmsSdk(webiny),\n wb: new WbSdk()\n };\n\n cmsContentSdk.init(\n {\n apiHost: config.endpoint,\n apiKey: config.token,\n apiTenant: config.tenant,\n preview: config.preview,\n fetch: config.fetch\n },\n webiny\n );\n\n wbContentSdk.init({\n apiHost: config.endpoint,\n apiKey: config.token,\n apiTenant: config.tenant ?? \"root\",\n preview: config.preview,\n theme: config.wb?.theme,\n previewParams: config.wb?.previewParams\n });\n\n if (config.wb?.componentGroups) {\n for (const group of config.wb.componentGroups) {\n this.sdk.wb.registerComponentGroup(group);\n }\n }\n }\n\n isEditing(): boolean {\n return cmsEnvironment.isEditing();\n }\n\n isServer(): boolean {\n return cmsEnvironment.isServer();\n }\n\n isClient(): boolean {\n return cmsEnvironment.isClient();\n }\n}\n\nexport const sdk = new FrontendSdk();\n"],"names":["FrontendSdk","Error","config","webiny","Webiny","CmsSdk","WbSdk","cmsContentSdk","wbContentSdk","group","cmsEnvironment","sdk"],"mappings":"
|
|
1
|
+
{"version":3,"file":"FrontendSdk.js","sources":["../src/FrontendSdk.ts"],"sourcesContent":["import { Webiny } from \"@webiny/sdk\";\nimport type {\n LanguagesSdk,\n FileManagerSdk,\n TenantManagerSdk,\n TasksSdk,\n WebhooksSdk\n} from \"@webiny/sdk\";\nimport { contentSdk as cmsContentSdk, environment as cmsEnvironment } from \"@webiny/cms-sdk\";\nimport { contentSdk as wbContentSdk } from \"@webiny/website-builder-sdk\";\nimport { CmsSdk } from \"./CmsSdk.js\";\nimport { WbSdk } from \"./WbSdk.js\";\nimport { ComponentsSdk } from \"./ComponentsSdk.js\";\nimport type { ContentSdkConfig } from \"./types.js\";\n\ninterface InitializedSdk {\n webiny: Webiny;\n cms: CmsSdk;\n wb: WbSdk;\n components: ComponentsSdk;\n}\n\nexport class FrontendSdk {\n private sdk?: InitializedSdk;\n\n private get initialized(): InitializedSdk {\n if (!this.sdk) {\n throw new Error(\"SDK is not initialized. Call sdk.init() first.\");\n }\n return this.sdk;\n }\n\n get cms(): CmsSdk {\n return this.initialized.cms;\n }\n\n get wb(): WbSdk {\n return this.initialized.wb;\n }\n\n get languages(): LanguagesSdk {\n return this.initialized.webiny.languages;\n }\n\n get fileManager(): FileManagerSdk {\n return this.initialized.webiny.fileManager;\n }\n\n get tenantManager(): TenantManagerSdk {\n return this.initialized.webiny.tenantManager;\n }\n\n get tasks(): TasksSdk {\n return this.initialized.webiny.tasks;\n }\n\n get webhooks(): WebhooksSdk {\n return this.initialized.webiny.webhooks;\n }\n\n get components(): ComponentsSdk {\n return this.initialized.components;\n }\n\n init(config: ContentSdkConfig): void {\n const webiny = new Webiny({\n endpoint: config.endpoint,\n token: config.token,\n tenant: config.tenant || \"root\",\n fetch: config.fetch\n });\n\n this.sdk = {\n webiny,\n cms: new CmsSdk(webiny),\n wb: new WbSdk(),\n components: new ComponentsSdk({\n endpoint: config.endpoint,\n token: config.token,\n tenant: config.tenant || \"root\",\n fetch: config.fetch\n })\n };\n\n cmsContentSdk.init(\n {\n apiHost: config.endpoint,\n apiKey: config.token,\n apiTenant: config.tenant,\n preview: config.preview,\n fetch: config.fetch\n },\n webiny\n );\n\n wbContentSdk.init({\n apiHost: config.endpoint,\n apiKey: config.token,\n apiTenant: config.tenant ?? \"root\",\n preview: config.preview,\n theme: config.wb?.theme,\n previewParams: config.wb?.previewParams\n });\n\n if (config.wb?.componentGroups) {\n for (const group of config.wb.componentGroups) {\n this.sdk.wb.registerComponentGroup(group);\n }\n }\n }\n\n isEditing(): boolean {\n return cmsEnvironment.isEditing();\n }\n\n isServer(): boolean {\n return cmsEnvironment.isServer();\n }\n\n isClient(): boolean {\n return cmsEnvironment.isClient();\n }\n}\n\nexport const sdk = new FrontendSdk();\n"],"names":["FrontendSdk","Error","config","webiny","Webiny","CmsSdk","WbSdk","ComponentsSdk","cmsContentSdk","wbContentSdk","group","cmsEnvironment","sdk"],"mappings":";;;;;;AAsBO,MAAMA;IAGT,IAAY,cAA8B;QACtC,IAAI,CAAC,IAAI,CAAC,GAAG,EACT,MAAM,IAAIC,MAAM;QAEpB,OAAO,IAAI,CAAC,GAAG;IACnB;IAEA,IAAI,MAAc;QACd,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG;IAC/B;IAEA,IAAI,KAAY;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE;IAC9B;IAEA,IAAI,YAA0B;QAC1B,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS;IAC5C;IAEA,IAAI,cAA8B;QAC9B,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW;IAC9C;IAEA,IAAI,gBAAkC;QAClC,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,aAAa;IAChD;IAEA,IAAI,QAAkB;QAClB,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK;IACxC;IAEA,IAAI,WAAwB;QACxB,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ;IAC3C;IAEA,IAAI,aAA4B;QAC5B,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU;IACtC;IAEA,KAAKC,MAAwB,EAAQ;QACjC,MAAMC,SAAS,IAAIC,OAAO;YACtB,UAAUF,OAAO,QAAQ;YACzB,OAAOA,OAAO,KAAK;YACnB,QAAQA,OAAO,MAAM,IAAI;YACzB,OAAOA,OAAO,KAAK;QACvB;QAEA,IAAI,CAAC,GAAG,GAAG;YACPC;YACA,KAAK,IAAIE,OAAOF;YAChB,IAAI,IAAIG;YACR,YAAY,IAAIC,cAAc;gBAC1B,UAAUL,OAAO,QAAQ;gBACzB,OAAOA,OAAO,KAAK;gBACnB,QAAQA,OAAO,MAAM,IAAI;gBACzB,OAAOA,OAAO,KAAK;YACvB;QACJ;QAEAM,WAAAA,IAAkB,CACd;YACI,SAASN,OAAO,QAAQ;YACxB,QAAQA,OAAO,KAAK;YACpB,WAAWA,OAAO,MAAM;YACxB,SAASA,OAAO,OAAO;YACvB,OAAOA,OAAO,KAAK;QACvB,GACAC;QAGJM,+BAAAA,IAAiB,CAAC;YACd,SAASP,OAAO,QAAQ;YACxB,QAAQA,OAAO,KAAK;YACpB,WAAWA,OAAO,MAAM,IAAI;YAC5B,SAASA,OAAO,OAAO;YACvB,OAAOA,OAAO,EAAE,EAAE;YAClB,eAAeA,OAAO,EAAE,EAAE;QAC9B;QAEA,IAAIA,OAAO,EAAE,EAAE,iBACX,KAAK,MAAMQ,SAASR,OAAO,EAAE,CAAC,eAAe,CACzC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,sBAAsB,CAACQ;IAG/C;IAEA,YAAqB;QACjB,OAAOC,YAAAA,SAAwB;IACnC;IAEA,WAAoB;QAChB,OAAOA,YAAAA,QAAuB;IAClC;IAEA,WAAoB;QAChB,OAAOA,YAAAA,QAAuB;IAClC;AACJ;AAEO,MAAMC,MAAM,IAAIZ"}
|
package/index.d.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
export { sdk, FrontendSdk } from "./FrontendSdk.js";
|
|
2
|
+
export { ComponentsSdk } from "./ComponentsSdk.js";
|
|
3
|
+
export type { RemoteComponentEntry, LoadComponentsOptions, HydrateComponentDependencies, HydrateComponentOptions, HydratedComponent } from "./ComponentsSdk.js";
|
|
2
4
|
export type { ContentSdkConfig, WbConfig, CmsConfig } from "./types.js";
|
|
3
5
|
export { Result, HttpError, ApiError, NetworkError, ValidationError } from "@webiny/sdk";
|
|
4
6
|
export type { Language } from "@webiny/sdk";
|
|
5
7
|
export type { CmsEntryData, CreateEntryParams, CreateCmsEntryData, UpdateEntryRevisionParams, UpdateCmsEntryData, DeleteEntryRevisionParams, PublishEntryRevisionParams, UnpublishEntryRevisionParams } from "@webiny/sdk";
|
|
6
|
-
export { createComponent, resolveRefs } from "@webiny/cms-sdk";
|
|
8
|
+
export { createComponent as createCmsComponent, resolveRefs } from "@webiny/cms-sdk";
|
|
7
9
|
export type { CmsSdkConfig, CmsEntryValues, CmsEntry, CmsListMeta, CmsListResult, GetEntryParams, ListEntriesParams, CmsModelDefinition, CmsModelMetadata, CmsRefModelMetadata, Asset, AssetImage, AssetCrop, AssetFocalPoint, AssetDocument, AssetVideo } from "@webiny/cms-sdk";
|
|
8
10
|
export type { PublicPage, PublicRedirect, ListPagesOptions, ListPagesResult, ComponentGroup, WebsiteBuilderThemeInput, ComponentManifest, ComponentInput } from "@webiny/website-builder-sdk";
|
|
9
|
-
export { createTheme } from "@webiny/website-builder-sdk";
|
|
11
|
+
export { createTheme, createComponent as createWbComponent } from "@webiny/website-builder-sdk";
|
package/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { FrontendSdk, sdk } from "./FrontendSdk.js";
|
|
2
|
+
export { ComponentsSdk } from "./ComponentsSdk.js";
|
|
2
3
|
export { ApiError, HttpError, NetworkError, Result, ValidationError } from "@webiny/sdk";
|
|
3
|
-
export { createComponent, resolveRefs } from "@webiny/cms-sdk";
|
|
4
|
-
export { createTheme } from "@webiny/website-builder-sdk";
|
|
4
|
+
export { createComponent as createCmsComponent, resolveRefs } from "@webiny/cms-sdk";
|
|
5
|
+
export { createComponent as createWbComponent, createTheme } from "@webiny/website-builder-sdk";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/sdk-frontend",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "6.6.0-alpha.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -16,14 +16,15 @@
|
|
|
16
16
|
],
|
|
17
17
|
"license": "MIT",
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"@webiny/cms-sdk": "
|
|
20
|
-
"@webiny/sdk": "
|
|
21
|
-
"@webiny/website-builder-sdk": "
|
|
19
|
+
"@webiny/cms-sdk": "6.6.0-alpha.2",
|
|
20
|
+
"@webiny/sdk": "6.6.0-alpha.2",
|
|
21
|
+
"@webiny/website-builder-sdk": "6.6.0-alpha.2",
|
|
22
|
+
"css-tree": "3.2.1"
|
|
22
23
|
},
|
|
23
24
|
"devDependencies": {
|
|
24
|
-
"@webiny/build-tools": "
|
|
25
|
+
"@webiny/build-tools": "6.6.0-alpha.2",
|
|
25
26
|
"typescript": "7.0.2",
|
|
26
|
-
"vitest": "4.1.
|
|
27
|
+
"vitest": "4.1.11"
|
|
27
28
|
},
|
|
28
29
|
"webiny": {
|
|
29
30
|
"publishFrom": "dist"
|