@yak-io/prismic 0.1.1 → 0.2.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/README.md CHANGED
@@ -1,14 +1,10 @@
1
1
  # @yak-io/prismic
2
2
 
3
- Adapters that turn Prismic CMS documents into Yak routes, tools, and schema sources. This package plugs directly into `@yak-io/javascript` and works seamlessly with the Next.js and Nuxt helpers.
3
+ > 📚 **Full documentation:** https://docs.yak.io/docs/sdks/prismic
4
+ >
5
+ > 🤖 **For LLMs / AI agents:** https://docs.yak.io/llms.txt
4
6
 
5
- ## What you get
6
-
7
- - `createPrismicRouteAdapter` – produces a `RouteSource` from Prismic documents. Use it when your routes live in Prismic instead of (or alongside) the filesystem.
8
- - `createPrismicToolAdapter` – produces a `ToolSource` exposing `prismic.getByUID`, `prismic.getAllByType`, and `prismic.search` as tools the LLM can invoke.
9
- - `createPrismicSchemaSource` – produces a `SchemaSource` describing the Prismic content model so the LLM understands document types and fields.
10
-
11
- ## Installation
7
+ Prismic CMS adapter for [Yak](https://docs.yak.io). It turns Prismic documents into Yak **routes** (so the assistant knows your pages), **tools** (so it can fetch content), and a **GraphQL adapter** (so it can query your content model). Plugs into `@yak-io/javascript`'s `createYakHandler` or `@yak-io/nextjs`'s `createNextYakHandler`.
12
8
 
13
9
  ```bash
14
10
  pnpm add @yak-io/prismic @yak-io/javascript @prismicio/client
@@ -16,6 +12,14 @@ pnpm add @yak-io/prismic @yak-io/javascript @prismicio/client
16
12
 
17
13
  `@prismicio/client` is a peer dependency (v7+).
18
14
 
15
+ ## Exports
16
+
17
+ | Export | Returns | Purpose |
18
+ | --- | --- | --- |
19
+ | `createPrismicRouteAdapter(config)` | `RouteSource` | Routes from Prismic documents — when pages live in Prismic. |
20
+ | `createPrismicToolAdapter(config)` | `ToolSource` | Exposes `prismic.getByUID`, `prismic.getAllByType`, `prismic.search` as tools. |
21
+ | `createPrismicGraphQLToolAdapter(config)` | `Promise<ToolAdapter>` | Introspects your repo's GraphQL schema and returns a browser-executed `graphql_prismic` tool. |
22
+
19
23
  ## Usage
20
24
 
21
25
  ### 1. Create a Prismic client
@@ -28,14 +32,11 @@ const client = prismic.createClient("your-repo-name", {
28
32
  });
29
33
  ```
30
34
 
31
- ### 2. Use it with a Yak handler
35
+ ### 2. Wire adapters into a Yak handler (server)
32
36
 
33
37
  ```ts
34
38
  import { createNextYakHandler } from "@yak-io/nextjs/server";
35
- import {
36
- createPrismicRouteAdapter,
37
- createPrismicToolAdapter,
38
- } from "@yak-io/prismic";
39
+ import { createPrismicRouteAdapter, createPrismicToolAdapter } from "@yak-io/prismic";
39
40
 
40
41
  const prismicRoutes = createPrismicRouteAdapter({
41
42
  client,
@@ -58,39 +59,75 @@ export const { GET, POST } = createNextYakHandler({
58
59
  });
59
60
  ```
60
61
 
61
- The adapters return standard `RouteSource` / `ToolSource` shapes, so you can compose them with filesystem routes, tRPC tools, or any other source by passing arrays.
62
-
63
- ### 3. Optionally expose the content model
62
+ Both return standard `RouteSource` / `ToolSource` shapes, so you can compose them with filesystem routes, tRPC tools, or any other source by passing arrays.
64
63
 
65
- Inside your client-side `getConfig` provider:
64
+ ### 3. Optionally expose the content model (client `getConfig` + `onToolCall`)
66
65
 
67
66
  ```ts
68
- import { createPrismicSchemaSource } from "@yak-io/prismic";
69
-
70
- const getConfig = async () => {
71
- const res = await fetch("/api/yak");
72
- const config = await res.json();
73
- const schemaSource = await createPrismicSchemaSource({
74
- client,
75
- mode: "graphql",
76
- });
77
- return { ...config, schemaSources: [schemaSource] };
78
- };
67
+ import { createYakServerAdapter, createYakToolset } from "@yak-io/react";
68
+ import { createPrismicGraphQLToolAdapter } from "@yak-io/prismic";
69
+
70
+ const toolset = createYakToolset([
71
+ createYakServerAdapter({ endpoint: "/api/yak" }),
72
+ await createPrismicGraphQLToolAdapter({ client }),
73
+ ]);
74
+
75
+ const getConfig = async () => ({ routes, ...(await toolset.getConfig()) });
76
+ const onToolCall = toolset.onToolCall;
79
77
  ```
80
78
 
79
+ ## API reference
80
+
81
+ ### `createPrismicRouteAdapter(config)`
82
+
83
+ | Option | Type | Default | Description |
84
+ | --- | --- | --- | --- |
85
+ | `client` | `Client` | — | Prismic client (required). |
86
+ | `documentTypes` | `string[]` | — | Document types to turn into routes (required). |
87
+ | `resolveRoute` | `(doc) => RouteInfo \| null` | — | Map a document to a route; return `null` to skip it (e.g. drafts) (required). |
88
+ | `filters` | `string[]` | — | Prismic query filters. |
89
+ | `id` | `string` | `"prismic"` | Source id. |
90
+
91
+ ### `createPrismicToolAdapter(config)`
92
+
93
+ | Option | Type | Default | Description |
94
+ | --- | --- | --- | --- |
95
+ | `client` | `Client` | — | Prismic client (required). |
96
+ | `allowedTypes` | `string[]` | — | Document types the assistant may fetch (required). |
97
+ | `fields` | `Record<string, string[]>` | — | Per-type field allowlist returned to the assistant. |
98
+ | `id` | `string` | `"prismic"` | Source id. |
99
+
100
+ ### `createPrismicGraphQLToolAdapter(config)`
101
+
102
+ Introspects the repo's `/graphql` endpoint once and returns a browser-executed `ToolAdapter`
103
+ exposing a `graphql_<name>` tool. Compose it with `createYakToolset`.
104
+
105
+ | Option | Type | Default | Description |
106
+ | --- | --- | --- | --- |
107
+ | `client` | `Client` | — | Prismic client (required). |
108
+ | `name` | `string` | `"prismic"` | Tool name suffix — exposed as `graphql_<name>`. |
109
+ | `endpoint` | `string` | derived `/graphql` URL | Override the GraphQL endpoint. |
110
+ | `headers` | `HeadersInit \| (() => HeadersInit \| Promise<HeadersInit>)` | — | Execution headers (e.g. `Prismic-ref`). |
111
+ | `fetchFn` | `typeof fetch` | global `fetch` | Custom fetch for the one-time introspection. |
112
+
113
+ ## Security
114
+
115
+ - Always set `allowedTypes` on the tool adapter — without it the assistant could fetch any document type in your repository.
116
+ - Return `null` from `resolveRoute` to keep drafts or hidden pages out of the route manifest.
117
+
81
118
  ## Types
82
119
 
83
- All route/tool/schema types are re-exported from `@yak-io/javascript/server`:
120
+ Route, tool, and adapter types are re-exported for convenience:
84
121
 
85
122
  ```ts
86
- import type { RouteSource, ToolSource, SchemaSource } from "@yak-io/prismic";
123
+ import type { RouteSource, ToolSource, ToolAdapter } from "@yak-io/prismic";
124
+ import type {
125
+ PrismicRouteAdapterConfig,
126
+ PrismicToolAdapterConfig,
127
+ PrismicGraphQLToolAdapterConfig,
128
+ } from "@yak-io/prismic";
87
129
  ```
88
130
 
89
- ## Security tips
90
-
91
- - Always set `allowedTypes` on the tool adapter — without it the LLM can fetch any document type in your repository.
92
- - `resolveRoute` returning `null` skips a document — use this to filter drafts or hidden pages out of the manifest.
93
-
94
131
  ## License
95
132
 
96
- Proprietary - see LICENSE file
133
+ Proprietary see [LICENSE](./LICENSE).
@@ -0,0 +1,13 @@
1
+ import type { ToolAdapter } from "@yak-io/javascript";
2
+ import type { PrismicGraphQLToolAdapterConfig } from "./types.js";
3
+ /**
4
+ * Introspect a Prismic repository's GraphQL schema and return a browser-executed
5
+ * GraphQL {@link ToolAdapter} (built on `@yak-io/graphql`). Compose it into a
6
+ * {@link createYakToolset}; the LLM authors queries from the introspected SDL and
7
+ * the adapter executes them against the repo's GraphQL endpoint.
8
+ *
9
+ * Prismic's GraphQL endpoint requires a `Prismic-ref` header at execution time —
10
+ * supply it via `headers` (it may be async to fetch the master ref per call).
11
+ */
12
+ export declare function createPrismicGraphQLToolAdapter(config: PrismicGraphQLToolAdapterConfig): Promise<ToolAdapter>;
13
+ //# sourceMappingURL=graphql-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphql-adapter.d.ts","sourceRoot":"","sources":["../src/graphql-adapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,YAAY,CAAC;AAyGlE;;;;;;;;GAQG;AACH,wBAAsB,+BAA+B,CACnD,MAAM,EAAE,+BAA+B,GACtC,OAAO,CAAC,WAAW,CAAC,CAsDtB"}
@@ -1,3 +1,4 @@
1
+ import { createGraphQLToolAdapter } from "@yak-io/graphql";
1
2
  const INTROSPECTION_QUERY = `query IntrospectionQuery {
2
3
  __schema {
3
4
  queryType { name }
@@ -75,20 +76,36 @@ function deriveGraphQLEndpoint(restEndpoint) {
75
76
  const trimmed = restEndpoint.replace(/\/api\/v\d+\/?$/, "");
76
77
  return `${trimmed}/graphql`;
77
78
  }
79
+ async function buildHeaders(source, base) {
80
+ const headers = new Headers(base);
81
+ const resolved = typeof source === "function" ? await source() : source;
82
+ if (resolved) {
83
+ for (const [key, value] of new Headers(resolved)) {
84
+ headers.set(key, value);
85
+ }
86
+ }
87
+ return headers;
88
+ }
78
89
  async function loadGraphQLModule() {
79
90
  try {
80
91
  return await import("graphql");
81
92
  }
82
93
  catch {
83
- throw new Error("createPrismicSchemaSource with mode 'graphql' requires the 'graphql' package. Install it as a peer dependency: pnpm add graphql");
94
+ throw new Error("createPrismicGraphQLToolAdapter requires the 'graphql' package. Install it as a peer dependency: pnpm add graphql");
84
95
  }
85
96
  }
86
- export async function createPrismicSchemaSource(config) {
87
- if (config.mode !== "graphql") {
88
- throw new Error(`Unsupported schema source mode: ${config.mode}`);
89
- }
97
+ /**
98
+ * Introspect a Prismic repository's GraphQL schema and return a browser-executed
99
+ * GraphQL {@link ToolAdapter} (built on `@yak-io/graphql`). Compose it into a
100
+ * {@link createYakToolset}; the LLM authors queries from the introspected SDL and
101
+ * the adapter executes them against the repo's GraphQL endpoint.
102
+ *
103
+ * Prismic's GraphQL endpoint requires a `Prismic-ref` header at execution time —
104
+ * supply it via `headers` (it may be async to fetch the master ref per call).
105
+ */
106
+ export async function createPrismicGraphQLToolAdapter(config) {
90
107
  const fetchFn = config.fetchFn ?? fetch;
91
- const endpoint = deriveGraphQLEndpoint(config.client.endpoint);
108
+ const endpoint = config.endpoint ?? deriveGraphQLEndpoint(config.client.endpoint);
92
109
  const response = await fetchFn(endpoint, {
93
110
  method: "POST",
94
111
  headers: { "Content-Type": "application/json" },
@@ -104,9 +121,30 @@ export async function createPrismicSchemaSource(config) {
104
121
  const { buildClientSchema, printSchema } = await loadGraphQLModule();
105
122
  const schema = buildClientSchema(payload.data);
106
123
  const sdl = printSchema(schema);
107
- return {
124
+ return createGraphQLToolAdapter({
108
125
  name: config.name ?? "prismic",
109
- type: "graphql",
110
126
  schema: sdl,
111
- };
127
+ id: config.id,
128
+ // Prismic owns its own transport: POST the model-authored query to the repo's GraphQL
129
+ // endpoint with the caller-supplied headers (typically the required `Prismic-ref`).
130
+ execute: async (request) => {
131
+ const res = await fetchFn(endpoint, {
132
+ method: "POST",
133
+ headers: await buildHeaders(config.headers, { "Content-Type": "application/json" }),
134
+ body: JSON.stringify({
135
+ query: request.query,
136
+ variables: request.variables,
137
+ operationName: request.operationName,
138
+ }),
139
+ });
140
+ if (!res.ok) {
141
+ throw new Error(`Prismic GraphQL request failed (${res.status})`);
142
+ }
143
+ const payload = (await res.json());
144
+ if (payload.errors?.length) {
145
+ throw new Error(payload.errors[0]?.message ?? "Prismic GraphQL request returned errors");
146
+ }
147
+ return payload.data;
148
+ },
149
+ });
112
150
  }
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
+ export { createPrismicGraphQLToolAdapter } from "./graphql-adapter.js";
1
2
  export { createPrismicRouteAdapter } from "./route-adapter.js";
2
3
  export { createPrismicToolAdapter } from "./tool-adapter.js";
3
- export { createPrismicSchemaSource } from "./schema-source.js";
4
- export type { PrismicRouteAdapterConfig, PrismicToolAdapterConfig, PrismicSchemaSourceConfig, PrismicGraphQLSchemaSourceConfig, } from "./types.js";
4
+ export type { PrismicGraphQLToolAdapterConfig, PrismicRouteAdapterConfig, PrismicToolAdapterConfig, } from "./types.js";
5
5
  export type { RouteInfo, RouteSource, ToolDefinition, ToolExecutor, ToolManifest, ToolSource, } from "@yak-io/javascript/server";
6
- export type { GraphQLSchemaSource, OpenAPISchemaSource, SchemaSource } from "@yak-io/javascript";
6
+ export type { ToolAdapter } from "@yak-io/javascript";
7
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,YAAY,EACV,yBAAyB,EACzB,wBAAwB,EACxB,yBAAyB,EACzB,gCAAgC,GACjC,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,SAAS,EACT,WAAW,EACX,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,UAAU,GACX,MAAM,2BAA2B,CAAC;AAEnC,YAAY,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,+BAA+B,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,YAAY,EACV,+BAA+B,EAC/B,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,SAAS,EACT,WAAW,EACX,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,UAAU,GACX,MAAM,2BAA2B,CAAC;AAEnC,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC"}
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
+ export { createPrismicGraphQLToolAdapter } from "./graphql-adapter.js";
1
2
  export { createPrismicRouteAdapter } from "./route-adapter.js";
2
3
  export { createPrismicToolAdapter } from "./tool-adapter.js";
3
- export { createPrismicSchemaSource } from "./schema-source.js";
package/dist/types.d.ts CHANGED
@@ -13,11 +13,23 @@ export type PrismicToolAdapterConfig = {
13
13
  allowedTypes: string[];
14
14
  fields?: Record<string, string[]>;
15
15
  };
16
- export type PrismicGraphQLSchemaSourceConfig = {
16
+ export type PrismicGraphQLToolAdapterConfig = {
17
17
  client: Client;
18
- mode: "graphql";
18
+ /** Tool name suffix — the tool is exposed as `graphql_<name>`. Defaults to "prismic". */
19
19
  name?: string;
20
+ /**
21
+ * Override the GraphQL endpoint used for execution. Defaults to the repo's
22
+ * derived `/graphql` URL (from the client's REST endpoint).
23
+ */
24
+ endpoint?: string;
25
+ /**
26
+ * Extra headers (e.g. `Prismic-ref`, `Authorization`) applied to query
27
+ * execution. May be async to fetch the master ref per call.
28
+ */
29
+ headers?: HeadersInit | (() => HeadersInit | Promise<HeadersInit>);
30
+ /** Custom fetch used for the one-time schema introspection (useful in tests). */
20
31
  fetchFn?: typeof fetch;
32
+ /** Stable adapter id for diagnostics. */
33
+ id?: string;
21
34
  };
22
- export type PrismicSchemaSourceConfig = PrismicGraphQLSchemaSourceConfig;
23
35
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAE3D,MAAM,MAAM,yBAAyB,GAAG;IACtC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,SAAS,GAAG,IAAI,CAAC;IACzD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG;IAC7C,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,gCAAgC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAE3D,MAAM,MAAM,yBAAyB,GAAG;IACtC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,SAAS,GAAG,IAAI,CAAC;IACzD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,yFAAyF;IACzF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,OAAO,CAAC,EAAE,WAAW,GAAG,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;IACnE,iFAAiF;IACjF,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;IACvB,yCAAyC;IACzC,EAAE,CAAC,EAAE,MAAM,CAAC;CACb,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yak-io/prismic",
3
- "version": "0.1.1",
3
+ "version": "0.2.0",
4
4
  "description": "Prismic CMS adapter for yak chatbot - exposes Prismic documents as routes, tools, and schema sources",
5
5
  "type": "module",
6
6
  "license": "SEE LICENSE IN LICENSE",
@@ -24,6 +24,7 @@
24
24
  "node": ">=18"
25
25
  },
26
26
  "files": [
27
+ "README.md",
27
28
  "dist",
28
29
  "LICENSE"
29
30
  ],
@@ -40,7 +41,8 @@
40
41
  "./package.json": "./package.json"
41
42
  },
42
43
  "dependencies": {
43
- "@yak-io/javascript": "0.8.0"
44
+ "@yak-io/graphql": "0.1.1",
45
+ "@yak-io/javascript": "0.10.0"
44
46
  },
45
47
  "peerDependencies": {
46
48
  "@prismicio/client": "^7.0.0",
@@ -58,6 +60,7 @@
58
60
  "typescript": "^5.3.0",
59
61
  "@repo/typescript-config": "0.0.0"
60
62
  },
63
+ "homepage": "https://docs.yak.io/docs/sdks/prismic",
61
64
  "scripts": {
62
65
  "build": "tsc",
63
66
  "check-types": "tsc --noEmit",
@@ -1,4 +0,0 @@
1
- import type { GraphQLSchemaSource } from "@yak-io/javascript";
2
- import type { PrismicSchemaSourceConfig } from "./types.js";
3
- export declare function createPrismicSchemaSource(config: PrismicSchemaSourceConfig): Promise<GraphQLSchemaSource>;
4
- //# sourceMappingURL=schema-source.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema-source.d.ts","sourceRoot":"","sources":["../src/schema-source.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AA2F5D,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,yBAAyB,GAChC,OAAO,CAAC,mBAAmB,CAAC,CAkC9B"}