stepzen 0.26.0 → 0.27.0-beta.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.
Files changed (40) hide show
  1. package/README.md +35 -9
  2. package/lib/commands/import.d.ts +88 -94
  3. package/lib/commands/import.d.ts.map +1 -1
  4. package/lib/commands/import.js +191 -140
  5. package/lib/commands/import.js.map +1 -1
  6. package/lib/commands/request.d.ts +4 -1
  7. package/lib/commands/request.d.ts.map +1 -1
  8. package/lib/commands/request.js +39 -26
  9. package/lib/commands/request.js.map +1 -1
  10. package/lib/generate/helpers.d.ts +1 -12
  11. package/lib/generate/helpers.d.ts.map +1 -1
  12. package/lib/generate/helpers.js +1 -149
  13. package/lib/generate/helpers.js.map +1 -1
  14. package/lib/generate/index.d.ts +0 -8
  15. package/lib/generate/index.d.ts.map +1 -1
  16. package/lib/generate/index.js +0 -100
  17. package/lib/generate/index.js.map +1 -1
  18. package/lib/generate/sql2sdl.d.ts +29 -7
  19. package/lib/generate/sql2sdl.d.ts.map +1 -1
  20. package/lib/generate/sql2sdl.js +95 -32
  21. package/lib/generate/sql2sdl.js.map +1 -1
  22. package/lib/shared/constants.d.ts +0 -3
  23. package/lib/shared/constants.d.ts.map +1 -1
  24. package/lib/shared/constants.js +2 -8
  25. package/lib/shared/constants.js.map +1 -1
  26. package/lib/shared/inquirer.d.ts +1 -1
  27. package/lib/shared/inquirer.d.ts.map +1 -1
  28. package/lib/shared/inquirer.js.map +1 -1
  29. package/lib/shared/request-variables-parser.d.ts +1 -1
  30. package/lib/shared/request-variables-parser.d.ts.map +1 -1
  31. package/lib/shared/request-variables-parser.js +27 -20
  32. package/lib/shared/request-variables-parser.js.map +1 -1
  33. package/lib/shared/types.d.ts +6 -0
  34. package/lib/shared/types.d.ts.map +1 -1
  35. package/lib/shared/zen-command.d.ts +3 -1
  36. package/lib/shared/zen-command.d.ts.map +1 -1
  37. package/lib/shared/zen-command.js +38 -9
  38. package/lib/shared/zen-command.js.map +1 -1
  39. package/oclif.manifest.json +1 -1
  40. package/package.json +7 -7
package/README.md CHANGED
@@ -30,7 +30,7 @@ $ npm install -g stepzen
30
30
  $ stepzen COMMAND
31
31
  running command...
32
32
  $ stepzen (-v|--version|version)
33
- stepzen/0.26.0 linux-x64 node-v14.21.1
33
+ stepzen/0.27.0-beta.1 linux-x64 node-v14.21.2
34
34
  $ stepzen --help [COMMAND]
35
35
  USAGE
36
36
  $ stepzen COMMAND
@@ -148,6 +148,11 @@ USAGE
148
148
  [--db-database=DB-DATABASE] [--db-link-types] [--db-include=DB-INCLUDE] [--db-schema=DB-SCHEMA]
149
149
  $ stepzen import postgresql://[USER:PASSWORD@]HOST[:PORT][/DATABASE] [--db-link-types] [--db-include=DB-INCLUDE]
150
150
  [--db-schema=DB-SCHEMA]
151
+ $ stepzen import snowflake [--db-user=DB-USER] [--db-password=DB-PASSWORD] [--db-database=DB-DATABASE]
152
+ [--db-link-types] [--db-include=DB-INCLUDE] [--db-schema=DB-SCHEMA] [--snowflake-account-id=SNOWFLAKE-ACCOUNT-ID]
153
+ [--snowflake-warehouse=SNOWFLAKE-WAREHOUSE]
154
+ $ stepzen import snowflake://[USER[:PASSWORD]@]ACCOUNT_IDENTIFIER[/DATABASE][?schema=<SCHEMA>[&warehouse=<WAREHOUSE>]]
155
+ [--db-link-types] [--db-include=DB-INCLUDE]
151
156
 
