@ronas-it/nx-generators 0.3.3 → 0.3.5
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/package.json +1 -1
- package/src/generators/code-checks/files/types.d.ts.template +2 -1
- package/src/generators/expo-app/files/README.md.template +70 -0
- package/src/generators/expo-app/generator.js +2 -0
- package/src/generators/expo-app/generator.js.map +1 -1
- package/src/generators/expo-app/schema.json +1 -1
- package/src/generators/repo-config/files/README.md.template +74 -42
- package/src/generators/repo-config/generator.js +0 -2
- package/src/generators/repo-config/generator.js.map +1 -1
package/package.json
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
// This file is added for correct work of TS-checks in pre-commit hook using tsc-files
|
|
2
2
|
// Issue: https://github.com/gustavopch/tsc-files/issues/20
|
|
3
|
-
|
|
3
|
+
// TODO: Uncomment the line below if you have an Expo app
|
|
4
|
+
// import 'node_modules/@nx/expo/typings/svg.d.ts';
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# <%= formatName(name) %> - Mobile app
|
|
2
|
+
|
|
3
|
+
React Native mobile app for Android and iOS.
|
|
4
|
+
|
|
5
|
+
## Scripts overview
|
|
6
|
+
|
|
7
|
+
See `package.json` for pre-defined scripts.\
|
|
8
|
+
You can run them using `npm run {script} -- {arguments}` or `yarn {script} {arguments}`:
|
|
9
|
+
|
|
10
|
+
- `start` - Start local development server
|
|
11
|
+
- `build:{environment}` - Create builds for _both_ platforms
|
|
12
|
+
- Pass `-p {android|ios}` to run a platform-specific build
|
|
13
|
+
- To create a [Development client](https://docs.expo.dev/develop/development-builds/introduction/) build run `build:debug`
|
|
14
|
+
- `submit:ios:{environment}` - Submit iOS build to AppStore Connect
|
|
15
|
+
- `update:{environment}` - Publish OTA-update for specified environment
|
|
16
|
+
|
|
17
|
+
## Development
|
|
18
|
+
|
|
19
|
+
This app uses [Expo development builds](https://docs.expo.dev/develop/development-builds/introduction/)
|
|
20
|
+
for local development.
|
|
21
|
+
|
|
22
|
+
### Run on a virtual device
|
|
23
|
+
|
|
24
|
+
- [Android emulator](https://docs.expo.dev/workflow/android-studio-emulator/): `npm run android`
|
|
25
|
+
- [iOS simulator](https://docs.expo.dev/workflow/ios-simulator/) (macOS is required): `npm run ios`
|
|
26
|
+
|
|
27
|
+
### Run on a physical device
|
|
28
|
+
|
|
29
|
+
1. Find the latest `debug`-profile build for your platform in Expo project or run `build:debug` script to create a new one.
|
|
30
|
+
1. Download the build artifact and install it on your device.
|
|
31
|
+
1. Run the `start` script to launch a local development server.
|
|
32
|
+
1. Connect to the server using dev-client you installed.
|
|
33
|
+
|
|
34
|
+
**Note**: For iOS you need to register your device first as [described](https://docs.expo.dev/build/internal-distribution/#setting-up-ad-hoc-provisioning).\
|
|
35
|
+
After that [resign](https://docs.expo.dev/app-signing/app-credentials/#re-signing-new-credentials) existing build or a create new one. This is required only once.
|
|
36
|
+
|
|
37
|
+
## Releases
|
|
38
|
+
|
|
39
|
+
### 1. Prepare
|
|
40
|
+
|
|
41
|
+
1. Increment `ios.buildNumber` and `android.versionCode` values and update `version` (if necessary) in `app.config.ts`
|
|
42
|
+
1. Commit the changes with version `v{version}-{buildNumber}`, for example: `chore: release v1.2.2-12`
|
|
43
|
+
1. Create or update version tag: `git tag v1.2.2-12`
|
|
44
|
+
1. Push changes: `git push && git push --tags`
|
|
45
|
+
1. Create new release in [Releases](../../../../-/releases) based on tag you pushed
|
|
46
|
+
|
|
47
|
+
### 2. Create builds
|
|
48
|
+
|
|
49
|
+
- `build:dev` - build development version for internal testing
|
|
50
|
+
- `build:prod` - build production version for stores
|
|
51
|
+
|
|
52
|
+
### 3. Distribute
|
|
53
|
+
|
|
54
|
+
#### Internal testing
|
|
55
|
+
|
|
56
|
+
- Android: share .apk builds with testers
|
|
57
|
+
- iOS: send created builds to Testflight using `submit:ios:dev`
|
|
58
|
+
|
|
59
|
+
#### Production
|
|
60
|
+
|
|
61
|
+
- Android: Download production build artifact and upload it to Google Play Console
|
|
62
|
+
- iOS: submit production builds App Store Connect using `submit:ios:prod`
|
|
63
|
+
|
|
64
|
+
### OTA updates
|
|
65
|
+
|
|
66
|
+
Minor fixes can be distributed over-the-air using [EAS Update](https://docs.expo.dev/eas-update/introduction/):
|
|
67
|
+
|
|
68
|
+
1. Update `version` in `app.config.ts`
|
|
69
|
+
2. Commit the changes
|
|
70
|
+
3. Publish OTA-update for desired environment: `update:dev` or `update:prod`
|
|
@@ -21,6 +21,8 @@ const dependencies = {
|
|
|
21
21
|
function expoAppGenerator(tree, options) {
|
|
22
22
|
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
23
23
|
const appRoot = `apps/${options.directory}`;
|
|
24
|
+
// Install @nx/expo plugin
|
|
25
|
+
(0, child_process_1.execSync)('npx nx add @nx/expo', { stdio: 'inherit' });
|
|
24
26
|
if (!(0, fs_1.existsSync)(appRoot)) {
|
|
25
27
|
(0, child_process_1.execSync)(`npx nx g app ${options.name} --directory=apps/${options.directory} --projectNameAndRootFormat=as-provided --unitTestRunner=none --e2eTestRunner=none`);
|
|
26
28
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../plugin/src/generators/expo-app/generator.ts"],"names":[],"mappings":";;;;AAAA,iDAAyC;AACzC,6BAA6B;AAC7B,uCAQoB;AAEpB,uCAAgC;AAChC,2BAAgC;AAChC,8CAAgD;AAEhD,MAAM,YAAY,GAAG;IACnB,gBAAgB,EAAE,SAAS;IAC3B,aAAa,EAAE,SAAS;IACxB,gCAAgC,EAAE,SAAS;IAC3C,sBAAsB,EAAE,SAAS;IACjC,cAAc,EAAE,QAAQ;IACxB,iBAAiB,EAAE,SAAS;IAC5B,cAAc,EAAE,UAAU;IAC1B,eAAe,EAAE,QAAQ;CAC1B,CAAC;AAEF,SAAsB,gBAAgB,CACpC,IAAU,EACV,OAA+B;;QAE/B,MAAM,OAAO,GAAG,QAAQ,OAAO,CAAC,SAAS,EAAE,CAAC;QAE5C,IAAI,CAAC,IAAA,eAAU,EAAC,OAAO,CAAC,EAAE,CAAC;YACzB,IAAA,wBAAQ,EACN,gBAAgB,OAAO,CAAC,IAAI,qBAAqB,OAAO,CAAC,SAAS,oFAAoF,CACvJ,CAAC;QACJ,CAAC;QAED,MAAM,cAAc,GAAG,GAAG,OAAO,eAAe,CAAC;QAEjD,2DAA2D;QAC3D,IAAI,CAAC,MAAM,CAAC,GAAG,OAAO,MAAM,CAAC,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,GAAG,OAAO,WAAW,CAAC,CAAC;QACnC,IAAI,CAAC,MAAM,CAAC,GAAG,OAAO,oBAAoB,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,CAAC,GAAG,OAAO,iBAAiB,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,CAAC,GAAG,OAAO,WAAW,CAAC,CAAC;QACnC,IAAI,CAAC,MAAM,CAAC,GAAG,OAAO,WAAW,CAAC,CAAC;QACnC,IAAI,CAAC,MAAM,CAAC,GAAG,OAAO,kBAAkB,CAAC,CAAC;QAE1C,0BAA0B;QAC1B,MAAM,cAAc,GAAG,IAAA,iBAAQ,EAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QACtD,cAAc,CAAC,IAAI,GAAG,mBAAmB,CAAC;QAC1C,cAAc,CAAC,OAAO,mCACjB,iBAAO,GACP,cAAc,CAAC,OAAO,CAC1B,CAAC;QACF,IAAA,kBAAS,EAAC,IAAI,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC;QAEhD,gBAAgB;QAChB,IAAA,sBAAa,EAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,OAAO,kCACrD,OAAO,KACV,UAAU,EAAV,kBAAU,IACV,CAAC;QAEH,mBAAmB;QACnB,IAAA,qCAA4B,EAC1B,IAAI,kCAEC,YAAY;YACf,sCAAsC;YACtC,yEAAyE;YACzE,8BAA8B,EAAE,QAAQ,KAE1C,EAAE,WAAW,EAAE,QAAQ,EAAE,CAC1B,CAAC;QAEF,IAAA,qCAA4B,EAAC,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,cAAc,CAAC,CAAC;QAErE,MAAM,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAC;QAExB,OAAO,GAAG,EAAE;YACV,IAAA,4BAAmB,EAAC,IAAI,CAAC,CAAC;YAC1B,IAAA,wBAAQ,EAAC,wBAAwB,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3D,CAAC,CAAC;IACJ,CAAC;CAAA;
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../plugin/src/generators/expo-app/generator.ts"],"names":[],"mappings":";;;;AAAA,iDAAyC;AACzC,6BAA6B;AAC7B,uCAQoB;AAEpB,uCAAgC;AAChC,2BAAgC;AAChC,8CAAgD;AAEhD,MAAM,YAAY,GAAG;IACnB,gBAAgB,EAAE,SAAS;IAC3B,aAAa,EAAE,SAAS;IACxB,gCAAgC,EAAE,SAAS;IAC3C,sBAAsB,EAAE,SAAS;IACjC,cAAc,EAAE,QAAQ;IACxB,iBAAiB,EAAE,SAAS;IAC5B,cAAc,EAAE,UAAU;IAC1B,eAAe,EAAE,QAAQ;CAC1B,CAAC;AAEF,SAAsB,gBAAgB,CACpC,IAAU,EACV,OAA+B;;QAE/B,MAAM,OAAO,GAAG,QAAQ,OAAO,CAAC,SAAS,EAAE,CAAC;QAE5C,0BAA0B;QAC1B,IAAA,wBAAQ,EAAC,qBAAqB,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAA;QAErD,IAAI,CAAC,IAAA,eAAU,EAAC,OAAO,CAAC,EAAE,CAAC;YACzB,IAAA,wBAAQ,EACN,gBAAgB,OAAO,CAAC,IAAI,qBAAqB,OAAO,CAAC,SAAS,oFAAoF,CACvJ,CAAC;QACJ,CAAC;QAED,MAAM,cAAc,GAAG,GAAG,OAAO,eAAe,CAAC;QAEjD,2DAA2D;QAC3D,IAAI,CAAC,MAAM,CAAC,GAAG,OAAO,MAAM,CAAC,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,GAAG,OAAO,WAAW,CAAC,CAAC;QACnC,IAAI,CAAC,MAAM,CAAC,GAAG,OAAO,oBAAoB,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,CAAC,GAAG,OAAO,iBAAiB,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,CAAC,GAAG,OAAO,WAAW,CAAC,CAAC;QACnC,IAAI,CAAC,MAAM,CAAC,GAAG,OAAO,WAAW,CAAC,CAAC;QACnC,IAAI,CAAC,MAAM,CAAC,GAAG,OAAO,kBAAkB,CAAC,CAAC;QAE1C,0BAA0B;QAC1B,MAAM,cAAc,GAAG,IAAA,iBAAQ,EAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QACtD,cAAc,CAAC,IAAI,GAAG,mBAAmB,CAAC;QAC1C,cAAc,CAAC,OAAO,mCACjB,iBAAO,GACP,cAAc,CAAC,OAAO,CAC1B,CAAC;QACF,IAAA,kBAAS,EAAC,IAAI,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC;QAEhD,gBAAgB;QAChB,IAAA,sBAAa,EAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,OAAO,kCACrD,OAAO,KACV,UAAU,EAAV,kBAAU,IACV,CAAC;QAEH,mBAAmB;QACnB,IAAA,qCAA4B,EAC1B,IAAI,kCAEC,YAAY;YACf,sCAAsC;YACtC,yEAAyE;YACzE,8BAA8B,EAAE,QAAQ,KAE1C,EAAE,WAAW,EAAE,QAAQ,EAAE,CAC1B,CAAC;QAEF,IAAA,qCAA4B,EAAC,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,cAAc,CAAC,CAAC;QAErE,MAAM,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAC;QAExB,OAAO,GAAG,EAAE;YACV,IAAA,4BAAmB,EAAC,IAAI,CAAC,CAAC;YAC1B,IAAA,wBAAQ,EAAC,wBAAwB,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3D,CAAC,CAAC;IACJ,CAAC;CAAA;AA7DD,4CA6DC;AAED,kBAAe,gBAAgB,CAAC"}
|
|
@@ -1,79 +1,111 @@
|
|
|
1
1
|
# <%= formatName(name) %>
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
This workspace contains source code for <%= formatName(name) %> project.
|
|
4
|
+
Each app in the `apps` directory has own `README` where you can find more details about it.
|
|
4
5
|
|
|
5
|
-
##
|
|
6
|
+
## Getting started
|
|
6
7
|
|
|
7
8
|
1. Install dependencies: `npm install`
|
|
8
|
-
1.
|
|
9
|
-
- Use [Expo Go](https://expo.dev/client) to run mobile version
|
|
9
|
+
1. Launch desired app for development:
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
```sh
|
|
12
|
+
npx nx start {app-name}
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Or navigate to an app directory to run it as described in `README`.
|
|
16
|
+
|
|
17
|
+
## Resources
|
|
18
|
+
|
|
19
|
+
Below are links to tools and services used in this project:
|
|
20
|
+
|
|
21
|
+
- [Tasks]() (will be added later)
|
|
22
|
+
- [Design]() (will be added later)
|
|
23
|
+
- [Expo]() (will be added later)
|
|
24
|
+
- [Google Play Console]() (will be added later)
|
|
25
|
+
- [App Store Connect]() (will be added later)
|
|
26
|
+
- [Firebase]() (will be added later)
|
|
27
|
+
- [API Documentation]() (will be added later)
|
|
28
|
+
- [Laravel Telescope]() (will be added later)
|
|
29
|
+
- [Sentry]() (will be added later)
|
|
12
30
|
|
|
13
|
-
|
|
31
|
+
## Repository management
|
|
14
32
|
|
|
15
|
-
|
|
33
|
+
This workspace uses [Nx](https://nx.dev/getting-started/intro) for repository management and code generation.
|
|
34
|
+
You can install [Nx extension](https://nx.dev/getting-started/editor-setup) for your code editor.
|
|
16
35
|
|
|
17
|
-
|
|
36
|
+
### Code generation
|
|
37
|
+
|
|
38
|
+
We use [custom Nx generators](https://github.com/RonasIT/nx-generators) plugin for code generation.\
|
|
39
|
+
Run `npx nx list @ronas-it/nx-generators` to view a list of available generators in the plugin.\
|
|
40
|
+
Each generator accepts the `--help` argument to show instructions.
|
|
41
|
+
|
|
42
|
+
#### Generate libraries
|
|
18
43
|
|
|
19
44
|
```sh
|
|
20
|
-
|
|
45
|
+
npx nx g react-lib
|
|
46
|
+
npx nx g react-lib {app-name|shared}/{context?}/{type}/{name}
|
|
21
47
|
```
|
|
22
48
|
|
|
23
49
|
Examples:
|
|
24
50
|
|
|
25
51
|
```sh
|
|
26
|
-
|
|
27
|
-
# generate a "profile-settings" feature library in "
|
|
52
|
+
npx nx g react-lib mobile/account/features/profile-settings
|
|
53
|
+
# generate a "profile-settings" feature library in "account" context for "mobile" app
|
|
28
54
|
|
|
29
|
-
|
|
55
|
+
npx nx g react-lib shared/ui/ui-kit
|
|
30
56
|
# generate a "ui-kit" ui-library shared between all apps
|
|
31
57
|
```
|
|
32
58
|
|
|
33
|
-
####
|
|
59
|
+
#### Generate components
|
|
34
60
|
|
|
35
|
-
- `
|
|
36
|
-
- `
|
|
61
|
+
- `npx nx g react-component` - generate a root component in some library
|
|
62
|
+
- `npx nx g react-component --name=AppButton --subcomponent` - generate a library sub-component.
|
|
37
63
|
|
|
38
|
-
|
|
64
|
+
#### Generate apps
|
|
39
65
|
|
|
40
|
-
|
|
41
|
-
npm run g:component --lib=mobile/client/features/profile-settings
|
|
42
|
-
# generate a root component.tsx for feature library "profile-settings" in "client" context for "mobile" app
|
|
66
|
+
- `npx nx g expo-app` - generate new RN Expo app
|
|
43
67
|
|
|
44
|
-
|
|
45
|
-
# generate an exported "button/component.tsx" component inside the "ui-kit" library
|
|
68
|
+
### Running tasks
|
|
46
69
|
|
|
47
|
-
|
|
48
|
-
|
|
70
|
+
To execute tasks with Nx use the following syntax: `npx nx <target> <project> <...options>`.\
|
|
71
|
+
You can also run multiple targets: `npx nx run-many -t <target1> <target2>`.\
|
|
72
|
+
Targets can be defined in the `package.json` or `projects.json`. Learn more [in the docs](https://nx.dev/features/run-tasks).
|
|
49
73
|
|
|
50
|
-
|
|
74
|
+
## Dependencies management
|
|
51
75
|
|
|
52
|
-
|
|
76
|
+
This repository uses [NPM Workspaces](https://docs.npmjs.com/cli/using-npm/workspaces) to manage dependencies.
|
|
77
|
+
Dependencies that used in `libs` should be listed both in root and app's `package.json`.
|
|
53
78
|
|
|
54
|
-
|
|
55
|
-
Then run `nx list <plugin-name>` to see what generators are available.
|
|
79
|
+
### Installing dependencies
|
|
56
80
|
|
|
57
|
-
|
|
81
|
+
Run the following scripts in the repository root:
|
|
58
82
|
|
|
59
|
-
|
|
83
|
+
- `npm i {some-package} -w {app-name} -iwr` - install some package for particular app and for the whole repository
|
|
84
|
+
- `npm i {some-package} -ws -iwr` - install some package for all apps and including root one `package.json`
|
|
60
85
|
|
|
61
|
-
|
|
86
|
+
You can also navigate to an app directory and install package there:
|
|
62
87
|
|
|
63
|
-
|
|
64
|
-
nx <target> <project> <...options>
|
|
65
|
-
```
|
|
88
|
+
- `npm i {some-package} -iwr`
|
|
66
89
|
|
|
67
|
-
|
|
90
|
+
### Uninstalling dependencies
|
|
68
91
|
|
|
69
|
-
|
|
70
|
-
nx run-many -t <target1> <target2>
|
|
71
|
-
```
|
|
92
|
+
The same rules apply to removing dependencies:
|
|
72
93
|
|
|
73
|
-
|
|
94
|
+
- `npm uni {some-package} -w {app-name} -iwr` - uninstall some package for particular app and for the whole repository
|
|
95
|
+
- `npm uni {some-package} -ws -iwr` - uninstall some package for all apps and including root `package.json`
|
|
74
96
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
97
|
+
### Syncing dependencies
|
|
98
|
+
|
|
99
|
+
To check consistency of packages versions across workspaces run the following command in the project root:
|
|
100
|
+
|
|
101
|
+
- `npm run deps:sync`
|
|
102
|
+
|
|
103
|
+
After that check the changes and run `npm i` to install adjusted versions.
|
|
104
|
+
|
|
105
|
+
## Code checks
|
|
106
|
+
|
|
107
|
+
This project has pre-configured linting and formatting rules with pre-commit hook.
|
|
108
|
+
You can execute these commands for the whole project manually:
|
|
78
109
|
|
|
79
|
-
|
|
110
|
+
- `npm run lint` - run necessary code checks
|
|
111
|
+
- `npm run format` - run code autoformat
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.repoConfigGenerator = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
|
-
const child_process_1 = require("child_process");
|
|
6
5
|
const path = require("path");
|
|
7
6
|
const devkit_1 = require("@nx/devkit");
|
|
8
7
|
const scripts_1 = require("./scripts");
|
|
@@ -28,7 +27,6 @@ function repoConfigGenerator(tree) {
|
|
|
28
27
|
yield (0, devkit_1.formatFiles)(tree);
|
|
29
28
|
return () => {
|
|
30
29
|
(0, devkit_1.installPackagesTask)(tree);
|
|
31
|
-
(0, child_process_1.execSync)('npx expo install --fix', { stdio: 'inherit' });
|
|
32
30
|
};
|
|
33
31
|
});
|
|
34
32
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../plugin/src/generators/repo-config/generator.ts"],"names":[],"mappings":";;;;AAAA,
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../plugin/src/generators/repo-config/generator.ts"],"names":[],"mappings":";;;;AAAA,6BAA6B;AAC7B,uCAQoB;AACpB,uCAAgC;AAChC,8CAAgE;AAEhE,SAAsB,mBAAmB,CAAC,IAAU;;QAClD,MAAM,WAAW,GAAG,GAAG,CAAC;QACxB,MAAM,kBAAkB,GAAG,cAAc,CAAC;QAE1C,2DAA2D;QAC3D,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAEzB,8BAA8B;QAC9B,MAAM,kBAAkB,GAAG,IAAA,iBAAQ,EAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;QAC9D,kBAAkB,CAAC,UAAU,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC3C,kBAAkB,CAAC,OAAO,mCAAQ,iBAAO,GAAK,kBAAkB,CAAC,OAAO,CAAE,CAAC;QAC3E,IAAA,kBAAS,EAAC,IAAI,EAAE,kBAAkB,EAAE,kBAAkB,CAAC,CAAC;QAExD,oBAAoB;QACpB,IAAA,sBAAa,EAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,WAAW,EAAE;YAC9D,IAAI,EAAE,IAAA,sBAAc,EAAC,kBAAkB,CAAC,IAAI,CAAC;YAC7C,UAAU,EAAV,kBAAU;SACX,CAAC,CAAC;QAEH,mBAAmB;QACnB,IAAA,qCAA4B,EAAC,IAAI,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;QAEhE,MAAM,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAC;QAExB,OAAO,GAAG,EAAE;YACV,IAAA,4BAAmB,EAAC,IAAI,CAAC,CAAC;QAC5B,CAAC,CAAC;IACJ,CAAC;CAAA;AA3BD,kDA2BC;AAED,kBAAe,mBAAmB,CAAC"}
|