@wix/astro 2.19.0 → 2.21.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.
Files changed (39) hide show
  1. package/build/dependencies/astro-auth/backend-runtime/chunk-24J7STEA.js +8 -0
  2. package/build/dependencies/astro-auth/backend-runtime/{chunk-4UEBUUCA.js → chunk-352W54SQ.js} +20 -37
  3. package/build/dependencies/astro-auth/backend-runtime/middleware/auth.js +65 -14
  4. package/build/dependencies/astro-auth/backend-runtime/routes/callback.js +3 -2
  5. package/build/dependencies/astro-auth/backend-runtime/routes/login.js +3 -2
  6. package/build/dependencies/astro-auth/backend-runtime/routes/logout-callback.js +3 -2
  7. package/build/dependencies/astro-auth/backend-runtime/routes/logout.js +3 -2
  8. package/build/dependencies/astro-auth/backend-runtime/runtime/backend/setupContextualClient.js +1 -1
  9. package/build/dependencies/astro-trusted-backoffice-extensions/browser-runtime/hmr.d.ts +1 -0
  10. package/build/dependencies/astro-trusted-backoffice-extensions/browser-runtime/hmr.js +26 -0
  11. package/build/dependencies/astro-trusted-backoffice-extensions/browser-runtime/wrapComponent.d.ts +10 -0
  12. package/build/dependencies/astro-trusted-backoffice-extensions/browser-runtime/wrapComponent.js +37 -0
  13. package/build/dependencies/astro-trusted-backoffice-extensions/types/index.d.ts +17 -0
  14. package/build/integration/builders-experimental.d.ts +1 -1
  15. package/build/integration/builders-experimental.js +2 -2
  16. package/build/integration/builders-trusted.d.ts +34 -0
  17. package/build/integration/builders-trusted.js +48 -0
  18. package/build/integration/builders-trusted.js.map +1 -0
  19. package/build/integration/builders.d.ts +12 -205
  20. package/build/integration/builders.js +5 -3
  21. package/build/integration/{chunk-WK4OVFTZ.js → chunk-2K4KOKVV.js} +10 -1
  22. package/build/integration/chunk-2K4KOKVV.js.map +1 -0
  23. package/build/integration/{chunk-QHGDEGZS.js → chunk-KH7M6QFM.js} +2 -2
  24. package/build/integration/chunk-P4K55M3B.js +355 -0
  25. package/build/integration/chunk-P4K55M3B.js.map +1 -0
  26. package/build/integration/{chunk-ZOHC6VQD.js → chunk-UD4RG5I6.js} +5005 -11988
  27. package/build/integration/chunk-UD4RG5I6.js.map +1 -0
  28. package/build/integration/chunk-ZJHY3W6B.js +7032 -0
  29. package/build/integration/chunk-ZJHY3W6B.js.map +1 -0
  30. package/build/integration/{index.d-DMz9m26S.d.ts → index.d-D4c48TR0.d.ts} +1 -1
  31. package/build/integration/index.d-DVHQaDA6.d.ts +197 -0
  32. package/build/integration/index.d.ts +2 -1
  33. package/build/integration/index.js +28 -23
  34. package/build/integration/index.js.map +1 -1
  35. package/package.json +10 -8
  36. package/build/dependencies/astro-auth/backend-runtime/chunk-YHKPE45V.js +0 -13
  37. package/build/integration/chunk-WK4OVFTZ.js.map +0 -1
  38. package/build/integration/chunk-ZOHC6VQD.js.map +0 -1
  39. /package/build/integration/{chunk-QHGDEGZS.js.map → chunk-KH7M6QFM.js.map} +0 -0
@@ -0,0 +1,8 @@
1
+ // src/constants.ts
2
+ var oAuthStateCookieName = "oAuthState";
3
+ var returnToQueryParamName = "returnTo";
4
+
5
+ export {
6
+ oAuthStateCookieName,
7
+ returnToQueryParamName
8
+ };
@@ -4,8 +4,7 @@ import {
4
4
  } from "./chunk-USQSPPTM.js";
5
5
 
6
6
  // src/runtime/backend/contextualClient.ts
