@prisma-psm/core 1.0.5 → 1.0.6
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.en.md +189 -0
- package/README.md +98 -99
- package/README.pt.md +196 -0
- package/package.json +6 -3
- package/src/configs.d.ts +2 -0
- package/src/configs.d.ts.map +1 -1
- package/src/configs.ts +2 -0
- package/src/driver.d.ts +26 -7
- package/src/driver.d.ts.map +1 -1
- package/src/driver.ts +33 -4
- package/src/launcher/commands/{migrate.d.ts → commit.d.ts} +1 -1
- package/src/launcher/commands/commit.d.ts.map +1 -0
- package/src/launcher/commands/{migrate.js → commit.js} +8 -6
- package/src/launcher/commands/commit.js.map +1 -0
- package/src/launcher/commands/{migrate.ts → commit.ts} +6 -5
- package/src/launcher/commands/deploy.d.ts.map +1 -1
- package/src/launcher/commands/deploy.js +11 -3
- package/src/launcher/commands/deploy.js.map +1 -1
- package/src/launcher/commands/deploy.ts +11 -4
- package/src/launcher/commands/generate.d.ts.map +1 -1
- package/src/launcher/commands/generate.js +1 -1
- package/src/launcher/commands/generate.js.map +1 -1
- package/src/launcher/commands/generate.ts +1 -2
- package/src/launcher/index.js +25 -3
- package/src/launcher/index.js.map +1 -1
- package/src/launcher/index.ts +1 -4
- package/src/tools/deploy.d.ts +1 -0
- package/src/tools/deploy.d.ts.map +1 -1
- package/src/tools/deploy.js +151 -0
- package/src/tools/deploy.js.map +1 -1
- package/src/tools/deploy.ts +135 -0
- package/src/tools/generate.d.ts.map +1 -1
- package/src/tools/generate.js +9 -4
- package/src/tools/generate.js.map +1 -1
- package/src/tools/generate.ts +10 -5
- package/src/tools/migrate.d.ts.map +1 -1
- package/src/tools/migrate.js +22 -4
- package/src/tools/migrate.js.map +1 -1
- package/src/tools/migrate.ts +25 -5
- package/src/launcher/commands/migrate.d.ts.map +0 -1
- package/src/launcher/commands/migrate.js.map +0 -1
package/src/tools/deploy.js
CHANGED
|
@@ -1,3 +1,154 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
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
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
35
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
36
|
+
};
|
|
2
37
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
+
exports.deploy = deploy;
|
|
39
|
+
const fs = __importStar(require("node:fs"));
|
|
40
|
+
const yaml = __importStar(require("yaml"));
|
|
41
|
+
const Path = __importStar(require("node:path"));
|
|
42
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
43
|
+
const prisma = [
|
|
44
|
+
`${process.cwd()}/schema.prisma`,
|
|
45
|
+
`${process.cwd()}/prisma/schema.prisma`,
|
|
46
|
+
];
|
|
47
|
+
const TAG = "PSM DEPLOY >";
|
|
48
|
+
function deploy(opts) {
|
|
49
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
50
|
+
var _a;
|
|
51
|
+
console.log("Sdsd sd sdsdsds");
|
|
52
|
+
require('dotenv').config();
|
|
53
|
+
let schema = opts.schema;
|
|
54
|
+
if (!schema) {
|
|
55
|
+
schema = prisma.find(value => {
|
|
56
|
+
return fs.existsSync(value);
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
if (!schema) {
|
|
60
|
+
return console.error("Migrate error: schema.prisma file not found!");
|
|
61
|
+
}
|
|
62
|
+
console.log(`PSM deploy base do schema ${schema}`);
|
|
63
|
+
const home = Path.dirname(schema);
|
|
64
|
+
const psm_yml = Path.join(home, "psm.yml");
|
|
65
|
+
const psm_sql = Path.join(home, "psm.sql");
|
|
66
|
+
if (!fs.existsSync(psm_yml)) {
|
|
67
|
+
return console.error("Migrate error: psm.yml file not found!");
|
|
68
|
+
}
|
|
69
|
+
if (!fs.existsSync(psm_sql)) {
|
|
70
|
+
return console.error("Migrate error: psm.sql file not found!");
|
|
71
|
+
}
|
|
72
|
+
console.log(`PSM migrate using ${psm_yml}`);
|
|
73
|
+
const psm = yaml.parse(fs.readFileSync(psm_yml).toString());
|
|
74
|
+
const driver = yield Promise.resolve(`${psm.psm.driver}`).then(s => __importStar(require(s)));
|
|
75
|
+
let migrator = driver.migrator({
|
|
76
|
+
url: process.env[psm.psm.url],
|
|
77
|
+
migrate: "",
|
|
78
|
+
check: "",
|
|
79
|
+
core: fs.readFileSync(psm_sql).toString(),
|
|
80
|
+
});
|
|
81
|
+
let result = yield migrator.core();
|
|
82
|
+
if (!result.success) {
|
|
83
|
+
console.error(result.error);
|
|
84
|
+
result.messages.forEach(error => {
|
|
85
|
+
console.error(error);
|
|
86
|
+
});
|
|
87
|
+
return console.error("Migrate error: Core failed!");
|
|
88
|
+
}
|
|
89
|
+
const revisions = Path.join(home, `psm/revisions/schema`);
|
|
90
|
+
let revs = fs.readdirSync(revisions)
|
|
91
|
+
.filter(n => fs.statSync(Path.join(revisions, n)).isDirectory())
|
|
92
|
+
.map(n => {
|
|
93
|
+
let psm = yaml.parse(fs.readFileSync(Path.join(revisions, n, "psm.yml")).toString());
|
|
94
|
+
let migrate = fs.readFileSync(Path.join(revisions, n, "migration.sql")).toString();
|
|
95
|
+
return {
|
|
96
|
+
psm,
|
|
97
|
+
migrate
|
|
98
|
+
};
|
|
99
|
+
});
|
|
100
|
+
if (!revs.length) {
|
|
101
|
+
console.log(TAG, "No migrate commited!");
|
|
102
|
+
console.log(TAG, `Use ${chalk_1.default.bold("psm migrate commit")} first!`);
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
const missingPreview = revs.filter((n, i) => {
|
|
106
|
+
return (!!n.psm.migration.preview && !revs.find(p => p.psm.migration.revision === n.psm.migration.preview))
|
|
107
|
+
|| (i > 0 && !n.psm.migration.preview);
|
|
108
|
+
});
|
|
109
|
+
if (!!missingPreview.length) {
|
|
110
|
+
const missings = missingPreview.map(n => `${n.psm.psm.migration} - ${n.psm.migration.label} at ${n.psm.migration.instate}`);
|
|
111
|
+
console.log(`MISSING PREVIEW migration for...\n`, missings.join("\n"));
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
let migrated = yield driver.migrated({
|
|
115
|
+
url: process.env[psm.psm.url],
|
|
116
|
+
sys: psm.psm.sys
|
|
117
|
+
});
|
|
118
|
+
if (!migrated.success) {
|
|
119
|
+
console.error(migrated.error);
|
|
120
|
+
migrated.messages.forEach(error => {
|
|
121
|
+
console.error(error);
|
|
122
|
+
});
|
|
123
|
+
return console.error("Load Migrated failed!");
|
|
124
|
+
}
|
|
125
|
+
for (let i = 0; i < revs.length; i++) {
|
|
126
|
+
let next = revs[i];
|
|
127
|
+
let pl = !!((_a = next.psm.migration.label) === null || _a === void 0 ? void 0 : _a.length) ? ` - ${next.psm.migration.label} ` : " ";
|
|
128
|
+
let label = `RevNo ${chalk_1.default.bold(next.psm.migration.revision)}${pl}commited at ${next.psm.migration.instate}`;
|
|
129
|
+
const mig = migrated.migrated.find(value => value.sid === next.psm.psm.migration);
|
|
130
|
+
if (!!mig) {
|
|
131
|
+
console.log(`${label} is migrated at ${mig.date}`);
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
const migrator = driver.migrator({
|
|
135
|
+
url: process.env[next.psm.psm.url],
|
|
136
|
+
migrate: next.migrate,
|
|
137
|
+
check: "",
|
|
138
|
+
core: "",
|
|
139
|
+
});
|
|
140
|
+
const result = yield migrator.migrate();
|
|
141
|
+
if (!result.success) {
|
|
142
|
+
console.error(result.error);
|
|
143
|
+
result.messages.forEach(error => {
|
|
144
|
+
console.error(error);
|
|
145
|
+
});
|
|
146
|
+
console.error("Migrate error: Push migration failed!");
|
|
147
|
+
console.log(`${label} is migrated at ${mig.date} - ${chalk_1.default.redBright.bold("FAILED")}`);
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
console.log(`${label} is migrated at ${mig.date} - ${chalk_1.default.greenBright.bold("SUCCESS")}`);
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
}
|
|
3
154
|
//# sourceMappingURL=deploy.js.map
|
package/src/tools/deploy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy.js","sourceRoot":"","sources":["deploy.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"deploy.js","sourceRoot":"","sources":["deploy.ts"],"names":[],"mappings":"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"}
|
package/src/tools/deploy.ts
CHANGED
|
@@ -1,6 +1,141 @@
|
|
|
1
|
+
import * as fs from "node:fs";
|
|
2
|
+
import * as yaml from "yaml";
|
|
3
|
+
import * as Path from "node:path";
|
|
4
|
+
import {PSMConfigFile} from "../configs";
|
|
5
|
+
import chalk from "chalk";
|
|
6
|
+
import {PSMDriver} from "../driver";
|
|
7
|
+
|
|
1
8
|
export interface DeployOptions {
|
|
2
9
|
schema?:string
|
|
3
10
|
generate?:string
|
|
4
11
|
label?:string
|
|
5
12
|
"generate-command":string
|
|
13
|
+
}
|
|
14
|
+
const prisma = [
|
|
15
|
+
`${process.cwd()}/schema.prisma`,
|
|
16
|
+
`${process.cwd()}/prisma/schema.prisma`,
|
|
17
|
+
];
|
|
18
|
+
|
|
19
|
+
const TAG = "PSM DEPLOY >"
|
|
20
|
+
|
|
21
|
+
export async function deploy( opts: DeployOptions) {
|
|
22
|
+
console.log("Sdsd sd sdsdsds")
|
|
23
|
+
require('dotenv').config();
|
|
24
|
+
let schema = opts.schema;
|
|
25
|
+
if( !schema ) {
|
|
26
|
+
schema = prisma.find( value => {
|
|
27
|
+
return fs.existsSync( value );
|
|
28
|
+
})
|
|
29
|
+
}
|
|
30
|
+
if( !schema ) {
|
|
31
|
+
return console.error( "Migrate error: schema.prisma file not found!" );
|
|
32
|
+
}
|
|
33
|
+
console.log(`PSM deploy base do schema ${schema}`);
|
|
34
|
+
|
|
35
|
+
const home = Path.dirname( schema );
|
|
36
|
+
const psm_yml = Path.join( home, "psm.yml" );
|
|
37
|
+
const psm_sql = Path.join( home, "psm.sql");
|
|
38
|
+
if( !fs.existsSync( psm_yml ) ) {
|
|
39
|
+
return console.error( "Migrate error: psm.yml file not found!" );
|
|
40
|
+
}
|
|
41
|
+
if( !fs.existsSync( psm_sql ) ) {
|
|
42
|
+
return console.error( "Migrate error: psm.sql file not found!" );
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
console.log(`PSM migrate using ${psm_yml}`);
|
|
47
|
+
const psm = yaml.parse( fs.readFileSync( psm_yml ).toString() ) as PSMConfigFile;
|
|
48
|
+
const driver = await import( psm.psm.driver ) as PSMDriver;
|
|
49
|
+
let migrator = driver.migrator({
|
|
50
|
+
url: process.env[psm.psm.url],
|
|
51
|
+
migrate: "",
|
|
52
|
+
check: "",
|
|
53
|
+
core: fs.readFileSync( psm_sql ).toString(),
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
let result = await migrator.core();
|
|
57
|
+
if( !result.success ) {
|
|
58
|
+
console.error( result.error );
|
|
59
|
+
result.messages.forEach( error => {
|
|
60
|
+
console.error( error );
|
|
61
|
+
});
|
|
62
|
+
return console.error( "Migrate error: Core failed!" );
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
const revisions = Path.join( home, `psm/revisions/schema`);
|
|
67
|
+
let revs = fs.readdirSync( revisions )
|
|
68
|
+
.filter( n => fs.statSync( Path.join( revisions, n)).isDirectory() )
|
|
69
|
+
.map( n => {
|
|
70
|
+
let psm = yaml.parse( fs.readFileSync( Path.join( revisions, n, "psm.yml") ).toString() ) as PSMConfigFile
|
|
71
|
+
|
|
72
|
+
let migrate = fs.readFileSync( Path.join( revisions, n, "migration.sql") ).toString()
|
|
73
|
+
return {
|
|
74
|
+
psm,
|
|
75
|
+
migrate
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
if( !revs.length ){
|
|
80
|
+
console.log( TAG, "No migrate commited!" );
|
|
81
|
+
console.log( TAG, `Use ${ chalk.bold("psm migrate commit")} first!` );
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
const missingPreview = revs.filter( (n, i) => {
|
|
86
|
+
return (!!n.psm.migration.preview && !revs.find( p => p.psm.migration.revision === n.psm.migration.preview))
|
|
87
|
+
|| ( i > 0 && !n.psm.migration.preview)
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
if( !!missingPreview.length){
|
|
91
|
+
const missings = missingPreview.map( n=> `${n.psm.psm.migration} - ${n.psm.migration.label} at ${n.psm.migration.instate}` );
|
|
92
|
+
console.log( `MISSING PREVIEW migration for...\n`, missings.join("\n"));
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
let migrated = await driver.migrated({
|
|
98
|
+
url: process.env[psm.psm.url],
|
|
99
|
+
sys: psm.psm.sys
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
if( !migrated.success ) {
|
|
103
|
+
console.error( migrated.error );
|
|
104
|
+
migrated.messages.forEach( error => {
|
|
105
|
+
console.error( error );
|
|
106
|
+
});
|
|
107
|
+
return console.error( "Load Migrated failed!" );
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
for (let i = 0; i < revs.length; i++) {
|
|
111
|
+
let next = revs[i];
|
|
112
|
+
let pl = !!next.psm.migration.label?.length ? ` - ${next.psm.migration.label} `: " "
|
|
113
|
+
let label = `RevNo ${ chalk.bold(next.psm.migration.revision)}${pl}commited at ${next.psm.migration.instate}`;
|
|
114
|
+
const mig = migrated.migrated.find( value => value.sid === next.psm.psm.migration );
|
|
115
|
+
|
|
116
|
+
if( !!mig ) {
|
|
117
|
+
console.log( `${label} is migrated at ${mig.date}` );
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
const migrator = driver.migrator({
|
|
121
|
+
url: process.env[next.psm.psm.url],
|
|
122
|
+
migrate: next.migrate,
|
|
123
|
+
check: "",
|
|
124
|
+
core: "",
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
const result = await migrator.migrate();
|
|
128
|
+
|
|
129
|
+
if( !result.success ) {
|
|
130
|
+
console.error( result.error );
|
|
131
|
+
result.messages.forEach( error => {
|
|
132
|
+
console.error( error );
|
|
133
|
+
});
|
|
134
|
+
console.error( "Migrate error: Push migration failed!" );
|
|
135
|
+
console.log( `${label} is migrated at ${mig.date} - ${chalk.redBright.bold( "FAILED")}` );
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
console.log( `${label} is migrated at ${mig.date} - ${chalk.greenBright.bold( "SUCCESS")}` );
|
|
139
|
+
|
|
140
|
+
}
|
|
6
141
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["generate.ts"],"names":[],"mappings":"AAuBA,wBAAgB,QAAQ,
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["generate.ts"],"names":[],"mappings":"AAuBA,wBAAgB,QAAQ,SAoIvB"}
|
package/src/tools/generate.js
CHANGED
|
@@ -93,21 +93,24 @@ function generate() {
|
|
|
93
93
|
migration: migration,
|
|
94
94
|
shadow: `psm_shadow_${rand()}`,
|
|
95
95
|
backup: "backup",
|
|
96
|
-
sys: "sys",
|
|
96
|
+
sys: configs.sys || "sys",
|
|
97
97
|
};
|
|
98
98
|
const generator = driver.generator(opts);
|
|
99
99
|
const check = generator.check();
|
|
100
100
|
const migrate = generator.migrate();
|
|
101
|
+
const core = generator.core();
|
|
101
102
|
write(check, next, "migration.next.check.sql");
|
|
102
103
|
let test;
|
|
103
104
|
if (!!url) {
|
|
104
|
-
|
|
105
|
+
const migrator = driver.migrator({
|
|
105
106
|
migrate: migrate,
|
|
106
107
|
check: check,
|
|
108
|
+
core: core,
|
|
107
109
|
url: url
|
|
108
|
-
})
|
|
110
|
+
});
|
|
111
|
+
yield migrator.core();
|
|
112
|
+
test = yield migrator.test();
|
|
109
113
|
}
|
|
110
|
-
console.log(test);
|
|
111
114
|
if (!configs.url) {
|
|
112
115
|
write(migrate, next, "migration.next.sql");
|
|
113
116
|
}
|
|
@@ -136,6 +139,7 @@ function generate() {
|
|
|
136
139
|
url: configs.url,
|
|
137
140
|
output: output,
|
|
138
141
|
schema: options.schemaPath,
|
|
142
|
+
sys: configs.sys || "sys",
|
|
139
143
|
},
|
|
140
144
|
test: {
|
|
141
145
|
check: !!test ? "checked" : "skipped",
|
|
@@ -143,6 +147,7 @@ function generate() {
|
|
|
143
147
|
messages: test === null || test === void 0 ? void 0 : test.messages
|
|
144
148
|
}
|
|
145
149
|
};
|
|
150
|
+
fs.writeFileSync(Path.join(home, "psm.sql"), core);
|
|
146
151
|
fs.writeFileSync(Path.join(home, "psm.yml"), yaml.stringify(psm, null, {
|
|
147
152
|
version: "next",
|
|
148
153
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","sourceRoot":"","sources":["generate.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBA,
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["generate.ts"],"names":[],"mappings":"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"}
|
package/src/tools/generate.ts
CHANGED
|
@@ -80,13 +80,14 @@ export function generate(){
|
|
|
80
80
|
migration: migration,
|
|
81
81
|
shadow: `psm_shadow_${rand()}`,
|
|
82
82
|
backup: "backup",
|
|
83
|
-
sys: "sys",
|
|
83
|
+
sys: configs.sys||"sys",
|
|
84
84
|
};
|
|
85
85
|
|
|
86
86
|
const generator = driver.generator(opts);
|
|
87
87
|
|
|
88
88
|
const check = generator.check();
|
|
89
89
|
const migrate = generator.migrate();
|
|
90
|
+
const core = generator.core();
|
|
90
91
|
|
|
91
92
|
write( check, next, "migration.next.check.sql" );
|
|
92
93
|
|
|
@@ -94,15 +95,17 @@ export function generate(){
|
|
|
94
95
|
let test:PSMMigrationResult|undefined;
|
|
95
96
|
|
|
96
97
|
if( !!url ) {
|
|
97
|
-
|
|
98
|
+
const migrator = driver.migrator({
|
|
98
99
|
migrate: migrate,
|
|
99
100
|
check: check,
|
|
101
|
+
core: core,
|
|
100
102
|
url: url as string
|
|
101
|
-
})
|
|
102
|
-
}
|
|
103
|
+
});
|
|
103
104
|
|
|
105
|
+
await migrator.core();
|
|
104
106
|
|
|
105
|
-
|
|
107
|
+
test = await migrator.test();
|
|
108
|
+
}
|
|
106
109
|
|
|
107
110
|
if( !configs.url ){
|
|
108
111
|
write( migrate, next, "migration.next.sql" );
|
|
@@ -132,6 +135,7 @@ export function generate(){
|
|
|
132
135
|
url: configs.url,
|
|
133
136
|
output: output,
|
|
134
137
|
schema: options.schemaPath,
|
|
138
|
+
sys: configs.sys||"sys",
|
|
135
139
|
},
|
|
136
140
|
test: {
|
|
137
141
|
check: !!test? "checked": "skipped",
|
|
@@ -139,6 +143,7 @@ export function generate(){
|
|
|
139
143
|
messages: test?.messages
|
|
140
144
|
}
|
|
141
145
|
}
|
|
146
|
+
fs.writeFileSync( Path.join( home, "psm.sql" ), core )
|
|
142
147
|
fs.writeFileSync( Path.join( home, "psm.yml" ), yaml.stringify(psm, null, {
|
|
143
148
|
version: "next",
|
|
144
149
|
}) )
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["migrate.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,cAAc;IAC3B,MAAM,CAAC,EAAC,MAAM,CAAA;IACd,QAAQ,CAAC,EAAC,MAAM,CAAA;IAChB,KAAK,CAAC,EAAC,MAAM,CAAA;IACb,kBAAkB,EAAC,MAAM,CAAA;CAC5B;AACD,wBAAsB,OAAO,CAAE,IAAI,EAAC,cAAc,
|
|
1
|
+
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["migrate.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,cAAc;IAC3B,MAAM,CAAC,EAAC,MAAM,CAAA;IACd,QAAQ,CAAC,EAAC,MAAM,CAAA;IAChB,KAAK,CAAC,EAAC,MAAM,CAAA;IACb,kBAAkB,EAAC,MAAM,CAAA;CAC5B;AACD,wBAAsB,OAAO,CAAE,IAAI,EAAC,cAAc,iBAqGjD"}
|
package/src/tools/migrate.js
CHANGED
|
@@ -44,7 +44,6 @@ const prisma = [
|
|
|
44
44
|
function migrate(opts) {
|
|
45
45
|
return __awaiter(this, void 0, void 0, function* () {
|
|
46
46
|
require('dotenv').config();
|
|
47
|
-
console.log(opts);
|
|
48
47
|
if (opts.generate) {
|
|
49
48
|
let command = opts["generate-command"];
|
|
50
49
|
if (!command)
|
|
@@ -65,9 +64,13 @@ function migrate(opts) {
|
|
|
65
64
|
console.log(`PSM migrate base do schema ${schema}`);
|
|
66
65
|
const home = Path.dirname(schema);
|
|
67
66
|
const psm_yml = Path.join(home, "psm.yml");
|
|
67
|
+
const psm_sql = Path.join(home, "psm.sql");
|
|
68
68
|
if (!fs.existsSync(psm_yml)) {
|
|
69
69
|
return console.error("Migrate error: psm.yml file not found!");
|
|
70
70
|
}
|
|
71
|
+
if (!fs.existsSync(psm_sql)) {
|
|
72
|
+
return console.error("Migrate error: psm.sql file not found!");
|
|
73
|
+
}
|
|
71
74
|
console.log(`PSM migrate using ${psm_yml}`);
|
|
72
75
|
const psm = yaml.parse(fs.readFileSync(psm_yml).toString());
|
|
73
76
|
const next = Path.join(psm.psm.output, "next/migration.next.sql");
|
|
@@ -83,8 +86,17 @@ function migrate(opts) {
|
|
|
83
86
|
url: process.env[psm.psm.url],
|
|
84
87
|
migrate: fs.readFileSync(next).toString(),
|
|
85
88
|
check: fs.readFileSync(check).toString(),
|
|
89
|
+
core: fs.readFileSync(psm_sql).toString(),
|
|
86
90
|
});
|
|
87
|
-
let result = yield migrator.
|
|
91
|
+
let result = yield migrator.core();
|
|
92
|
+
if (!result.success) {
|
|
93
|
+
console.error(result.error);
|
|
94
|
+
result.messages.forEach(error => {
|
|
95
|
+
console.error(error);
|
|
96
|
+
});
|
|
97
|
+
return console.error("Migrate error: Core failed!");
|
|
98
|
+
}
|
|
99
|
+
result = yield migrator.test();
|
|
88
100
|
if (!result.success) {
|
|
89
101
|
console.error(result.error);
|
|
90
102
|
result.messages.forEach(error => {
|
|
@@ -98,15 +110,21 @@ function migrate(opts) {
|
|
|
98
110
|
result.messages.forEach(error => {
|
|
99
111
|
console.error(error);
|
|
100
112
|
});
|
|
101
|
-
return console.error("Migrate error:
|
|
113
|
+
return console.error("Migrate error: Commit migration failed!");
|
|
102
114
|
}
|
|
103
115
|
const moment = require('moment');
|
|
104
116
|
let label = "";
|
|
105
117
|
if (!!opts.label)
|
|
106
118
|
label = ` - ${sanitizeLabel(opts.label)}`;
|
|
119
|
+
let preview;
|
|
120
|
+
const last = getLatestFolder(Path.join(home, `psm/revisions/schema`));
|
|
121
|
+
if (!!last) {
|
|
122
|
+
preview = yaml.parse(fs.readFileSync(Path.join(home, "psm/revisions/schema", last, "psm.yml")).toString());
|
|
123
|
+
}
|
|
107
124
|
psm.migration = {
|
|
125
|
+
revision: `${moment().format('YYYYMMDDHHmmss')} - ${psm.psm.migration}`,
|
|
108
126
|
instate: moment().format('YYYYMMDDHHmmss'),
|
|
109
|
-
preview:
|
|
127
|
+
preview: preview === null || preview === void 0 ? void 0 : preview.migration.revision,
|
|
110
128
|
label: opts.label
|
|
111
129
|
};
|
|
112
130
|
const nextRev = Path.join(home, `psm/revisions/schema/${psm.migration.instate}${label}`);
|
package/src/tools/migrate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["migrate.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBA,
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["migrate.ts"],"names":[],"mappings":"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"}
|
package/src/tools/migrate.ts
CHANGED
|
@@ -19,7 +19,6 @@ export interface MigrateOptions {
|
|
|
19
19
|
}
|
|
20
20
|
export async function migrate( opts:MigrateOptions ) {
|
|
21
21
|
require('dotenv').config();
|
|
22
|
-
console.log( opts )
|
|
23
22
|
if( opts.generate ) {
|
|
24
23
|
let command = opts["generate-command"];
|
|
25
24
|
if( !command) command = "prisma generate"
|
|
@@ -41,9 +40,13 @@ export async function migrate( opts:MigrateOptions ) {
|
|
|
41
40
|
|
|
42
41
|
const home = Path.dirname( schema );
|
|
43
42
|
const psm_yml = Path.join( home, "psm.yml" );
|
|
43
|
+
const psm_sql = Path.join( home, "psm.sql");
|
|
44
44
|
if( !fs.existsSync( psm_yml ) ) {
|
|
45
45
|
return console.error( "Migrate error: psm.yml file not found!" );
|
|
46
46
|
}
|
|
47
|
+
if( !fs.existsSync( psm_sql ) ) {
|
|
48
|
+
return console.error( "Migrate error: psm.sql file not found!" );
|
|
49
|
+
}
|
|
47
50
|
|
|
48
51
|
console.log(`PSM migrate using ${psm_yml}`);
|
|
49
52
|
const psm = yaml.parse( fs.readFileSync( psm_yml ).toString() ) as PSMConfigFile;
|
|
@@ -63,9 +66,19 @@ export async function migrate( opts:MigrateOptions ) {
|
|
|
63
66
|
url: process.env[psm.psm.url],
|
|
64
67
|
migrate: fs.readFileSync( next ).toString(),
|
|
65
68
|
check: fs.readFileSync( check ).toString(),
|
|
69
|
+
core: fs.readFileSync( psm_sql ).toString(),
|
|
66
70
|
});
|
|
67
71
|
|
|
68
|
-
let result = await migrator.
|
|
72
|
+
let result = await migrator.core();
|
|
73
|
+
if( !result.success ) {
|
|
74
|
+
console.error( result.error );
|
|
75
|
+
result.messages.forEach( error => {
|
|
76
|
+
console.error( error );
|
|
77
|
+
});
|
|
78
|
+
return console.error( "Migrate error: Core failed!" );
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
result = await migrator.test();
|
|
69
82
|
if( !result.success ) {
|
|
70
83
|
console.error( result.error );
|
|
71
84
|
result.messages.forEach( error => {
|
|
@@ -74,21 +87,28 @@ export async function migrate( opts:MigrateOptions ) {
|
|
|
74
87
|
return console.error( "Migrate error: Check shadow failed!" );
|
|
75
88
|
}
|
|
76
89
|
|
|
90
|
+
|
|
77
91
|
result = await migrator.migrate();
|
|
78
92
|
if( !result.success ) {
|
|
79
93
|
console.error( result.error );
|
|
80
94
|
result.messages.forEach( error => {
|
|
81
95
|
console.error( error );
|
|
82
96
|
});
|
|
83
|
-
return console.error( "Migrate error:
|
|
97
|
+
return console.error( "Migrate error: Commit migration failed!" );
|
|
84
98
|
}
|
|
85
99
|
|
|
86
100
|
const moment = require('moment');
|
|
87
101
|
let label = "";
|
|
88
|
-
if( !!opts.label ) label = ` - ${sanitizeLabel( opts.label )}
|
|
102
|
+
if( !!opts.label ) label = ` - ${sanitizeLabel( opts.label )}`;
|
|
103
|
+
let preview:PSMConfigFile;
|
|
104
|
+
const last = getLatestFolder( Path.join( home, `psm/revisions/schema`));
|
|
105
|
+
if( !!last ){
|
|
106
|
+
preview = yaml.parse( fs.readFileSync( Path.join( home, "psm/revisions/schema", last, "psm.yml")).toString() ) as PSMConfigFile;
|
|
107
|
+
}
|
|
89
108
|
psm.migration = {
|
|
109
|
+
revision: `${ moment().format( 'YYYYMMDDHHmmss' ) } - ${psm.psm.migration}`,
|
|
90
110
|
instate: moment().format( 'YYYYMMDDHHmmss' ),
|
|
91
|
-
preview:
|
|
111
|
+
preview: preview?.migration.revision,
|
|
92
112
|
label: opts.label
|
|
93
113
|
}
|
|
94
114
|
const nextRev = Path.join( home, `psm/revisions/schema/${psm.migration.instate}${label}`);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["migrate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,OAAO,CAAC;AACpC,OAAO,EAAU,cAAc,EAAC,MAAM,qBAAqB,CAAC;AAG5D,QAAA,MAAM,OAAO,EAAC,aAAa,CAAC,cAAc,EAAE,cAAc,CA2BzD,CAAA;AAED,SAAS,OAAO,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["migrate.ts"],"names":[],"mappings":";AAIA,MAAM,OAAO,GAAiD;IAC1D,OAAO,EAAE,gBAAgB;IACzB,QAAQ,EAAE,oDAAoD;IAC9D,OAAO,EAAE,IAAI,CAAC,EAAE;QACZ,IAAI,CAAC,OAAO,CAAE,QAAQ,EAAE;YACpB,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,GAAG;SACb,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE;YACnB,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,GAAG;SACb,CAAC,CAAC,OAAO,CAAE,OAAO,EAAE;YACjB,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,GAAG;SAEb,CAAC,CAAC,OAAO,CAAE,kBAAkB,EAAE;YAC5B,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,GAAG;SACb,CAAC,CAAA;QAEF,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,EAAC,CAAE,IAAI,EAAE,EAAE;QACd,OAAO,CAAC,GAAG,CAAE,IAAI,CAAE,CAAA;QACnB,kCAAkC;QAClC,wBAAwB;QACxB,KAAK;IACT,CAAC;CACJ,CAAA;AAED,iBAAS,OAAO,CAAC"}
|