create-turbo-mono 1.0.6 → 1.0.7
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/.claude/settings.local.json +10 -0
- package/README.md +82 -27
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +118 -0
- package/dist/index.js.map +1 -0
- package/dist/scaffold.d.ts +8 -0
- package/dist/scaffold.d.ts.map +1 -0
- package/dist/scaffold.js +42 -0
- package/dist/scaffold.js.map +1 -0
- package/dist/templates/backend.d.ts +2 -0
- package/dist/templates/backend.d.ts.map +1 -0
- package/dist/templates/backend.js +424 -0
- package/dist/templates/backend.js.map +1 -0
- package/dist/templates/cicd.d.ts +3 -0
- package/dist/templates/cicd.d.ts.map +1 -0
- package/dist/templates/cicd.js +307 -0
- package/dist/templates/cicd.js.map +1 -0
- package/dist/templates/docker.d.ts +3 -0
- package/dist/templates/docker.d.ts.map +1 -0
- package/dist/templates/docker.js +457 -0
- package/dist/templates/docker.js.map +1 -0
- package/dist/templates/docs.d.ts +3 -0
- package/dist/templates/docs.d.ts.map +1 -0
- package/dist/templates/docs.js +71 -0
- package/dist/templates/docs.js.map +1 -0
- package/dist/templates/frontend.d.ts +2 -0
- package/dist/templates/frontend.d.ts.map +1 -0
- package/dist/templates/frontend.js +470 -0
- package/dist/templates/frontend.js.map +1 -0
- package/dist/templates/root.d.ts +3 -0
- package/dist/templates/root.d.ts.map +1 -0
- package/dist/templates/root.js +210 -0
- package/dist/templates/root.js.map +1 -0
- package/dist/templates/shared.d.ts +2 -0
- package/dist/templates/shared.d.ts.map +1 -0
- package/dist/templates/shared.js +934 -0
- package/dist/templates/shared.js.map +1 -0
- package/dist/utils.d.ts +5 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +34 -0
- package/dist/utils.js.map +1 -0
- package/package.json +30 -14
- package/src/index.ts +138 -0
- package/src/scaffold.ts +51 -0
- package/src/templates/backend.ts +460 -0
- package/src/templates/cicd.ts +334 -0
- package/src/templates/docker.ts +502 -0
- package/src/templates/docs.ts +74 -0
- package/src/templates/frontend.ts +498 -0
- package/src/templates/root.ts +216 -0
- package/src/templates/shared.ts +1065 -0
- package/src/utils.ts +31 -0
- package/tsconfig.json +20 -0
- package/pnpm-workspace.yaml +0 -4
package/README.md
CHANGED
|
@@ -1,32 +1,52 @@
|
|
|
1
|
-
#
|
|
1
|
+
# create-turbo-mono
|
|
2
2
|
|
|
3
|
-
A monorepo
|
|
3
|
+
A production-ready monorepo scaffolding tool with **NestJS** backend, **Next.js** frontend, **Prisma** ORM, **Docker**, and **CI/CD** — all wired up with **Turborepo** and **pnpm**.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## Quick Start
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npx create-turbo-mono my-app
|
|
9
|
+
```
|
|
6
10
|
|
|
7
11
|
### Prerequisites
|
|
8
12
|
|
|
9
13
|
- Node.js >= 18
|
|
10
14
|
- pnpm >= 8
|
|
15
|
+
- Docker (optional, for containerized development)
|
|
11
16
|
|
|
12
|
-
###
|
|
17
|
+
### Setup
|
|
13
18
|
|
|
14
19
|
```bash
|
|
20
|
+
cd my-app
|
|
15
21
|
pnpm install
|
|
22
|
+
cp .env.example .env
|
|
16
23
|
```
|
|
17
24
|
|
|
18
25
|
### Development
|
|
19
26
|
|
|
20
27
|
```bash
|
|
21
|
-
# Start all apps
|
|
28
|
+
# Start all apps
|
|
22
29
|
pnpm dev
|
|
23
30
|
|
|
31
|
+
# Start specific apps (backend + frontend)
|
|
32
|
+
pnpm dev:all
|
|
33
|
+
|
|
34
|
+
# Start local infrastructure (Postgres + Redis)
|
|
35
|
+
docker compose -f docker-compose.local.yml up -d
|
|
36
|
+
|
|
24
37
|
# Build all apps
|
|
25
38
|
pnpm build
|
|
26
39
|
|
|
27
40
|
# Type checking
|
|
28
41
|
pnpm type-check
|
|
29
42
|
|
|
43
|
+
# Linting
|
|
44
|
+
pnpm lint
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Database
|
|
48
|
+
|
|
49
|
+
```bash
|
|
30
50
|
# Generate Prisma client
|
|
31
51
|
pnpm db:generate
|
|
32
52
|
|
|
@@ -40,40 +60,75 @@ pnpm db:studio
|
|
|
40
60
|
## Project Structure
|
|
41
61
|
|
|
42
62
|
```
|
|
43
|
-
my-monorepo/
|
|
44
63
|
├── apps/
|
|
45
|
-
│ ├── backend/
|
|
46
|
-
│ └──
|
|
64
|
+
│ ├── backend/
|
|
65
|
+
│ │ └── api/ # NestJS API service
|
|
66
|
+
│ └── frontend/
|
|
67
|
+
│ └── web/ # Next.js web application
|
|
47
68
|
├── packages/
|
|
48
|
-
│ ├── database/
|
|
49
|
-
│ ├── shared-backend/
|
|
50
|
-
│ ├── shared-frontend/
|
|
51
|
-
│ ├── shared-common/
|
|
52
|
-
│ └── tsconfig/
|
|
53
|
-
|
|
69
|
+
│ ├── database/ # Prisma schema and client
|
|
70
|
+
│ ├── shared-backend/ # Backend utilities and types
|
|
71
|
+
│ ├── shared-frontend/ # Frontend components and hooks
|
|
72
|
+
│ ├── shared-common/ # Universal utilities (frontend + backend)
|
|
73
|
+
│ └── tsconfig/ # Shared TypeScript configurations
|
|
74
|
+
├── scripts/
|
|
75
|
+
│ ├── deploy.sh # Production deployment script
|
|
76
|
+
│ └── rollback.sh # Rollback to previous release
|
|
77
|
+
├── Dockerfile # Multi-stage Docker build
|
|
78
|
+
├── docker-compose.local.yml # Local dev (Postgres + Redis only)
|
|
79
|
+
├── docker-compose.dev.yml # Full dev environment in Docker
|
|
80
|
+
├── docker-compose.prod.yml # Production deployment
|
|
81
|
+
└── turbo.json # Turborepo pipeline config
|
|
54
82
|
```
|
|
55
83
|
|
|
56
|
-
##
|
|
84
|
+
## What's Included
|
|
57
85
|
|
|
58
|
-
|
|
59
|
-
|
|
86
|
+
- **Turborepo** — Fast, incremental builds with caching
|
|
87
|
+
- **pnpm workspaces** — Efficient dependency management
|
|
88
|
+
- **NestJS** — Backend API with modular architecture
|
|
89
|
+
- **Next.js** — Frontend with SSR/SSG support
|
|
90
|
+
- **Prisma** — Type-safe database ORM with migrations
|
|
91
|
+
- **Docker** — Multi-stage builds for dev and production
|
|
92
|
+
- **CI/CD** — GitHub Actions workflows for main and staging
|
|
93
|
+
- **Shared packages** — Reusable code across apps (types, utils, components)
|
|
94
|
+
- **TypeScript** — Strict configs for NestJS, Next.js, and React libraries
|
|
60
95
|
|
|
61
|
-
|
|
62
|
-
Shared backend utilities, middleware, and types.
|
|
96
|
+
## Docker
|
|
63
97
|
|
|
64
|
-
|
|
65
|
-
|
|
98
|
+
```bash
|
|
99
|
+
# Local infrastructure only (recommended for development)
|
|
100
|
+
docker compose -f docker-compose.local.yml up -d
|
|
66
101
|
|
|
67
|
-
|
|
68
|
-
|
|
102
|
+
# Full development environment
|
|
103
|
+
docker compose -f docker-compose.dev.yml up
|
|
104
|
+
|
|
105
|
+
# Production
|
|
106
|
+
docker compose -f docker-compose.prod.yml up -d
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## Deployment
|
|
110
|
+
|
|
111
|
+
The included CI/CD pipelines (`.github/workflows/`) handle:
|
|
112
|
+
|
|
113
|
+
- **Main branch** — Builds Docker images, pushes to GHCR, deploys to production
|
|
114
|
+
- **Develop/Staging branch** — Builds and deploys to staging environment
|
|
115
|
+
|
|
116
|
+
Manual deployment:
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
./scripts/deploy.sh <tag>
|
|
120
|
+
./scripts/rollback.sh
|
|
121
|
+
```
|
|
69
122
|
|
|
70
123
|
## Adding New Apps
|
|
71
124
|
|
|
72
|
-
### Backend
|
|
73
|
-
|
|
125
|
+
### Backend
|
|
126
|
+
|
|
127
|
+
Create a new NestJS app in `apps/backend/` — it's automatically picked up by the pnpm workspace.
|
|
128
|
+
|
|
129
|
+
### Frontend
|
|
74
130
|
|
|
75
|
-
|
|
76
|
-
Create a new Next.js app in `apps/frontend/` and add it to `pnpm-workspace.yaml`.
|
|
131
|
+
Create a new Next.js app in `apps/frontend/` — it's automatically picked up by the pnpm workspace.
|
|
77
132
|
|
|
78
133
|
## License
|
|
79
134
|
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
+
};
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
const commander_1 = require("commander");
|
|
8
|
+
const prompts_1 = __importDefault(require("prompts"));
|
|
9
|
+
const path_1 = __importDefault(require("path"));
|
|
10
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
11
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
12
|
+
const ora_1 = __importDefault(require("ora"));
|
|
13
|
+
const scaffold_1 = require("./scaffold");
|
|
14
|
+
const utils_1 = require("./utils");
|
|
15
|
+
const program = new commander_1.Command();
|
|
16
|
+
program
|
|
17
|
+
.name('create-repo')
|
|
18
|
+
.description('Create a new monorepo with NestJS and Next.js apps')
|
|
19
|
+
.argument('[project-name]', 'Name of the project')
|
|
20
|
+
.action(async (projectName) => {
|
|
21
|
+
console.log(chalk_1.default.blue.bold('\n🚀 Welcome to Monorepo Generator!\n'));
|
|
22
|
+
const questions = [];
|
|
23
|
+
if (!projectName) {
|
|
24
|
+
questions.push({
|
|
25
|
+
type: 'text',
|
|
26
|
+
name: 'projectName',
|
|
27
|
+
message: 'What is your project name?',
|
|
28
|
+
initial: 'my-monorepo',
|
|
29
|
+
validate: (value) => value.length > 0 ? true : 'Project name is required',
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
questions.push({
|
|
33
|
+
type: 'list',
|
|
34
|
+
name: 'backends',
|
|
35
|
+
message: 'Enter backend app names (comma-separated):',
|
|
36
|
+
initial: 'api',
|
|
37
|
+
separator: ',',
|
|
38
|
+
format: (val) => val.map(v => v.trim()).filter(Boolean),
|
|
39
|
+
}, {
|
|
40
|
+
type: 'list',
|
|
41
|
+
name: 'frontends',
|
|
42
|
+
message: 'Enter frontend app names (comma-separated):',
|
|
43
|
+
initial: 'web',
|
|
44
|
+
separator: ',',
|
|
45
|
+
format: (val) => val.map(v => v.trim()).filter(Boolean),
|
|
46
|
+
});
|
|
47
|
+
const answers = await (0, prompts_1.default)(questions, {
|
|
48
|
+
onCancel: () => {
|
|
49
|
+
console.log(chalk_1.default.red('\n❌ Operation cancelled'));
|
|
50
|
+
process.exit(0);
|
|
51
|
+
},
|
|
52
|
+
});
|
|
53
|
+
const config = {
|
|
54
|
+
projectName: projectName || answers.projectName,
|
|
55
|
+
targetDir: path_1.default.join(process.cwd(), projectName || answers.projectName),
|
|
56
|
+
backends: answers.backends,
|
|
57
|
+
frontends: answers.frontends,
|
|
58
|
+
};
|
|
59
|
+
// Check if directory exists
|
|
60
|
+
if (fs_extra_1.default.existsSync(config.targetDir)) {
|
|
61
|
+
const { overwrite } = await (0, prompts_1.default)({
|
|
62
|
+
type: 'confirm',
|
|
63
|
+
name: 'overwrite',
|
|
64
|
+
message: `Directory ${chalk_1.default.yellow(config.projectName)} already exists. Overwrite?`,
|
|
65
|
+
initial: false,
|
|
66
|
+
});
|
|
67
|
+
if (!overwrite) {
|
|
68
|
+
console.log(chalk_1.default.red('\n❌ Operation cancelled'));
|
|
69
|
+
process.exit(0);
|
|
70
|
+
}
|
|
71
|
+
await fs_extra_1.default.remove(config.targetDir);
|
|
72
|
+
}
|
|
73
|
+
console.log(chalk_1.default.green('\n✨ Creating your monorepo...\n'));
|
|
74
|
+
console.log(chalk_1.default.gray(`📦 Project: ${config.projectName}`));
|
|
75
|
+
console.log(chalk_1.default.gray(`📂 Backends: ${config.backends.join(', ')}`));
|
|
76
|
+
console.log(chalk_1.default.gray(`🎨 Frontends: ${config.frontends.join(', ')}\n`));
|
|
77
|
+
const spinner = (0, ora_1.default)('Scaffolding project...').start();
|
|
78
|
+
try {
|
|
79
|
+
await (0, scaffold_1.scaffoldProject)(config);
|
|
80
|
+
spinner.succeed('Project scaffolded successfully!');
|
|
81
|
+
// Check if pnpm is installed
|
|
82
|
+
const hasPnpm = await (0, utils_1.checkPnpmInstalled)();
|
|
83
|
+
if (hasPnpm) {
|
|
84
|
+
spinner.start('Installing dependencies...');
|
|
85
|
+
try {
|
|
86
|
+
await (0, utils_1.installDependencies)(config.targetDir);
|
|
87
|
+
spinner.succeed('Dependencies installed!');
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
spinner.warn('Failed to install dependencies');
|
|
91
|
+
console.log(chalk_1.default.yellow('\n⚠️ Could not install dependencies automatically.'));
|
|
92
|
+
console.log(chalk_1.default.yellow(' Please run manually: cd ' + config.projectName + ' && pnpm install\n'));
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
spinner.warn('pnpm not found - skipping dependency installation');
|
|
97
|
+
console.log(chalk_1.default.yellow('\n⚠️ pnpm is not installed. Install it with:'));
|
|
98
|
+
console.log(chalk_1.default.yellow(' npm install -g pnpm\n'));
|
|
99
|
+
}
|
|
100
|
+
console.log(chalk_1.default.green.bold('\n✅ Your monorepo is ready!\n'));
|
|
101
|
+
console.log(chalk_1.default.blue('📖 Next steps:\n'));
|
|
102
|
+
console.log(chalk_1.default.gray(` cd ${config.projectName}`));
|
|
103
|
+
if (!hasPnpm) {
|
|
104
|
+
console.log(chalk_1.default.yellow(' npm install -g pnpm # Install pnpm first'));
|
|
105
|
+
}
|
|
106
|
+
console.log(chalk_1.default.gray(' pnpm install # Install dependencies'));
|
|
107
|
+
console.log(chalk_1.default.gray(' pnpm db:generate # Generate Prisma client'));
|
|
108
|
+
console.log(chalk_1.default.gray(' pnpm dev # Start all apps'));
|
|
109
|
+
console.log(chalk_1.default.gray(' pnpm build # Build all apps\n'));
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
spinner.fail('Failed to create project');
|
|
113
|
+
console.error(chalk_1.default.red(error));
|
|
114
|
+
process.exit(1);
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
program.parse();
|
|
118
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,wBAAsB,eAAe,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAiC1E"}
|
package/dist/scaffold.js
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.scaffoldProject = scaffoldProject;
|
|
7
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const root_1 = require("./templates/root");
|
|
10
|
+
const backend_1 = require("./templates/backend");
|
|
11
|
+
const frontend_1 = require("./templates/frontend");
|
|
12
|
+
const shared_1 = require("./templates/shared");
|
|
13
|
+
const docker_1 = require("./templates/docker");
|
|
14
|
+
const cicd_1 = require("./templates/cicd");
|
|
15
|
+
const docs_1 = require("./templates/docs");
|
|
16
|
+
async function scaffoldProject(config) {
|
|
17
|
+
const { targetDir, backends, frontends } = config;
|
|
18
|
+
// Create directory structure
|
|
19
|
+
await fs_extra_1.default.ensureDir(targetDir);
|
|
20
|
+
await fs_extra_1.default.ensureDir(path_1.default.join(targetDir, 'apps', 'backend'));
|
|
21
|
+
await fs_extra_1.default.ensureDir(path_1.default.join(targetDir, 'apps', 'frontend'));
|
|
22
|
+
await fs_extra_1.default.ensureDir(path_1.default.join(targetDir, 'packages'));
|
|
23
|
+
// Create root configuration files
|
|
24
|
+
await (0, root_1.createRootFiles)(config);
|
|
25
|
+
// Create backend apps
|
|
26
|
+
for (const backendName of backends) {
|
|
27
|
+
await (0, backend_1.createBackendApp)(targetDir, backendName);
|
|
28
|
+
}
|
|
29
|
+
// Create frontend apps
|
|
30
|
+
for (const frontendName of frontends) {
|
|
31
|
+
await (0, frontend_1.createFrontendApp)(targetDir, frontendName);
|
|
32
|
+
}
|
|
33
|
+
// Create shared packages
|
|
34
|
+
await (0, shared_1.createSharedPackages)(targetDir);
|
|
35
|
+
// Create Docker files
|
|
36
|
+
await (0, docker_1.createDockerFiles)(config);
|
|
37
|
+
// Create CI/CD files
|
|
38
|
+
await (0, cicd_1.createCICDFiles)(config);
|
|
39
|
+
// Create documentation
|
|
40
|
+
await (0, docs_1.createDocumentation)(config);
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=scaffold.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":";;;;;AAiBA,0CAiCC;AAlDD,wDAA0B;AAC1B,gDAAwB;AACxB,2CAAmD;AACnD,iDAAuD;AACvD,mDAAyD;AACzD,+CAA0D;AAC1D,+CAAuD;AACvD,2CAAmD;AACnD,2CAAuD;AAShD,KAAK,UAAU,eAAe,CAAC,MAAqB;IACzD,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;IAElD,6BAA6B;IAC7B,MAAM,kBAAE,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAC9B,MAAM,kBAAE,CAAC,SAAS,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;IAC5D,MAAM,kBAAE,CAAC,SAAS,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;IAC7D,MAAM,kBAAE,CAAC,SAAS,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;IAErD,kCAAkC;IAClC,MAAM,IAAA,sBAAe,EAAC,MAAM,CAAC,CAAC;IAE9B,sBAAsB;IACtB,KAAK,MAAM,WAAW,IAAI,QAAQ,EAAE,CAAC;QACnC,MAAM,IAAA,0BAAgB,EAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACjD,CAAC;IAED,uBAAuB;IACvB,KAAK,MAAM,YAAY,IAAI,SAAS,EAAE,CAAC;QACrC,MAAM,IAAA,4BAAiB,EAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IACnD,CAAC;IAED,yBAAyB;IACzB,MAAM,IAAA,6BAAoB,EAAC,SAAS,CAAC,CAAC;IAEtC,sBAAsB;IACtB,MAAM,IAAA,0BAAiB,EAAC,MAAM,CAAC,CAAC;IAEhC,qBAAqB;IACrB,MAAM,IAAA,sBAAe,EAAC,MAAM,CAAC,CAAC;IAE9B,uBAAuB;IACvB,MAAM,IAAA,0BAAmB,EAAC,MAAM,CAAC,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../src/templates/backend.ts"],"names":[],"mappings":"AAIA,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAocf"}
|