7
- import { createClient, OAuthStrategy } from "@wix/sdk";
8
- import { WIX_CLIENT_ID } from "astro:env/client";
7
+ import { createClient } from "@wix/sdk";
9
8
 
10
9
  // src/runtime/backend/hostProxy.ts
11
10
  var defaultHost = createHost();
@@ -37,47 +36,31 @@ var hostProxy = new Proxy(
37
36
  );
38
37
 
39
38
  // src/runtime/backend/contextualClient.ts
40
- var authProxy = new Proxy(
41
- {},
42
- {
43
- get(target, prop) {
44
- const auth = OAuthStrategy({
45
- clientId: WIX_CLIENT_ID
46
- });
47
- const value = auth[prop];
48
- if (typeof value !== "function") {
49
- return value;
50
- }
51
- return function(...args) {
52
- const store = authAsyncLocalStorage.getStore();
53
- if (store?.sessionTokens) {
54
- auth.setTokens(store.sessionTokens);
55
- }
56
- return value.apply(auth, args);
57
- };
58
- }
59
- }
60
- );
61
39
  var contextualClient = createClient({
62
- auth: authProxy,
40
+ auth: () => {
41
+ const store = authAsyncLocalStorage.getStore();
42
+ if (store?.auth == null) {
43
+ throw new Error(
44
+ "Cannot find authentication on `AsyncLocalStorage` instance"
45
+ );
46
+ }
47
+ return store.auth;
48
+ },
63
49
  host: hostProxy
64
50
  });
65
51
 
66
52
  // src/runtime/backend/elevatedContextualClient.ts
67
- import { AppStrategy, createClient as createClient2 } from "@wix/sdk";
68
- import { WIX_CLIENT_ID as WIX_CLIENT_ID2 } from "astro:env/client";
69
- import {
70
- WIX_CLIENT_INSTANCE_ID,
71
- WIX_CLIENT_PUBLIC_KEY,
72
- WIX_CLIENT_SECRET
73
- } from "astro:env/server";
53
+ import { createClient as createClient2 } from "@wix/sdk";
74
54
  var elevatedContextualClient = createClient2({
75
- auth: AppStrategy({
76
- appId: WIX_CLIENT_ID2,
77
- appSecret: WIX_CLIENT_SECRET,
78
- instanceId: WIX_CLIENT_INSTANCE_ID,
79
- publicKey: WIX_CLIENT_PUBLIC_KEY
80
- }),
55
+ auth: () => {
56
+ const store = authAsyncLocalStorage.getStore();
57
+ if (store?.elevatedAuth == null) {
58
+ throw new Error(
59
+ "Cannot find authentication on `AsyncLocalStorage` instance"
60
+ );
61
+ }
62
+ return store.elevatedAuth;
63
+ },
81
64
  host: hostProxy
82
65
  });
83
66
 
@@ -4,13 +4,22 @@ import {
4
4
  import {
5
5
  contextualClient,
6
6
  elevatedContextualClient
7
- } from "../chunk-4UEBUUCA.js";
7
+ } from "../chunk-352W54SQ.js";
8
8
  import {
9
9
  authAsyncLocalStorage,
10
10
  createHost
11
11
  } from "../chunk-USQSPPTM.js";
12
12
  import "../chunk-MLKGABMK.js";
13
13
 
14
+ // src/middleware/auth.ts
15
+ import { AppStrategy, OAuthStrategy as OAuthStrategy2 } from "@wix/sdk";
16
+ import { WIX_CLIENT_ID as WIX_CLIENT_ID3 } from "astro:env/client";
17
+ import {
18
+ WIX_CLIENT_INSTANCE_ID,
19
+ WIX_CLIENT_PUBLIC_KEY,
20
+ WIX_CLIENT_SECRET
21
+ } from "astro:env/server";
22
+
14
23
  // src/utils/generateVisitorTokens.ts
15
24
  import { OAuthStrategy } from "@wix/sdk";
16
25
  import { WIX_CLIENT_ID } from "astro:env/client";
