nestforge-generator 0.1.1 → 0.3.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/README.md +39 -23
- package/README.pt-BR.md +39 -23
- package/dist/features/database.js +35 -0
- package/dist/features/database.js.map +1 -1
- package/dist/features/language.js +19 -1
- package/dist/features/language.js.map +1 -1
- package/dist/features/no-orm.js +493 -0
- package/dist/features/no-orm.js.map +1 -0
- package/dist/generator.js +27 -7
- package/dist/generator.js.map +1 -1
- package/dist/index.js +24 -13
- package/dist/index.js.map +1 -1
- package/dist/prompts.js +32 -22
- package/dist/prompts.js.map +1 -1
- package/package.json +2 -1
- package/templates/drizzle/README.md +2 -0
- package/templates/drizzle/README.pt-BR.md +2 -0
- package/templates/prisma/.github/workflows/ci.yml +24 -1
- package/templates/prisma/ARCHITECTURE.md +7 -1
- package/templates/prisma/ARCHITECTURE.pt-BR.md +7 -1
- package/templates/prisma/README.md +11 -7
- package/templates/prisma/README.pt-BR.md +11 -7
- package/templates/prisma/ROADMAP.md +5 -1
- package/templates/prisma/ROADMAP.pt-BR.md +5 -1
- package/templates/prisma/TESTING.md +25 -3
- package/templates/prisma/TESTING.pt-BR.md +25 -3
- package/templates/prisma/docker-compose.yml +29 -1
- package/templates/prisma/docs/adding-a-module.md +246 -230
- package/templates/prisma/docs/features-markers.md +11 -1
- package/templates/prisma/prisma/schema.prisma +4 -0
- package/templates/prisma/src/auth/token.service.ts +12 -3
- package/templates/prisma/src/health/indicators/prisma-health.indicator.spec.ts +39 -22
- package/templates/prisma/src/health/indicators/prisma-health.indicator.ts +24 -19
- package/templates/typeorm/README.md +2 -0
- package/templates/typeorm/README.pt-BR.md +2 -0
package/README.md
CHANGED
|
@@ -2,19 +2,19 @@
|
|
|
2
2
|
|
|
3
3
|
**English** | [Português](README.pt-BR.md)
|
|
4
4
|
|
|
5
|
-
Interactive CLI that generates NestJS projects from NestForge's [Prisma](../../templates/prisma), [TypeORM](../../templates/typeorm), and [Drizzle](../../templates/drizzle) templates.
|
|
6
|
-
|
|
7
|
-
Install the package locally:
|
|
8
|
-
|
|
9
|
-
```bash
|
|
10
|
-
npm install nestforge-generator
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
Run the locally installed CLI:
|
|
14
|
-
|
|
15
|
-
```bash
|
|
16
|
-
npx nestforge
|
|
17
|
-
```
|
|
5
|
+
Interactive CLI that generates NestJS projects from NestForge's [Prisma](../../templates/prisma), [TypeORM](../../templates/typeorm), and [Drizzle](../../templates/drizzle) templates, or without an ORM.
|
|
6
|
+
|
|
7
|
+
Install the package locally:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install nestforge-generator
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Run the locally installed CLI:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npx nestforge
|
|
17
|
+
```
|
|
18
18
|
|
|
19
19
|
For the testing guide, CLI prompts, and complete checklist, see [`TESTING.md`](TESTING.md).
|
|
20
20
|
|
|
@@ -22,8 +22,8 @@ For the testing guide, CLI prompts, and complete checklist, see [`TESTING.md`](T
|
|
|
22
22
|
|
|
23
23
|
- Interactive prompts using `@clack/prompts`;
|
|
24
24
|
- TypeScript or JavaScript generation;
|
|
25
|
-
- Prisma, TypeORM,
|
|
26
|
-
- PostgreSQL, MySQL, and
|
|
25
|
+
- Prisma, TypeORM, Drizzle ORM, or no ORM;
|
|
26
|
+
- PostgreSQL, MySQL, SQLite, and MongoDB with Prisma;
|
|
27
27
|
- JWT, Session/Cookies, OAuth-only, or no authentication;
|
|
28
28
|
- optional Docker;
|
|
29
29
|
- optional Swagger/OpenAPI;
|
|
@@ -61,9 +61,10 @@ Available with:
|
|
|
61
61
|
|
|
62
62
|
- PostgreSQL;
|
|
63
63
|
- MySQL;
|
|
64
|
-
- SQLite
|
|
64
|
+
- SQLite;
|
|
65
|
+
- MongoDB.
|
|
65
66
|
|
|
66
|
-
The CLI adjusts the `schema.prisma` provider, database URL, and provider-specific resources.
|
|
67
|
+
The CLI adjusts the `schema.prisma` provider, database URL, and provider-specific resources. MongoDB projects use mapped `ObjectId` fields and `prisma db push` instead of Prisma Migrate.
|
|
67
68
|
|
|
68
69
|
### TypeORM
|
|
69
70
|
|
|
@@ -105,6 +106,18 @@ The Drizzle template includes:
|
|
|
105
106
|
|
|
106
107
|
After generation, only the schema and driver for the selected database remain in the project.
|
|
107
108
|
|
|
109
|
+
> **MongoDB compatibility:** MongoDB generation is currently available only with Prisma. TypeORM provides basic MongoDB support, but it is not directly compatible with the relational architecture of NestForge's TypeORM template. Drizzle does not currently provide an official MongoDB dialect. Therefore, the CLI does not offer MongoDB when TypeORM or Drizzle is selected.
|
|
110
|
+
|
|
111
|
+
### No ORM
|
|
112
|
+
|
|
113
|
+
The “None” option:
|
|
114
|
+
|
|
115
|
+
- skips the database and authentication prompts;
|
|
116
|
+
- generates no schema, migrations, seed, database driver, or ORM dependency;
|
|
117
|
+
- removes authentication, users, and access control;
|
|
118
|
+
- keeps independent optional features;
|
|
119
|
+
- works with TypeScript and JavaScript.
|
|
120
|
+
|
|
108
121
|
## Authentication strategies
|
|
109
122
|
|
|
110
123
|
### JWT
|
|
@@ -247,11 +260,11 @@ When requested, the CLI automatically creates `.env` from the already processed
|
|
|
247
260
|
| ORM: Prisma | ✅ Implemented |
|
|
248
261
|
| ORM: TypeORM | ✅ Implemented |
|
|
249
262
|
| ORM: Drizzle | ✅ Implemented |
|
|
250
|
-
| ORM: None |
|
|
263
|
+
| ORM: None | ✅ Implemented |
|
|
251
264
|
| Database: PostgreSQL | ✅ Implemented |
|
|
252
265
|
| Database: MySQL | ✅ Implemented |
|
|
253
266
|
| Database: SQLite | ✅ Implemented |
|
|
254
|
-
| Database: MongoDB |
|
|
267
|
+
| Database: MongoDB | ✅ Implemented with Prisma |
|
|
255
268
|
| Auth: JWT | ✅ Implemented |
|
|
256
269
|
| Auth: Session/Cookies | ✅ Implemented |
|
|
257
270
|
| Auth: OAuth-only | ✅ Implemented |
|
|
@@ -278,10 +291,14 @@ Coverage includes:
|
|
|
278
291
|
- Prisma with PostgreSQL;
|
|
279
292
|
- Prisma with MySQL;
|
|
280
293
|
- Prisma with SQLite;
|
|
294
|
+
- Prisma with MongoDB and JWT;
|
|
295
|
+
- Prisma with MongoDB and Session/Cookies;
|
|
281
296
|
- TypeORM with SQLite;
|
|
282
297
|
- Drizzle with PostgreSQL;
|
|
283
298
|
- Drizzle with MySQL;
|
|
284
299
|
- Drizzle with SQLite;
|
|
300
|
+
- no ORM with TypeScript;
|
|
301
|
+
- no ORM with JavaScript, Docker, and Redis;
|
|
285
302
|
- JWT;
|
|
286
303
|
- Session/Cookies;
|
|
287
304
|
- OAuth-only;
|
|
@@ -304,7 +321,7 @@ The following combinations were validated with installation, build, unit tests,
|
|
|
304
321
|
- TypeScript + Drizzle + SQLite + JWT;
|
|
305
322
|
- TypeScript + Drizzle + SQLite + Session/Cookies.
|
|
306
323
|
|
|
307
|
-
PostgreSQL and
|
|
324
|
+
PostgreSQL, MySQL, and MongoDB have automated generation and configuration tests. Complete smoke tests that connect to these databases still require local services or Docker; MongoDB must run as a replica set.
|
|
308
325
|
|
|
309
326
|
## Known limitations
|
|
310
327
|
|
|
@@ -367,13 +384,12 @@ npm publish
|
|
|
367
384
|
The build:
|
|
368
385
|
|
|
369
386
|
1. compiles the CLI;
|
|
370
|
-
2. copies the
|
|
387
|
+
2. copies the source templates;
|
|
371
388
|
3. prepares the package published to npm.
|
|
372
389
|
|
|
373
390
|
## Next steps
|
|
374
391
|
|
|
375
|
-
-
|
|
376
|
-
- MongoDB;
|
|
392
|
+
- expand MongoDB support beyond Prisma when a compatible ORM integration is available;
|
|
377
393
|
- more complete project and package name validation;
|
|
378
394
|
- expand the smoke-test matrix with real PostgreSQL and MySQL services;
|
|
379
395
|
- reduce the known limitations in the earlier templates.
|
package/README.pt-BR.md
CHANGED
|
@@ -2,19 +2,19 @@
|
|
|
2
2
|
|
|
3
3
|
[English](README.md) | **Português**
|
|
4
4
|
|
|
5
|
-
CLI interativa que gera projetos NestJS a partir dos templates `../../templates/prisma`, `../../templates/typeorm` e `../../templates/drizzle` do NestForge.
|
|
6
|
-
|
|
7
|
-
Instale o pacote localmente:
|
|
8
|
-
|
|
9
|
-
```bash
|
|
10
|
-
npm install nestforge-generator
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
Execute a CLI instalada localmente:
|
|
14
|
-
|
|
15
|
-
```bash
|
|
16
|
-
npx nestforge
|
|
17
|
-
```
|
|
5
|
+
CLI interativa que gera projetos NestJS a partir dos templates `../../templates/prisma`, `../../templates/typeorm` e `../../templates/drizzle` do NestForge, ou sem ORM.
|
|
6
|
+
|
|
7
|
+
Instale o pacote localmente:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install nestforge-generator
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Execute a CLI instalada localmente:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npx nestforge
|
|
17
|
+
```
|
|
18
18
|
|
|
19
19
|
Para o guia de testes, perguntas da CLI e checklist completo, consulte [`TESTING.pt-BR.md`](TESTING.pt-BR.md).
|
|
20
20
|
|
|
@@ -22,8 +22,8 @@ Para o guia de testes, perguntas da CLI e checklist completo, consulte [`TESTING
|
|
|
22
22
|
|
|
23
23
|
* Prompts interativos usando @clack/prompts;
|
|
24
24
|
* geração em TypeScript ou JavaScript;
|
|
25
|
-
* Prisma, TypeORM
|
|
26
|
-
* PostgreSQL, MySQL e
|
|
25
|
+
* Prisma, TypeORM, Drizzle ORM ou nenhum ORM;
|
|
26
|
+
* PostgreSQL, MySQL, SQLite e MongoDB com Prisma;
|
|
27
27
|
* autenticação JWT, Session/Cookies, OAuth-only ou nenhuma;
|
|
28
28
|
* Docker opcional;
|
|
29
29
|
* Swagger/OpenAPI opcional;
|
|
@@ -61,9 +61,10 @@ Disponível com:
|
|
|
61
61
|
|
|
62
62
|
* PostgreSQL;
|
|
63
63
|
* MySQL;
|
|
64
|
-
* SQLite
|
|
64
|
+
* SQLite;
|
|
65
|
+
* MongoDB.
|
|
65
66
|
|
|
66
|
-
A CLI ajusta o provider do schema.prisma, a URL do banco e os recursos específicos do provider.
|
|
67
|
+
A CLI ajusta o provider do schema.prisma, a URL do banco e os recursos específicos do provider. Projetos MongoDB usam campos `ObjectId` mapeados e `prisma db push` no lugar do Prisma Migrate.
|
|
67
68
|
|
|
68
69
|
### TypeORM
|
|
69
70
|
|
|
@@ -105,6 +106,18 @@ O template Drizzle inclui:
|
|
|
105
106
|
|
|
106
107
|
Depois da geração, somente o schema e o driver do banco selecionado permanecem no projeto.
|
|
107
108
|
|
|
109
|
+
> **Compatibilidade com MongoDB:** a geração com MongoDB está disponível atualmente apenas com Prisma. O TypeORM oferece suporte básico a MongoDB, mas ele não é diretamente compatível com a arquitetura relacional do template TypeORM do NestForge. O Drizzle não oferece atualmente um dialeto oficial para MongoDB. Portanto, a CLI não disponibiliza MongoDB quando TypeORM ou Drizzle é selecionado.
|
|
110
|
+
|
|
111
|
+
### Sem ORM
|
|
112
|
+
|
|
113
|
+
A opção “Nenhum”:
|
|
114
|
+
|
|
115
|
+
* pula as perguntas de banco de dados e autenticação;
|
|
116
|
+
* não gera schema, migrations, seed, driver de banco ou dependência de ORM;
|
|
117
|
+
* remove autenticação, usuários e controle de acesso;
|
|
118
|
+
* mantém os recursos opcionais independentes;
|
|
119
|
+
* funciona com TypeScript e JavaScript.
|
|
120
|
+
|
|
108
121
|
## Estratégias de autenticação
|
|
109
122
|
|
|
110
123
|
### JWT
|
|
@@ -248,11 +261,11 @@ processado.
|
|
|
248
261
|
| ORM: Prisma | ✅ Implementado |
|
|
249
262
|
| ORM: TypeORM | ✅ Implementado |
|
|
250
263
|
| ORM: Drizzle | ✅ Implementado |
|
|
251
|
-
| ORM: Nenhum |
|
|
264
|
+
| ORM: Nenhum | ✅ Implementado |
|
|
252
265
|
| Banco: PostgreSQL | ✅ Implementado |
|
|
253
266
|
| Banco: MySQL | ✅ Implementado |
|
|
254
267
|
| Banco: SQLite | ✅ Implementado |
|
|
255
|
-
| Banco: MongoDB |
|
|
268
|
+
| Banco: MongoDB | ✅ Com Prisma |
|
|
256
269
|
| Auth: JWT | ✅ Implementada |
|
|
257
270
|
| Auth: Session/Cookies | ✅ Implementada |
|
|
258
271
|
| Auth: OAuth-only | ✅ Implementada |
|
|
@@ -277,10 +290,14 @@ A cobertura inclui:
|
|
|
277
290
|
* Prisma com PostgreSQL;
|
|
278
291
|
* Prisma com MySQL;
|
|
279
292
|
* Prisma com SQLite;
|
|
293
|
+
* Prisma com MongoDB e JWT;
|
|
294
|
+
* Prisma com MongoDB e Session/Cookies;
|
|
280
295
|
* TypeORM com SQLite;
|
|
281
296
|
* Drizzle com PostgreSQL;
|
|
282
297
|
* Drizzle com MySQL;
|
|
283
298
|
* Drizzle com SQLite;
|
|
299
|
+
* sem ORM com TypeScript;
|
|
300
|
+
* sem ORM com JavaScript, Docker e Redis;
|
|
284
301
|
* JWT;
|
|
285
302
|
* Session/Cookies;
|
|
286
303
|
* OAuth-only;
|
|
@@ -303,7 +320,7 @@ Foram validadas com instalação, build, testes unitários, migrations, seed e t
|
|
|
303
320
|
* TypeScript + Drizzle + SQLite + JWT;
|
|
304
321
|
* TypeScript + Drizzle + SQLite + Session/Cookies.
|
|
305
322
|
|
|
306
|
-
PostgreSQL e
|
|
323
|
+
PostgreSQL, MySQL e MongoDB possuem testes automatizados de geração e configuração. Smoke tests que conectam a esses bancos ainda exigem serviços locais ou Docker; o MongoDB deve funcionar como replica set.
|
|
307
324
|
|
|
308
325
|
## Limitações conhecidas
|
|
309
326
|
|
|
@@ -366,13 +383,12 @@ npm publish
|
|
|
366
383
|
O build:
|
|
367
384
|
|
|
368
385
|
1. compila a CLI;
|
|
369
|
-
2. copia os templates
|
|
386
|
+
2. copia os templates-fonte;
|
|
370
387
|
3. prepara o pacote publicado no npm.
|
|
371
388
|
|
|
372
389
|
## Próximos itens
|
|
373
390
|
|
|
374
|
-
*
|
|
375
|
-
* MongoDB;
|
|
391
|
+
* ampliar o suporte a MongoDB além do Prisma quando houver uma integração compatível com o ORM;
|
|
376
392
|
* validação mais completa do nome do projeto e do pacote;
|
|
377
393
|
* ampliação da matriz de smoke tests com PostgreSQL e MySQL reais;
|
|
378
394
|
* redução das limitações conhecidas dos templates anteriores.
|
|
@@ -16,6 +16,11 @@ const DATABASE_CONFIG = {
|
|
|
16
16
|
devUrl: 'file:./dev.db',
|
|
17
17
|
testUrl: 'file:./test.db',
|
|
18
18
|
},
|
|
19
|
+
mongodb: {
|
|
20
|
+
provider: 'mongodb',
|
|
21
|
+
devUrl: 'mongodb://localhost:27017/nestforge?replicaSet=rs0',
|
|
22
|
+
testUrl: 'mongodb://localhost:27017/nestforge_test?replicaSet=rs0',
|
|
23
|
+
},
|
|
19
24
|
};
|
|
20
25
|
export async function applyDatabaseConfig(targetDir, database) {
|
|
21
26
|
const databaseChoice = database;
|
|
@@ -24,6 +29,10 @@ export async function applyDatabaseConfig(targetDir, database) {
|
|
|
24
29
|
return;
|
|
25
30
|
}
|
|
26
31
|
await updateSchemaProvider(targetDir, config.provider);
|
|
32
|
+
if (databaseChoice === 'mongodb') {
|
|
33
|
+
await updateMongoSchema(targetDir);
|
|
34
|
+
await updateMongoScripts(targetDir);
|
|
35
|
+
}
|
|
27
36
|
await updateDatabaseType(targetDir, '.env.example', databaseChoice);
|
|
28
37
|
await updateDatabaseType(targetDir, '.env.test', databaseChoice);
|
|
29
38
|
await updateDatabaseUrl(targetDir, '.env.example', config.devUrl);
|
|
@@ -56,4 +65,30 @@ async function updateDatabaseUrl(targetDir, fileName, url) {
|
|
|
56
65
|
const updated = content.replace(/^DATABASE_URL=.*$/m, `DATABASE_URL="${url}"`);
|
|
57
66
|
await fs.writeFile(filePath, updated, 'utf-8');
|
|
58
67
|
}
|
|
68
|
+
async function updateMongoScripts(targetDir) {
|
|
69
|
+
const packageJsonPath = path.join(targetDir, 'package.json');
|
|
70
|
+
if (!(await fs.pathExists(packageJsonPath))) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
const packageJson = await fs.readJson(packageJsonPath);
|
|
74
|
+
packageJson.scripts['prisma:push'] =
|
|
75
|
+
'prisma db push';
|
|
76
|
+
packageJson.scripts['pretest:e2e'] =
|
|
77
|
+
'dotenv -e .env.test -- npx prisma db push --skip-generate';
|
|
78
|
+
delete packageJson.scripts['prisma:migrate'];
|
|
79
|
+
delete packageJson.scripts['prisma:deploy'];
|
|
80
|
+
await fs.writeJson(packageJsonPath, packageJson, { spaces: 2 });
|
|
81
|
+
}
|
|
82
|
+
async function updateMongoSchema(targetDir) {
|
|
83
|
+
const schemaPath = path.join(targetDir, 'prisma', 'schema.prisma');
|
|
84
|
+
if (!(await fs.pathExists(schemaPath))) {
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
const schema = await fs.readFile(schemaPath, 'utf8');
|
|
88
|
+
const updated = schema
|
|
89
|
+
.replaceAll('@id @default(uuid())', '@id @default(auto()) @map("_id") @db.ObjectId')
|
|
90
|
+
.replace(/id\s+String\s+@id\r?\n\s+sid String @unique/, 'id String @id @map("_id")\n sid String @unique')
|
|
91
|
+
.replace(/userId(\s+)String(?!\s+@db\.ObjectId)/g, 'userId$1String @db.ObjectId');
|
|
92
|
+
await fs.writeFile(schemaPath, updated, 'utf8');
|
|
93
|
+
}
|
|
59
94
|
//# sourceMappingURL=database.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/features/database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/features/database.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,10 +34,24 @@ export async function applyLanguageTransform(targetDir, language, orm) {
|
|
|
34
34
|
await fs.remove(path.join(targetDir, 'tsconfig.build.json'));
|
|
35
35
|
await fs.remove(path.join(targetDir, 'nest-cli.json'));
|
|
36
36
|
await updatePackageJson(targetDir, orm);
|
|
37
|
+
await updateVitestConfigs(targetDir);
|
|
37
38
|
if (orm === 'drizzle') {
|
|
38
39
|
await updateDrizzleWorkflow(targetDir);
|
|
39
40
|
}
|
|
40
41
|
}
|
|
42
|
+
async function updateVitestConfigs(targetDir) {
|
|
43
|
+
for (const configName of [
|
|
44
|
+
'vitest.config.js',
|
|
45
|
+
'vitest.e2e.config.js',
|
|
46
|
+
]) {
|
|
47
|
+
const configPath = path.join(targetDir, configName);
|
|
48
|
+
if (!(await fs.pathExists(configPath))) {
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
const config = await fs.readFile(configPath, 'utf8');
|
|
52
|
+
await fs.writeFile(configPath, config.replaceAll('.ts', '.js'), 'utf8');
|
|
53
|
+
}
|
|
54
|
+
}
|
|
41
55
|
async function collectTypeScriptFiles(dir) {
|
|
42
56
|
const entries = await fs.readdir(dir, { withFileTypes: true });
|
|
43
57
|
const files = [];
|
|
@@ -74,10 +88,14 @@ async function removeTypeDeclarationFiles(dir) {
|
|
|
74
88
|
}
|
|
75
89
|
async function transpileFile(filePath) {
|
|
76
90
|
const source = await fs.readFile(filePath, 'utf8');
|
|
91
|
+
const isTestFile = filePath.split(path.sep).includes('test') ||
|
|
92
|
+
filePath.endsWith('.spec.ts');
|
|
77
93
|
const result = ts.transpileModule(source, {
|
|
78
94
|
compilerOptions: {
|
|
79
95
|
target: ts.ScriptTarget.ES2022,
|
|
80
|
-
module:
|
|
96
|
+
module: isTestFile
|
|
97
|
+
? ts.ModuleKind.ESNext
|
|
98
|
+
: ts.ModuleKind.CommonJS,
|
|
81
99
|
experimentalDecorators: true,
|
|
82
100
|
emitDecoratorMetadata: true,
|
|
83
101
|
esModuleInterop: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"language.js","sourceRoot":"","sources":["../../src/features/language.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;AAE3E,MAAM,2BAA2B,GAAG;IAChC,aAAa;IACb,oBAAoB;IACpB,iBAAiB;IACjB,wBAAwB;IACxB,eAAe;IACf,aAAa;IACb,mBAAmB;IACnB,yBAAyB;IACzB,gCAAgC;IAChC,qBAAqB;IACrB,kBAAkB;IAClB,kCAAkC;IAClC,2BAA2B;IAC3B,SAAS;IACT,YAAY;IACZ,uBAAuB;IACvB,WAAW;CACd,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,sBAAsB,CACxC,SAAiB,EACjB,QAAgB,EAChB,GAAW;IAEX,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;QAC5B,OAAO;IACX,CAAC;IAED,MAAM,eAAe,GAAG,MAAM,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAEhE,KAAK,MAAM,QAAQ,IAAI,eAAe,EAAE,CAAC;QACrC,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,0BAA0B,CAAC,SAAS,CAAC,CAAC;IAE5C,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC;IACvD,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,qBAAqB,CAAC,CAAC,CAAC;IAC7D,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC;IAEvD,MAAM,iBAAiB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"language.js","sourceRoot":"","sources":["../../src/features/language.ts"],"names":[],"mappings":"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"}
|