@powerlines/engine 0.43.27 → 0.43.28
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/dist/_internal/worker.cjs +18 -11
- package/dist/_internal/worker.mjs +18 -11
- package/dist/_internal/worker.mjs.map +1 -1
- package/dist/api.cjs +1 -1
- package/dist/api.mjs +1 -1
- package/dist/{base-context-CFvO2N9I.cjs → base-context-BgAxrobW.cjs} +8 -10
- package/dist/{base-context-BUnL_9z8.mjs → base-context-D9PKchy4.mjs} +9 -11
- package/dist/base-context-D9PKchy4.mjs.map +1 -0
- package/dist/context/index.cjs +3 -3
- package/dist/context/index.mjs +3 -3
- package/dist/{engine-context-NO6enYev.cjs → engine-context-B5zOInDj.cjs} +1 -1
- package/dist/{engine-context-BuD9AGfd.mjs → engine-context-B7_Cc9N2.mjs} +2 -2
- package/dist/{engine-context-BuD9AGfd.mjs.map → engine-context-B7_Cc9N2.mjs.map} +1 -1
- package/dist/{execution-context-DyQewevZ.mjs → execution-context-BmRT3Anb.mjs} +12 -3
- package/dist/{execution-context-DyQewevZ.mjs.map → execution-context-BmRT3Anb.mjs.map} +1 -1
- package/dist/{execution-context-DiR9f4Pj.cjs → execution-context-R45_zd18.cjs} +11 -2
- package/dist/index.cjs +1 -1
- package/dist/index.mjs +1 -1
- package/package.json +3 -3
- package/dist/base-context-BUnL_9z8.mjs.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const require_chunk = require('./chunk-C0xms8kb.cjs');
|
|
2
|
-
const require_base_context = require('./base-context-
|
|
2
|
+
const require_base_context = require('./base-context-BgAxrobW.cjs');
|
|
3
3
|
const require_fs = require('./fs-XogSgMqT.cjs');
|
|
4
4
|
const require_virtual = require('./virtual-BNdKVkRw.cjs');
|
|
5
5
|
const require_tsconfig = require('./tsconfig-DeyWQC2N.cjs');
|
|
@@ -1964,6 +1964,14 @@ var PowerlinesContext = class PowerlinesContext extends require_base_context.Pow
|
|
|
1964
1964
|
* Initialize the context with the provided configuration options
|
|
1965
1965
|
*/
|
|
1966
1966
|
async innerSetup() {
|
|
1967
|
+
if (!this.options.mode && !this.config.userConfig?.mode && !this.config.inlineConfig?.mode && !this.config.pluginConfig?.mode) {
|
|
1968
|
+
this.options.mode = "production";
|
|
1969
|
+
this.config.mode = "production";
|
|
1970
|
+
}
|
|
1971
|
+
if (!this.options.framework && !this.config.userConfig?.framework && !this.config.inlineConfig?.framework && !this.config.pluginConfig?.framework) {
|
|
1972
|
+
this.options.framework = "powerlines";
|
|
1973
|
+
this.config.framework = "powerlines";
|
|
1974
|
+
}
|
|
1967
1975
|
this.resolvedConfig.compatibilityDate = (0, compatx.resolveCompatibilityDates)(this.config.inlineConfig.compatibilityDate ?? this.config.userConfig.compatibilityDate ?? this.config.pluginConfig.compatibilityDate, "latest");
|
|
1968
1976
|
this.logger = {
|
|
1969
1977
|
log: this.createLog(this.config.name),
|
|
@@ -2005,7 +2013,8 @@ var PowerlinesContext = class PowerlinesContext extends require_base_context.Pow
|
|
|
2005
2013
|
if (this.config.output.path) this.config.output.path = (0, _stryke_path_append.appendPath)((0, _powerlines_core_plugin_utils.replacePathTokens)(this, this.config.output.path), this.config.cwd);
|
|
2006
2014
|
if (this.config.output.copy !== false) {
|
|
2007
2015
|
this.config.output.copy ??= {};
|
|
2008
|
-
this.config.output.copy.path = (0, _stryke_path_append.appendPath)((0, _powerlines_core_plugin_utils.replacePathTokens)(this, this.config.output.copy.path
|
|
2016
|
+
if (!this.config.root.replace(/^\.\/?/, "")) this.config.output.copy.path = this.config.output.copy.path ? (0, _stryke_path_append.appendPath)((0, _powerlines_core_plugin_utils.replacePathTokens)(this, this.config.output.copy.path), this.config.cwd) : this.config.output.path;
|
|
2017
|
+
else this.config.output.copy.path = (0, _stryke_path_append.appendPath)((0, _powerlines_core_plugin_utils.replacePathTokens)(this, this.config.output.copy.path || (0, _stryke_path_join.joinPaths)("dist", this.config.root)), this.config.cwd);
|
|
2009
2018
|
}
|
|
2010
2019
|
if (this.config.output.dts !== false && this.config.output.types !== false) this.config.output.types = (0, _stryke_path_append.appendPath)((0, _powerlines_core_plugin_utils.replacePathTokens)(this, this.config.output.types || (0, _stryke_path_join.joinPaths)(this.config.root, `${this.config.framework ?? "powerlines"}.d.ts`)), this.config.cwd);
|
|
2011
2020
|
if (this.config.output.copy && this.config.output.copy.path && this.config.output.copy.assets && Array.isArray(this.config.output.copy.assets)) this.config.output.copy.assets = (0, _stryke_helpers_get_unique.getUniqueBy)(this.config.output.copy.assets.map((asset) => {
|
package/dist/index.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
2
|
const require_chunk = require('./chunk-C0xms8kb.cjs');
|
|
3
|
-
const require_engine_context = require('./engine-context-
|
|
3
|
+
const require_engine_context = require('./engine-context-B5zOInDj.cjs');
|
|
4
4
|
let _powerlines_core_constants = require("@powerlines/core/constants");
|
|
5
5
|
let _stryke_fs_resolve = require("@stryke/fs/resolve");
|
|
6
6
|
let _stryke_path_join = require("@stryke/path/join");
|
package/dist/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as PowerlinesEngineContext } from "./engine-context-
|
|
1
|
+
import { t as PowerlinesEngineContext } from "./engine-context-B7_Cc9N2.mjs";
|
|
2
2
|
import { POWERLINES_API_FUNCTIONS } from "@powerlines/core/constants";
|
|
3
3
|
import { resolvePackage } from "@stryke/fs/resolve";
|
|
4
4
|
import { joinPaths } from "@stryke/path/join";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@powerlines/engine",
|
|
3
|
-
"version": "0.43.
|
|
3
|
+
"version": "0.43.28",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "An internal package containing the core engine modules for Powerlines.",
|
|
6
6
|
"homepage": "https://stormsoftware.com",
|
|
@@ -137,7 +137,7 @@
|
|
|
137
137
|
"@cacheable/memory": "^2.0.8",
|
|
138
138
|
"@donedeal0/superdiff": "^3.2.0",
|
|
139
139
|
"@jridgewell/sourcemap-codec": "^1.5.5",
|
|
140
|
-
"@powerlines/core": "^0.43.
|
|
140
|
+
"@powerlines/core": "^0.43.28",
|
|
141
141
|
"@storm-software/config": "^1.137.32",
|
|
142
142
|
"@storm-software/config-tools": "^1.189.78",
|
|
143
143
|
"@stryke/capnp": "^0.12.93",
|
|
@@ -179,5 +179,5 @@
|
|
|
179
179
|
"typescript": "^6.0.3",
|
|
180
180
|
"undici-types": "^7.25.0"
|
|
181
181
|
},
|
|
182
|
-
"gitHead": "
|
|
182
|
+
"gitHead": "efeaec793549f37c700f2e876bf6097c37375c46"
|
|
183
183
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"base-context-BUnL_9z8.mjs","names":["#timestamp","#logLevel"],"sources":["../src/_internal/helpers/resolver.ts","../src/context/base-context.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Powerlines\n\n This code was released as part of the Powerlines project. Powerlines\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/powerlines.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/powerlines\n Documentation: https://docs.stormsoftware.com/projects/powerlines\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport type { ResolvedConfig, Resolver } from \"@powerlines/core\";\nimport { joinPaths } from \"@stryke/path/join-paths\";\nimport defu from \"defu\";\nimport { JitiOptions, createJiti } from \"jiti\";\n\nexport type CreateResolverOptions = Omit<\n JitiOptions,\n \"fsCache\" | \"moduleCache\" | \"interopDefault\"\n> &\n Pick<ResolvedConfig, \"mode\" | \"logLevel\" | \"skipCache\"> & {\n workspaceRoot: string;\n root: string;\n cacheDir: string;\n };\n\n/**\n * Create a Jiti resolver for the given workspace and project root.\n *\n * @param options - The options for creating the resolver.\n * @returns A Jiti instance configured for the specified workspace and project root.\n */\nfunction resolveOptions(options: CreateResolverOptions): JitiOptions {\n return defu(options, {\n interopDefault: true,\n fsCache:\n options.mode !== \"development\"\n ? joinPaths(options.cacheDir, \"jiti\")\n : false,\n moduleCache: options.mode !== \"development\"\n });\n}\n\n/**\n * Create a Jiti resolver for the given workspace and project root.\n *\n * @param options - The options for creating the resolver.\n * @returns A Jiti instance configured for the specified workspace and project root.\n */\nexport function createResolver(options: CreateResolverOptions): Resolver {\n const baseResolver = createJiti(\n joinPaths(options.workspaceRoot, options.root),\n resolveOptions(options)\n ) as Resolver;\n baseResolver.plugin = createJiti(\n joinPaths(options.workspaceRoot, options.root),\n resolveOptions(options)\n );\n\n return baseResolver;\n}\n","/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Powerlines\n\n This code was released as part of the Powerlines project. Powerlines\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/powerlines.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/powerlines\n Documentation: https://docs.stormsoftware.com/projects/powerlines\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport type {\n BaseContext,\n EngineOptions,\n LogFn,\n Logger,\n LogLevel,\n ParsedUserConfig,\n ResolvedEngineOptions,\n Resolver\n} from \"@powerlines/core\";\nimport { loadUserConfigFile } from \"@powerlines/core/lib/config\";\nimport { createLog, extendLog } from \"@powerlines/core/lib/logger\";\nimport { LogLevelLabel } from \"@storm-software/config-tools/types\";\nimport { EnvPaths, getEnvPaths } from \"@stryke/env/get-env-paths\";\nimport { resolvePackage } from \"@stryke/fs/resolve\";\nimport { StormJSON } from \"@stryke/json/storm-json\";\nimport { isNull } from \"@stryke/type-checks/is-null\";\nimport { isString } from \"@stryke/type-checks/is-string\";\nimport chalk from \"chalk\";\nimport { formatDistanceToNowStrict } from \"date-fns/formatDistanceToNowStrict\";\nimport defu from \"defu\";\nimport { UnpluginMessage } from \"unplugin\";\nimport { createResolver } from \"../_internal/helpers/resolver\";\n\nexport class PowerlinesBaseContext implements BaseContext {\n #timestamp: number = Date.now();\n\n #logLevel: LogLevel | null = \"info\";\n\n /**\n * The path to the Powerlines package\n */\n public powerlinesPath!: string;\n\n /**\n * The module resolver for the project\n */\n public resolver!: Resolver;\n\n /**\n * The options provided to the Powerlines process\n */\n public options!: ResolvedEngineOptions;\n\n /**\n * The parsed configuration file for the project\n */\n public configFile!: ParsedUserConfig;\n\n /**\n * A timestamp representing when the context was initialized\n */\n public get timestamp(): Date {\n return new Date(this.#timestamp);\n }\n\n public get logLevel(): LogLevel | null {\n return this.#logLevel || \"info\";\n }\n\n public set logLevel(level: LogLevel | null) {\n this.#logLevel = level;\n }\n\n /**\n * The logger function\n */\n public get log(): LogFn {\n const level = this.logLevel || \"info\";\n if (!this.logger || this.logger.level !== level) {\n this.logger = {\n log: this.createLog(),\n level\n };\n }\n\n return this.logger.log;\n }\n\n /**\n * The environment paths for the project\n */\n public get envPaths(): EnvPaths {\n return getEnvPaths({\n orgId: this.options.organization,\n appId: this.options.framework || \"powerlines\",\n workspaceRoot: this.options.cwd || process.cwd() || \".\"\n });\n }\n\n /**\n * Creates a clone of the current context with the same configuration and workspace settings. This can be useful for running multiple builds in parallel or for creating isolated contexts for different parts of the build process.\n *\n * @remarks\n * The cloned context will have the same configuration and workspace settings as the original context, but will have a different build ID, release ID, and timestamp. The virtual file system and caches will also be separate between the original and cloned contexts.\n *\n * @returns A promise that resolves to the cloned context.\n */\n public async clone(): Promise<BaseContext> {\n const clone = new PowerlinesBaseContext();\n await clone.init(this.options);\n\n return clone;\n }\n\n /**\n * A logging function for fatal messages\n *\n * @param message - The message to log.\n */\n public fatal(message: string | UnpluginMessage) {\n this.log(\n LogLevelLabel.FATAL,\n isString(message) ? message : StormJSON.stringify(message)\n );\n }\n\n /**\n * A logging function for error messages\n *\n * @param message - The message to log.\n */\n public error(message: string | UnpluginMessage) {\n this.log(\n LogLevelLabel.ERROR,\n isString(message) ? message : StormJSON.stringify(message)\n );\n }\n\n /**\n * A logging function for warning messages\n *\n * @param message - The message to log.\n */\n public warn(message: string | UnpluginMessage) {\n this.log(\n LogLevelLabel.WARN,\n isString(message) ? message : StormJSON.stringify(message)\n );\n }\n\n /**\n * A logging function for informational messages\n *\n * @param message - The message to log.\n */\n public info(message: string | UnpluginMessage) {\n this.log(\n LogLevelLabel.INFO,\n isString(message) ? message : StormJSON.stringify(message)\n );\n }\n\n /**\n * A logging function for debug messages\n *\n * @param message - The message to log.\n */\n public debug(message: string | UnpluginMessage) {\n this.log(\n LogLevelLabel.DEBUG,\n isString(message) ? message : StormJSON.stringify(message)\n );\n }\n\n /**\n * A logging function for trace messages\n *\n * @param message - The message to log.\n */\n public trace(message: string | UnpluginMessage) {\n this.log(\n LogLevelLabel.TRACE,\n isString(message) ? message : StormJSON.stringify(message)\n );\n }\n\n /**\n * A function to create a timer for measuring the duration of asynchronous operations\n *\n * @example\n * ```ts\n * const stopTimer = context.timer(\"Your Async Operation\");\n * await performAsyncOperation();\n * stopTimer(); // \"Your Async Operation completed in 123.45 milliseconds\"\n * ```\n *\n * @param name - The name of the timer.\n * @returns A function that, when called, stops the timer and logs the duration.\n */\n public timer(name: string): () => void {\n const startDate = Date.now();\n const startDuration = performance.now();\n\n return () => {\n const duration = performance.now() - startDuration;\n this.log(\n LogLevelLabel.PERFORMANCE,\n `${chalk.bold.cyanBright(name)} completed in ${chalk.bold.cyanBright(\n duration < 1000\n ? `${duration.toFixed(2)} milliseconds`\n : formatDistanceToNowStrict(startDate)\n )}`\n );\n };\n }\n\n /**\n * Create a new logger instance\n *\n * @param name - The name to use for the logger instance\n * @returns A logger function\n */\n public createLog(name: string | null = null): LogFn {\n return createLog(name, {\n ...this.options,\n logLevel: isNull(this.logLevel) ? \"silent\" : this.logLevel\n });\n }\n\n /**\n * Extend the current logger instance with a new name\n *\n * @param name - The name to use for the extended logger instance\n * @returns A logger function\n */\n public extendLog(name: string): LogFn {\n return extendLog(this.log, name);\n }\n\n /**\n * A logger function specific to this context\n */\n protected logger!: Logger;\n\n /**\n * Initialize the context with the provided configuration options\n *\n * @remarks\n * This method will set up the resolver and load the user configuration file based on the provided options. It is called during the construction of the context and can also be called when cloning the context to ensure that the new context has the same configuration and resolver setup.\n *\n * @param options - The configuration options to initialize the context with\n */\n protected async init(options: Partial<EngineOptions> = {}) {\n if (!this.powerlinesPath) {\n const powerlinesPath = await resolvePackage(\"powerlines\");\n if (!powerlinesPath) {\n throw new Error(\"Could not resolve `powerlines` package location.\");\n }\n this.powerlinesPath = powerlinesPath;\n }\n\n this.options = defu(\n {\n root: options.root,\n cwd: options.cwd,\n mode: options.mode,\n framework: options.framework,\n organization: options.organization,\n configFile: options.configFile\n },\n this.options ?? {},\n {\n cwd: process.cwd() || \".\",\n mode: \"production\",\n framework: \"powerlines\"\n }\n ) as ResolvedEngineOptions;\n\n this.resolver = createResolver({\n workspaceRoot: this.options.cwd,\n root: this.options.root,\n cacheDir: this.envPaths.cache,\n mode: this.options.mode,\n logLevel: this.logLevel\n });\n\n this.configFile = await loadUserConfigFile(this.options, this.resolver);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAuCA,SAAS,eAAe,SAA6C;AACnE,QAAO,KAAK,SAAS;EACnB,gBAAgB;EAChB,SACE,QAAQ,SAAS,gBACb,UAAU,QAAQ,UAAU,OAAO,GACnC;EACN,aAAa,QAAQ,SAAS;EAC/B,CAAC;;;;;;;;AASJ,SAAgB,eAAe,SAA0C;CACvE,MAAM,eAAe,WACnB,UAAU,QAAQ,eAAe,QAAQ,KAAK,EAC9C,eAAe,QAAQ,CACxB;AACD,cAAa,SAAS,WACpB,UAAU,QAAQ,eAAe,QAAQ,KAAK,EAC9C,eAAe,QAAQ,CACxB;AAED,QAAO;;;;;ACxBT,IAAa,wBAAb,MAAa,sBAA6C;CACxD,aAAqB,KAAK,KAAK;CAE/B,YAA6B;;;;CAK7B,AAAO;;;;CAKP,AAAO;;;;CAKP,AAAO;;;;CAKP,AAAO;;;;CAKP,IAAW,YAAkB;AAC3B,SAAO,IAAI,KAAK,MAAKA,UAAW;;CAGlC,IAAW,WAA4B;AACrC,SAAO,MAAKC,YAAa;;CAG3B,IAAW,SAAS,OAAwB;AAC1C,QAAKA,WAAY;;;;;CAMnB,IAAW,MAAa;EACtB,MAAM,QAAQ,KAAK,YAAY;AAC/B,MAAI,CAAC,KAAK,UAAU,KAAK,OAAO,UAAU,MACxC,MAAK,SAAS;GACZ,KAAK,KAAK,WAAW;GACrB;GACD;AAGH,SAAO,KAAK,OAAO;;;;;CAMrB,IAAW,WAAqB;AAC9B,SAAO,YAAY;GACjB,OAAO,KAAK,QAAQ;GACpB,OAAO,KAAK,QAAQ,aAAa;GACjC,eAAe,KAAK,QAAQ,OAAO,QAAQ,KAAK,IAAI;GACrD,CAAC;;;;;;;;;;CAWJ,MAAa,QAA8B;EACzC,MAAM,QAAQ,IAAI,uBAAuB;AACzC,QAAM,MAAM,KAAK,KAAK,QAAQ;AAE9B,SAAO;;;;;;;CAQT,AAAO,MAAM,SAAmC;AAC9C,OAAK,IACH,cAAc,OACd,SAAS,QAAQ,GAAG,UAAU,UAAU,UAAU,QAAQ,CAC3D;;;;;;;CAQH,AAAO,MAAM,SAAmC;AAC9C,OAAK,IACH,cAAc,OACd,SAAS,QAAQ,GAAG,UAAU,UAAU,UAAU,QAAQ,CAC3D;;;;;;;CAQH,AAAO,KAAK,SAAmC;AAC7C,OAAK,IACH,cAAc,MACd,SAAS,QAAQ,GAAG,UAAU,UAAU,UAAU,QAAQ,CAC3D;;;;;;;CAQH,AAAO,KAAK,SAAmC;AAC7C,OAAK,IACH,cAAc,MACd,SAAS,QAAQ,GAAG,UAAU,UAAU,UAAU,QAAQ,CAC3D;;;;;;;CAQH,AAAO,MAAM,SAAmC;AAC9C,OAAK,IACH,cAAc,OACd,SAAS,QAAQ,GAAG,UAAU,UAAU,UAAU,QAAQ,CAC3D;;;;;;;CAQH,AAAO,MAAM,SAAmC;AAC9C,OAAK,IACH,cAAc,OACd,SAAS,QAAQ,GAAG,UAAU,UAAU,UAAU,QAAQ,CAC3D;;;;;;;;;;;;;;;CAgBH,AAAO,MAAM,MAA0B;EACrC,MAAM,YAAY,KAAK,KAAK;EAC5B,MAAM,gBAAgB,YAAY,KAAK;AAEvC,eAAa;GACX,MAAM,WAAW,YAAY,KAAK,GAAG;AACrC,QAAK,IACH,cAAc,aACd,GAAG,MAAM,KAAK,WAAW,KAAK,CAAC,gBAAgB,MAAM,KAAK,WACxD,WAAW,MACP,GAAG,SAAS,QAAQ,EAAE,CAAC,iBACvB,0BAA0B,UAAU,CACzC,GACF;;;;;;;;;CAUL,AAAO,UAAU,OAAsB,MAAa;AAClD,SAAO,UAAU,MAAM;GACrB,GAAG,KAAK;GACR,UAAU,OAAO,KAAK,SAAS,GAAG,WAAW,KAAK;GACnD,CAAC;;;;;;;;CASJ,AAAO,UAAU,MAAqB;AACpC,SAAO,UAAU,KAAK,KAAK,KAAK;;;;;CAMlC,AAAU;;;;;;;;;CAUV,MAAgB,KAAK,UAAkC,EAAE,EAAE;AACzD,MAAI,CAAC,KAAK,gBAAgB;GACxB,MAAM,iBAAiB,MAAM,eAAe,aAAa;AACzD,OAAI,CAAC,eACH,OAAM,IAAI,MAAM,mDAAmD;AAErE,QAAK,iBAAiB;;AAGxB,OAAK,UAAU,KACb;GACE,MAAM,QAAQ;GACd,KAAK,QAAQ;GACb,MAAM,QAAQ;GACd,WAAW,QAAQ;GACnB,cAAc,QAAQ;GACtB,YAAY,QAAQ;GACrB,EACD,KAAK,WAAW,EAAE,EAClB;GACE,KAAK,QAAQ,KAAK,IAAI;GACtB,MAAM;GACN,WAAW;GACZ,CACF;AAED,OAAK,WAAW,eAAe;GAC7B,eAAe,KAAK,QAAQ;GAC5B,MAAM,KAAK,QAAQ;GACnB,UAAU,KAAK,SAAS;GACxB,MAAM,KAAK,QAAQ;GACnB,UAAU,KAAK;GAChB,CAAC;AAEF,OAAK,aAAa,MAAM,mBAAmB,KAAK,SAAS,KAAK,SAAS"}
|