tyfigo 0.2.0 → 0.2.1

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.
@@ -1,4 +1,4 @@
1
- import { t as tyfigo } from "../unplugin-Bkc569Qw.mjs";
1
+ import { t as tyfigo } from "../unplugin-BoZ7PwTA.mjs";
2
2
  // src/plugins/esbuild.ts
3
3
  var esbuild_default = tyfigo.esbuild;
4
4
  export { esbuild_default as default };
@@ -1,4 +1,4 @@
1
- import { t as tyfigo } from "../unplugin-Bkc569Qw.mjs";
1
+ import { t as tyfigo } from "../unplugin-BoZ7PwTA.mjs";
2
2
  // src/plugins/rolldown.ts
3
3
  var rolldown_default = tyfigo.rolldown;
4
4
  export { rolldown_default as default };
@@ -1,4 +1,4 @@
1
- import { t as tyfigo } from "../unplugin-Bkc569Qw.mjs";
1
+ import { t as tyfigo } from "../unplugin-BoZ7PwTA.mjs";
2
2
  // src/plugins/rollup.ts
3
3
  var rollup_default = tyfigo.rollup;
4
4
  export { rollup_default as default };
@@ -1,4 +1,4 @@
1
- import { t as tyfigo } from "../unplugin-Bkc569Qw.mjs";
1
+ import { t as tyfigo } from "../unplugin-BoZ7PwTA.mjs";
2
2
  // src/plugins/rsbuild.ts
3
3
  var rsbuild_default = tyfigo.rsbuild;
4
4
  export { rsbuild_default as default };
@@ -1,4 +1,4 @@
1
- import { t as tyfigo } from "../unplugin-Bkc569Qw.mjs";
1
+ import { t as tyfigo } from "../unplugin-BoZ7PwTA.mjs";
2
2
  // src/plugins/rspack.ts
3
3
  var rspack_default = tyfigo.rspack;
4
4
  export { rspack_default as default };
@@ -1,4 +1,4 @@
1
- import { t as tyfigo } from "../unplugin-Bkc569Qw.mjs";
1
+ import { t as tyfigo } from "../unplugin-BoZ7PwTA.mjs";
2
2
  // src/plugins/vite.ts
3
3
  var vite_default = tyfigo.vite;
4
4
  export { vite_default as default };
@@ -1,4 +1,4 @@
1
- import { t as tyfigo } from "../unplugin-Bkc569Qw.mjs";
1
+ import { t as tyfigo } from "../unplugin-BoZ7PwTA.mjs";
2
2
  // src/plugins/webpack.ts
3
3
  var webpack_default = tyfigo.webpack;
4
4
  export { webpack_default as default };
@@ -1,5 +1,6 @@
1
1
  import { n as configPathPattern } from "./formats-Bf8-iQw-.mjs";
2
2
  import { i as tyfigoImportPattern, n as isServerPlatform, r as loadConfigImport, t as findNodeOnlyImports } from "./shared-DOMPQnVO.mjs";
3
+ import { existsSync } from "node:fs";
3
4
  import { createUnplugin } from "unplugin";
4
5
  // src/plugins/unplugin.ts
5
6
  const webpackMode = (compiler) => compiler.options.mode === "none" ? void 0 : compiler.options.mode;
