@kubb/fabric-core 0.1.4 → 0.1.6
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/{App-D3DHa4Il.d.cts → App-Cplfh8QA.d.cts} +21 -18
- package/dist/{App-BxAl3dNP.d.ts → App-Dvetv2V_.d.ts} +21 -18
- package/dist/createParser-17uGjfu3.js +11 -0
- package/dist/createParser-17uGjfu3.js.map +1 -0
- package/dist/createParser-C4IkyTs5.cjs +17 -0
- package/dist/createParser-C4IkyTs5.cjs.map +1 -0
- package/dist/{defaultParser-vwyTb1XT.js → defaultParser--HzU9LPa.js} +2 -2
- package/dist/{defaultParser-vwyTb1XT.js.map → defaultParser--HzU9LPa.js.map} +1 -1
- package/dist/{defaultParser-Dl-OrbH1.cjs → defaultParser-n9VW2iVf.cjs} +2 -2
- package/dist/{defaultParser-Dl-OrbH1.cjs.map → defaultParser-n9VW2iVf.cjs.map} +1 -1
- package/dist/defineProperty-3OJdpith.js +168 -0
- package/dist/defineProperty-3OJdpith.js.map +1 -0
- package/dist/defineProperty-CjCLDutJ.cjs +201 -0
- package/dist/defineProperty-CjCLDutJ.cjs.map +1 -0
- package/dist/getRelativePath-C6lvNCs7.cjs +26 -0
- package/dist/getRelativePath-C6lvNCs7.cjs.map +1 -0
- package/dist/getRelativePath-CERJmYkp.js +19 -0
- package/dist/getRelativePath-CERJmYkp.js.map +1 -0
- package/dist/index-Agz-2M75.d.ts +18 -0
- package/dist/index-C3GyFwE1.d.cts +18 -0
- package/dist/index.cjs +56 -205
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -14
- package/dist/index.d.ts +3 -14
- package/dist/index.js +28 -174
- package/dist/index.js.map +1 -1
- package/dist/parsers/typescript.cjs +4 -2
- package/dist/parsers/typescript.d.cts +2 -2
- package/dist/parsers/typescript.d.ts +2 -2
- package/dist/parsers/typescript.js +4 -2
- package/dist/parsers.cjs +5 -3
- package/dist/parsers.cjs.map +1 -1
- package/dist/parsers.d.cts +3 -3
- package/dist/parsers.d.ts +3 -3
- package/dist/parsers.js +5 -3
- package/dist/parsers.js.map +1 -1
- package/dist/plugins.cjs +207 -17
- package/dist/plugins.cjs.map +1 -1
- package/dist/plugins.d.cts +40 -7
- package/dist/plugins.d.ts +40 -7
- package/dist/plugins.js +194 -4
- package/dist/plugins.js.map +1 -1
- package/dist/{chunk-CUT6urMc.cjs → trimExtName-Bb4zGVF1.cjs} +14 -1
- package/dist/trimExtName-Bb4zGVF1.cjs.map +1 -0
- package/dist/trimExtName-CeOVQVbu.js +8 -0
- package/dist/trimExtName-CeOVQVbu.js.map +1 -0
- package/dist/types.d.cts +2 -2
- package/dist/types.d.ts +2 -2
- package/dist/{typescriptParser-CctRhsng.d.ts → typescriptParser-B49WHoGL.d.ts} +2 -2
- package/dist/{typescriptParser-JawJ8wET.cjs → typescriptParser-CNHO6H2_.cjs} +10 -24
- package/dist/typescriptParser-CNHO6H2_.cjs.map +1 -0
- package/dist/{typescriptParser-CrzOv_Aw.js → typescriptParser-CWT7zCJy.js} +5 -18
- package/dist/typescriptParser-CWT7zCJy.js.map +1 -0
- package/dist/{typescriptParser--N0n8KFn.d.cts → typescriptParser-CxGhFQXh.d.cts} +2 -2
- package/package.json +1 -1
- package/src/App.ts +28 -19
- package/src/FileManager.ts +8 -1
- package/src/FileProcessor.ts +7 -1
- package/src/defineApp.ts +7 -7
- package/src/parsers/createParser.ts +1 -1
- package/src/parsers/types.ts +2 -2
- package/src/plugins/barrelPlugin.ts +189 -0
- package/src/plugins/createPlugin.ts +1 -1
- package/src/plugins/fsPlugin.ts +19 -3
- package/src/plugins/index.ts +1 -0
- package/src/plugins/types.ts +4 -4
- package/src/utils/AsyncEventEmitter.ts +8 -0
- package/src/utils/EventEmitter.ts +8 -0
- package/src/utils/TreeNode.ts +118 -0
- package/dist/createParser-B_RpW6sx.js +0 -17
- package/dist/createParser-B_RpW6sx.js.map +0 -1
- package/dist/createParser-DZB5qExa.cjs +0 -29
- package/dist/createParser-DZB5qExa.cjs.map +0 -1
- package/dist/defineApp-B9W1A5SV.d.ts +0 -9
- package/dist/defineApp-BP97CT5p.d.cts +0 -9
- package/dist/typescriptParser-CrzOv_Aw.js.map +0 -1
- package/dist/typescriptParser-JawJ8wET.cjs.map +0 -1
|
@@ -116,24 +116,24 @@ type ResolvedFile<TMeta$1 extends object = object> = File<TMeta$1> & {
|
|
|
116
116
|
};
|
|
117
117
|
//#endregion
|
|
118
118
|
//#region src/plugins/types.d.ts
|
|
119
|
-
type Plugin<TOptions =
|
|
119
|
+
type Plugin<TOptions = unknown, TAppExtension$1 extends Record<string, any> = {}> = {
|
|
120
120
|
name: string;
|
|
121
121
|
type: 'plugin';
|
|
122
|
-
|
|
123
|
-
install: Install<TOptions> | Promise<Install<TOptions>>;
|
|
122
|
+
install: Install<TOptions>;
|
|
124
123
|
/**
|
|
125
124
|
* Runtime app overrides or extensions.
|
|
126
125
|
* Merged into the app instance after install.
|
|
126
|
+
* This cannot be async
|
|
127
127
|
*/
|
|
128
128
|
inject?: Inject<TOptions, TAppExtension$1>;
|
|
129
129
|
};
|
|
130
|
-
type UserPlugin<TOptions =
|
|
130
|
+
type UserPlugin<TOptions = unknown, TAppExtension$1 extends Record<string, any> = {}> = Omit<Plugin<TOptions, TAppExtension$1>, 'type'>;
|
|
131
131
|
//#endregion
|
|
132
132
|
//#region src/parsers/types.d.ts
|
|
133
133
|
type PrintOptions = {
|
|
134
134
|
extname?: Extname;
|
|
135
135
|
};
|
|
136
|
-
type Parser<TOptions =
|
|
136
|
+
type Parser<TOptions = unknown, TMeta$1 extends object = any> = {
|
|
137
137
|
name: string;
|
|
138
138
|
type: 'parser';
|
|
139
139
|
/**
|
|
@@ -146,7 +146,7 @@ type Parser<TOptions = any[], TMeta$1 extends object = any> = {
|
|
|
146
146
|
*/
|
|
147
147
|
parse(file: ResolvedFile<TMeta$1>, options: PrintOptions): Promise<string>;
|
|
148
148
|
};
|
|
149
|
-
type UserParser<TOptions =
|
|
149
|
+
type UserParser<TOptions = unknown, TMeta$1 extends object = any> = Omit<Parser<TOptions, TMeta$1>, 'type'>;
|
|
150
150
|
//#endregion
|
|
151
151
|
//#region src/utils/AsyncEventEmitter.d.ts
|
|
152
152
|
declare class AsyncEventEmitter<TEvents extends Record<string, any>> {
|
|
@@ -154,6 +154,7 @@ declare class AsyncEventEmitter<TEvents extends Record<string, any>> {
|
|
|
154
154
|
constructor(maxListener?: number);
|
|
155
155
|
emit<TEventName extends keyof TEvents & string>(eventName: TEventName, ...eventArgs: TEvents[TEventName]): Promise<void>;
|
|
156
156
|
on<TEventName extends keyof TEvents & string>(eventName: TEventName, handler: (...eventArg: TEvents[TEventName]) => void): void;
|
|
157
|
+
onOnce<TEventName extends keyof TEvents & string>(eventName: TEventName, handler: (...eventArgs: TEvents[TEventName]) => void): void;
|
|
157
158
|
off<TEventName extends keyof TEvents & string>(eventName: TEventName, handler: (...eventArg: TEvents[TEventName]) => void): void;
|
|
158
159
|
removeAll(): void;
|
|
159
160
|
}
|
|
@@ -194,6 +195,7 @@ type Options = {
|
|
|
194
195
|
};
|
|
195
196
|
declare class FileManager {
|
|
196
197
|
#private;
|
|
198
|
+
events: AsyncEventEmitter<AppEvents>;
|
|
197
199
|
processor: FileProcessor;
|
|
198
200
|
constructor({
|
|
199
201
|
events
|
|
@@ -208,20 +210,21 @@ declare class FileManager {
|
|
|
208
210
|
}
|
|
209
211
|
//#endregion
|
|
210
212
|
//#region src/App.d.ts
|
|
213
|
+
declare global {
|
|
214
|
+
namespace Kubb {
|
|
215
|
+
interface App {}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
211
218
|
type Component = any;
|
|
212
219
|
type AppEvents = {
|
|
213
220
|
/**
|
|
214
221
|
* Called in the beginning of the app lifecycle.
|
|
215
222
|
*/
|
|
216
|
-
start: [
|
|
217
|
-
app: App;
|
|
218
|
-
}];
|
|
223
|
+
start: [];
|
|
219
224
|
/**
|
|
220
225
|
* Called in the end of the app lifecycle.
|
|
221
226
|
*/
|
|
222
|
-
end: [
|
|
223
|
-
app: App;
|
|
224
|
-
}];
|
|
227
|
+
end: [];
|
|
225
228
|
/**
|
|
226
229
|
* Called when being rendered
|
|
227
230
|
*/
|
|
@@ -275,15 +278,15 @@ type AppContext<TOptions = unknown> = {
|
|
|
275
278
|
installedPlugins: Set<Plugin>;
|
|
276
279
|
installedParsers: Set<Parser>;
|
|
277
280
|
};
|
|
278
|
-
type
|
|
279
|
-
type
|
|
280
|
-
|
|
281
|
+
type AllOptional<T> = {} extends T ? true : false;
|
|
282
|
+
type Install<TOptions = unknown> = TOptions extends any[] ? (app: App, ...options: TOptions) => void | Promise<void> : AllOptional<TOptions> extends true ? (app: App, options: TOptions | undefined) => void | Promise<void> : (app: App, options: TOptions) => void | Promise<void>;
|
|
283
|
+
type Inject<TOptions = unknown, TAppExtension$1 extends Record<string, any> = {}> = TOptions extends any[] ? (app: App, ...options: TOptions) => Partial<TAppExtension$1> : AllOptional<TOptions> extends true ? (app: App, options: TOptions | undefined) => Partial<TAppExtension$1> : (app: App, options: TOptions) => Partial<TAppExtension$1>;
|
|
284
|
+
interface App<TOptions = unknown> extends Kubb.App {
|
|
281
285
|
context: AppContext<TOptions>;
|
|
282
286
|
files: Array<ResolvedFile>;
|
|
283
|
-
use<
|
|
284
|
-
use<TOptions extends any[] | object = any, TMeta extends object = object, TAppExtension extends Record<string, any> = {}>(pluginOrParser: Plugin<TOptions, TAppExtension> | Parser<TOptions, TMeta>): this & TAppExtension;
|
|
287
|
+
use<TPluginOptions = unknown, TMeta extends object = object, TAppExtension extends Record<string, any> = {}>(pluginOrParser: Plugin<TPluginOptions, TAppExtension> | Parser<TPluginOptions, TMeta>, ...options: TPluginOptions extends any[] ? NoInfer<TPluginOptions> : AllOptional<TPluginOptions> extends true ? [NoInfer<TPluginOptions>?] : [NoInfer<TPluginOptions>]): (this & TAppExtension) | Promise<this & TAppExtension>;
|
|
285
288
|
addFile(...files: Array<File>): Promise<void>;
|
|
286
289
|
}
|
|
287
290
|
//#endregion
|
|
288
291
|
export { FileProcessor as a, Plugin as c, File as d, KubbFile_d_exports as f, FileManager as i, UserPlugin as l, AppContext as n, Parser as o, ResolvedFile as p, Component as r, UserParser as s, App as t, Extname as u };
|
|
289
|
-
//# sourceMappingURL=App-
|
|
292
|
+
//# sourceMappingURL=App-Cplfh8QA.d.cts.map
|
|
@@ -116,24 +116,24 @@ type ResolvedFile<TMeta$1 extends object = object> = File<TMeta$1> & {
|
|
|
116
116
|
};
|
|
117
117
|
//#endregion
|
|
118
118
|
//#region src/plugins/types.d.ts
|
|
119
|
-
type Plugin<TOptions =
|
|
119
|
+
type Plugin<TOptions = unknown, TAppExtension$1 extends Record<string, any> = {}> = {
|
|
120
120
|
name: string;
|
|
121
121
|
type: 'plugin';
|
|
122
|
-
|
|
123
|
-
install: Install<TOptions> | Promise<Install<TOptions>>;
|
|
122
|
+
install: Install<TOptions>;
|
|
124
123
|
/**
|
|
125
124
|
* Runtime app overrides or extensions.
|
|
126
125
|
* Merged into the app instance after install.
|
|
126
|
+
* This cannot be async
|
|
127
127
|
*/
|
|
128
128
|
inject?: Inject<TOptions, TAppExtension$1>;
|
|
129
129
|
};
|
|
130
|
-
type UserPlugin<TOptions =
|
|
130
|
+
type UserPlugin<TOptions = unknown, TAppExtension$1 extends Record<string, any> = {}> = Omit<Plugin<TOptions, TAppExtension$1>, 'type'>;
|
|
131
131
|
//#endregion
|
|
132
132
|
//#region src/parsers/types.d.ts
|
|
133
133
|
type PrintOptions = {
|
|
134
134
|
extname?: Extname;
|
|
135
135
|
};
|
|
136
|
-
type Parser<TOptions =
|
|
136
|
+
type Parser<TOptions = unknown, TMeta$1 extends object = any> = {
|
|
137
137
|
name: string;
|
|
138
138
|
type: 'parser';
|
|
139
139
|
/**
|
|
@@ -146,7 +146,7 @@ type Parser<TOptions = any[], TMeta$1 extends object = any> = {
|
|
|
146
146
|
*/
|
|
147
147
|
parse(file: ResolvedFile<TMeta$1>, options: PrintOptions): Promise<string>;
|
|
148
148
|
};
|
|
149
|
-
type UserParser<TOptions =
|
|
149
|
+
type UserParser<TOptions = unknown, TMeta$1 extends object = any> = Omit<Parser<TOptions, TMeta$1>, 'type'>;
|
|
150
150
|
//#endregion
|
|
151
151
|
//#region src/utils/AsyncEventEmitter.d.ts
|
|
152
152
|
declare class AsyncEventEmitter<TEvents extends Record<string, any>> {
|
|
@@ -154,6 +154,7 @@ declare class AsyncEventEmitter<TEvents extends Record<string, any>> {
|
|
|
154
154
|
constructor(maxListener?: number);
|
|
155
155
|
emit<TEventName extends keyof TEvents & string>(eventName: TEventName, ...eventArgs: TEvents[TEventName]): Promise<void>;
|
|
156
156
|
on<TEventName extends keyof TEvents & string>(eventName: TEventName, handler: (...eventArg: TEvents[TEventName]) => void): void;
|
|
157
|
+
onOnce<TEventName extends keyof TEvents & string>(eventName: TEventName, handler: (...eventArgs: TEvents[TEventName]) => void): void;
|
|
157
158
|
off<TEventName extends keyof TEvents & string>(eventName: TEventName, handler: (...eventArg: TEvents[TEventName]) => void): void;
|
|
158
159
|
removeAll(): void;
|
|
159
160
|
}
|
|
@@ -194,6 +195,7 @@ type Options = {
|
|
|
194
195
|
};
|
|
195
196
|
declare class FileManager {
|
|
196
197
|
#private;
|
|
198
|
+
events: AsyncEventEmitter<AppEvents>;
|
|
197
199
|
processor: FileProcessor;
|
|
198
200
|
constructor({
|
|
199
201
|
events
|
|
@@ -208,20 +210,21 @@ declare class FileManager {
|
|
|
208
210
|
}
|
|
209
211
|
//#endregion
|
|
210
212
|
//#region src/App.d.ts
|
|
213
|
+
declare global {
|
|
214
|
+
namespace Kubb {
|
|
215
|
+
interface App {}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
211
218
|
type Component = any;
|
|
212
219
|
type AppEvents = {
|
|
213
220
|
/**
|
|
214
221
|
* Called in the beginning of the app lifecycle.
|
|
215
222
|
*/
|
|
216
|
-
start: [
|
|
217
|
-
app: App;
|
|
218
|
-
}];
|
|
223
|
+
start: [];
|
|
219
224
|
/**
|
|
220
225
|
* Called in the end of the app lifecycle.
|
|
221
226
|
*/
|
|
222
|
-
end: [
|
|
223
|
-
app: App;
|
|
224
|
-
}];
|
|
227
|
+
end: [];
|
|
225
228
|
/**
|
|
226
229
|
* Called when being rendered
|
|
227
230
|
*/
|
|
@@ -275,15 +278,15 @@ type AppContext<TOptions = unknown> = {
|
|
|
275
278
|
installedPlugins: Set<Plugin>;
|
|
276
279
|
installedParsers: Set<Parser>;
|
|
277
280
|
};
|
|
278
|
-
type
|
|
279
|
-
type
|
|
280
|
-
|
|
281
|
+
type AllOptional<T> = {} extends T ? true : false;
|
|
282
|
+
type Install<TOptions = unknown> = TOptions extends any[] ? (app: App, ...options: TOptions) => void | Promise<void> : AllOptional<TOptions> extends true ? (app: App, options: TOptions | undefined) => void | Promise<void> : (app: App, options: TOptions) => void | Promise<void>;
|
|
283
|
+
type Inject<TOptions = unknown, TAppExtension$1 extends Record<string, any> = {}> = TOptions extends any[] ? (app: App, ...options: TOptions) => Partial<TAppExtension$1> : AllOptional<TOptions> extends true ? (app: App, options: TOptions | undefined) => Partial<TAppExtension$1> : (app: App, options: TOptions) => Partial<TAppExtension$1>;
|
|
284
|
+
interface App<TOptions = unknown> extends Kubb.App {
|
|
281
285
|
context: AppContext<TOptions>;
|
|
282
286
|
files: Array<ResolvedFile>;
|
|
283
|
-
use<
|
|
284
|
-
use<TOptions extends any[] | object = any, TMeta extends object = object, TAppExtension extends Record<string, any> = {}>(pluginOrParser: Plugin<TOptions, TAppExtension> | Parser<TOptions, TMeta>): this & TAppExtension;
|
|
287
|
+
use<TPluginOptions = unknown, TMeta extends object = object, TAppExtension extends Record<string, any> = {}>(pluginOrParser: Plugin<TPluginOptions, TAppExtension> | Parser<TPluginOptions, TMeta>, ...options: TPluginOptions extends any[] ? NoInfer<TPluginOptions> : AllOptional<TPluginOptions> extends true ? [NoInfer<TPluginOptions>?] : [NoInfer<TPluginOptions>]): (this & TAppExtension) | Promise<this & TAppExtension>;
|
|
285
288
|
addFile(...files: Array<File>): Promise<void>;
|
|
286
289
|
}
|
|
287
290
|
//#endregion
|
|
288
291
|
export { FileProcessor as a, Plugin as c, File as d, KubbFile_d_exports as f, FileManager as i, UserPlugin as l, AppContext as n, Parser as o, ResolvedFile as p, Component as r, UserParser as s, App as t, Extname as u };
|
|
289
|
-
//# sourceMappingURL=App-
|
|
292
|
+
//# sourceMappingURL=App-Dvetv2V_.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createParser-17uGjfu3.js","names":[],"sources":["../src/parsers/createParser.ts"],"sourcesContent":["import type { Parser, UserParser } from './types.ts'\n\nexport function createParser<TOptions = unknown, TMeta extends object = any>(parser: UserParser<TOptions, TMeta>): Parser<TOptions, TMeta> {\n return {\n type: 'parser',\n ...parser,\n }\n}\n"],"mappings":";AAEA,SAAgB,aAA6D,QAA8D;AACzI,QAAO;EACL,MAAM;EACN,GAAG;EACJ"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
|
|
2
|
+
//#region src/parsers/createParser.ts
|
|
3
|
+
function createParser(parser) {
|
|
4
|
+
return {
|
|
5
|
+
type: "parser",
|
|
6
|
+
...parser
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
//#endregion
|
|
11
|
+
Object.defineProperty(exports, 'createParser', {
|
|
12
|
+
enumerable: true,
|
|
13
|
+
get: function () {
|
|
14
|
+
return createParser;
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
//# sourceMappingURL=createParser-C4IkyTs5.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createParser-C4IkyTs5.cjs","names":[],"sources":["../src/parsers/createParser.ts"],"sourcesContent":["import type { Parser, UserParser } from './types.ts'\n\nexport function createParser<TOptions = unknown, TMeta extends object = any>(parser: UserParser<TOptions, TMeta>): Parser<TOptions, TMeta> {\n return {\n type: 'parser',\n ...parser,\n }\n}\n"],"mappings":";;AAEA,SAAgB,aAA6D,QAA8D;AACzI,QAAO;EACL,MAAM;EACN,GAAG;EACJ"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as createParser } from "./createParser-
|
|
1
|
+
import { t as createParser } from "./createParser-17uGjfu3.js";
|
|
2
2
|
|
|
3
3
|
//#region src/parsers/defaultParser.ts
|
|
4
4
|
const defaultParser = createParser({
|
|
@@ -12,4 +12,4 @@ const defaultParser = createParser({
|
|
|
12
12
|
|
|
13
13
|
//#endregion
|
|
14
14
|
export { defaultParser as t };
|
|
15
|
-
//# sourceMappingURL=defaultParser
|
|
15
|
+
//# sourceMappingURL=defaultParser--HzU9LPa.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaultParser
|
|
1
|
+
{"version":3,"file":"defaultParser--HzU9LPa.js","names":[],"sources":["../src/parsers/defaultParser.ts"],"sourcesContent":["import { createParser } from './createParser.ts'\n\nexport const defaultParser = createParser({\n name: 'default',\n extNames: ['.json'],\n install() {},\n async parse(file) {\n return file.sources.map((item) => item.value).join('\\n\\n')\n },\n})\n"],"mappings":";;;AAEA,MAAa,gBAAgB,aAAa;CACxC,MAAM;CACN,UAAU,CAAC,QAAQ;CACnB,UAAU;CACV,MAAM,MAAM,MAAM;AAChB,SAAO,KAAK,QAAQ,KAAK,SAAS,KAAK,MAAM,CAAC,KAAK,OAAO;;CAE7D,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const require_createParser = require('./createParser-
|
|
1
|
+
const require_createParser = require('./createParser-C4IkyTs5.cjs');
|
|
2
2
|
|
|
3
3
|
//#region src/parsers/defaultParser.ts
|
|
4
4
|
const defaultParser = require_createParser.createParser({
|
|
@@ -17,4 +17,4 @@ Object.defineProperty(exports, 'defaultParser', {
|
|
|
17
17
|
return defaultParser;
|
|
18
18
|
}
|
|
19
19
|
});
|
|
20
|
-
//# sourceMappingURL=defaultParser-
|
|
20
|
+
//# sourceMappingURL=defaultParser-n9VW2iVf.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaultParser-
|
|
1
|
+
{"version":3,"file":"defaultParser-n9VW2iVf.cjs","names":["createParser"],"sources":["../src/parsers/defaultParser.ts"],"sourcesContent":["import { createParser } from './createParser.ts'\n\nexport const defaultParser = createParser({\n name: 'default',\n extNames: ['.json'],\n install() {},\n async parse(file) {\n return file.sources.map((item) => item.value).join('\\n\\n')\n },\n})\n"],"mappings":";;;AAEA,MAAa,gBAAgBA,kCAAa;CACxC,MAAM;CACN,UAAU,CAAC,QAAQ;CACnB,UAAU;CACV,MAAM,MAAM,MAAM;AAChB,SAAO,KAAK,QAAQ,KAAK,SAAS,KAAK,MAAM,CAAC,KAAK,OAAO;;CAE7D,CAAC"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { t as trimExtName } from "./trimExtName-CeOVQVbu.js";
|
|
2
|
+
import { orderBy } from "natural-orderby";
|
|
3
|
+
import { createHash } from "node:crypto";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import { isDeepEqual, uniqueBy } from "remeda";
|
|
6
|
+
|
|
7
|
+
//#region \0@oxc-project+runtime@0.95.0/helpers/checkPrivateRedeclaration.js
|
|
8
|
+
function _checkPrivateRedeclaration(e, t) {
|
|
9
|
+
if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object");
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
//#endregion
|
|
13
|
+
//#region \0@oxc-project+runtime@0.95.0/helpers/classPrivateFieldInitSpec.js
|
|
14
|
+
function _classPrivateFieldInitSpec(e, t, a) {
|
|
15
|
+
_checkPrivateRedeclaration(e, t), t.set(e, a);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
//#endregion
|
|
19
|
+
//#region \0@oxc-project+runtime@0.95.0/helpers/assertClassBrand.js
|
|
20
|
+
function _assertClassBrand(e, t, n) {
|
|
21
|
+
if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n;
|
|
22
|
+
throw new TypeError("Private element is not present on this object");
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
//#endregion
|
|
26
|
+
//#region \0@oxc-project+runtime@0.95.0/helpers/classPrivateFieldGet2.js
|
|
27
|
+
function _classPrivateFieldGet2(s, a) {
|
|
28
|
+
return s.get(_assertClassBrand(s, a));
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
//#endregion
|
|
32
|
+
//#region src/createFile.ts
|
|
33
|
+
function hashObject(obj) {
|
|
34
|
+
const str = JSON.stringify(obj, Object.keys(obj).sort());
|
|
35
|
+
return createHash("sha256").update(str).digest("hex");
|
|
36
|
+
}
|
|
37
|
+
function combineSources(sources) {
|
|
38
|
+
return uniqueBy(sources, (obj) => [
|
|
39
|
+
obj.name,
|
|
40
|
+
obj.isExportable,
|
|
41
|
+
obj.isTypeOnly
|
|
42
|
+
]);
|
|
43
|
+
}
|
|
44
|
+
function combineExports(exports) {
|
|
45
|
+
return orderBy(exports, [
|
|
46
|
+
(v) => !!Array.isArray(v.name),
|
|
47
|
+
(v) => !v.isTypeOnly,
|
|
48
|
+
(v) => v.path,
|
|
49
|
+
(v) => !!v.name,
|
|
50
|
+
(v) => Array.isArray(v.name) ? orderBy(v.name) : v.name
|
|
51
|
+
]).reduce((prev, curr) => {
|
|
52
|
+
const name = curr.name;
|
|
53
|
+
const prevByPath = prev.findLast((imp) => imp.path === curr.path);
|
|
54
|
+
if (prev.findLast((imp) => imp.path === curr.path && isDeepEqual(imp.name, name) && imp.isTypeOnly)) return prev;
|
|
55
|
+
if (prev.findLast((imp) => imp.path === curr.path && isDeepEqual(imp.name, name) && imp.isTypeOnly === curr.isTypeOnly && imp.asAlias === curr.asAlias) || Array.isArray(name) && !name.length || (prevByPath === null || prevByPath === void 0 ? void 0 : prevByPath.asAlias) && !curr.asAlias) return prev;
|
|
56
|
+
if (!prevByPath) return [...prev, {
|
|
57
|
+
...curr,
|
|
58
|
+
name: Array.isArray(name) ? [...new Set(name)] : name
|
|
59
|
+
}];
|
|
60
|
+
if (prevByPath && Array.isArray(prevByPath.name) && Array.isArray(curr.name) && prevByPath.isTypeOnly === curr.isTypeOnly) {
|
|
61
|
+
prevByPath.name = [...new Set([...prevByPath.name, ...curr.name])];
|
|
62
|
+
return prev;
|
|
63
|
+
}
|
|
64
|
+
return [...prev, curr];
|
|
65
|
+
}, []);
|
|
66
|
+
}
|
|
67
|
+
function combineImports(imports, exports, source) {
|
|
68
|
+
return orderBy(imports, [
|
|
69
|
+
(v) => !!Array.isArray(v.name),
|
|
70
|
+
(v) => !v.isTypeOnly,
|
|
71
|
+
(v) => v.path,
|
|
72
|
+
(v) => !!v.name,
|
|
73
|
+
(v) => Array.isArray(v.name) ? orderBy(v.name) : v.name
|
|
74
|
+
]).reduce((prev, curr) => {
|
|
75
|
+
let name = Array.isArray(curr.name) ? [...new Set(curr.name)] : curr.name;
|
|
76
|
+
const hasImportInSource = (importName) => {
|
|
77
|
+
if (!source) return true;
|
|
78
|
+
const checker = (name$1) => {
|
|
79
|
+
return name$1 && source.includes(name$1);
|
|
80
|
+
};
|
|
81
|
+
return checker(importName) || exports.some(({ name: name$1 }) => Array.isArray(name$1) ? name$1.some(checker) : checker(name$1));
|
|
82
|
+
};
|
|
83
|
+
if (curr.path === curr.root) return prev;
|
|
84
|
+
if (Array.isArray(name)) name = name.filter((item) => typeof item === "string" ? hasImportInSource(item) : hasImportInSource(item.propertyName));
|
|
85
|
+
const prevByPath = prev.findLast((imp) => imp.path === curr.path && imp.isTypeOnly === curr.isTypeOnly);
|
|
86
|
+
const uniquePrev = prev.findLast((imp) => imp.path === curr.path && isDeepEqual(imp.name, name) && imp.isTypeOnly === curr.isTypeOnly);
|
|
87
|
+
if (prev.findLast((imp) => imp.path === curr.path && isDeepEqual(imp.name, name) && imp.isTypeOnly)) return prev;
|
|
88
|
+
if (uniquePrev || Array.isArray(name) && !name.length) return prev;
|
|
89
|
+
if (!prevByPath) return [...prev, {
|
|
90
|
+
...curr,
|
|
91
|
+
name
|
|
92
|
+
}];
|
|
93
|
+
if (prevByPath && Array.isArray(prevByPath.name) && Array.isArray(name) && prevByPath.isTypeOnly === curr.isTypeOnly) {
|
|
94
|
+
prevByPath.name = [...new Set([...prevByPath.name, ...name])];
|
|
95
|
+
return prev;
|
|
96
|
+
}
|
|
97
|
+
if (!Array.isArray(name) && name && !hasImportInSource(name)) return prev;
|
|
98
|
+
return [...prev, curr];
|
|
99
|
+
}, []);
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Helper to create a file with name and id set
|
|
103
|
+
*/
|
|
104
|
+
function createFile(file) {
|
|
105
|
+
var _file$exports, _file$imports, _file$sources;
|
|
106
|
+
const extname = path.extname(file.baseName);
|
|
107
|
+
if (!extname) throw new Error(`No extname found for ${file.baseName}`);
|
|
108
|
+
const source = file.sources.map((item) => item.value).join("\n\n");
|
|
109
|
+
const exports = ((_file$exports = file.exports) === null || _file$exports === void 0 ? void 0 : _file$exports.length) ? combineExports(file.exports) : [];
|
|
110
|
+
const imports = ((_file$imports = file.imports) === null || _file$imports === void 0 ? void 0 : _file$imports.length) && source ? combineImports(file.imports, exports, source) : [];
|
|
111
|
+
const sources = ((_file$sources = file.sources) === null || _file$sources === void 0 ? void 0 : _file$sources.length) ? combineSources(file.sources) : [];
|
|
112
|
+
return {
|
|
113
|
+
...file,
|
|
114
|
+
id: hashObject({ path: file.path }),
|
|
115
|
+
name: trimExtName(file.baseName),
|
|
116
|
+
extname,
|
|
117
|
+
imports,
|
|
118
|
+
exports,
|
|
119
|
+
sources,
|
|
120
|
+
meta: file.meta || {}
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
//#endregion
|
|
125
|
+
//#region \0@oxc-project+runtime@0.95.0/helpers/typeof.js
|
|
126
|
+
function _typeof(o) {
|
|
127
|
+
"@babel/helpers - typeof";
|
|
128
|
+
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o$1) {
|
|
129
|
+
return typeof o$1;
|
|
130
|
+
} : function(o$1) {
|
|
131
|
+
return o$1 && "function" == typeof Symbol && o$1.constructor === Symbol && o$1 !== Symbol.prototype ? "symbol" : typeof o$1;
|
|
132
|
+
}, _typeof(o);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
//#endregion
|
|
136
|
+
//#region \0@oxc-project+runtime@0.95.0/helpers/toPrimitive.js
|
|
137
|
+
function toPrimitive(t, r) {
|
|
138
|
+
if ("object" != _typeof(t) || !t) return t;
|
|
139
|
+
var e = t[Symbol.toPrimitive];
|
|
140
|
+
if (void 0 !== e) {
|
|
141
|
+
var i = e.call(t, r || "default");
|
|
142
|
+
if ("object" != _typeof(i)) return i;
|
|
143
|
+
throw new TypeError("@@toPrimitive must return a primitive value.");
|
|
144
|
+
}
|
|
145
|
+
return ("string" === r ? String : Number)(t);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
//#endregion
|
|
149
|
+
//#region \0@oxc-project+runtime@0.95.0/helpers/toPropertyKey.js
|
|
150
|
+
function toPropertyKey(t) {
|
|
151
|
+
var i = toPrimitive(t, "string");
|
|
152
|
+
return "symbol" == _typeof(i) ? i : i + "";
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
//#endregion
|
|
156
|
+
//#region \0@oxc-project+runtime@0.95.0/helpers/defineProperty.js
|
|
157
|
+
function _defineProperty(e, r, t) {
|
|
158
|
+
return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
|
|
159
|
+
value: t,
|
|
160
|
+
enumerable: !0,
|
|
161
|
+
configurable: !0,
|
|
162
|
+
writable: !0
|
|
163
|
+
}) : e[r] = t, e;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
//#endregion
|
|
167
|
+
export { _classPrivateFieldInitSpec as a, _assertClassBrand as i, createFile as n, _classPrivateFieldGet2 as r, _defineProperty as t };
|
|
168
|
+
//# sourceMappingURL=defineProperty-3OJdpith.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defineProperty-3OJdpith.js","names":["name"],"sources":["../src/createFile.ts"],"sourcesContent":["import type * as KubbFile from './KubbFile.ts'\nimport { trimExtName } from './utils/trimExtName.ts'\nimport { createHash } from 'node:crypto'\nimport path from 'node:path'\nimport { isDeepEqual, uniqueBy } from 'remeda'\nimport { orderBy } from 'natural-orderby'\n\nfunction hashObject(obj: Record<string, unknown>): string {\n const str = JSON.stringify(obj, Object.keys(obj).sort())\n return createHash('sha256').update(str).digest('hex')\n}\n\nexport function combineSources(sources: Array<KubbFile.Source>): Array<KubbFile.Source> {\n return uniqueBy(sources, (obj) => [obj.name, obj.isExportable, obj.isTypeOnly] as const)\n}\n\nexport function combineExports(exports: Array<KubbFile.Export>): Array<KubbFile.Export> {\n return orderBy(exports, [\n (v) => !!Array.isArray(v.name),\n (v) => !v.isTypeOnly,\n (v) => v.path,\n (v) => !!v.name,\n (v) => (Array.isArray(v.name) ? orderBy(v.name) : v.name),\n ]).reduce(\n (prev, curr) => {\n const name = curr.name\n const prevByPath = prev.findLast((imp) => imp.path === curr.path)\n const prevByPathAndIsTypeOnly = prev.findLast((imp) => imp.path === curr.path && isDeepEqual(imp.name, name) && imp.isTypeOnly)\n\n if (prevByPathAndIsTypeOnly) {\n // we already have an export that has the same path but uses `isTypeOnly` (export type ...)\n return prev\n }\n\n const uniquePrev = prev.findLast(\n (imp) => imp.path === curr.path && isDeepEqual(imp.name, name) && imp.isTypeOnly === curr.isTypeOnly && imp.asAlias === curr.asAlias,\n )\n\n // we already have an item that was unique enough or name field is empty or prev asAlias is set but current has no changes\n if (uniquePrev || (Array.isArray(name) && !name.length) || (prevByPath?.asAlias && !curr.asAlias)) {\n return prev\n }\n\n if (!prevByPath) {\n return [\n ...prev,\n {\n ...curr,\n name: Array.isArray(name) ? [...new Set(name)] : name,\n },\n ]\n }\n\n // merge all names when prev and current both have the same isTypeOnly set\n if (prevByPath && Array.isArray(prevByPath.name) && Array.isArray(curr.name) && prevByPath.isTypeOnly === curr.isTypeOnly) {\n prevByPath.name = [...new Set([...prevByPath.name, ...curr.name])]\n\n return prev\n }\n\n return [...prev, curr]\n },\n [] as Array<KubbFile.Export>,\n )\n}\n\nexport function combineImports(imports: Array<KubbFile.Import>, exports: Array<KubbFile.Export>, source?: string): Array<KubbFile.Import> {\n return orderBy(imports, [\n (v) => !!Array.isArray(v.name),\n (v) => !v.isTypeOnly,\n (v) => v.path,\n (v) => !!v.name,\n (v) => (Array.isArray(v.name) ? orderBy(v.name) : v.name),\n ]).reduce(\n (prev, curr) => {\n let name = Array.isArray(curr.name) ? [...new Set(curr.name)] : curr.name\n\n const hasImportInSource = (importName: string) => {\n if (!source) {\n return true\n }\n\n const checker = (name?: string) => {\n return name && source.includes(name)\n }\n\n return checker(importName) || exports.some(({ name }) => (Array.isArray(name) ? name.some(checker) : checker(name)))\n }\n\n if (curr.path === curr.root) {\n // root and path are the same file, remove the \"./\" import\n return prev\n }\n\n // merge all names and check if the importName is being used in the generated source and if not filter those imports out\n if (Array.isArray(name)) {\n name = name.filter((item) => (typeof item === 'string' ? hasImportInSource(item) : hasImportInSource(item.propertyName)))\n }\n\n const prevByPath = prev.findLast((imp) => imp.path === curr.path && imp.isTypeOnly === curr.isTypeOnly)\n const uniquePrev = prev.findLast((imp) => imp.path === curr.path && isDeepEqual(imp.name, name) && imp.isTypeOnly === curr.isTypeOnly)\n const prevByPathNameAndIsTypeOnly = prev.findLast((imp) => imp.path === curr.path && isDeepEqual(imp.name, name) && imp.isTypeOnly)\n\n if (prevByPathNameAndIsTypeOnly) {\n // we already have an export that has the same path but uses `isTypeOnly` (import type ...)\n return prev\n }\n\n // already unique enough or name is empty\n if (uniquePrev || (Array.isArray(name) && !name.length)) {\n return prev\n }\n\n // new item, append name\n if (!prevByPath) {\n return [\n ...prev,\n {\n ...curr,\n name,\n },\n ]\n }\n\n // merge all names when prev and current both have the same isTypeOnly set\n if (prevByPath && Array.isArray(prevByPath.name) && Array.isArray(name) && prevByPath.isTypeOnly === curr.isTypeOnly) {\n prevByPath.name = [...new Set([...prevByPath.name, ...name])]\n\n return prev\n }\n\n // no import was found in the source, ignore import\n if (!Array.isArray(name) && name && !hasImportInSource(name)) {\n return prev\n }\n\n return [...prev, curr]\n },\n [] as Array<KubbFile.Import>,\n )\n}\n\n/**\n * Helper to create a file with name and id set\n */\nexport function createFile<TMeta extends object = object>(file: KubbFile.File<TMeta>): KubbFile.ResolvedFile<TMeta> {\n const extname = path.extname(file.baseName) as KubbFile.Extname\n if (!extname) {\n throw new Error(`No extname found for ${file.baseName}`)\n }\n\n const source = file.sources.map((item) => item.value).join('\\n\\n')\n const exports = file.exports?.length ? combineExports(file.exports) : []\n const imports = file.imports?.length && source ? combineImports(file.imports, exports, source) : []\n const sources = file.sources?.length ? combineSources(file.sources) : []\n\n return {\n ...file,\n id: hashObject({ path: file.path }),\n name: trimExtName(file.baseName),\n extname,\n imports: imports,\n exports: exports,\n sources: sources,\n meta: file.meta || ({} as TMeta),\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,SAAS,WAAW,KAAsC;CACxD,MAAM,MAAM,KAAK,UAAU,KAAK,OAAO,KAAK,IAAI,CAAC,MAAM,CAAC;AACxD,QAAO,WAAW,SAAS,CAAC,OAAO,IAAI,CAAC,OAAO,MAAM;;AAGvD,SAAgB,eAAe,SAAyD;AACtF,QAAO,SAAS,UAAU,QAAQ;EAAC,IAAI;EAAM,IAAI;EAAc,IAAI;EAAW,CAAU;;AAG1F,SAAgB,eAAe,SAAyD;AACtF,QAAO,QAAQ,SAAS;GACrB,MAAM,CAAC,CAAC,MAAM,QAAQ,EAAE,KAAK;GAC7B,MAAM,CAAC,EAAE;GACT,MAAM,EAAE;GACR,MAAM,CAAC,CAAC,EAAE;GACV,MAAO,MAAM,QAAQ,EAAE,KAAK,GAAG,QAAQ,EAAE,KAAK,GAAG,EAAE;EACrD,CAAC,CAAC,QACA,MAAM,SAAS;EACd,MAAM,OAAO,KAAK;EAClB,MAAM,aAAa,KAAK,UAAU,QAAQ,IAAI,SAAS,KAAK,KAAK;AAGjE,MAFgC,KAAK,UAAU,QAAQ,IAAI,SAAS,KAAK,QAAQ,YAAY,IAAI,MAAM,KAAK,IAAI,IAAI,WAAW,CAI7H,QAAO;AAQT,MALmB,KAAK,UACrB,QAAQ,IAAI,SAAS,KAAK,QAAQ,YAAY,IAAI,MAAM,KAAK,IAAI,IAAI,eAAe,KAAK,cAAc,IAAI,YAAY,KAAK,QAC9H,IAGkB,MAAM,QAAQ,KAAK,IAAI,CAAC,KAAK,mEAAY,WAAY,YAAW,CAAC,KAAK,QACvF,QAAO;AAGT,MAAI,CAAC,WACH,QAAO,CACL,GAAG,MACH;GACE,GAAG;GACH,MAAM,MAAM,QAAQ,KAAK,GAAG,CAAC,GAAG,IAAI,IAAI,KAAK,CAAC,GAAG;GAClD,CACF;AAIH,MAAI,cAAc,MAAM,QAAQ,WAAW,KAAK,IAAI,MAAM,QAAQ,KAAK,KAAK,IAAI,WAAW,eAAe,KAAK,YAAY;AACzH,cAAW,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,WAAW,MAAM,GAAG,KAAK,KAAK,CAAC,CAAC;AAElE,UAAO;;AAGT,SAAO,CAAC,GAAG,MAAM,KAAK;IAExB,EAAE,CACH;;AAGH,SAAgB,eAAe,SAAiC,SAAiC,QAAyC;AACxI,QAAO,QAAQ,SAAS;GACrB,MAAM,CAAC,CAAC,MAAM,QAAQ,EAAE,KAAK;GAC7B,MAAM,CAAC,EAAE;GACT,MAAM,EAAE;GACR,MAAM,CAAC,CAAC,EAAE;GACV,MAAO,MAAM,QAAQ,EAAE,KAAK,GAAG,QAAQ,EAAE,KAAK,GAAG,EAAE;EACrD,CAAC,CAAC,QACA,MAAM,SAAS;EACd,IAAI,OAAO,MAAM,QAAQ,KAAK,KAAK,GAAG,CAAC,GAAG,IAAI,IAAI,KAAK,KAAK,CAAC,GAAG,KAAK;EAErE,MAAM,qBAAqB,eAAuB;AAChD,OAAI,CAAC,OACH,QAAO;GAGT,MAAM,WAAW,WAAkB;AACjC,WAAOA,UAAQ,OAAO,SAASA,OAAK;;AAGtC,UAAO,QAAQ,WAAW,IAAI,QAAQ,MAAM,EAAE,mBAAY,MAAM,QAAQA,OAAK,GAAGA,OAAK,KAAK,QAAQ,GAAG,QAAQA,OAAK,CAAE;;AAGtH,MAAI,KAAK,SAAS,KAAK,KAErB,QAAO;AAIT,MAAI,MAAM,QAAQ,KAAK,CACrB,QAAO,KAAK,QAAQ,SAAU,OAAO,SAAS,WAAW,kBAAkB,KAAK,GAAG,kBAAkB,KAAK,aAAa,CAAE;EAG3H,MAAM,aAAa,KAAK,UAAU,QAAQ,IAAI,SAAS,KAAK,QAAQ,IAAI,eAAe,KAAK,WAAW;EACvG,MAAM,aAAa,KAAK,UAAU,QAAQ,IAAI,SAAS,KAAK,QAAQ,YAAY,IAAI,MAAM,KAAK,IAAI,IAAI,eAAe,KAAK,WAAW;AAGtI,MAFoC,KAAK,UAAU,QAAQ,IAAI,SAAS,KAAK,QAAQ,YAAY,IAAI,MAAM,KAAK,IAAI,IAAI,WAAW,CAIjI,QAAO;AAIT,MAAI,cAAe,MAAM,QAAQ,KAAK,IAAI,CAAC,KAAK,OAC9C,QAAO;AAIT,MAAI,CAAC,WACH,QAAO,CACL,GAAG,MACH;GACE,GAAG;GACH;GACD,CACF;AAIH,MAAI,cAAc,MAAM,QAAQ,WAAW,KAAK,IAAI,MAAM,QAAQ,KAAK,IAAI,WAAW,eAAe,KAAK,YAAY;AACpH,cAAW,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,WAAW,MAAM,GAAG,KAAK,CAAC,CAAC;AAE7D,UAAO;;AAIT,MAAI,CAAC,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,kBAAkB,KAAK,CAC1D,QAAO;AAGT,SAAO,CAAC,GAAG,MAAM,KAAK;IAExB,EAAE,CACH;;;;;AAMH,SAAgB,WAA0C,MAA0D;;CAClH,MAAM,UAAU,KAAK,QAAQ,KAAK,SAAS;AAC3C,KAAI,CAAC,QACH,OAAM,IAAI,MAAM,wBAAwB,KAAK,WAAW;CAG1D,MAAM,SAAS,KAAK,QAAQ,KAAK,SAAS,KAAK,MAAM,CAAC,KAAK,OAAO;CAClE,MAAM,4BAAU,KAAK,uEAAS,UAAS,eAAe,KAAK,QAAQ,GAAG,EAAE;CACxE,MAAM,4BAAU,KAAK,uEAAS,WAAU,SAAS,eAAe,KAAK,SAAS,SAAS,OAAO,GAAG,EAAE;CACnG,MAAM,4BAAU,KAAK,uEAAS,UAAS,eAAe,KAAK,QAAQ,GAAG,EAAE;AAExE,QAAO;EACL,GAAG;EACH,IAAI,WAAW,EAAE,MAAM,KAAK,MAAM,CAAC;EACnC,MAAM,YAAY,KAAK,SAAS;EAChC;EACS;EACA;EACA;EACT,MAAM,KAAK,QAAS,EAAE;EACvB"}
|