152
157
  OPTIONS
153
158
  -H, --header=header
@@ -161,26 +166,36 @@ OPTIONS
161
166
  Show CLI help
162
167
 
163
168
  --db-database=db-database
164
- [mysql, postgresql] Name of database to import
169
+ [mysql, postgresql, snowflake] Name of database to import
165
170
 
166
171
  --db-host=db-host
167
172
  [mysql, postgresql] Database host and optional port (as HOST[:PORT])
168
173
 
169
174
  --db-include=tables-only|views-only|tables-and-views
170
- [mysql, postgresql] Should the generated GraphQL schema be based only on database views, only on tables or on both
175
+ [mysql, postgresql, snowflake] Should the generated GraphQL schema be based only on database views, only on tables
176
+ or on both
171
177
 
172
178
  --db-link-types
173
- [mysql, postgresql] Automatically link types based on foreign key relationships using @materializer
179
+ [mysql, postgresql, snowflake] Automatically link types based on foreign key relationships using @materializer
174
180
  (https://stepzen.com/docs/features/linking-types)
175
181
 
176
182
  --db-password=db-password
177
- [mysql, postgresql] Database password
183
+ [mysql, postgresql, snowflake] Database password
178
184
 
179
185
  --db-schema=db-schema
180
- [postgresql] PostgreSQL schema to import tables from (default: public)
186
+ [postgresql, snowflake] Database schema to import tables from (default: public)
187
+
188
+ --db-use-deprecated-2022-naming
189
+ [mysql, postgresql] Use the deprecated pre-2023 naming convention in the generated GraphQL schema:
190
+ - the generated type and property names are auto-capitalized into PascalCase
191
+ - the generated field names use the getCustomer and getCustomerList style.
192
+
193
+ On the other hand, when using the default naming convention:
194
+ - the generated type and property names match exactly the DB table and column names
195
+ - the generated field names use the customer and customerList style.
181
196
 
182
197
  --db-user=db-user
183
- [mysql, postgresql] Database user name
198
+ [mysql, postgresql, snowflake] Database user name
184
199
 
185
200
  --dir=dir
186
201
  Working directory
@@ -210,11 +225,18 @@ OPTIONS
210
225
  [curl, graphql] Prefix to add to every type in the generated schema
211
226
 
212
227
  --query-name=query-name
213
- [curl] Property name to add to the Query type as a way to access the imported endpoint
228
+ [curl] [curl] Property name to add to the Query type as a way to access the imported endpoint
214
229
 
215
230
  --query-type=query-type
216
231
  [curl] Name for the type returned by the curl request in the generated schema. The name specified by --query-type is
217
232
  not prefixed by --prefix if both flags are present.
233
+
234
+ --snowflake-account-id=snowflake-account-id
235
+ [snowflake] Snowflake account identifier in the orgname-accountname format. For more information, see the Snowflake
236
+ documentation at https://docs.snowflake.com/en/user-guide/admin-account-identifier.html.
237
+
238
+ --snowflake-warehouse=snowflake-warehouse
239
+ [snowflake] Snowflake warehouse
218
240
  ```
219
241
 
220
242
  ## `stepzen init`
@@ -304,6 +326,9 @@ OPTIONS
304
326
  stepzen request '{ user(id: "u123") { email } }' \
305
327
  -H "X-API-Token: SecretAPIToken"
306
328
 
329
+ Use the -H "Header-Name:" syntax to drop a default header, and the -H "Header-Name;" syntax to send a header with an
330
+ empty value.
331
+
307
332
  -h, --help
308
333
  Show CLI help
309
334
 
@@ -327,7 +352,8 @@ OPTIONS
327
352
  --var limit=5
328
353
 
329
354
  --var-file=var-file
330
- Read request variables from a JSON file
355
+ Read request variables from a JSON file. In case when the same variable value is provided both via --var-file and
356
+ --var, the priority is given to the latter.
331
357
 
332
358
  Example:
333
359
  stepzen request 'query OrdersQuery($search: String!, $limit: Int) {
@@ -1,128 +1,122 @@
1
- /// <reference types="lodash" />
2
- import { flags } from '@oclif/command';
1
+ import * as Parser from '@oclif/parser';
2
+ import { IOptionFlag, IBooleanFlag } from '@oclif/parser/lib/flags';
3
3
  import type { CommonImportOptions } from '../generate';
4
4
  import ZenCommand from '../shared/zen-command';
5
- import { Sql2SdlOptions } from '../generate/sql2sdl';
5
+ import { DBType, DBIntrospectionOptions } from '../generate/sql2sdl';
6
6
  import { HeaderInput } from '../shared/header';
7
7
  import { Workspace, Flags } from '../shared/types';
8
+ export declare type DataSourceType = 'curl' | 'graphql' | 'postgresql' | 'mysql' | 'snowflake';
9
+ declare type IOptionFlagWithDataSource<T> = IOptionFlag<T> & {
10
+ dataSources?: DataSourceType[];
11
+ };
12
+ declare type IBooleanFlagWithDataSource<T> = IBooleanFlag<T> & {
13
+ dataSources?: DataSourceType[];
14
+ };
15
+ declare type DefinitionWithDataSource<T> = {
16
+ (options: {
17
+ multiple: true;
18
+ } & Partial<IOptionFlagWithDataSource<T[]>>): IOptionFlagWithDataSource<T[]>;
19
+ (options: ({
20
+ required: true;
21
+ } | {
22
+ default: Parser.flags.Default<T>;
23
+ }) & Partial<IOptionFlagWithDataSource<T>>): IOptionFlagWithDataSource<T>;
24
+ (options?: Partial<IOptionFlagWithDataSource<T>>): IOptionFlagWithDataSource<T | undefined>;
25
+ };
26
+ declare const flags: {
27
+ string: DefinitionWithDataSource<string>;
28
+ boolean: <T = boolean>(options?: Partial<IBooleanFlagWithDataSource<T>>) => IBooleanFlagWithDataSource<T>;
29
+ };
8
30
  export default class Import extends ZenCommand {
9
31
  static description: string;
10
- static commonIntrospectionFlags: {
11
- prefix: flags.IOptionFlag<string | undefined>;
12
- header: flags.IOptionFlag<string[]>;
13
- 'header-param': flags.IOptionFlag<string[]>;
14
- };
15
- static curlFlags: {
16
- 'query-name': flags.IOptionFlag<string | undefined>;
17
- 'query-type': flags.IOptionFlag<string | undefined>;
18
- 'path-params': flags.IOptionFlag<string | undefined>;
19
- };
20
- static sqlFlags: {
21
- 'db-host': flags.IOptionFlag<string | undefined>;
22
- 'db-user': flags.IOptionFlag<string | undefined>;
23
- 'db-password': flags.IOptionFlag<string | undefined>;
24
- 'db-database': flags.IOptionFlag<string | undefined>;
25
- 'db-link-types': import("@oclif/parser/lib/flags").IBooleanFlag<boolean>;
26
- 'db-include': flags.IOptionFlag<string | undefined>;
27
- };
28
- static postgresqlFlags: {
29
- 'db-schema': flags.IOptionFlag<string | undefined>;
30
- };
31
- static flagsForSources: ({
32
- flags: {
33
- prefix: flags.IOptionFlag<string | undefined>;
34
- header: flags.IOptionFlag<string[]>;
35
- 'header-param': flags.IOptionFlag<string[]>;
36
- };
37
- sources: string[];
38
- } | {
39
- flags: {
40
- 'query-name': flags.IOptionFlag<string | undefined>;
41
- 'query-type': flags.IOptionFlag<string | undefined>;
42
- 'path-params': flags.IOptionFlag<string | undefined>;
43
- };
44
- sources: string[];
45
- } | {
46
- flags: {
47
- 'db-host': flags.IOptionFlag<string | undefined>;
48
- 'db-user': flags.IOptionFlag<string | undefined>;
49
- 'db-password': flags.IOptionFlag<string | undefined>;
50
- 'db-database': flags.IOptionFlag<string | undefined>;
51
- 'db-link-types': import("@oclif/parser/lib/flags").IBooleanFlag<boolean>;
52
- 'db-include': flags.IOptionFlag<string | undefined>;
53
- };
54
- sources: string[];
55
- } | {
56
- flags: {
57
- 'db-schema': flags.IOptionFlag<string | undefined>;
58
- };
59
- sources: string[];
60
- })[];
61
- static flagHelpForSource: (source: string, exclude?: string[]) => string;
62
- static usage: string[];
63
32
  static flags: {
64
- 'db-schema': flags.IOptionFlag<string | undefined>;
65
- 'db-host': flags.IOptionFlag<string | undefined>;
66
- 'db-user': flags.IOptionFlag<string | undefined>;
67
- 'db-password': flags.IOptionFlag<string | undefined>;
68
- 'db-database': flags.IOptionFlag<string | undefined>;
69
- 'db-link-types': import("@oclif/parser/lib/flags").IBooleanFlag<boolean>;
70
- 'db-include': flags.IOptionFlag<string | undefined>;
71
- 'query-name': flags.IOptionFlag<string | undefined>;
72
- 'query-type': flags.IOptionFlag<string | undefined>;
73
- 'path-params': flags.IOptionFlag<string | undefined>;
74
- prefix: flags.IOptionFlag<string | undefined>;
75
- header: flags.IOptionFlag<string[]>;
76
- 'header-param': flags.IOptionFlag<string[]>;
77
- dir: flags.IOptionFlag<string | undefined>;
78
- silent: import("@oclif/parser/lib/flags").IBooleanFlag<boolean>;
79
- name: flags.IOptionFlag<string | undefined>;
80
- overwrite: import("@oclif/parser/lib/flags").IBooleanFlag<boolean>;
81
- help: import("@oclif/parser/lib/flags").IBooleanFlag<void>;
82
- 'non-interactive': import("@oclif/parser/lib/flags").IBooleanFlag<boolean>;
33
+ dir: IOptionFlagWithDataSource<string | undefined>;
34
+ silent: IBooleanFlagWithDataSource<boolean>;
35
+ name: IOptionFlagWithDataSource<string | undefined>;
36
+ overwrite: IBooleanFlagWithDataSource<boolean>;
37
+ prefix: IOptionFlagWithDataSource<string | undefined>;
38
+ header: IOptionFlagWithDataSource<string[]>;
39
+ 'header-param': IOptionFlagWithDataSource<string[]>;
40
+ 'query-name': IOptionFlagWithDataSource<string | undefined>;
41
+ 'query-type': IOptionFlagWithDataSource<string | undefined>;
42
+ 'path-params': IOptionFlagWithDataSource<string | undefined>;
43
+ 'db-host': IOptionFlagWithDataSource<string | undefined>;
44
+ 'db-user': IOptionFlagWithDataSource<string | undefined>;
45
+ 'db-password': IOptionFlagWithDataSource<string | undefined>;
46
+ 'db-database': IOptionFlagWithDataSource<string | undefined>;
47
+ 'db-link-types': IBooleanFlagWithDataSource<boolean>;
48
+ 'db-include': IOptionFlagWithDataSource<string | undefined>;
49
+ 'db-schema': IOptionFlagWithDataSource<string | undefined>;
50
+ 'db-use-deprecated-2022-naming': IBooleanFlagWithDataSource<boolean>;
51
+ 'snowflake-account-id': IOptionFlagWithDataSource<string | undefined>;
52
+ 'snowflake-warehouse': IOptionFlagWithDataSource<string | undefined>;
53
+ help: Parser.flags.IBooleanFlag<void>;
54
+ 'non-interactive': Parser.flags.IBooleanFlag<boolean>;
83
55
  };
84
56
  static args: {
85
57
  name: string;
86
58
  required: boolean;
87
59
  }[];
60
+ static flagHelpForSource: (source: DataSourceType, exclude?: Array<keyof typeof Import.flags>) => string;
61
+ static usage: string[];
88
62
  static strict: boolean;
89
63
  run(): Promise<void>;
90
64
  importCurl(argv: string[], flags: Flags<typeof Import>, commonOptions: CommonImportOptions): Promise<string>;
91
65
  importGraphQL(argv: string[], flags: Flags<typeof Import>, commonOptions: CommonImportOptions): Promise<string>;
92
- importSql(source: 'mysql' | 'postgresql', dsn: string | undefined, flags: Flags<typeof Import>, fixedOptions: CommonImportOptions): Promise<string>;
93
- importFromGeneratorEngines(schema: string, flags: any, fixedOptions: CommonImportOptions): Promise<string>;
66
+ importSql(source: DBType, dsn: string | undefined, flags: Flags<typeof Import>, fixedOptions: CommonImportOptions): Promise<string>;
94
67
  ensureOnConflictBehavior(workspace: Workspace, source: string, flags: ReturnType<Import['parseWorkaround']>['flags']): Promise<"overwrite" | "append">;
95
- warnAboutIgnoredFlags(source: string, usedFlags: {
96
- [key: string]: any;
97
- }): void;
98
- parseWorkaround(): import("@oclif/parser").Output<{
99
- 'db-schema': string | undefined;
68
+ warnAboutIgnoredFlags(source: string, usedFlags: Flags<typeof Import>): void;
69
+ parseWorkaround(): Parser.Output<{
70
+ dir: string | undefined;
71
+ silent: boolean;
72
+ name: string | undefined;
73
+ overwrite: boolean;
74
+ prefix: string | undefined;
75
+ header: string[];
76
+ 'header-param': string[];
77
+ 'query-name': string | undefined;
78
+ 'query-type': string | undefined;
79
+ 'path-params': string | undefined;
100
80
  'db-host': string | undefined;
101
81
  'db-user': string | undefined;
102
82
  'db-password': string | undefined;
103
83
  'db-database': string | undefined;
104
84
  'db-link-types': boolean;
105
85
  'db-include': string | undefined;
106
- 'query-name': string | undefined;
107
- 'query-type': string | undefined;
108
- 'path-params': string | undefined;
109
- prefix: string | undefined;
110
- header: string[];
111
- 'header-param': string[];
112
- dir: string | undefined;
113
- silent: boolean;
114
- name: string | undefined;
115
- overwrite: boolean;
86
+ 'db-schema': string | undefined;
87
+ 'db-use-deprecated-2022-naming': boolean;
88
+ 'snowflake-account-id': string | undefined;
89
+ 'snowflake-warehouse': string | undefined;
116
90
  help: void;
117
91
  'non-interactive': boolean;
118
92
  }, {
119
93
  [name: string]: any;
120
94
  }>;
121
95
  parseHeaderFlags(headerFlagValues?: string[], headerParamFlagValues?: string[]): HeaderInput[];
122
- getSqlOptionsFromFlags(flags: Flags<typeof Import>): Partial<Sql2SdlOptions>;
123
- getSqlOptionsFromDSN(possibleDsn: string): import("lodash").Dictionary<string | undefined>;
96
+ getSqlOptionsFromFlags(flags: Flags<typeof Import>): {
97
+ host: string | undefined;
98
+ user: string | undefined;
99
+ password: string | undefined;
100
+ database: string | undefined;
101
+ linkTypes: boolean;
102
+ schema: string | undefined;
103
+ include: "tables-only" | "views-only" | "tables-and-views" | undefined;
104
+ introspectionOptions: DBIntrospectionOptions;
105
+ accountId: string | undefined;
106
+ warehouse: string | undefined;
107
+ };
108
+ getSqlOptionsFromDSN(possibleDsn: string): {
109
+ host: string | undefined;
110
+ accountId: string | undefined;
111
+ user: string | undefined;
112
+ password: string | undefined;
113
+ database: string | undefined;
114
+ schema: string | undefined;
115
+ warehouse: string | undefined;
116
+ };
124
117
  runImportAndExitOnError(importFn: () => Promise<{
125
118
  error: string;
126
119
  } | any>, ctaOnError?: string): Promise<any>;
127
120
  }
121
+ export {};
128
122
  //# sourceMappingURL=import.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../../src/commands/import.ts"],"names":[],"mappings":";AAKA,OAAO,EAAC,KAAK,EAAC,MAAM,gBAAgB,CAAA;AASpC,OAAO,KAAK,EAAC,mBAAmB,EAAC,MAAM,aAAa,CAAA;AAgBpD,OAAO,UAAU,MAAM,uBAAuB,CAAA;AAM9C,OAAO,EAAkB,cAAc,EAAU,MAAM,qBAAqB,CAAA;AAK5E,OAAO,EAAS,WAAW,EAAc,MAAM,kBAAkB,CAAA;AACjE,OAAO,EAAC,SAAS,EAAE,KAAK,EAAC,MAAM,iBAAiB,CAAA;AAGhD,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,UAAU;IAC5C,MAAM,CAAC,WAAW,SACqE;IAEvF,MAAM,CAAC,wBAAwB;;;;MA+B9B;IAED,MAAM,CAAC,SAAS;;;;MA0Bf;IAED,MAAM,CAAC,QAAQ;;;;;;;MA2Bd;IAED,MAAM,CAAC,eAAe;;MAKrB;IAED,MAAM,CAAC,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAKrB;IAED,MAAM,CAAC,iBAAiB,WAAY,MAAM,YAAY,MAAM,EAAE,YAWhD;IAEd,MAAM,CAAC,KAAK,WAaX;IAED,MAAM,CAAC,KAAK;;;;;;;;;;;;;;;;;;;;MAoBX;IAED,MAAM,CAAC,IAAI;;;QAKV;IAGD,MAAM,CAAC,MAAM,UAAQ;IAEf,GAAG;IA4FH,UAAU,CACd,IAAI,EAAE,MAAM,EAAE,EACd,KAAK,EAAE,KAAK,CAAC,OAAO,MAAM,CAAC,EAC3B,aAAa,EAAE,mBAAmB,GACjC,OAAO,CAAC,MAAM,CAAC;IA0EZ,aAAa,CACjB,IAAI,EAAE,MAAM,EAAE,EACd,KAAK,EAAE,KAAK,CAAC,OAAO,MAAM,CAAC,EAC3B,aAAa,EAAE,mBAAmB,GACjC,OAAO,CAAC,MAAM,CAAC;IAuCZ,SAAS,CACb,MAAM,EAAE,OAAO,GAAG,YAAY,EAC9B,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,KAAK,EAAE,KAAK,CAAC,OAAO,MAAM,CAAC,EAC3B,YAAY,EAAE,mBAAmB,GAChC,OAAO,CAAC,MAAM,CAAC;IA6CZ,0BAA0B,CAC9B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,GAAG,EACV,YAAY,EAAE,mBAAmB,GAChC,OAAO,CAAC,MAAM,CAAC;IAuBZ,wBAAwB,CAC5B,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC;IAmEvD,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAC;IAsBrE,eAAe;;;;;;;;;;;;;;;;;;;;;;;IA4Cf,gBAAgB,CACd,gBAAgB,CAAC,EAAE,MAAM,EAAE,EAC3B,qBAAqB,CAAC,EAAE,MAAM,EAAE,GAC/B,WAAW,EAAE;IAuBhB,sBAAsB,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,MAAM,CAAC;IA4BlD,oBAAoB,CAAC,WAAW,EAAE,MAAM;IAgBlC,uBAAuB,CAC3B,QAAQ,EAAE,MAAM,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC,GAAG,GAAG,CAAC,EAC9C,UAAU,SAAK;CA+DlB"}
1
+ {"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../../src/commands/import.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAC,WAAW,EAAE,YAAY,EAAC,MAAM,yBAAyB,CAAA;AAKjE,OAAO,KAAK,EAAC,mBAAmB,EAAC,MAAM,aAAa,CAAA;AAepD,OAAO,UAAU,MAAM,uBAAuB,CAAA;AAM9C,OAAO,EAIL,MAAM,EACN,sBAAsB,EAIvB,MAAM,qBAAqB,CAAA;AAK5B,OAAO,EAAS,WAAW,EAAc,MAAM,kBAAkB,CAAA;AACjE,OAAO,EAAC,SAAS,EAAE,KAAK,EAAU,MAAM,iBAAiB,CAAA;AAGzD,oBAAY,cAAc,GACtB,MAAM,GACN,SAAS,GACT,YAAY,GACZ,OAAO,GACP,WAAW,CAAA;AAGf,aAAK,yBAAyB,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,GAAG;IACnD,WAAW,CAAC,EAAE,cAAc,EAAE,CAAA;CAC/B,CAAA;AAGD,aAAK,0BAA0B,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,GAAG;IACrD,WAAW,CAAC,EAAE,cAAc,EAAE,CAAA;CAC/B,CAAA;AAGD,aAAK,wBAAwB,CAAC,CAAC,IAAI;IACjC,CACE,OAAO,EAAE;QACP,QAAQ,EAAE,IAAI,CAAA;KACf,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAAC,EAAE,CAAC,CAAC,GAC1C,yBAAyB,CAAC,CAAC,EAAE,CAAC,CAAA;IACjC,CACE,OAAO,EAAE,CACL;QACE,QAAQ,EAAE,IAAI,CAAA;KACf,GACD;QACE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;KACjC,CACJ,GACC,OAAO,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,GACtC,yBAAyB,CAAC,CAAC,CAAC,CAAA;IAC/B,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,GAAG,yBAAyB,CAC1E,CAAC,GAAG,SAAS,CACd,CAAA;CACF,CAAA;AAsBD,QAAA,MAAM,KAAK,EAAE;IACX,MAAM,EAAE,wBAAwB,CAAC,MAAM,CAAC,CAAA;IACxC,OAAO,EAAE,CAAC,CAAC,GAAG,OAAO,EACnB,OAAO,CAAC,EAAE,OAAO,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,KAC7C,0BAA0B,CAAC,CAAC,CAAC,CAAA;CAanC,CAAA;AAED,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,UAAU;IAC5C,MAAM,CAAC,WAAW,SACqE;IAEvF,MAAM,CAAC,KAAK;;;;;;;;;;;;;;;;;;;;;;;MAwIX;IAED,MAAM,CAAC,IAAI;;;QAKV;IAED,MAAM,CAAC,iBAAiB,WACd,cAAc,YACZ,MAAM,MAAM,OAAO,YAAY,CAAC,YAa9B;IAEd,MAAM,CAAC,KAAK,WA0BX;IAGD,MAAM,CAAC,MAAM,UAAQ;IAEf,GAAG;IA6EH,UAAU,CACd,IAAI,EAAE,MAAM,EAAE,EACd,KAAK,EAAE,KAAK,CAAC,OAAO,MAAM,CAAC,EAC3B,aAAa,EAAE,mBAAmB,GACjC,OAAO,CAAC,MAAM,CAAC;IA0EZ,aAAa,CACjB,IAAI,EAAE,MAAM,EAAE,EACd,KAAK,EAAE,KAAK,CAAC,OAAO,MAAM,CAAC,EAC3B,aAAa,EAAE,mBAAmB,GACjC,OAAO,CAAC,MAAM,CAAC;IAuCZ,SAAS,CACb,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,KAAK,EAAE,KAAK,CAAC,OAAO,MAAM,CAAC,EAC3B,YAAY,EAAE,mBAAmB,GAChC,OAAO,CAAC,MAAM,CAAC;IA6FZ,wBAAwB,CAC5B,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC;IAmEvD,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,OAAO,MAAM,CAAC;IAwBrE,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;IA4Cf,gBAAgB,CACd,gBAAgB,CAAC,EAAE,MAAM,EAAE,EAC3B,qBAAqB,CAAC,EAAE,MAAM,EAAE,GAC/B,WAAW,EAAE;IAuBhB,sBAAsB,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,MAAM,CAAC;;;;;;;;;;;;IAsBlD,oBAAoB,CAAC,WAAW,EAAE,MAAM;;;;;;;;;IA6BlC,uBAAuB,CAC3B,QAAQ,EAAE,MAAM,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC,GAAG,GAAG,CAAC,EAC9C,UAAU,SAAK;CA+DlB"}