@@ -58,20 +67,62 @@ var onRequest = async (context, next) => {
58
67
  if (context.url.pathname.startsWith("/_wix/extensions/")) {
59
68
  return next();
60
69
  }
61
- const existingTokens = getExistingTokens(context);
62
- const usedTokens = existingTokens ?? await generateVisitorTokens();
63
- const store = {
64
- sdkHost: createHost(context.request),
65
- sessionTokens: usedTokens
66
- };
67
- const acceptHeader = context.request.headers.get("Accept");
68
- const isStandardBrowserRequest = acceptHeader?.includes("text/html");
69
- if (!context.isPrerendered && existingTokens !== usedTokens && isStandardBrowserRequest) {
70
- saveSessionTokensToCookie(context, usedTokens);
70
+ const accessToken = context.request.headers.get("Authorization");
71
+ if (accessToken != null) {
72
+ const auth2 = AppStrategy({
73
+ accessToken,
74
+ appId: WIX_CLIENT_ID3
75
+ });
76
+ const elevatedAuth = await auth2.elevated();
77
+ return authAsyncLocalStorage.run(
78
+ {
79
+ auth: auth2,
80
+ elevatedAuth,
81
+ sdkHost: createHost(context.request)
82
+ },
83
+ async () => next()
84
+ );
71
85
  }
72
- return await authAsyncLocalStorage.run(store, async () => {
73
- return next();
74
- });
86
+ const existingToken = getExistingTokens(context);
87
+ if (existingToken) {
88
+ return authAsyncLocalStorage.run(
89
+ {
90
+ auth: OAuthStrategy2({
91
+ clientId: WIX_CLIENT_ID3,
92
+ tokens: existingToken
93
+ }),
94
+ elevatedAuth: AppStrategy({
95
+ appId: WIX_CLIENT_ID3,
96
+ appSecret: WIX_CLIENT_SECRET,
97
+ instanceId: WIX_CLIENT_INSTANCE_ID,
98
+ publicKey: WIX_CLIENT_PUBLIC_KEY
99
+ }),
100
+ sdkHost: createHost(context.request)
101
+ },
102
+ async () => next()
103
+ );
104
+ }
105
+ const visitorToken = await generateVisitorTokens();
106
+ if (context.request.headers.get("Accept")?.includes("text/html") && !context.isPrerendered) {
107
+ saveSessionTokensToCookie(context, visitorToken);
108
+ }
109
+ const response = await authAsyncLocalStorage.run(
110
+ {
111
+ auth: OAuthStrategy2({
112
+ clientId: WIX_CLIENT_ID3,
113
+ tokens: visitorToken
114
+ }),
115
+ elevatedAuth: AppStrategy({
116
+ appId: WIX_CLIENT_ID3,
117
+ appSecret: WIX_CLIENT_SECRET,
118
+ instanceId: WIX_CLIENT_INSTANCE_ID,
119
+ publicKey: WIX_CLIENT_PUBLIC_KEY
120
+ }),
121
+ sdkHost: createHost(context.request)
122
+ },
123
+ async () => next()
124
+ );
125
+ return response;
75
126
  };
76
127
  function getExistingTokens(context) {
77
128
  const existingTokens = getSessionTokensFromCookie(context);
@@ -6,12 +6,12 @@ import {
6
6
  string
7
7
  } from "../chunk-BIARYLOZ.js";
8
8
  import {
9
- auth,
10
9
  oAuthStateCookieName
11
- } from "../chunk-YHKPE45V.js";
10
+ } from "../chunk-24J7STEA.js";
12
11
  import "../chunk-MLKGABMK.js";
13
12
 
14
13
  // src/routes/callback.ts
14
+ import { getContextualAuth } from "@wix/sdk-runtime/context";
15
15
  var oauthCookieSchema = object({
16
16
  codeChallenge: string(),
17
17
  codeVerifier: string(),
@@ -30,6 +30,7 @@ var GET = async (context) => {
30
30
  "Invalid `originalUri` cookie param, only relative URLs are allowed"
31
31
  );
32
32
  }
33
+ const auth = getContextualAuth();
33
34
  const { code, error, errorDescription, state } = auth.parseFromUrl(
34
35
  context.url.toString(),
35
36
  "query"
@@ -4,12 +4,12 @@ import {
4
4
  string
5
5
  } from "../chunk-BIARYLOZ.js";
6
6
  import {
7
- auth,
8
7
  oAuthStateCookieName
9
- } from "../chunk-YHKPE45V.js";
8
+ } from "../chunk-24J7STEA.js";
10
9
  import "../chunk-MLKGABMK.js";
11
10
 
12
11
  // src/routes/login.ts
12
+ import { getContextualAuth } from "@wix/sdk-runtime/context";
13
13
  var loginSearchParams = object({
14
14
  prompt: _enum(["login", "none"]).optional(),
15
15
  returnToUrl: string().optional()
@@ -24,6 +24,7 @@ var GET = async ({ request, url }) => {
24
24
  const originalUrl = new URL(referer);
25
25
  callbackUrl.protocol = originalUrl.protocol;
26
26
  }
27
+ const auth = getContextualAuth();
27
28
  const oauthData = auth.generateOAuthData(callbackUrl.toString(), returnToUrl);
28
29
  const { authUrl } = await auth.getAuthUrl(oauthData, {
29
30
  prompt,
@@ -2,12 +2,12 @@ import {
2
2
  saveSessionTokensToCookie
3
3
  } from "../chunk-HPW4ZAEJ.js";
4
4
  import {
5
- auth,
6
5
  returnToQueryParamName
7
- } from "../chunk-YHKPE45V.js";
6
+ } from "../chunk-24J7STEA.js";
8
7
  import "../chunk-MLKGABMK.js";
9
8
 
10
9
  // src/routes/logout-callback.ts
10
+ import { getContextualAuth } from "@wix/sdk-runtime/context";
11
11
  var GET = async (context) => {
12
12
  const returnTo = context.url.searchParams.get(returnToQueryParamName) ?? "/";
13
13
  if (!returnTo.startsWith("/")) {
@@ -15,6 +15,7 @@ var GET = async (context) => {
15
15
  `Invalid \`${returnToQueryParamName}\` query param, only relative URLs are allowed`
16
16
  );
17
17
  }
18
+ const auth = getContextualAuth();
18
19
  saveSessionTokensToCookie(context, await auth.generateVisitorTokens());
19
20
  return context.redirect(returnTo);
20
21
  };
@@ -3,12 +3,12 @@ import {
3
3
  string
4
4
  } from "../chunk-BIARYLOZ.js";
5
5
  import {
6
- auth,
7
6
  returnToQueryParamName
8
- } from "../chunk-YHKPE45V.js";
7
+ } from "../chunk-24J7STEA.js";
9
8
  import "../chunk-MLKGABMK.js";
10
9
 
11
10
  // src/routes/logout.ts
11
+ import { getContextualAuth } from "@wix/sdk-runtime/context";
12
12
  var logoutSearchParams = object({
13
13
  returnToUrl: string().optional()
14
14
  });
@@ -24,6 +24,7 @@ var POST = async ({ redirect, request, url }) => {
24
24
  postFlowUrl.protocol = originalUrl.protocol;
25
25
  }
26
26
  postFlowUrl.searchParams.set(returnToQueryParamName, returnToUrl);
27
+ const auth = getContextualAuth();
27
28
  const { logoutUrl } = await auth.logout(postFlowUrl.toString());
28
29
  return redirect(logoutUrl);
29
30
  };
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  contextualClient,
3
3
  elevatedContextualClient
4
- } from "../../chunk-4UEBUUCA.js";
4
+ } from "../../chunk-352W54SQ.js";
5
5
  import "../../chunk-USQSPPTM.js";
6
6
  import "../../chunk-MLKGABMK.js";
7
7
 
@@ -0,0 +1 @@
1
+ export * from '@wix/astro-browser-runtime/hmr/react-component';
@@ -0,0 +1,26 @@
1
+ // ../astro-browser-runtime/src/hmr/react-component.tsx
2
+ import React, { useEffect, useRef, useState } from "react";
3
+ function createComponentHmrWrapper(OriginalComponent, hotData) {
4
+ return (props) => {
5
+ const [WrappedComponent, setComponent] = useState(
6
+ () => hotData.Component ?? OriginalComponent
7
+ );
8
+ const isMountedRef = useRef(false);
9
+ useEffect(() => {
10
+ isMountedRef.current = true;
11
+ hotData.setComponent = (NewComponent) => {
12
+ hotData.Component = NewComponent;
13
+ if (isMountedRef.current) {
14
+ setComponent(() => NewComponent);
15
+ }
16
+ };
17
+ return () => {
18
+ isMountedRef.current = false;
19
+ };
20
+ }, []);
21
+ return /* @__PURE__ */ React.createElement(WrappedComponent, { ...props });
22
+ };
23
+ }
24
+ export {
25
+ createComponentHmrWrapper
26
+ };
@@ -0,0 +1,10 @@
1
+ import { ComponentType } from 'react';
2
+
3
+ declare function wrapComponent({ componentId, loadComponent, }: {
4
+ componentId: string;
5
+ loadComponent: () => Promise<{
6
+ default: ComponentType;
7
+ }>;
8
+ }): void;
9
+
10
+ export { wrapComponent };
@@ -0,0 +1,37 @@
1
+ // src/runtime/wrapComponent.ts
2
+ import { withContextualWixClient } from "@wix/dashboard/internal";
3
+ var WIX_CLIENT_ID = import.meta.env.WIX_CLIENT_ID;
4
+ var components = /* @__PURE__ */ new Map();
5
+ function wrapComponent({
6
+ componentId,
7
+ loadComponent
8
+ }) {
9
+ components.set(componentId, async () => {
10
+ return loadComponent().then(
11
+ ({ default: Component }) => withContextualWixClient(Component)
12
+ );
13
+ });
14
+ globalThis.__module_federation__containers ??= {};
15
+ globalThis.__module_federation__containers[WIX_CLIENT_ID] ??= {
16
+ get: async (id) => {
17
+ const loadModule = components.get(id);
18
+ if (loadModule == null) {
19
+ throw new Error(`Cannot find component for \`${id}\``);
20
+ }
21
+ const component = await loadModule();
22
+ return () => {
23
+ return {
24
+ default: component
25
+ };
26
+ };
27
+ },
28
+ init: async () => {
29
+ if (import.meta.env.DEV) {
30
+ await import("/@vite/client");
31
+ }
32
+ }
33
+ };
34
+ }
35
+ export {
36
+ wrapComponent
37
+ };
@@ -0,0 +1,17 @@
1
+ import { WixIntegration } from '@wix/astro-core';
2
+
3
+ declare const createIntegration: () => WixIntegration;
4
+
5
+ interface TrustedBackofficePage {
6
+ type: 'TrustedBackofficePage';
7
+ options: Options;
8
+ }
9
+ interface Options {
10
+ id: string;
11
+ component: string;
12
+ routePath: string;
13
+ title: string;
14
+ }
15
+ declare function trustedBackofficePage(options: Options): TrustedBackofficePage;
16
+
17
+ export { createIntegration as default, trustedBackofficePage };
@@ -1,4 +1,4 @@
1
- import { B as BaseExtension } from './index.d-DMz9m26S.js';
1
+ import { B as BaseExtension } from './index.d-D4c48TR0.js';
2
2
 
3
3
  interface ContextProvider extends BaseExtension {
4
4
  type: 'ContextProvider';
@@ -3,10 +3,10 @@ const require = _createRequire(import.meta.url);
3
3
  import {
4
4
  contextProvider,
5
5
  functionLibrary
6
- } from "./chunk-QHGDEGZS.js";
6
+ } from "./chunk-KH7M6QFM.js";
7
7
  import {
8
8
  init_esm_shims
9
- } from "./chunk-WK4OVFTZ.js";
9
+ } from "./chunk-2K4KOKVV.js";
10
10
 
