@axinom/mosaic-cli 0.5.1-rc.0 → 0.6.0-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/index.js +1 -44
- package/dist/cli/index.js.map +1 -1
- package/dist/commands/get-access-token/get-access-token-options.d.ts +9 -0
- package/dist/commands/get-access-token/get-access-token-options.js +3 -0
- package/dist/commands/get-access-token/get-access-token-options.js.map +1 -0
- package/dist/commands/get-access-token/get-dev-access-token.d.ts +6 -0
- package/dist/commands/get-access-token/get-dev-access-token.js +16 -0
- package/dist/commands/get-access-token/get-dev-access-token.js.map +1 -0
- package/dist/commands/get-access-token/index.d.ts +3 -0
- package/dist/commands/get-access-token/index.js +64 -0
- package/dist/commands/get-access-token/index.js.map +1 -0
- package/dist/exports.d.ts +2 -0
- package/dist/exports.js +6 -0
- package/dist/exports.js.map +1 -0
- package/package.json +6 -4
- package/dist/commands/get-access-token.d.ts +0 -9
- package/dist/commands/get-access-token.js +0 -22
- package/dist/commands/get-access-token.js.map +0 -1
package/dist/cli/index.js
CHANGED
|
@@ -34,50 +34,7 @@ const run = () => {
|
|
|
34
34
|
boolean: true,
|
|
35
35
|
});
|
|
36
36
|
}, apply_templates_1.applyTemplates)
|
|
37
|
-
.command(
|
|
38
|
-
yargs
|
|
39
|
-
.option('permissionsFile', {
|
|
40
|
-
alias: 'f',
|
|
41
|
-
describe: 'A JSON file containing the wanted permission structure.\nJSON Format:\n{"serviceId" : string, "permissions": string[]}[]',
|
|
42
|
-
string: true,
|
|
43
|
-
demandOption: true,
|
|
44
|
-
})
|
|
45
|
-
.option('clientId', {
|
|
46
|
-
alias: ['i', 'devServiceAccountClientId'],
|
|
47
|
-
describe: "The service account client id.\nRequired permission:\nID SERVICE -> 'Dev Generate User Access Token With Permissions'",
|
|
48
|
-
string: true,
|
|
49
|
-
demandOption: true,
|
|
50
|
-
})
|
|
51
|
-
.option('clientSecret', {
|
|
52
|
-
alias: ['s', 'devServiceAccountClientSecret'],
|
|
53
|
-
describe: 'The service account client secret.',
|
|
54
|
-
string: true,
|
|
55
|
-
demandOption: true,
|
|
56
|
-
})
|
|
57
|
-
.option('authEndpoint', {
|
|
58
|
-
alias: ['a', 'idServiceAuthEndpointUrl'],
|
|
59
|
-
describe: 'The authentication service endpoint url.',
|
|
60
|
-
string: true,
|
|
61
|
-
demandOption: true,
|
|
62
|
-
})
|
|
63
|
-
.option('userEmail', {
|
|
64
|
-
alias: ['e'],
|
|
65
|
-
describe: 'The email of a user that exists on the environment. If unspecified, a pseudo-user will be used to generate the token for.',
|
|
66
|
-
string: true,
|
|
67
|
-
})
|
|
68
|
-
.option('failOnUnknownPermission', {
|
|
69
|
-
alias: 'u',
|
|
70
|
-
describe: 'Fails if an unknown permission is requested.',
|
|
71
|
-
boolean: true,
|
|
72
|
-
default: false,
|
|
73
|
-
})
|
|
74
|
-
.option('expiration', {
|
|
75
|
-
alias: 'x',
|
|
76
|
-
describe: 'Token expiration time in seconds.',
|
|
77
|
-
number: true,
|
|
78
|
-
default: 2592000,
|
|
79
|
-
});
|
|
80
|
-
}, get_access_token_1.getAccessToken)
|
|
37
|
+
.command(get_access_token_1.getAccessToken)
|
|
81
38
|
.command(publish_schema_to_db_1.publishSchemaToDb)
|
|
82
39
|
.command(pg_dump_1.pgDump)
|
|
83
40
|
.command(msg_codegen_1.msgCodegen)
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;;AAAA,+BAA+B;AAC/B,iEAA6D;AAC7D,iFAA4E;AAC5E,mEAA8D;AAC9D,yDAAqD;AACrD,iDAA6C;AAC7C,2EAAqE;AAE9D,MAAM,GAAG,GAAG,GAAS,EAAE;IAC5B,KAAK;SACF,UAAU,CAAC,QAAQ,CAAC;SACpB,GAAG,EAAE;SACL,OAAO,CACN,iBAAiB,EACjB,+CAA+C,EAC/C,CAAC,KAAK,EAAE,EAAE;QACR,KAAK;aACF,MAAM,CAAC,MAAM,EAAE;YACd,KAAK,EAAE,GAAG;YACV,QAAQ,EACN,gHAAgH;YAClH,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,IAAI;SACd,CAAC;aACD,MAAM,CAAC,SAAS,EAAE;YACjB,KAAK,EAAE,GAAG;YACV,QAAQ,EACN,2EAA2E;YAC7E,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,IAAI;SACd,CAAC;aACD,MAAM,CAAC,KAAK,EAAE;YACb,KAAK,EAAE,GAAG;YACV,IAAI,EAAE,SAAS;YACf,QAAQ,EACN,4FAA4F;YAC9F,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;IACP,CAAC,EACD,gCAAc,CACf;SACA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;;AAAA,+BAA+B;AAC/B,iEAA6D;AAC7D,iFAA4E;AAC5E,mEAA8D;AAC9D,yDAAqD;AACrD,iDAA6C;AAC7C,2EAAqE;AAE9D,MAAM,GAAG,GAAG,GAAS,EAAE;IAC5B,KAAK;SACF,UAAU,CAAC,QAAQ,CAAC;SACpB,GAAG,EAAE;SACL,OAAO,CACN,iBAAiB,EACjB,+CAA+C,EAC/C,CAAC,KAAK,EAAE,EAAE;QACR,KAAK;aACF,MAAM,CAAC,MAAM,EAAE;YACd,KAAK,EAAE,GAAG;YACV,QAAQ,EACN,gHAAgH;YAClH,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,IAAI;SACd,CAAC;aACD,MAAM,CAAC,SAAS,EAAE;YACjB,KAAK,EAAE,GAAG;YACV,QAAQ,EACN,2EAA2E;YAC7E,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,IAAI;SACd,CAAC;aACD,MAAM,CAAC,KAAK,EAAE;YACb,KAAK,EAAE,GAAG;YACV,IAAI,EAAE,SAAS;YACf,QAAQ,EACN,4FAA4F;YAC9F,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;IACP,CAAC,EACD,gCAAc,CACf;SACA,OAAO,CAAC,iCAAc,CAAC;SACvB,OAAO,CAAC,wCAAiB,CAAC;SAC1B,OAAO,CAAC,gBAAM,CAAC;SACf,OAAO,CAAC,wBAAU,CAAC;SACnB,OAAO,CAAC,+CAAqB,CAAC;SAC9B,aAAa,EAAE;SACf,IAAI,EAAE;SACN,MAAM,CAAC,wDAAwD,CAAC,CAAC,IAAI,CAAC;AAC3E,CAAC,CAAC;AA1CW,QAAA,GAAG,OA0Cd"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-access-token-options.js","sourceRoot":"","sources":["../../../src/commands/get-access-token/get-access-token-options.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { TokenResult } from '@axinom/mosaic-id-link-be';
|
|
2
|
+
import { GetAccessTokenOptions } from './get-access-token-options';
|
|
3
|
+
/**
|
|
4
|
+
* Returns a development ID JWT token based on passed options.
|
|
5
|
+
*/
|
|
6
|
+
export declare const getDevAccessToken: (options: GetAccessTokenOptions) => Promise<TokenResult>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getDevAccessToken = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const mosaic_id_link_be_1 = require("@axinom/mosaic-id-link-be");
|
|
6
|
+
const fs_1 = require("fs");
|
|
7
|
+
/**
|
|
8
|
+
* Returns a development ID JWT token based on passed options.
|
|
9
|
+
*/
|
|
10
|
+
const getDevAccessToken = (options) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
11
|
+
const permissions = JSON.parse(fs_1.readFileSync(options.permissionsFile, 'utf-8'));
|
|
12
|
+
const serviceAccountToken = yield mosaic_id_link_be_1.getServiceAccountToken(options.authEndpoint, options.clientId, options.clientSecret);
|
|
13
|
+
return mosaic_id_link_be_1.devGenerateUserAccessTokenWithPermissions(options.authEndpoint, serviceAccountToken.accessToken, permissions, options.userEmail, options.expiration, options.failOnUnknownPermission);
|
|
14
|
+
});
|
|
15
|
+
exports.getDevAccessToken = getDevAccessToken;
|
|
16
|
+
//# sourceMappingURL=get-dev-access-token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-dev-access-token.js","sourceRoot":"","sources":["../../../src/commands/get-access-token/get-dev-access-token.ts"],"names":[],"mappings":";;;;AAAA,iEAImC;AACnC,2BAAkC;AAGlC;;GAEG;AACI,MAAM,iBAAiB,GAAG,CAC/B,OAA8B,EACR,EAAE;IACxB,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC5B,iBAAY,CAAC,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,CAC/C,CAAC;IAEF,MAAM,mBAAmB,GAAG,MAAM,0CAAsB,CACtD,OAAO,CAAC,YAAY,EACpB,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,YAAY,CACrB,CAAC;IACF,OAAO,6DAAyC,CAC9C,OAAO,CAAC,YAAY,EACpB,mBAAmB,CAAC,WAAW,EAC/B,WAAW,EACX,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,UAAU,EAClB,OAAO,CAAC,uBAAuB,CAChC,CAAC;AACJ,CAAC,CAAA,CAAC;AApBW,QAAA,iBAAiB,qBAoB5B"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getAccessToken = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const mosaic_service_common_1 = require("@axinom/mosaic-service-common");
|
|
6
|
+
const chalk = require("chalk");
|
|
7
|
+
const get_dev_access_token_1 = require("./get-dev-access-token");
|
|
8
|
+
exports.getAccessToken = {
|
|
9
|
+
command: 'get-access-token',
|
|
10
|
+
describe: 'Requests a long living access token for development purposes',
|
|
11
|
+
builder: (yargs) => yargs
|
|
12
|
+
.option('permissionsFile', {
|
|
13
|
+
alias: 'f',
|
|
14
|
+
describe: 'A JSON file containing the wanted permission structure.\nJSON Format:\n{"serviceId" : string, "permissions": string[]}[]',
|
|
15
|
+
string: true,
|
|
16
|
+
demandOption: true,
|
|
17
|
+
})
|
|
18
|
+
.option('clientId', {
|
|
19
|
+
alias: ['i', 'devServiceAccountClientId'],
|
|
20
|
+
describe: "The service account client id.\nRequired permission:\nID SERVICE -> 'Dev Generate User Access Token With Permissions'",
|
|
21
|
+
string: true,
|
|
22
|
+
demandOption: true,
|
|
23
|
+
})
|
|
24
|
+
.option('clientSecret', {
|
|
25
|
+
alias: ['s', 'devServiceAccountClientSecret'],
|
|
26
|
+
describe: 'The service account client secret.',
|
|
27
|
+
string: true,
|
|
28
|
+
demandOption: true,
|
|
29
|
+
})
|
|
30
|
+
.option('authEndpoint', {
|
|
31
|
+
alias: ['a', 'idServiceAuthEndpointUrl'],
|
|
32
|
+
describe: 'The authentication service endpoint url.',
|
|
33
|
+
string: true,
|
|
34
|
+
demandOption: true,
|
|
35
|
+
})
|
|
36
|
+
.option('userEmail', {
|
|
37
|
+
alias: ['e'],
|
|
38
|
+
describe: 'The email of a user that exists on the environment. If unspecified, a pseudo-user will be used to generate the token for.',
|
|
39
|
+
string: true,
|
|
40
|
+
})
|
|
41
|
+
.option('failOnUnknownPermission', {
|
|
42
|
+
alias: 'u',
|
|
43
|
+
describe: 'Fails if an unknown permission is requested.',
|
|
44
|
+
boolean: true,
|
|
45
|
+
default: false,
|
|
46
|
+
})
|
|
47
|
+
.option('expiration', {
|
|
48
|
+
alias: 'x',
|
|
49
|
+
describe: 'Token expiration time in seconds.',
|
|
50
|
+
number: true,
|
|
51
|
+
default: 2592000,
|
|
52
|
+
}),
|
|
53
|
+
handler: (options) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
54
|
+
try {
|
|
55
|
+
const result = yield get_dev_access_token_1.getDevAccessToken(options);
|
|
56
|
+
console.log(chalk.greenBright(result.accessToken));
|
|
57
|
+
}
|
|
58
|
+
catch (err) {
|
|
59
|
+
mosaic_service_common_1.assertError(err);
|
|
60
|
+
console.log(chalk.red('Command failed:'), err.message);
|
|
61
|
+
}
|
|
62
|
+
}),
|
|
63
|
+
};
|
|
64
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/get-access-token/index.ts"],"names":[],"mappings":";;;;AAAA,yEAA4D;AAC5D,+BAA+B;AAG/B,iEAA2D;AAE9C,QAAA,cAAc,GAAkD;IAC3E,OAAO,EAAE,kBAAkB;IAC3B,QAAQ,EAAE,8DAA8D;IACxE,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CACjB,KAAK;SACF,MAAM,CAAC,iBAAiB,EAAE;QACzB,KAAK,EAAE,GAAG;QACV,QAAQ,EACN,0HAA0H;QAC5H,MAAM,EAAE,IAAI;QACZ,YAAY,EAAE,IAAI;KACnB,CAAC;SACD,MAAM,CAAC,UAAU,EAAE;QAClB,KAAK,EAAE,CAAC,GAAG,EAAE,2BAA2B,CAAC;QACzC,QAAQ,EACN,uHAAuH;QACzH,MAAM,EAAE,IAAI;QACZ,YAAY,EAAE,IAAI;KACnB,CAAC;SACD,MAAM,CAAC,cAAc,EAAE;QACtB,KAAK,EAAE,CAAC,GAAG,EAAE,+BAA+B,CAAC;QAC7C,QAAQ,EAAE,oCAAoC;QAC9C,MAAM,EAAE,IAAI;QACZ,YAAY,EAAE,IAAI;KACnB,CAAC;SACD,MAAM,CAAC,cAAc,EAAE;QACtB,KAAK,EAAE,CAAC,GAAG,EAAE,0BAA0B,CAAC;QACxC,QAAQ,EAAE,0CAA0C;QACpD,MAAM,EAAE,IAAI;QACZ,YAAY,EAAE,IAAI;KACnB,CAAC;SACD,MAAM,CAAC,WAAW,EAAE;QACnB,KAAK,EAAE,CAAC,GAAG,CAAC;QACZ,QAAQ,EACN,2HAA2H;QAC7H,MAAM,EAAE,IAAI;KACb,CAAC;SACD,MAAM,CAAC,yBAAyB,EAAE;QACjC,KAAK,EAAE,GAAG;QACV,QAAQ,EAAE,8CAA8C;QACxD,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,KAAK;KACf,CAAC;SACD,MAAM,CAAC,YAAY,EAAE;QACpB,KAAK,EAAE,GAAG;QACV,QAAQ,EAAE,mCAAmC;QAC7C,MAAM,EAAE,IAAI;QACZ,OAAO,EAAE,OAAO;KACjB,CAAC;IACN,OAAO,EAAE,CAAO,OAA8B,EAAiB,EAAE;QAC/D,IAAI;YACF,MAAM,MAAM,GAAG,MAAM,wCAAiB,CAAC,OAAO,CAAC,CAAC;YAEhD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;SACpD;QAAC,OAAO,GAAG,EAAE;YACZ,mCAAW,CAAC,GAAG,CAAC,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;SACxD;IACH,CAAC,CAAA;CACF,CAAC"}
|
package/dist/exports.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
tslib_1.__exportStar(require("./commands/get-access-token/get-access-token-options"), exports);
|
|
5
|
+
tslib_1.__exportStar(require("./commands/get-access-token/get-dev-access-token"), exports);
|
|
6
|
+
//# sourceMappingURL=exports.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exports.js","sourceRoot":"","sources":["../src/exports.ts"],"names":[],"mappings":";;;AAAA,+FAAqE;AACrE,2FAAiE"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@axinom/mosaic-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0-rc.0",
|
|
4
4
|
"description": "The Axinom Mosaic CLI",
|
|
5
5
|
"author": "Axinom",
|
|
6
6
|
"license": "PROPRIETARY",
|
|
@@ -15,6 +15,8 @@
|
|
|
15
15
|
"files": [
|
|
16
16
|
"dist"
|
|
17
17
|
],
|
|
18
|
+
"main": "dist/exports.js",
|
|
19
|
+
"types": "dist/exports.d.ts",
|
|
18
20
|
"scripts": {
|
|
19
21
|
"clean": "rimraf dist",
|
|
20
22
|
"build": "yarn clean && tsc --project tsconfig.build.json",
|
|
@@ -27,8 +29,8 @@
|
|
|
27
29
|
"dependencies": {
|
|
28
30
|
"@asyncapi/modelina": "^0.39.0",
|
|
29
31
|
"@asyncapi/parser": "^1.10.0",
|
|
30
|
-
"@axinom/mosaic-id-link-be": "^0.3.13-rc.
|
|
31
|
-
"@axinom/mosaic-service-common": "^0.10.0-rc.
|
|
32
|
+
"@axinom/mosaic-id-link-be": "^0.3.13-rc.1",
|
|
33
|
+
"@axinom/mosaic-service-common": "^0.10.0-rc.1",
|
|
32
34
|
"@stoplight/spectral": "^5.9.1",
|
|
33
35
|
"chalk": "^4.1.0",
|
|
34
36
|
"diff": "^5.0.0",
|
|
@@ -57,5 +59,5 @@
|
|
|
57
59
|
"publishConfig": {
|
|
58
60
|
"access": "public"
|
|
59
61
|
},
|
|
60
|
-
"gitHead": "
|
|
62
|
+
"gitHead": "1222e42b013b66f9fd5e79c410888d17dca433e0"
|
|
61
63
|
}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getAccessToken = void 0;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
const mosaic_id_link_be_1 = require("@axinom/mosaic-id-link-be");
|
|
6
|
-
const mosaic_service_common_1 = require("@axinom/mosaic-service-common");
|
|
7
|
-
const chalk = require("chalk");
|
|
8
|
-
const fs_1 = require("fs");
|
|
9
|
-
const getAccessToken = (options) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
10
|
-
try {
|
|
11
|
-
const permissions = JSON.parse(fs_1.readFileSync(options.permissionsFile, 'utf-8'));
|
|
12
|
-
const serviceAccountToken = yield mosaic_id_link_be_1.getServiceAccountToken(options.authEndpoint, options.clientId, options.clientSecret);
|
|
13
|
-
const userToken = yield mosaic_id_link_be_1.devGenerateUserAccessTokenWithPermissions(options.authEndpoint, serviceAccountToken.accessToken, permissions, options.userEmail, options.expiration, options.failOnUnknownPermission);
|
|
14
|
-
console.log(chalk.greenBright(userToken.accessToken));
|
|
15
|
-
}
|
|
16
|
-
catch (err) {
|
|
17
|
-
mosaic_service_common_1.assertError(err);
|
|
18
|
-
console.log(chalk.red('Command failed:'), err.message);
|
|
19
|
-
}
|
|
20
|
-
});
|
|
21
|
-
exports.getAccessToken = getAccessToken;
|
|
22
|
-
//# sourceMappingURL=get-access-token.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"get-access-token.js","sourceRoot":"","sources":["../../src/commands/get-access-token.ts"],"names":[],"mappings":";;;;AAAA,iEAGmC;AACnC,yEAA4D;AAC5D,+BAA+B;AAC/B,2BAAkC;AAE3B,MAAM,cAAc,GAAG,CAAO,OAQpC,EAAiB,EAAE;IAClB,IAAI;QACF,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC5B,iBAAY,CAAC,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,CAC/C,CAAC;QAEF,MAAM,mBAAmB,GAAG,MAAM,0CAAsB,CACtD,OAAO,CAAC,YAAY,EACpB,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,YAAY,CACrB,CAAC;QACF,MAAM,SAAS,GAAG,MAAM,6DAAyC,CAC/D,OAAO,CAAC,YAAY,EACpB,mBAAmB,CAAC,WAAW,EAC/B,WAAW,EACX,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,UAAU,EAClB,OAAO,CAAC,uBAAuB,CAChC,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;KACvD;IAAC,OAAO,GAAG,EAAE;QACZ,mCAAW,CAAC,GAAG,CAAC,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;KACxD;AACH,CAAC,CAAA,CAAC;AAjCW,QAAA,cAAc,kBAiCzB"}
|