@prisma-psm/core 1.0.2 → 1.0.4
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 +190 -2
- package/package.json +14 -2
- package/src/configs.d.ts +20 -0
- package/src/configs.d.ts.map +1 -0
- package/src/configs.js +3 -0
- package/src/configs.js.map +1 -0
- package/src/configs.ts +19 -0
- package/src/driver.d.ts +1 -0
- package/src/driver.d.ts.map +1 -1
- package/src/driver.ts +2 -1
- package/src/index.d.ts.map +1 -1
- package/src/index.js +0 -158
- package/src/index.js.map +1 -1
- package/src/index.ts +1 -171
- package/src/launcher/commands/check.d.ts +4 -0
- package/src/launcher/commands/check.d.ts.map +1 -0
- package/src/launcher/commands/check.js +13 -0
- package/src/launcher/commands/check.js.map +1 -0
- package/src/launcher/commands/check.ts +17 -0
- package/src/launcher/commands/deploy.d.ts +5 -0
- package/src/launcher/commands/deploy.d.ts.map +1 -0
- package/src/launcher/commands/deploy.js +13 -0
- package/src/launcher/commands/deploy.js.map +1 -0
- package/src/launcher/commands/deploy.ts +17 -0
- package/src/launcher/commands/generate.d.ts +4 -0
- package/src/launcher/commands/generate.d.ts.map +1 -0
- package/src/launcher/commands/generate.js +14 -0
- package/src/launcher/commands/generate.js.map +1 -0
- package/src/launcher/commands/generate.ts +18 -0
- package/src/launcher/commands/migrate.d.ts +5 -0
- package/src/launcher/commands/migrate.d.ts.map +1 -0
- package/src/launcher/commands/migrate.js +29 -0
- package/src/launcher/commands/migrate.js.map +1 -0
- package/src/launcher/commands/migrate.ts +35 -0
- package/src/launcher/index.d.ts +3 -0
- package/src/launcher/index.d.ts.map +1 -0
- package/src/launcher/index.js +17 -0
- package/src/launcher/index.js.map +1 -0
- package/src/launcher/index.ts +14 -0
- package/src/tools/check.d.ts +2 -0
- package/src/tools/check.d.ts.map +1 -0
- package/src/tools/check.js +6 -0
- package/src/tools/check.js.map +1 -0
- package/src/tools/check.ts +3 -0
- package/src/tools/deploy.d.ts +7 -0
- package/src/tools/deploy.d.ts.map +1 -0
- package/src/tools/deploy.js +3 -0
- package/src/tools/deploy.js.map +1 -0
- package/src/tools/deploy.ts +6 -0
- package/src/tools/generate.d.ts +2 -0
- package/src/tools/generate.d.ts.map +1 -0
- package/src/tools/generate.js +158 -0
- package/src/tools/generate.js.map +1 -0
- package/src/tools/generate.ts +151 -0
- package/src/tools/migrate.d.ts +8 -0
- package/src/tools/migrate.d.ts.map +1 -0
- package/src/tools/migrate.js +137 -0
- package/src/tools/migrate.js.map +1 -0
- package/src/tools/migrate.ts +121 -0
package/README.md
CHANGED
|
@@ -1,2 +1,190 @@
|
|
|
1
|
-
|
|
2
|
-
PSM - Prisma
|
|
1
|
+
|
|
2
|
+
# PSM - Prisma Safe Migrate
|
|
3
|
+
|
|
4
|
+
## Descrição
|
|
5
|
+
|
|
6
|
+
**PSM (Prisma Safe Migrate)** é uma ferramenta avançada para geração e aplicação segura de migrações SQL baseadas no modelo Prisma. Seu principal objetivo é garantir que alterações no banco de dados sejam aplicadas sem risco de perda de dados, algo que o sistema padrão de migrações do Prisma não assegura completamente.
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Motivação
|
|
11
|
+
|
|
12
|
+
Migrações de banco de dados são processos críticos que precisam preservar a integridade e os dados existentes. O Prisma fornece um sistema eficiente para migrações, porém sem garantias absolutas contra perda de dados em alterações complexas, como renomear colunas, alterar tipos de dados ou remover tabelas.
|
|
13
|
+
|
|
14
|
+
O PSM preenche essa lacuna ao criar uma camada extra de validação, controle rigoroso de revisões e aplicação incremental segura em ambientes de produção.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Instalação
|
|
19
|
+
|
|
20
|
+
Instale os pacotes do PSM como dependências de desenvolvimento no seu projeto:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
npm install --save-dev @prisma-psm/core @prisma-psm/pg
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## Configuração
|
|
29
|
+
|
|
30
|
+
No seu arquivo `schema.prisma`, configure o gerador do PSM para gerar os arquivos SQL e conectar ao banco:
|
|
31
|
+
|
|
32
|
+
```prisma
|
|
33
|
+
generator psm {
|
|
34
|
+
provider = "psm migrate generate"
|
|
35
|
+
output = "./psm/"
|
|
36
|
+
driver = "@prisma-psm/pg"
|
|
37
|
+
url = env("DATABASE_URL")
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
- **provider**: gerador do PSM que substitui o padrão do Prisma para geração de migrações.
|
|
42
|
+
- **output**: diretório onde serão gerados os arquivos SQL e artefatos do PSM.
|
|
43
|
+
- **driver**: driver específico para o banco (exemplo: PostgreSQL).
|
|
44
|
+
- **url**: variável de ambiente contendo a string de conexão ao banco.
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Como funciona - Fluxo geral
|
|
49
|
+
|
|
50
|
+
### 1. Geração da migração (`npx prisma generate`)
|
|
51
|
+
|
|
52
|
+
- Gera os artefatos do Prisma normalmente.
|
|
53
|
+
- Gera dois arquivos principais na pasta `next`:
|
|
54
|
+
- `migration.next.check.sql`: script para validar se a migração está consistente com o banco atual.
|
|
55
|
+
- `migration.next.sql`: script que aplicará as alterações.
|
|
56
|
+
- Se `DATABASE_URL` estiver configurada:
|
|
57
|
+
- Executa automaticamente o script de check.
|
|
58
|
+
- Se sucesso: mantém os dois arquivos na pasta `next`.
|
|
59
|
+
- Se falha: mantém só `migration.next.check.sql` e um arquivo de erro, removendo `migration.next.sql` se existir.
|
|
60
|
+
- Se `DATABASE_URL` não estiver definida:
|
|
61
|
+
- Apenas gera ambos os arquivos, sem validar.
|
|
62
|
+
- Atualiza o arquivo `psm.yml` com informações da migração, como status, driver, URL, esquema, e histórico.
|
|
63
|
+
|
|
64
|
+
### 2. Aplicação da migração (`psm migrate commit`)
|
|
65
|
+
|
|
66
|
+
- Valida novamente a migração executando `migration.next.check.sql`.
|
|
67
|
+
- Se validado:
|
|
68
|
+
- Aplica o `migration.next.sql` no banco.
|
|
69
|
+
- Gera uma revisão definitiva em `revision/${timestamp}-${label}/` com:
|
|
70
|
+
- Script da migração aplicada.
|
|
71
|
+
- Arquivo `psm.yml` atualizado.
|
|
72
|
+
- Registra no banco a migração aplicada para controle.
|
|
73
|
+
- Se falha, aborta e mostra o erro.
|
|
74
|
+
|
|
75
|
+
### 3. Deploy em produção (`psm migrate deploy`)
|
|
76
|
+
|
|
77
|
+
- Aplica todas as revisões pendentes armazenadas na pasta `revision/` de forma incremental.
|
|
78
|
+
- Garante que o banco esteja sempre sincronizado com o histórico de migrações.
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## Motor de migração (engine) detalhado
|
|
83
|
+
|
|
84
|
+
O PSM usa um esquema shadow temporário para garantir segurança dos dados:
|
|
85
|
+
|
|
86
|
+
1. Cria um schema temporário `shadow_${random}`.
|
|
87
|
+
2. Cria tabelas temporárias para cada modelo Prisma, sem constraints (ex: `temp_1_user` para o modelo `user`).
|
|
88
|
+
3. Copia os dados das tabelas reais para as temporárias.
|
|
89
|
+
4. Aplica as constraints (chaves, índices, relacionamentos) nas tabelas temporárias.
|
|
90
|
+
5. Se na validação (check) tudo passar:
|
|
91
|
+
- Remove o schema shadow e as tabelas temporárias.
|
|
92
|
+
6. Se na aplicação (migrate next) tudo passar:
|
|
93
|
+
- Remove as tabelas reais.
|
|
94
|
+
- Move as tabelas temporárias do schema shadow para o schema final.
|
|
95
|
+
- Renomeia as tabelas temporárias para os nomes reais.
|
|
96
|
+
- Remove o schema shadow.
|
|
97
|
+
- Registra a migração aplicada no banco para controle.
|
|
98
|
+
|
|
99
|
+
Esse processo impede alterações destrutivas diretas nas tabelas reais antes da validação completa, evitando perda de dados.
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## Estrutura de arquivos gerados
|
|
104
|
+
|
|
105
|
+
- **next/**
|
|
106
|
+
- `migration.next.check.sql` — script para validar a migração.
|
|
107
|
+
- `migration.next.sql` — script para aplicar a migração.
|
|
108
|
+
- (opcional) arquivo de erro em caso de falha.
|
|
109
|
+
- **revision/${timestamp}-${label}/**
|
|
110
|
+
- `migration.sql` — script definitivo da migração.
|
|
111
|
+
- `psm.yml` — metadados e histórico da migração aplicada.
|
|
112
|
+
- **psm.yml**
|
|
113
|
+
- Arquivo principal com estado, configurações, histórico e resultados das validações.
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## Variável de ambiente
|
|
118
|
+
|
|
119
|
+
Configure a conexão com seu banco no arquivo `.env` ou no ambiente:
|
|
120
|
+
|
|
121
|
+
```env
|
|
122
|
+
DATABASE_URL="postgresql://usuario:senha@localhost:5432/seubanco"
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## Comandos principais
|
|
128
|
+
|
|
129
|
+
| Comando | Descrição |
|
|
130
|
+
|-----------------------|---------------------------------------------------------------------------------------------|
|
|
131
|
+
| `npx prisma generate` | Gera os arquivos de migração na pasta `next` e valida (se `DATABASE_URL` configurada). |
|
|
132
|
+
| `psm migrate commit` | Valida e aplica a próxima migração. Cria revisão definitiva na pasta `revision/`. |
|
|
133
|
+
| `psm migrate deploy` | Aplica todas as migrações pendentes da pasta `revision/` na ordem correta. |
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## Exemplo de uso
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
# Gerar migração e validar (se DATABASE_URL definida)
|
|
141
|
+
npx prisma generate
|
|
142
|
+
|
|
143
|
+
# Validar e aplicar a migração gerada
|
|
144
|
+
psm migrate commit
|
|
145
|
+
|
|
146
|
+
# Aplicar todas as migrações pendentes em produção
|
|
147
|
+
psm migrate deploy
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## Benefícios
|
|
153
|
+
|
|
154
|
+
- **Garantia contra perda de dados** com validação rigorosa.
|
|
155
|
+
- **Rollback facilitado** e controle de revisões.
|
|
156
|
+
- **Validação automática** durante geração de migrações.
|
|
157
|
+
- **Histórico detalhado** das alterações aplicadas.
|
|
158
|
+
- **Suporte inicial para PostgreSQL**, com possibilidade de expansão.
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## Roadmap
|
|
163
|
+
|
|
164
|
+
- Suporte a mais bancos (MySQL, SQLite, etc.).
|
|
165
|
+
- Interface gráfica para gestão de migrações.
|
|
166
|
+
- Integração com pipelines CI/CD.
|
|
167
|
+
- Migrações manuais e customizadas.
|
|
168
|
+
- Suporte multi-schema e multi-tenant.
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## Contribuição
|
|
173
|
+
|
|
174
|
+
Contribuições são bem-vindas! Abra issues para bugs ou sugestões, e envie pull requests para melhorias.
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
## Licença
|
|
179
|
+
|
|
180
|
+
Projeto licenciado sob a [Apache 2.0](./LICENSE).
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
## Contato
|
|
185
|
+
|
|
186
|
+
Para dúvidas, sugestões ou suporte, abra uma issue ou entre em contato via email.
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
**PSM - Migrações seguras e confiáveis para seu banco de dados com Prisma.**
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prisma-psm/core",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.4",
|
|
4
4
|
"description": "PSM - Prisma SAFE MIGRATE",
|
|
5
5
|
"main": "src/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -13,7 +13,19 @@
|
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
15
|
"@prisma/generator-helper": "^6.13.0",
|
|
16
|
+
"deepmerge": "^4.3.1",
|
|
17
|
+
"dotenv": "^17.2.1",
|
|
16
18
|
"json5": "^2.2.3",
|
|
17
|
-
"
|
|
19
|
+
"moment": "^2.30.1",
|
|
20
|
+
"nanoid": "^5.1.5",
|
|
21
|
+
"yaml": "^2.8.1"
|
|
22
|
+
},
|
|
23
|
+
"bin": {
|
|
24
|
+
"psm": "src/launcher/index.js"
|
|
25
|
+
},
|
|
26
|
+
"devDependencies": {
|
|
27
|
+
"@types/yaml": "^1.9.6",
|
|
28
|
+
"@types/yargs": "^17.0.33",
|
|
29
|
+
"yargs": "^18.0.0"
|
|
18
30
|
}
|
|
19
31
|
}
|
package/src/configs.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export interface PSMConfigFile {
|
|
2
|
+
psm: {
|
|
3
|
+
migration: string;
|
|
4
|
+
driver: string;
|
|
5
|
+
url: string;
|
|
6
|
+
output: string;
|
|
7
|
+
schema: string;
|
|
8
|
+
};
|
|
9
|
+
test: {
|
|
10
|
+
check: "checked" | "skipped";
|
|
11
|
+
success: boolean;
|
|
12
|
+
messages: string[];
|
|
13
|
+
};
|
|
14
|
+
migration?: {
|
|
15
|
+
instate: string;
|
|
16
|
+
preview: string;
|
|
17
|
+
label: string;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=configs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configs.d.ts","sourceRoot":"","sources":["configs.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC1B,GAAG,EAAE;QACD,SAAS,EAAE,MAAM,CAAA;QACjB,MAAM,EAAE,MAAM,CAAA;QACd,GAAG,EAAE,MAAM,CAAA;QACX,MAAM,EAAE,MAAM,CAAA;QACd,MAAM,EAAE,MAAM,CAAA;KACjB,CAAC;IACF,IAAI,EAAE;QACF,KAAK,EAAE,SAAS,GAAC,SAAS,CAAC;QAC3B,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,EAAE,MAAM,EAAE,CAAA;KACrB,CAAC;IACF,SAAS,CAAC,EAAE;QACR,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;KACjB,CAAA;CACJ"}
|
package/src/configs.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configs.js","sourceRoot":"","sources":["configs.ts"],"names":[],"mappings":""}
|
package/src/configs.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface PSMConfigFile {
|
|
2
|
+
psm: {
|
|
3
|
+
migration: string
|
|
4
|
+
driver: string
|
|
5
|
+
url: string
|
|
6
|
+
output: string
|
|
7
|
+
schema: string
|
|
8
|
+
},
|
|
9
|
+
test: {
|
|
10
|
+
check: "checked"|"skipped",
|
|
11
|
+
success: boolean,
|
|
12
|
+
messages: string[]
|
|
13
|
+
},
|
|
14
|
+
migration?: {
|
|
15
|
+
instate: string,
|
|
16
|
+
preview: string,
|
|
17
|
+
label: string,
|
|
18
|
+
}
|
|
19
|
+
}
|
package/src/driver.d.ts
CHANGED
package/src/driver.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["driver.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["driver.ts"],"names":[],"mappings":"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"}
|
package/src/driver.ts
CHANGED
package/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AACA,cAAc,UAAU,CAAA"}
|
package/src/index.js
CHANGED
|
@@ -10,167 +10,9 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
|
|
|
10
10
|
if (k2 === undefined) k2 = k;
|
|
11
11
|
o[k2] = m[k];
|
|
12
12
|
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
13
|
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
26
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
27
15
|
};
|
|
28
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
29
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
30
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
31
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
32
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
33
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
34
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
35
|
-
});
|
|
36
|
-
};
|
|
37
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
-
const generator_helper_1 = require("@prisma/generator-helper");
|
|
39
|
-
const fs = __importStar(require("fs"));
|
|
40
|
-
const extractor_1 = require("./extractor");
|
|
41
|
-
const Path = __importStar(require("node:path"));
|
|
42
|
-
const nanoid_1 = require("nanoid");
|
|
43
|
-
const docs_1 = require("./docs");
|
|
44
|
-
const JSON5 = __importStar(require("json5"));
|
|
45
|
-
const process = __importStar(require("node:process"));
|
|
46
17
|
__exportStar(require("./driver"), exports);
|
|
47
|
-
function write(sql, dirname, file) {
|
|
48
|
-
fs.writeFileSync(Path.join(dirname, file), sql);
|
|
49
|
-
}
|
|
50
|
-
(0, generator_helper_1.generatorHandler)({
|
|
51
|
-
onManifest() {
|
|
52
|
-
return {
|
|
53
|
-
version: '1.0.0',
|
|
54
|
-
defaultOutput: './psm',
|
|
55
|
-
prettyName: 'PSM - Prisma Safe Migration',
|
|
56
|
-
};
|
|
57
|
-
},
|
|
58
|
-
onGenerate(options) {
|
|
59
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
60
|
-
var _a, _b;
|
|
61
|
-
try {
|
|
62
|
-
const home = ((_a = options.generator.output) === null || _a === void 0 ? void 0 : _a.value) || "./psm";
|
|
63
|
-
const definition = Path.join(home, "definitions");
|
|
64
|
-
const revisions = Path.join(home, "revisions");
|
|
65
|
-
const next = Path.join(home, "next");
|
|
66
|
-
fs.mkdirSync(definition, { recursive: true });
|
|
67
|
-
fs.mkdirSync(revisions, { recursive: true });
|
|
68
|
-
fs.mkdirSync(next, { recursive: true });
|
|
69
|
-
const { datamodels, models, enums, schema } = (0, extractor_1.extractModels)(options, definition);
|
|
70
|
-
let rand = (0, nanoid_1.customRandom)("abcdefghijklmnopqrstuvwxyz0123456789", 8, nanoid_1.random);
|
|
71
|
-
const migration = rand();
|
|
72
|
-
const configs = options.generator.config;
|
|
73
|
-
const url = process.env[configs.url];
|
|
74
|
-
const driver = yield Promise.resolve(`${configs.driver}`).then(s => __importStar(require(s)));
|
|
75
|
-
let usePrepare = (model) => {
|
|
76
|
-
return Promise.resolve(driver.prepare(model));
|
|
77
|
-
};
|
|
78
|
-
for (let i = 0; i < models.length; i++) {
|
|
79
|
-
const model = models[i];
|
|
80
|
-
model.model = model.name;
|
|
81
|
-
model.name = model.dbName || model.model;
|
|
82
|
-
if (!!model.documentation) {
|
|
83
|
-
model.psm = (0, docs_1.parsePsmDoc)(model.documentation);
|
|
84
|
-
}
|
|
85
|
-
model.fields.forEach(field => {
|
|
86
|
-
if (!!field.documentation)
|
|
87
|
-
field.psm = (0, docs_1.parsePsmDoc)(field.documentation);
|
|
88
|
-
});
|
|
89
|
-
yield usePrepare(model);
|
|
90
|
-
}
|
|
91
|
-
const opts = {
|
|
92
|
-
models: models,
|
|
93
|
-
indexes: datamodels.indexes,
|
|
94
|
-
migration: migration,
|
|
95
|
-
shadow: `psm_shadow_${rand()}`,
|
|
96
|
-
backup: "backup",
|
|
97
|
-
sys: "sys",
|
|
98
|
-
};
|
|
99
|
-
const generator = driver.generator(opts);
|
|
100
|
-
const check = generator.check();
|
|
101
|
-
const migrate = generator.migrate();
|
|
102
|
-
write(check, next, "migration.next.check.sql");
|
|
103
|
-
let test;
|
|
104
|
-
if (!!url) {
|
|
105
|
-
test = yield driver.migrator({
|
|
106
|
-
migrate: migrate,
|
|
107
|
-
check: check,
|
|
108
|
-
url: url
|
|
109
|
-
}).test();
|
|
110
|
-
}
|
|
111
|
-
if (!configs.url) {
|
|
112
|
-
write(migrate, next, "migration.next.sql");
|
|
113
|
-
}
|
|
114
|
-
else if (!!test && test.success) {
|
|
115
|
-
write(migrate, next, "migration.next.sql");
|
|
116
|
-
}
|
|
117
|
-
else {
|
|
118
|
-
console.error(`TEST OF MIGRATION FAILED! Check file migration.next.check.sql`);
|
|
119
|
-
if (!!((_b = test === null || test === void 0 ? void 0 : test.messages) === null || _b === void 0 ? void 0 : _b.length)) {
|
|
120
|
-
console.log("TESTE MESSAGES>>>>>>>>>>");
|
|
121
|
-
test.messages.forEach(value => {
|
|
122
|
-
console.log(value);
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
if (!!(test === null || test === void 0 ? void 0 : test.error)) {
|
|
126
|
-
console.log("TESTE ERROR>>>>>>>>>>");
|
|
127
|
-
console.error(test === null || test === void 0 ? void 0 : test.error);
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
write(JSON5.stringify({
|
|
131
|
-
migration: migration,
|
|
132
|
-
driver: options.generator.config.driver,
|
|
133
|
-
test: {
|
|
134
|
-
check: !!test ? "checked" : "skipped",
|
|
135
|
-
success: test === null || test === void 0 ? void 0 : test.success,
|
|
136
|
-
messages: test === null || test === void 0 ? void 0 : test.messages
|
|
137
|
-
}
|
|
138
|
-
}, null, 2), next, "migration.json5");
|
|
139
|
-
}
|
|
140
|
-
catch (e) {
|
|
141
|
-
console.error("console.error", e);
|
|
142
|
-
throw e;
|
|
143
|
-
}
|
|
144
|
-
});
|
|
145
|
-
},
|
|
146
|
-
});
|
|
147
|
-
// const raw = `
|
|
148
|
-
// @psm.view
|
|
149
|
-
// @psm.backup.skip
|
|
150
|
-
// @psm.backup.clean
|
|
151
|
-
// @psm.backup.lists.list1 += 8383
|
|
152
|
-
// @psm.backup.lists.list1 += 8383
|
|
153
|
-
// @psm.backup.lists.list1 += 8383
|
|
154
|
-
// @psm.type = view
|
|
155
|
-
// @psm.view
|
|
156
|
-
// @psm.view2 = true
|
|
157
|
-
// @psm.view3 = false
|
|
158
|
-
// @psm.description = <<<EOF
|
|
159
|
-
// Texto descritivo
|
|
160
|
-
// que ocupa várias linhas
|
|
161
|
-
// e pode ter qualquer coisa dentro.
|
|
162
|
-
// EOF
|
|
163
|
-
// @psm.multline_docs = Line1
|
|
164
|
-
// @psm.multline_docs = Line2
|
|
165
|
-
// @psm.multline_docs = Line3
|
|
166
|
-
// @psm.array += Line1
|
|
167
|
-
// @psm.array += Line2
|
|
168
|
-
// @psm.array += Line3
|
|
169
|
-
// @psm.array += ["Line4"]
|
|
170
|
-
// @psm.array += {i:"line5"}
|
|
171
|
-
// @psm.array_idx[2] = {i:"Array index 2"}
|
|
172
|
-
// @psm.childObject = {type:"Type", usr:"User"}
|
|
173
|
-
// @psm.childObject2 = { "type":"Type", name:"Object2"}
|
|
174
|
-
// `
|
|
175
|
-
// console.log( JSON.stringify( parsePsmDoc(raw), null, 2) );
|
|
176
18
|
//# sourceMappingURL=index.js.map
|
package/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AACA,2CAAwB"}
|
package/src/index.ts
CHANGED
|
@@ -1,172 +1,2 @@
|
|
|
1
|
-
import { GeneratorOptions } from '@prisma/generator-helper'
|
|
2
|
-
import { generatorHandler, GeneratorManifest } from '@prisma/generator-helper'
|
|
3
|
-
|
|
4
|
-
import * as fs from 'fs'
|
|
5
|
-
import {extractModels} from "./extractor";
|
|
6
|
-
import * as Path from "node:path";
|
|
7
|
-
import {customRandom, random} from "nanoid";
|
|
8
|
-
import {
|
|
9
|
-
PSMDriver,
|
|
10
|
-
ModelOptions,
|
|
11
|
-
PSMField,
|
|
12
|
-
PSMModel,
|
|
13
|
-
PSMParserOptions,
|
|
14
|
-
DriverConfigs,
|
|
15
|
-
PSMMigrationResult
|
|
16
|
-
} from "./driver";
|
|
17
|
-
import {parsePsmDoc} from "./docs";
|
|
18
|
-
import * as JSON5 from "json5";
|
|
19
|
-
import * as process from "node:process";
|
|
20
|
-
export * from "./driver"
|
|
21
|
-
|
|
22
|
-
function write( sql:string, dirname:string, file:string){
|
|
23
|
-
fs.writeFileSync( Path.join( dirname, file ), sql );
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
generatorHandler({
|
|
27
|
-
onManifest(): GeneratorManifest {
|
|
28
|
-
return {
|
|
29
|
-
version: '1.0.0',
|
|
30
|
-
defaultOutput: './psm',
|
|
31
|
-
prettyName: 'PSM - Prisma Safe Migration',
|
|
32
|
-
}
|
|
33
|
-
},
|
|
34
|
-
|
|
35
|
-
async onGenerate(options: GeneratorOptions) {
|
|
36
|
-
try{
|
|
37
|
-
|
|
38
|
-
const home = options.generator.output?.value || "./psm";
|
|
39
|
-
const definition = Path.join( home, "definitions");
|
|
40
|
-
const revisions = Path.join( home, "revisions");
|
|
41
|
-
const next = Path.join( home, "next");
|
|
42
|
-
|
|
43
|
-
fs.mkdirSync( definition, { recursive: true });
|
|
44
|
-
fs.mkdirSync( revisions, { recursive: true });
|
|
45
|
-
fs.mkdirSync( next, { recursive: true });
|
|
46
|
-
const { datamodels, models, enums, schema } = extractModels( options, definition );
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
let rand = customRandom( "abcdefghijklmnopqrstuvwxyz0123456789",8, random);
|
|
50
|
-
const migration = rand();
|
|
51
|
-
const configs:DriverConfigs = options.generator.config as any;
|
|
52
|
-
const url = process.env[configs.url] as string;
|
|
53
|
-
|
|
54
|
-
const driver = await import( configs.driver ) as PSMDriver;
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
let usePrepare= ( model:ModelOptions )=>{
|
|
58
|
-
return Promise.resolve( driver.prepare( model ) )
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
for (let i = 0; i < models.length; i++) {
|
|
62
|
-
const model = models[i] as any as ModelOptions;
|
|
63
|
-
model.model = model.name;
|
|
64
|
-
model.name = model.dbName||model.model;
|
|
65
|
-
|
|
66
|
-
if( !!model.documentation ){
|
|
67
|
-
model.psm = parsePsmDoc<PSMModel>( model.documentation );
|
|
68
|
-
}
|
|
69
|
-
model.fields.forEach( field => {
|
|
70
|
-
if( !!field.documentation ) field.psm = parsePsmDoc<PSMField>( field.documentation );
|
|
71
|
-
});
|
|
72
|
-
await usePrepare(model);
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
const opts: PSMParserOptions = {
|
|
78
|
-
models: models as any,
|
|
79
|
-
indexes: datamodels.indexes,
|
|
80
|
-
migration: migration,
|
|
81
|
-
shadow: `psm_shadow_${rand()}`,
|
|
82
|
-
backup: "backup",
|
|
83
|
-
sys: "sys",
|
|
84
|
-
};
|
|
85
|
-
|
|
86
|
-
const generator = driver.generator(opts);
|
|
87
|
-
|
|
88
|
-
const check = generator.check();
|
|
89
|
-
const migrate = generator.migrate();
|
|
90
|
-
|
|
91
|
-
write( check, next, "migration.next.check.sql" );
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
let test:PSMMigrationResult|undefined;
|
|
95
|
-
|
|
96
|
-
if( !!url ) {
|
|
97
|
-
test = await driver.migrator({
|
|
98
|
-
migrate: migrate,
|
|
99
|
-
check: check,
|
|
100
|
-
url: url as string
|
|
101
|
-
}).test();
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
if( !configs.url ){
|
|
105
|
-
write( migrate, next, "migration.next.sql" );
|
|
106
|
-
} else if( !!test && test.success ) {
|
|
107
|
-
write( migrate, next, "migration.next.sql" );
|
|
108
|
-
} else {
|
|
109
|
-
console.error( `TEST OF MIGRATION FAILED! Check file migration.next.check.sql` );
|
|
110
|
-
if( !!test?.messages?.length ){
|
|
111
|
-
console.log("TESTE MESSAGES>>>>>>>>>>");
|
|
112
|
-
test.messages.forEach(value => {
|
|
113
|
-
console.log( value)
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
if( !!test?.error ){
|
|
118
|
-
console.log("TESTE ERROR>>>>>>>>>>");
|
|
119
|
-
console.error( test?.error );
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
write( JSON5.stringify({
|
|
124
|
-
migration: migration,
|
|
125
|
-
driver: options.generator.config.driver,
|
|
126
|
-
test: {
|
|
127
|
-
check: !!test? "checked": "skipped",
|
|
128
|
-
success: test?.success,
|
|
129
|
-
messages: test?.messages
|
|
130
|
-
}
|
|
131
|
-
}, null, 2), next, "migration.json5" )
|
|
132
|
-
} catch (e){
|
|
133
|
-
console.error( "console.error", e );
|
|
134
|
-
throw e
|
|
135
|
-
}
|
|
136
|
-
},
|
|
137
|
-
})
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
// const raw = `
|
|
143
|
-
// @psm.view
|
|
144
|
-
// @psm.backup.skip
|
|
145
|
-
// @psm.backup.clean
|
|
146
|
-
// @psm.backup.lists.list1 += 8383
|
|
147
|
-
// @psm.backup.lists.list1 += 8383
|
|
148
|
-
// @psm.backup.lists.list1 += 8383
|
|
149
|
-
// @psm.type = view
|
|
150
|
-
// @psm.view
|
|
151
|
-
// @psm.view2 = true
|
|
152
|
-
// @psm.view3 = false
|
|
153
|
-
// @psm.description = <<<EOF
|
|
154
|
-
// Texto descritivo
|
|
155
|
-
// que ocupa várias linhas
|
|
156
|
-
// e pode ter qualquer coisa dentro.
|
|
157
|
-
// EOF
|
|
158
|
-
// @psm.multline_docs = Line1
|
|
159
|
-
// @psm.multline_docs = Line2
|
|
160
|
-
// @psm.multline_docs = Line3
|
|
161
|
-
// @psm.array += Line1
|
|
162
|
-
// @psm.array += Line2
|
|
163
|
-
// @psm.array += Line3
|
|
164
|
-
// @psm.array += ["Line4"]
|
|
165
|
-
// @psm.array += {i:"line5"}
|
|
166
|
-
// @psm.array_idx[2] = {i:"Array index 2"}
|
|
167
|
-
// @psm.childObject = {type:"Type", usr:"User"}
|
|
168
|
-
// @psm.childObject2 = { "type":"Type", name:"Object2"}
|
|
169
|
-
// `
|
|
170
|
-
// console.log( JSON.stringify( parsePsmDoc(raw), null, 2) );
|
|
171
|
-
|
|
172
1
|
|
|
2
|
+
export * from "./driver"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,OAAO,CAAC;AAKpC,QAAA,MAAM,OAAO,EAAC,aAQb,CAAA;AAED,SAAS,OAAO,CAAC"}
|