11
11
  // src/builders-experimental.ts
12
12
  init_esm_shims();
@@ -0,0 +1,34 @@
1
+ import { c as customElement, e as ecomAdditionalFees, a as ecomDiscountTriggers, b as ecomGiftCards, d as ecomPaymentSettings, f as ecomShippingRates, g as ecomValidations, h as embeddedScript, w as webhook, s as siteComponent, i as siteComponentPanel, j as sitePlugin } from './index.d-DVHQaDA6.js';
2
+ import { g as genericExtension } from './index.d-D4c48TR0.js';
3
+ export { a as app } from './index.d-D4c48TR0.js';
4
+
5
+ interface TrustedBackofficePage {
6
+ type: 'TrustedBackofficePage';
7
+ options: Options;
8
+ }
9
+ interface Options {
10
+ id: string;
11
+ component: string;
12
+ routePath: string;
13
+ title: string;
14
+ }
15
+ declare function trustedBackofficePage(options: Options): TrustedBackofficePage;
16
+
17
+ declare const extensions: {
18
+ customElement: typeof customElement;
19
+ dashboardPage: typeof trustedBackofficePage;
20
+ ecomAdditionalFees: typeof ecomAdditionalFees;
21
+ ecomDiscountTriggers: typeof ecomDiscountTriggers;
22
+ ecomGiftCards: typeof ecomGiftCards;
23
+ ecomPaymentSettings: typeof ecomPaymentSettings;
24
+ ecomShippingRates: typeof ecomShippingRates;
25
+ ecomValidations: typeof ecomValidations;
26
+ embeddedScript: typeof embeddedScript;
27
+ event: typeof webhook;
28
+ genericExtension: typeof genericExtension;
29
+ siteComponent: typeof siteComponent;
30
+ siteComponentPanel: typeof siteComponentPanel;
31
+ sitePlugin: typeof sitePlugin;
32
+ };
33
+
34
+ export { extensions };
@@ -0,0 +1,48 @@
1
+ import { createRequire as _createRequire } from 'node:module';
2
+ const require = _createRequire(import.meta.url);
3
+ import {
4
+ trustedBackofficePage
5
+ } from "./chunk-P4K55M3B.js";
6
+ import {
7
+ app,
8
+ customElement,
9
+ ecomAdditionalFees,
10
+ ecomDiscountTriggers,
11
+ ecomGiftCards,
12
+ ecomPaymentSettings,
13
+ ecomShippingRates,
14
+ ecomValidations,
15
+ embeddedScript,
16
+ genericExtension,
17
+ siteComponent,
18
+ siteComponentPanel,
19
+ sitePlugin,
20
+ webhook
21
+ } from "./chunk-UD4RG5I6.js";
22
+ import {
23
+ init_esm_shims
24
+ } from "./chunk-2K4KOKVV.js";
25
+
26
+ // src/builders-trusted.ts
27
+ init_esm_shims();
28
+ var extensions = {
29
+ customElement,
30
+ dashboardPage: trustedBackofficePage,
31
+ ecomAdditionalFees,
32
+ ecomDiscountTriggers,
33
+ ecomGiftCards,
34
+ ecomPaymentSettings,
35
+ ecomShippingRates,
36
+ ecomValidations,
37
+ embeddedScript,
38
+ event: webhook,
39
+ genericExtension,
40
+ siteComponent,
41
+ siteComponentPanel,
42
+ sitePlugin
43
+ };
44
+ export {
45
+ app,
46
+ extensions
47
+ };
48
+ //# sourceMappingURL=builders-trusted.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/builders-trusted.ts"],"sourcesContent":["import {\n ecomAdditionalFees,\n ecomDiscountTriggers,\n ecomGiftCards,\n ecomPaymentSettings,\n ecomShippingRates,\n ecomValidations,\n webhook as event,\n} from '@wix/astro-backend-extensions';\nimport { genericExtension } from '@wix/astro-core';\nimport {\n customElement,\n sitePlugin,\n} from '@wix/astro-custom-elements-extensions';\nimport { embeddedScript } from '@wix/astro-embedded-scripts-extensions';\nimport { siteComponentPanel } from '@wix/astro-site-component-panels-extensions';\nimport { siteComponent } from '@wix/astro-site-components-extensions';\nimport { trustedBackofficePage as dashboardPage } from '@wix/astro-trusted-backoffice-extensions';\n\nexport { app } from '@wix/astro-core';\n\nexport const extensions = {\n customElement,\n dashboardPage,\n ecomAdditionalFees,\n ecomDiscountTriggers,\n ecomGiftCards,\n ecomPaymentSettings,\n ecomShippingRates,\n ecomValidations,\n embeddedScript,\n event,\n genericExtension,\n siteComponent,\n siteComponentPanel,\n sitePlugin,\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAqBO,IAAM,aAAa;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;","names":[]}