@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.
Files changed (59) hide show
  1. package/README.md +190 -2
  2. package/package.json +14 -2
  3. package/src/configs.d.ts +20 -0
  4. package/src/configs.d.ts.map +1 -0
  5. package/src/configs.js +3 -0
  6. package/src/configs.js.map +1 -0
  7. package/src/configs.ts +19 -0
  8. package/src/driver.d.ts +1 -0
  9. package/src/driver.d.ts.map +1 -1
  10. package/src/driver.ts +2 -1
  11. package/src/index.d.ts.map +1 -1
  12. package/src/index.js +0 -158
  13. package/src/index.js.map +1 -1
  14. package/src/index.ts +1 -171
  15. package/src/launcher/commands/check.d.ts +4 -0
  16. package/src/launcher/commands/check.d.ts.map +1 -0
  17. package/src/launcher/commands/check.js +13 -0
  18. package/src/launcher/commands/check.js.map +1 -0
  19. package/src/launcher/commands/check.ts +17 -0
  20. package/src/launcher/commands/deploy.d.ts +5 -0
  21. package/src/launcher/commands/deploy.d.ts.map +1 -0
  22. package/src/launcher/commands/deploy.js +13 -0
  23. package/src/launcher/commands/deploy.js.map +1 -0
  24. package/src/launcher/commands/deploy.ts +17 -0
  25. package/src/launcher/commands/generate.d.ts +4 -0
  26. package/src/launcher/commands/generate.d.ts.map +1 -0
  27. package/src/launcher/commands/generate.js +14 -0
  28. package/src/launcher/commands/generate.js.map +1 -0
  29. package/src/launcher/commands/generate.ts +18 -0
  30. package/src/launcher/commands/migrate.d.ts +5 -0
  31. package/src/launcher/commands/migrate.d.ts.map +1 -0
  32. package/src/launcher/commands/migrate.js +29 -0
  33. package/src/launcher/commands/migrate.js.map +1 -0
  34. package/src/launcher/commands/migrate.ts +35 -0
  35. package/src/launcher/index.d.ts +3 -0
  36. package/src/launcher/index.d.ts.map +1 -0
  37. package/src/launcher/index.js +17 -0
  38. package/src/launcher/index.js.map +1 -0
  39. package/src/launcher/index.ts +14 -0
  40. package/src/tools/check.d.ts +2 -0
  41. package/src/tools/check.d.ts.map +1 -0
  42. package/src/tools/check.js +6 -0
  43. package/src/tools/check.js.map +1 -0
  44. package/src/tools/check.ts +3 -0
  45. package/src/tools/deploy.d.ts +7 -0
  46. package/src/tools/deploy.d.ts.map +1 -0
  47. package/src/tools/deploy.js +3 -0
  48. package/src/tools/deploy.js.map +1 -0
  49. package/src/tools/deploy.ts +6 -0
  50. package/src/tools/generate.d.ts +2 -0
  51. package/src/tools/generate.d.ts.map +1 -0
  52. package/src/tools/generate.js +158 -0
  53. package/src/tools/generate.js.map +1 -0
  54. package/src/tools/generate.ts +151 -0
  55. package/src/tools/migrate.d.ts +8 -0
  56. package/src/tools/migrate.d.ts.map +1 -0
  57. package/src/tools/migrate.js +137 -0
  58. package/src/tools/migrate.js.map +1 -0
  59. package/src/tools/migrate.ts +121 -0
package/README.md CHANGED
@@ -1,2 +1,190 @@
1
- # psm
2
- PSM - Prisma SAFE MIGRATE
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.2",
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
- "nanoid": "^5.1.5"
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
  }