@@ -7,6 +8,8 @@ const unpluginFactory = (options = {}) => {
7
8
  let viteCommand;
8
9
  let viteMode;
9
10
  let rolldownPlatform;
11
+ let viteServer;
12
+ const missingLayers = /* @__PURE__ */ new Map();
10
13
  const detect = (context, loadOptions) => {
11
14
  const native = context.getNativeBuildContext?.();
12
15
  if (native?.framework === "webpack" || native?.framework === "rspack") {
@@ -48,7 +51,10 @@ const unpluginFactory = (options = {}) => {
48
51
  environment: options.environment ?? (target === "server" && detected.bundle ? void 0 : detected.mode),
49
52
  runtime: options.runtime
50
53
  });
51
- for (const file of result.watchFiles) this.addWatchFile(file);
54
+ for (const file of result.watchFiles) if (viteServer && !existsSync(file)) {
55
+ missingLayers.set(file, (missingLayers.get(file) ?? /* @__PURE__ */ new Set()).add(id));
56
+ viteServer.watcher.add(file);
57
+ } else this.addWatchFile(file);
52
58
  return {
53
59
  code: result.code,
54
60
  moduleType: "js"
@@ -69,10 +75,25 @@ const unpluginFactory = (options = {}) => {
69
75
  if (messages.length > 0) throw new Error(messages.join("\n"));
70
76
  }
71
77
  },
72
- vite: { configResolved(config) {
73
- viteCommand = config.command;
74
- viteMode = config.mode;
75
- } },
78
+ vite: {
79
+ configResolved(config) {
80
+ viteCommand = config.command;
81
+ viteMode = config.mode;
82
+ },
83
+ configureServer(server) {
84
+ viteServer = server;
85
+ server.watcher.on("add", (file) => {
86
+ const ids = missingLayers.get(file);
87
+ if (!ids) return;
88
+ missingLayers.delete(file);
89
+ for (const environment of Object.values(server.environments)) for (const id of ids) {
90
+ const module = environment.moduleGraph.getModuleById(id);
91
+ if (module) environment.moduleGraph.invalidateModule(module);
92
+ }
93
+ server.ws.send({ type: "full-reload" });
94
+ });
95
+ }
96
+ },
76
97
  rolldown: { options(input) {
77
98
  rolldownPlatform = input.platform;
78
99
  } },
@@ -82,4 +103,4 @@ const unpluginFactory = (options = {}) => {
82
103
  const tyfigo = createUnplugin(unpluginFactory);
83
104
  export { tyfigo as t };
84
105
 
85
- //# sourceMappingURL=unplugin-Bkc569Qw.mjs.map
106
+ //# sourceMappingURL=unplugin-BoZ7PwTA.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unplugin-BoZ7PwTA.mjs","names":[],"sources":["../src/plugins/unplugin.ts"],"sourcesContent":["import { existsSync } from 'node:fs';\n\nimport { createUnplugin } from 'unplugin';\n\nimport { findNodeOnlyImports, isServerPlatform, loadConfigImport, tyfigoImportPattern } from './shared.ts';\n\nimport { configPathPattern } from '../core/index.ts';\n\nimport type { LoadOptions } from '../runtime/load.ts';\nimport type { TyfigoPluginOptions, WebpackLikeCompiler } from './shared.ts';\nimport type { UnpluginBuildContext, UnpluginFactory } from 'unplugin';\nimport type { ViteDevServer } from 'vite';\n\nexport type { TyfigoPluginOptions } from './shared.ts';\n\nconst webpackMode = (compiler: WebpackLikeCompiler) =>\n\tcompiler.options.mode === 'none' ? undefined : compiler.options.mode;\n\ninterface ViteContext {\n\treadonly environment?: { readonly config: { readonly consumer: string } };\n}\n\nexport const unpluginFactory: UnpluginFactory<TyfigoPluginOptions | undefined, false> = (options = {}) => {\n\tlet viteCommand: string | undefined;\n\tlet viteMode: string | undefined;\n\tlet rolldownPlatform: string | undefined;\n\tlet viteServer: ViteDevServer | undefined;\n\tconst missingLayers = new Map<string, Set<string>>();\n\n\tconst detect = (\n\t\tcontext: UnpluginBuildContext,\n\t\tloadOptions: { readonly ssr?: boolean } | undefined,\n\t): Pick<LoadOptions, 'target' | 'bundle'> & { readonly mode?: string | undefined } => {\n\t\tconst native = context.getNativeBuildContext?.();\n\t\tif (native?.framework === 'webpack' || native?.framework === 'rspack') {\n\t\t\tconst compiler = native.compiler as WebpackLikeCompiler;\n\t\t\treturn {\n\t\t\t\ttarget: isServerPlatform(compiler.platform) ? 'server' : 'browser',\n\t\t\t\tbundle: true,\n\t\t\t\tmode: webpackMode(compiler),\n\t\t\t};\n\t\t}\n\t\tif (native?.framework === 'esbuild') {\n\t\t\treturn { target: native.build.initialOptions.platform === 'node' ? 'server' : 'browser', bundle: true };\n\t\t}\n\t\tif (viteCommand) {\n\t\t\tconst consumer = (context as ViteContext).environment?.config.consumer;\n\t\t\treturn {\n\t\t\t\ttarget: (consumer === undefined ? loadOptions?.ssr : consumer === 'server') ? 'server' : 'browser',\n\t\t\t\tbundle: viteCommand === 'build',\n\t\t\t\tmode: viteMode,\n\t\t\t};\n\t\t}\n\t\treturn { target: rolldownPlatform === 'node' ? 'server' : 'browser', bundle: true };\n\t};\n\n\treturn {\n\t\tname: 'tyfigo',\n\t\tenforce: 'pre',\n\t\tload: {\n\t\t\tfilter: { id: configPathPattern },\n\t\t\thandler(id, loadOptions?: { readonly ssr?: boolean }) {\n\t\t\t\tconst detected = detect(this, loadOptions);\n\t\t\t\tconst target = options.target ?? detected.target;\n\t\t\t\tconst result = loadConfigImport(id, {\n\t\t\t\t\ttarget,\n\t\t\t\t\tbundle: detected.bundle,\n\t\t\t\t\tenvironment:\n\t\t\t\t\t\toptions.environment ?? (target === 'server' && detected.bundle ? undefined : detected.mode),\n\t\t\t\t\truntime: options.runtime,\n\t\t\t\t});\n\t\t\t\tfor (const file of result.watchFiles) {\n\t\t\t\t\tif (viteServer && !existsSync(file)) {\n\t\t\t\t\t\tmissingLayers.set(file, (missingLayers.get(file) ?? new Set()).add(id));\n\t\t\t\t\t\tviteServer.watcher.add(file);\n\t\t\t\t\t} else this.addWatchFile(file);\n\t\t\t\t}\n\t\t\t\treturn { code: result.code, moduleType: 'js' };\n\t\t\t},\n\t\t},\n\t\ttransform: {\n\t\t\tfilter: {\n\t\t\t\tid: { include: /\\.(?:[cm]?[jt]sx?|vue|svelte|astro)(?:\\?|$)/u, exclude: /[\\\\/]node_modules[\\\\/]/u },\n\t\t\t\tcode: tyfigoImportPattern,\n\t\t\t},\n\t\t\thandler(code, id, transformOptions?: { readonly ssr?: boolean }) {\n\t\t\t\tif ((options.target ?? detect(this, transformOptions).target) !== 'browser') return;\n\t\t\t\tconst messages = findNodeOnlyImports(code, id);\n\t\t\t\tif (messages.length > 0) throw new Error(messages.join('\\n'));\n\t\t\t},\n\t\t},\n\t\tvite: {\n\t\t\tconfigResolved(config) {\n\t\t\t\tviteCommand = config.command;\n\t\t\t\tviteMode = config.mode;\n\t\t\t},\n\t\t\tconfigureServer(server) {\n\t\t\t\tviteServer = server;\n\t\t\t\tserver.watcher.on('add', (file) => {\n\t\t\t\t\tconst ids = missingLayers.get(file);\n\t\t\t\t\tif (!ids) return;\n\t\t\t\t\tmissingLayers.delete(file);\n\t\t\t\t\tfor (const environment of Object.values(server.environments)) {\n\t\t\t\t\t\tfor (const id of ids) {\n\t\t\t\t\t\t\tconst module = environment.moduleGraph.getModuleById(id);\n\t\t\t\t\t\t\tif (module) environment.moduleGraph.invalidateModule(module);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tserver.ws.send({ type: 'full-reload' });\n\t\t\t\t});\n\t\t\t},\n\t\t},\n\t\trolldown: {\n\t\t\toptions(input) {\n\t\t\t\trolldownPlatform = input.platform;\n\t\t\t},\n\t\t},\n\t\tesbuild: { loader: 'js' },\n\t};\n};\n\nexport const tyfigo = createUnplugin(unpluginFactory);\n"],"mappings":";;;;;AAeA,MAAM,eAAe,aACpB,SAAS,QAAQ,SAAS,SAAS,KAAA,IAAY,SAAS,QAAQ;AAMjE,MAAa,mBAA4E,UAAU,CAAC,MAAM;CACzG,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,MAAM,gCAAgB,IAAI,IAAyB;CAEnD,MAAM,UACL,SACA,gBACqF;EACrF,MAAM,SAAS,QAAQ,wBAAwB;EAC/C,IAAI,QAAQ,cAAc,aAAa,QAAQ,cAAc,UAAU;GACtE,MAAM,WAAW,OAAO;GACxB,OAAO;IACN,QAAQ,iBAAiB,SAAS,QAAQ,IAAI,WAAW;IACzD,QAAQ;IACR,MAAM,YAAY,QAAQ;GAC3B;EACD;EACA,IAAI,QAAQ,cAAc,WACzB,OAAO;GAAE,QAAQ,OAAO,MAAM,eAAe,aAAa,SAAS,WAAW;GAAW,QAAQ;EAAK;EAEvG,IAAI,aAAa;GAChB,MAAM,WAAY,QAAwB,aAAa,OAAO;GAC9D,OAAO;IACN,SAAS,aAAa,KAAA,IAAY,aAAa,MAAM,aAAa,YAAY,WAAW;IACzF,QAAQ,gBAAgB;IACxB,MAAM;GACP;EACD;EACA,OAAO;GAAE,QAAQ,qBAAqB,SAAS,WAAW;GAAW,QAAQ;EAAK;CACnF;CAEA,OAAO;EACN,MAAM;EACN,SAAS;EACT,MAAM;GACL,QAAQ,EAAE,IAAI,kBAAkB;GAChC,QAAQ,IAAI,aAA0C;IACrD,MAAM,WAAW,OAAO,MAAM,WAAW;IACzC,MAAM,SAAS,QAAQ,UAAU,SAAS;IAC1C,MAAM,SAAS,iBAAiB,IAAI;KACnC;KACA,QAAQ,SAAS;KACjB,aACC,QAAQ,gBAAgB,WAAW,YAAY,SAAS,SAAS,KAAA,IAAY,SAAS;KACvF,SAAS,QAAQ;IAClB,CAAC;IACD,KAAK,MAAM,QAAQ,OAAO,YACzB,IAAI,cAAc,CAAC,WAAW,IAAI,GAAG;KACpC,cAAc,IAAI,OAAO,cAAc,IAAI,IAAI,qBAAK,IAAI,IAAI,EAAA,CAAG,IAAI,EAAE,CAAC;KACtE,WAAW,QAAQ,IAAI,IAAI;IAC5B,OAAO,KAAK,aAAa,IAAI;IAE9B,OAAO;KAAE,MAAM,OAAO;KAAM,YAAY;IAAK;GAC9C;EACD;EACA,WAAW;GACV,QAAQ;IACP,IAAI;KAAE,SAAS;KAAgD,SAAS;IAA0B;IAClG,MAAM;GACP;GACA,QAAQ,MAAM,IAAI,kBAA+C;IAChE,KAAK,QAAQ,UAAU,OAAO,MAAM,gBAAgB,CAAC,CAAC,YAAY,WAAW;IAC7E,MAAM,WAAW,oBAAoB,MAAM,EAAE;IAC7C,IAAI,SAAS,SAAS,GAAG,MAAM,IAAI,MAAM,SAAS,KAAK,IAAI,CAAC;GAC7D;EACD;EACA,MAAM;GACL,eAAe,QAAQ;IACtB,cAAc,OAAO;IACrB,WAAW,OAAO;GACnB;GACA,gBAAgB,QAAQ;IACvB,aAAa;IACb,OAAO,QAAQ,GAAG,QAAQ,SAAS;KAClC,MAAM,MAAM,cAAc,IAAI,IAAI;KAClC,IAAI,CAAC,KAAK;KACV,cAAc,OAAO,IAAI;KACzB,KAAK,MAAM,eAAe,OAAO,OAAO,OAAO,YAAY,GAC1D,KAAK,MAAM,MAAM,KAAK;MACrB,MAAM,SAAS,YAAY,YAAY,cAAc,EAAE;MACvD,IAAI,QAAQ,YAAY,YAAY,iBAAiB,MAAM;KAC5D;KAED,OAAO,GAAG,KAAK,EAAE,MAAM,cAAc,CAAC;IACvC,CAAC;GACF;EACD;EACA,UAAU,EACT,QAAQ,OAAO;GACd,mBAAmB,MAAM;EAC1B,EACD;EACA,SAAS,EAAE,QAAQ,KAAK;CACzB;AACD;AAEA,MAAa,SAAS,eAAe,eAAe"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tyfigo",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "Typed, validated application config for TypeScript: import layered YAML, TOML, JSONC, JSON5, INI, .properties and XML config files, typed by a TypeScript 7.1 content mapper",
5
5
  "keywords": [
6
6
  "config",
@@ -212,7 +212,7 @@
212
212
  },
213
213
  "lint-staged": {
214
214
  "*": "oxfmt --no-error-on-unmatched-pattern",
215
- "*.{js,mjs,cjs,ts,mts,cts}": "oxlint --fix"
215
+ "*.{js,mjs,cjs,ts,mts,cts}": "oxlint --fix --no-error-on-unmatched-pattern"
216
216
  },
217
217
  "commitlint": {
218
218
  "extends": [
@@ -1 +0,0 @@
1
- {"version":3,"file":"unplugin-Bkc569Qw.mjs","names":[],"sources":["../src/plugins/unplugin.ts"],"sourcesContent":["import { createUnplugin } from 'unplugin';\n\nimport { findNodeOnlyImports, isServerPlatform, loadConfigImport, tyfigoImportPattern } from './shared.ts';\n\nimport { configPathPattern } from '../core/index.ts';\n\nimport type { LoadOptions } from '../runtime/load.ts';\nimport type { TyfigoPluginOptions, WebpackLikeCompiler } from './shared.ts';\nimport type { UnpluginBuildContext, UnpluginFactory } from 'unplugin';\n\nexport type { TyfigoPluginOptions } from './shared.ts';\n\nconst webpackMode = (compiler: WebpackLikeCompiler) =>\n\tcompiler.options.mode === 'none' ? undefined : compiler.options.mode;\n\ninterface ViteContext {\n\treadonly environment?: { readonly config: { readonly consumer: string } };\n}\n\nexport const unpluginFactory: UnpluginFactory<TyfigoPluginOptions | undefined, false> = (options = {}) => {\n\tlet viteCommand: string | undefined;\n\tlet viteMode: string | undefined;\n\tlet rolldownPlatform: string | undefined;\n\n\tconst detect = (\n\t\tcontext: UnpluginBuildContext,\n\t\tloadOptions: { readonly ssr?: boolean } | undefined,\n\t): Pick<LoadOptions, 'target' | 'bundle'> & { readonly mode?: string | undefined } => {\n\t\tconst native = context.getNativeBuildContext?.();\n\t\tif (native?.framework === 'webpack' || native?.framework === 'rspack') {\n\t\t\tconst compiler = native.compiler as WebpackLikeCompiler;\n\t\t\treturn {\n\t\t\t\ttarget: isServerPlatform(compiler.platform) ? 'server' : 'browser',\n\t\t\t\tbundle: true,\n\t\t\t\tmode: webpackMode(compiler),\n\t\t\t};\n\t\t}\n\t\tif (native?.framework === 'esbuild') {\n\t\t\treturn { target: native.build.initialOptions.platform === 'node' ? 'server' : 'browser', bundle: true };\n\t\t}\n\t\tif (viteCommand) {\n\t\t\tconst consumer = (context as ViteContext).environment?.config.consumer;\n\t\t\treturn {\n\t\t\t\ttarget: (consumer === undefined ? loadOptions?.ssr : consumer === 'server') ? 'server' : 'browser',\n\t\t\t\tbundle: viteCommand === 'build',\n\t\t\t\tmode: viteMode,\n\t\t\t};\n\t\t}\n\t\treturn { target: rolldownPlatform === 'node' ? 'server' : 'browser', bundle: true };\n\t};\n\n\treturn {\n\t\tname: 'tyfigo',\n\t\tenforce: 'pre',\n\t\tload: {\n\t\t\tfilter: { id: configPathPattern },\n\t\t\thandler(id, loadOptions?: { readonly ssr?: boolean }) {\n\t\t\t\tconst detected = detect(this, loadOptions);\n\t\t\t\tconst target = options.target ?? detected.target;\n\t\t\t\tconst result = loadConfigImport(id, {\n\t\t\t\t\ttarget,\n\t\t\t\t\tbundle: detected.bundle,\n\t\t\t\t\tenvironment:\n\t\t\t\t\t\toptions.environment ?? (target === 'server' && detected.bundle ? undefined : detected.mode),\n\t\t\t\t\truntime: options.runtime,\n\t\t\t\t});\n\t\t\t\tfor (const file of result.watchFiles) this.addWatchFile(file);\n\t\t\t\treturn { code: result.code, moduleType: 'js' };\n\t\t\t},\n\t\t},\n\t\ttransform: {\n\t\t\tfilter: {\n\t\t\t\tid: { include: /\\.(?:[cm]?[jt]sx?|vue|svelte|astro)(?:\\?|$)/u, exclude: /[\\\\/]node_modules[\\\\/]/u },\n\t\t\t\tcode: tyfigoImportPattern,\n\t\t\t},\n\t\t\thandler(code, id, transformOptions?: { readonly ssr?: boolean }) {\n\t\t\t\tif ((options.target ?? detect(this, transformOptions).target) !== 'browser') return;\n\t\t\t\tconst messages = findNodeOnlyImports(code, id);\n\t\t\t\tif (messages.length > 0) throw new Error(messages.join('\\n'));\n\t\t\t},\n\t\t},\n\t\tvite: {\n\t\t\tconfigResolved(config) {\n\t\t\t\tviteCommand = config.command;\n\t\t\t\tviteMode = config.mode;\n\t\t\t},\n\t\t},\n\t\trolldown: {\n\t\t\toptions(input) {\n\t\t\t\trolldownPlatform = input.platform;\n\t\t\t},\n\t\t},\n\t\tesbuild: { loader: 'js' },\n\t};\n};\n\nexport const tyfigo = createUnplugin(unpluginFactory);\n"],"mappings":";;;;AAYA,MAAM,eAAe,aACpB,SAAS,QAAQ,SAAS,SAAS,KAAA,IAAY,SAAS,QAAQ;AAMjE,MAAa,mBAA4E,UAAU,CAAC,MAAM;CACzG,IAAI;CACJ,IAAI;CACJ,IAAI;CAEJ,MAAM,UACL,SACA,gBACqF;EACrF,MAAM,SAAS,QAAQ,wBAAwB;EAC/C,IAAI,QAAQ,cAAc,aAAa,QAAQ,cAAc,UAAU;GACtE,MAAM,WAAW,OAAO;GACxB,OAAO;IACN,QAAQ,iBAAiB,SAAS,QAAQ,IAAI,WAAW;IACzD,QAAQ;IACR,MAAM,YAAY,QAAQ;GAC3B;EACD;EACA,IAAI,QAAQ,cAAc,WACzB,OAAO;GAAE,QAAQ,OAAO,MAAM,eAAe,aAAa,SAAS,WAAW;GAAW,QAAQ;EAAK;EAEvG,IAAI,aAAa;GAChB,MAAM,WAAY,QAAwB,aAAa,OAAO;GAC9D,OAAO;IACN,SAAS,aAAa,KAAA,IAAY,aAAa,MAAM,aAAa,YAAY,WAAW;IACzF,QAAQ,gBAAgB;IACxB,MAAM;GACP;EACD;EACA,OAAO;GAAE,QAAQ,qBAAqB,SAAS,WAAW;GAAW,QAAQ;EAAK;CACnF;CAEA,OAAO;EACN,MAAM;EACN,SAAS;EACT,MAAM;GACL,QAAQ,EAAE,IAAI,kBAAkB;GAChC,QAAQ,IAAI,aAA0C;IACrD,MAAM,WAAW,OAAO,MAAM,WAAW;IACzC,MAAM,SAAS,QAAQ,UAAU,SAAS;IAC1C,MAAM,SAAS,iBAAiB,IAAI;KACnC;KACA,QAAQ,SAAS;KACjB,aACC,QAAQ,gBAAgB,WAAW,YAAY,SAAS,SAAS,KAAA,IAAY,SAAS;KACvF,SAAS,QAAQ;IAClB,CAAC;IACD,KAAK,MAAM,QAAQ,OAAO,YAAY,KAAK,aAAa,IAAI;IAC5D,OAAO;KAAE,MAAM,OAAO;KAAM,YAAY;IAAK;GAC9C;EACD;EACA,WAAW;GACV,QAAQ;IACP,IAAI;KAAE,SAAS;KAAgD,SAAS;IAA0B;IAClG,MAAM;GACP;GACA,QAAQ,MAAM,IAAI,kBAA+C;IAChE,KAAK,QAAQ,UAAU,OAAO,MAAM,gBAAgB,CAAC,CAAC,YAAY,WAAW;IAC7E,MAAM,WAAW,oBAAoB,MAAM,EAAE;IAC7C,IAAI,SAAS,SAAS,GAAG,MAAM,IAAI,MAAM,SAAS,KAAK,IAAI,CAAC;GAC7D;EACD;EACA,MAAM,EACL,eAAe,QAAQ;GACtB,cAAc,OAAO;GACrB,WAAW,OAAO;EACnB,EACD;EACA,UAAU,EACT,QAAQ,OAAO;GACd,mBAAmB,MAAM;EAC1B,EACD;EACA,SAAS,EAAE,QAAQ,KAAK;CACzB;AACD;AAEA,MAAa,SAAS,eAAe,eAAe"}