@@ -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,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=configs.js.map
@@ -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
@@ -94,6 +94,7 @@ export interface ModelOptions {
94
94
  export interface MigrationOptions {
95
95
  sql: string;
96
96
  url: string;
97
+ label: string;
97
98
  }
98
99
  export interface PSMMigrationOptions {
99
100
  check: string;
@@ -1 +1 @@
1
- {"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["driver.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACrB,OAAO,CAAC,EAAC,MAAM,CAAA;IACf,OAAO,CAAC,EAAE;QACN,UAAU,CAAC,EAAC,MAAM,CAAA;KACrB,CAAA;CACJ;AAGD,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAC,MAAM,CAAC;IACZ,MAAM,EAAC,MAAM,EAAE,CAAA;IACf,OAAO,EAAC,EAAE,CAAA;CACb;AAED,MAAM,WAAW,YAAY;IACzB,KAAK,EAAC,MAAM,CAAC;IACb,IAAI,EAAC,IAAI,GAAC,QAAQ,GAAC,QAAQ,CAAA;IAC3B,IAAI,CAAC,EAAC,MAAM,CAAA;IACZ,MAAM,CAAC,EAAC,MAAM,CAAA;IACd,gBAAgB,CAAC,EAAC,OAAO,CAAA;IACzB,SAAS,EAAC,MAAM,CAAA;IAChB,MAAM,EAAE,CAAC;QAAE,IAAI,EAAC,MAAM,CAAA;KAAE,CAAC,EAAE,CAAA;CAC9B;AACD,MAAM,WAAW,WAAW;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,GAAG,CAAC,EAAE,QAAQ,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,QAAQ,GAAC,QAAQ,CAAA;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,OAAO,CAAC;IACtB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAC,MAAM,CAAA;IACpB,kBAAkB,CAAC,EAAC,MAAM,EAAE,CAAA;IAC5B,gBAAgB,CAAC,EAAC,MAAM,EAAE,CAAA;IAC1B,SAAS,CAAC,EAAE;QACR,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,EAAE,CAAA;KACb,CAAC;IACF,YAAY,CAAC,EAAE;QACX,MAAM;QACN;YACI,GAAG;SACN;KACJ,CAAC;CACL;AAED,MAAM,WAAW,gBAAgB;IAC7B,MAAM,EAAC,YAAY,EAAE,CAAA;IACrB,OAAO,EAAC,YAAY,EAAE,CAAA;IACtB,MAAM,EAAC,MAAM,CAAA;IACb,GAAG,EAAC,MAAM,CAAA;IACV,SAAS,EAAC,MAAM,CAAA;IAChB,MAAM,EAAC,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,QAAQ;IACrB,IAAI,CAAC,EAAC,OAAO,CAAA;IACb,KAAK,CAAC,EAAC;QACH,CAAC,CAAC,EAAC,MAAM,GAAE,MAAM,CAAA;KACpB,CAAA;IACD,MAAM,CAAC,EAAC;QACJ,IAAI,CAAC,EAAC,OAAO,CAAA;QACb,KAAK,CAAC,EAAC,OAAO,CAAC;QACf,GAAG,CAAC,EAAC;YACD,OAAO,CAAC,EAAC,MAAM,CAAA;YACf,KAAK,CAAC,EAAC,QAAQ,GAAC,MAAM,GAAC,gBAAgB,CAAC;YACxC,IAAI,CAAC,EAAE,OAAO,GAAC,cAAc,GAAC,UAAU,GAAC,OAAO,CAAA;YAChD,UAAU,CAAC,EAAC,MAAM,CAAA;YAClB,IAAI,CAAC,EAAC,MAAM,CAAA;SACf,CAAA;KACJ,CAAA;IACD,OAAO,CAAC,EAAC,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,YAAY;IACzB,IAAI,EAAC,MAAM,CAAC;IACZ,KAAK,EAAC,MAAM,CAAC;IACb,KAAK,EAAC,MAAM,CAAA;IACZ,aAAa,CAAC,EAAC,MAAM,CAAC;IACtB,GAAG,CAAC,EAAC,QAAQ,CAAC;IACd,MAAM,CAAC,EAAC,MAAM,CAAC;IACf,MAAM,EAAC,MAAM,CAAC;IACd,IAAI,EAAC,MAAM,CAAC;IACZ,MAAM,EAAC,WAAW,EAAE,CAAA;IACpB,UAAU,EAAC,WAAW,EAAE,CAAA;IACxB,YAAY,EAAC,MAAM,EAAE,EAAE,CAAA;IACvB,aAAa,EAAC,aAAa,EAAE,CAAA;IAC7B,WAAW,EAAC,WAAW,EAAE,CAAA;IACzB,OAAO,EAAC,YAAY,EAAE,CAAA;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC7B,GAAG,EAAC,MAAM,CAAA;IACV,GAAG,EAAC,MAAM,CAAA;CACb;AAGD,MAAM,WAAW,mBAAmB;IAChC,KAAK,EAAC,MAAM,CAAC;IACb,GAAG,EAAC,MAAM,CAAC;IACX,OAAO,EAAC,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,kBAAkB;IAC/B,OAAO,CAAC,EAAC,OAAO,CAAA;IAChB,QAAQ,CAAC,EAAC,MAAM,EAAE,CAAA;IAClB,KAAK,CAAC,EAAC,GAAG,CAAA;CACb;AAGD,MAAM,MAAM,YAAY,GAAG,CAAE,IAAI,EAAC,gBAAgB,KAAI;IAAE,KAAK,IAAG,MAAM,CAAC;IAAC,OAAO,IAAG,MAAM,CAAA;CAAC,CAAA;AACzF,MAAM,MAAM,WAAW,GAAG,CAAE,IAAI,EAAC,mBAAmB,KAAI;IAAE,IAAI,IAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAAC,OAAO,IAAG,OAAO,CAAC,kBAAkB,CAAC,CAAA;CAAC,CAAA;AACpI,MAAM,WAAW,SAAS;IACtB,SAAS,EAAC,YAAY,CAAC;IACvB,QAAQ,EAAC,WAAW,CAAC;IACrB,OAAO,EAAE,CAAE,KAAK,EAAC,YAAY,KAAI,OAAO,CAAC,GAAG,CAAC,GAAC,IAAI,CAAA;CACrD;AAED,MAAM,WAAW,aAAa;IAC1B,MAAM,EAAC,MAAM,CAAC;IACd,GAAG,EAAC,MAAM,CAAC;CACd"}
1
+ {"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["driver.ts"],"names":[],"mappings":"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"}
package/src/driver.ts CHANGED
@@ -98,7 +98,8 @@ export interface ModelOptions {
98
98
 
99
99
  export interface MigrationOptions {
100
100
  sql:string
101
- url:string
101
+ url:string,
102
+ label:string
102
103
  }
103
104
 
104
105
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAmBA,cAAc,UAAU,CAAA"}
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":"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"}
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,4 @@
1
+ import { CommandModule } from "yargs";
2
+ declare const command: CommandModule;
3
+ export = command;
4
+ //# sourceMappingURL=check.d.ts.map
@@ -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"}