sonamu 0.5.5 → 0.5.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/dist/bin/build-config.d.ts +4 -0
- package/dist/bin/build-config.d.ts.map +1 -1
- package/dist/bin/build-config.js +1 -1
- package/dist/bin/build-config.js.map +1 -1
- package/dist/bin/cli-wrapper.js +1 -1
- package/dist/bin/cli-wrapper.js.map +1 -1
- package/dist/database/puri.d.ts +1 -0
- package/dist/database/puri.d.ts.map +1 -1
- package/dist/database/puri.js +1 -1
- package/dist/database/puri.js.map +1 -1
- package/dist/database/puri.types.d.ts +1 -1
- package/dist/database/puri.types.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/bin/build-config.ts +7 -3
- package/src/bin/cli-wrapper.ts +31 -12
- package/src/database/puri.ts +19 -0
- package/src/database/puri.types.ts +4 -2
- package/dist/entity/migrator.d.ts +0 -135
- package/dist/entity/migrator.d.ts.map +0 -1
- package/dist/entity/migrator.js +0 -2
- package/dist/entity/migrator.js.map +0 -1
package/src/database/puri.ts
CHANGED
|
@@ -559,6 +559,25 @@ export class Puri<
|
|
|
559
559
|
return result;
|
|
560
560
|
}
|
|
561
561
|
|
|
562
|
+
// Pluck
|
|
563
|
+
async pluck<
|
|
564
|
+
TColumn extends ResultAvailableColumns<
|
|
565
|
+
TSchema,
|
|
566
|
+
TTable,
|
|
567
|
+
TOriginal,
|
|
568
|
+
TResult,
|
|
569
|
+
TJoined
|
|
570
|
+
>,
|
|
571
|
+
>(
|
|
572
|
+
column: TColumn
|
|
573
|
+
): Promise<
|
|
574
|
+
ExtractColumnType<TSchema, TTable, TColumn & string, TOriginal, TJoined>[]
|
|
575
|
+
> {
|
|
576
|
+
return this.knexQuery.pluck(column) as Promise<
|
|
577
|
+
ExtractColumnType<TSchema, TTable, TColumn & string, TOriginal, TJoined>[]
|
|
578
|
+
>;
|
|
579
|
+
}
|
|
580
|
+
|
|
562
581
|
// Insert/Update/Delete
|
|
563
582
|
// TODO(Haze, 251030): InsertData<T>에서 nullable type을 제대로 처리하지 못하는 것 같음.
|
|
564
583
|
async insert(
|
|
@@ -40,9 +40,11 @@ export type ResultAvailableColumns<
|
|
|
40
40
|
TOriginal = any,
|
|
41
41
|
TResult = any,
|
|
42
42
|
TJoined = EmptyRecord,
|
|
43
|
-
> =
|
|
43
|
+
> = Exclude<
|
|
44
44
|
| AvailableColumns<TSchema, T, TOriginal, TJoined>
|
|
45
|
-
| `${keyof TResult & string}
|
|
45
|
+
| `${keyof TResult & string}`,
|
|
46
|
+
"__fulltext__" | `${T & string}.__fulltext__`
|
|
47
|
+
>;
|
|
46
48
|
|
|
47
49
|
// 사용 가능한 컬럼 경로 타입 (메인 테이블 + 조인된 테이블들)
|
|
48
50
|
export type AvailableColumns<
|
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
import { Knex } from "knex";
|
|
2
|
-
import { GenMigrationCode, MigrationColumn, MigrationForeign, MigrationIndex, MigrationSet, MigrationSetAndJoinTable } from "../types/types";
|
|
3
|
-
import { Entity } from "./entity";
|
|
4
|
-
type MigratorMode = "dev" | "deploy";
|
|
5
|
-
export type MigratorOptions = {
|
|
6
|
-
readonly mode: MigratorMode;
|
|
7
|
-
};
|
|
8
|
-
type MigrationCode = {
|
|
9
|
-
name: string;
|
|
10
|
-
path: string;
|
|
11
|
-
};
|
|
12
|
-
type ConnString = `${"mysql2"}://${string}@${string}:${number}/${string}`;
|
|
13
|
-
export type MigrationStatus = {
|
|
14
|
-
codes: MigrationCode[];
|
|
15
|
-
conns: {
|
|
16
|
-
name: string;
|
|
17
|
-
connKey: string;
|
|
18
|
-
connString: ConnString;
|
|
19
|
-
currentVersion: string;
|
|
20
|
-
status: string | number;
|
|
21
|
-
pending: string[];
|
|
22
|
-
}[];
|
|
23
|
-
preparedCodes: GenMigrationCode[];
|
|
24
|
-
};
|
|
25
|
-
export declare class Migrator {
|
|
26
|
-
readonly mode: MigratorMode;
|
|
27
|
-
targets: {
|
|
28
|
-
compare?: Knex;
|
|
29
|
-
pending: Knex;
|
|
30
|
-
shadow: Knex;
|
|
31
|
-
apply: Knex[];
|
|
32
|
-
};
|
|
33
|
-
constructor(options: MigratorOptions);
|
|
34
|
-
getMigrationCodes(): Promise<{
|
|
35
|
-
normal: MigrationCode[];
|
|
36
|
-
onlyTs: MigrationCode[];
|
|
37
|
-
onlyJs: MigrationCode[];
|
|
38
|
-
}>;
|
|
39
|
-
getStatus(): Promise<MigrationStatus>;
|
|
40
|
-
runAction(action: "latest" | "rollback", targets: string[]): Promise<{
|
|
41
|
-
connKey: string;
|
|
42
|
-
batchNo: number;
|
|
43
|
-
applied: string[];
|
|
44
|
-
}[]>;
|
|
45
|
-
delCodes(codeNames: string[]): Promise<number>;
|
|
46
|
-
generatePreparedCodes(): Promise<number>;
|
|
47
|
-
clearPendingList(): Promise<void>;
|
|
48
|
-
check(): Promise<void>;
|
|
49
|
-
run(): Promise<void>;
|
|
50
|
-
rollback(): Promise<void>;
|
|
51
|
-
cleanUpDist(force?: boolean): Promise<void>;
|
|
52
|
-
runShadowTest(): Promise<{
|
|
53
|
-
connKey: string;
|
|
54
|
-
batchNo: number;
|
|
55
|
-
applied: string[];
|
|
56
|
-
}[]>;
|
|
57
|
-
resetAll(): Promise<void>;
|
|
58
|
-
compareMigrations(compareDB: Knex): Promise<GenMigrationCode[]>;
|
|
59
|
-
getMigrationSetFromDB(compareDB: Knex, table: string): Promise<MigrationSet | null>;
|
|
60
|
-
resolveDBColType(colType: string, colField: string): Pick<MigrationColumn, "type" | "unsigned" | "length" | "precision" | "scale">;
|
|
61
|
-
readTable(compareDB: Knex, tableName: string): Promise<[DBColumn[], DBIndex[], DBForeign[]]>;
|
|
62
|
-
getMigrationSetFromEntity(entity: Entity): MigrationSetAndJoinTable;
|
|
63
|
-
genColumnDefinitions(columns: MigrationColumn[]): string[];
|
|
64
|
-
genIndexDefinitions(indexes: MigrationIndex[]): string[];
|
|
65
|
-
genForeignDefinitions(table: string, foreigns: MigrationForeign[]): {
|
|
66
|
-
up: string[];
|
|
67
|
-
down: string[];
|
|
68
|
-
};
|
|
69
|
-
generateCreateCode_ColumnAndIndexes(table: string, columns: MigrationColumn[], indexes: MigrationIndex[]): Promise<GenMigrationCode>;
|
|
70
|
-
generateCreateCode_Foreign(table: string, foreigns: MigrationForeign[]): Promise<GenMigrationCode[]>;
|
|
71
|
-
showMigrationSet(which: "Entity" | "DB", migrationSet: MigrationSet): void;
|
|
72
|
-
generateAlterCode_ColumnAndIndexes(table: string, entityColumns: MigrationColumn[], entityIndexes: MigrationIndex[], dbColumns: MigrationColumn[], dbIndexes: MigrationIndex[], dbForeigns: MigrationForeign[]): Promise<GenMigrationCode[]>;
|
|
73
|
-
getAlterColumnsTo(entityColumns: MigrationColumn[], dbColumns: MigrationColumn[]): {
|
|
74
|
-
add: MigrationColumn[];
|
|
75
|
-
drop: MigrationColumn[];
|
|
76
|
-
alter: MigrationColumn[];
|
|
77
|
-
};
|
|
78
|
-
getAlterColumnLinesTo(columnsTo: ReturnType<Migrator["getAlterColumnsTo"]>, entityColumns: MigrationColumn[], table: string, dbForeigns: MigrationForeign[]): {
|
|
79
|
-
add: {
|
|
80
|
-
up: string[];
|
|
81
|
-
down: string[];
|
|
82
|
-
};
|
|
83
|
-
drop: {
|
|
84
|
-
up: string[];
|
|
85
|
-
down: string[];
|
|
86
|
-
};
|
|
87
|
-
alter: {
|
|
88
|
-
up: string[];
|
|
89
|
-
down: string[];
|
|
90
|
-
};
|
|
91
|
-
};
|
|
92
|
-
getAlterIndexesTo(entityIndexes: MigrationIndex[], dbIndexes: MigrationIndex[]): {
|
|
93
|
-
add: MigrationIndex[];
|
|
94
|
-
drop: MigrationIndex[];
|
|
95
|
-
};
|
|
96
|
-
genIndexDefinition(index: MigrationIndex, table: string): string;
|
|
97
|
-
genIndexDropDefinition(index: MigrationIndex): string;
|
|
98
|
-
generateAlterCode_Foreigns(table: string, entityForeigns: MigrationForeign[], dbForeigns: MigrationForeign[], droppingColumns?: MigrationColumn[]): Promise<GenMigrationCode[]>;
|
|
99
|
-
destroy(): Promise<void>;
|
|
100
|
-
}
|
|
101
|
-
type DBColumn = {
|
|
102
|
-
Field: string;
|
|
103
|
-
Type: string;
|
|
104
|
-
Null: string;
|
|
105
|
-
Key: string;
|
|
106
|
-
Default: string | null;
|
|
107
|
-
Extra: string;
|
|
108
|
-
};
|
|
109
|
-
type DBIndex = {
|
|
110
|
-
Table: string;
|
|
111
|
-
Non_unique: number;
|
|
112
|
-
Key_name: string;
|
|
113
|
-
Seq_in_index: number;
|
|
114
|
-
Column_name: string;
|
|
115
|
-
Collation: string | null;
|
|
116
|
-
Cardinality: number | null;
|
|
117
|
-
Sub_part: number | null;
|
|
118
|
-
Packed: string | null;
|
|
119
|
-
Null: string;
|
|
120
|
-
Index_type: string;
|
|
121
|
-
Comment: string;
|
|
122
|
-
Index_comment: string;
|
|
123
|
-
Visible: string;
|
|
124
|
-
Expression: string | null;
|
|
125
|
-
};
|
|
126
|
-
type DBForeign = {
|
|
127
|
-
keyName: string;
|
|
128
|
-
from: string;
|
|
129
|
-
referencesTable: string;
|
|
130
|
-
referencesField: string;
|
|
131
|
-
onDelete: string;
|
|
132
|
-
onUpdate: string;
|
|
133
|
-
};
|
|
134
|
-
export {};
|
|
135
|
-
//# sourceMappingURL=migrator.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"migrator.d.ts","sourceRoot":"","sources":["../../src/entity/migrator.ts"],"names":[],"mappings":"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"}
|
package/dist/entity/migrator.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"Migrator",{enumerable:true,get:function(){return Migrator}});var _lodash=/*#__PURE__*/_interop_require_default(require("lodash"));var _knex=/*#__PURE__*/_interop_require_default(require("knex"));var _prettier=/*#__PURE__*/_interop_require_default(require("prettier"));var _chalk=/*#__PURE__*/_interop_require_default(require("chalk"));var _luxon=require("luxon");var _promises=require("fs/promises");var _fsutils=require("../utils/fs-utils");var _fastdeepequal=/*#__PURE__*/_interop_require_default(require("fast-deep-equal"));var _inflection=/*#__PURE__*/_interop_require_default(require("inflection"));var _prompts=/*#__PURE__*/_interop_require_default(require("prompts"));var _child_process=require("child_process");var _path=/*#__PURE__*/_interop_require_default(require("path"));var _types=require("../types/types");var _entitymanager=require("./entity-manager");var _api=require("../api");var _soexceptions=require("../exceptions/so-exceptions");function _array_like_to_array(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function _array_with_holes(arr){if(Array.isArray(arr))return arr}function _array_without_holes(arr){if(Array.isArray(arr))return _array_like_to_array(arr)}function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg);var value=info.value}catch(error){reject(error);return}if(info.done){resolve(value)}else{Promise.resolve(value).then(_next,_throw)}}function _async_to_generator(fn){return function(){var self=this,args=arguments;return new Promise(function(resolve,reject){var gen=fn.apply(self,args);function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value)}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err)}_next(undefined)})}}function _class_call_check(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _create_class(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor}function _define_property(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}function _interop_require_default(obj){return obj&&obj.__esModule?obj:{default:obj}}function _iterable_to_array(iter){if(typeof Symbol!=="undefined"&&iter[Symbol.iterator]!=null||iter["@@iterator"]!=null)return Array.from(iter)}function _iterable_to_array_limit(arr,i){var _i=arr==null?null:typeof Symbol!=="undefined"&&arr[Symbol.iterator]||arr["@@iterator"];if(_i==null)return;var _arr=[];var _n=true;var _d=false;var _s,_e;try{for(_i=_i.call(arr);!(_n=(_s=_i.next()).done);_n=true){_arr.push(_s.value);if(i&&_arr.length===i)break}}catch(err){_d=true;_e=err}finally{try{if(!_n&&_i["return"]!=null)_i["return"]()}finally{if(_d)throw _e}}return _arr}function _non_iterable_rest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _non_iterable_spread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _object_spread(target){for(var i=1;i<arguments.length;i++){var source=arguments[i]!=null?arguments[i]:{};var ownKeys=Object.keys(source);if(typeof Object.getOwnPropertySymbols==="function"){ownKeys=ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym){return Object.getOwnPropertyDescriptor(source,sym).enumerable}))}ownKeys.forEach(function(key){_define_property(target,key,source[key])})}return target}function ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);if(enumerableOnly){symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable})}keys.push.apply(keys,symbols)}return keys}function _object_spread_props(target,source){source=source!=null?source:{};if(Object.getOwnPropertyDescriptors){Object.defineProperties(target,Object.getOwnPropertyDescriptors(source))}else{ownKeys(Object(source)).forEach(function(key){Object.defineProperty(target,key,Object.getOwnPropertyDescriptor(source,key))})}return target}function _sliced_to_array(arr,i){return _array_with_holes(arr)||_iterable_to_array_limit(arr,i)||_unsupported_iterable_to_array(arr,i)||_non_iterable_rest()}function _to_consumable_array(arr){return _array_without_holes(arr)||_iterable_to_array(arr)||_unsupported_iterable_to_array(arr)||_non_iterable_spread()}function _unsupported_iterable_to_array(o,minLen){if(!o)return;if(typeof o==="string")return _array_like_to_array(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);if(n==="Object"&&o.constructor)n=o.constructor.name;if(n==="Map"||n==="Set")return Array.from(n);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _array_like_to_array(o,minLen)}function _ts_generator(thisArg,body){var f,y,t,_={label:0,sent:function(){if(t[0]&1)throw t[1];return t[1]},trys:[],ops:[]},g=Object.create((typeof Iterator==="function"?Iterator:Object).prototype);return g.next=verb(0),g["throw"]=verb(1),g["return"]=verb(2),typeof Symbol==="function"&&(g[Symbol.iterator]=function(){return this}),g;function verb(n){return function(v){return step([n,v])}}function step(op){if(f)throw new TypeError("Generator is already executing.");while(g&&(g=0,op[0]&&(_=0)),_)try{if(f=1,y&&(t=op[0]&2?y["return"]:op[0]?y["throw"]||((t=y["return"])&&t.call(y),0):y.next)&&!(t=t.call(y,op[1])).done)return t;if(y=0,t)op=[op[0]&2,t.value];switch(op[0]){case 0:case 1:t=op;break;case 4:_.label++;return{value:op[1],done:false};case 5:_.label++;y=op[1];op=[0];continue;case 7:op=_.ops.pop();_.trys.pop();continue;default:if(!(t=_.trys,t=t.length>0&&t[t.length-1])&&(op[0]===6||op[0]===2)){_=0;continue}if(op[0]===3&&(!t||op[1]>t[0]&&op[1]<t[3])){_.label=op[1];break}if(op[0]===6&&_.label<t[1]){_.label=t[1];t=op;break}if(t&&_.label<t[2]){_.label=t[2];_.ops.push(op);break}if(t[2])_.ops.pop();_.trys.pop();continue}op=body.call(thisArg,_)}catch(e){op=[6,e];y=0}finally{f=t=0}if(op[0]&5)throw op[1];return{value:op[0]?op[1]:void 0,done:true}}}var Migrator=/*#__PURE__*/function(){"use strict";function Migrator(options){_class_call_check(this,Migrator);_define_property(this,"mode",void 0);_define_property(this,"targets",void 0);this.mode=options.mode;var dbConfig=_api.Sonamu.dbConfig;if(this.mode==="dev"){var devDB=(0,_knex.default)(dbConfig.development_master);var testDB=(0,_knex.default)(dbConfig.test);var fixtureLocalDB=(0,_knex.default)(dbConfig.fixture_local);var applyDBs=[devDB,testDB,fixtureLocalDB];if(dbConfig.fixture_local.connection.host!==dbConfig.fixture_remote.connection.host||dbConfig.fixture_local.connection.database!==dbConfig.fixture_remote.connection.database){var fixtureRemoteDB=(0,_knex.default)(dbConfig.fixture_remote);applyDBs.push(fixtureRemoteDB)}this.targets={compare:devDB,pending:devDB,shadow:testDB,apply:applyDBs}}else if(this.mode==="deploy"){var productionDB=(0,_knex.default)(dbConfig.production_master);var testDB1=(0,_knex.default)(dbConfig.test);this.targets={pending:productionDB,shadow:testDB1,apply:[productionDB]}}else{throw new Error("잘못된 모드 ".concat(this.mode," 입력"))}}_create_class(Migrator,[{key:"getMigrationCodes",value:function getMigrationCodes(){return _async_to_generator(function(){var srcMigrationsDir,distMigrationsDir,srcMigrations,distMigrations,normal,onlyTs,onlyJs;return _ts_generator(this,function(_state){switch(_state.label){case 0:srcMigrationsDir="".concat(_api.Sonamu.apiRootPath,"/src/migrations");distMigrationsDir="".concat(_api.Sonamu.apiRootPath,"/dist/migrations");return[4,(0,_fsutils.exists)(srcMigrationsDir)];case 1:if(!!_state.sent())return[3,3];return[4,(0,_promises.mkdir)(srcMigrationsDir,{recursive:true})];case 2:_state.sent();_state.label=3;case 3:return[4,(0,_fsutils.exists)(distMigrationsDir)];case 4:if(!!_state.sent())return[3,6];return[4,(0,_promises.mkdir)(distMigrationsDir,{recursive:true})];case 5:_state.sent();_state.label=6;case 6:return[4,(0,_promises.readdir)(srcMigrationsDir)];case 7:srcMigrations=_state.sent().filter(function(f){return f.endsWith(".ts")}).map(function(f){return f.split(".")[0]});return[4,(0,_promises.readdir)(distMigrationsDir)];case 8:distMigrations=_state.sent().filter(function(f){return f.endsWith(".js")}).map(function(f){return f.split(".")[0]});normal=_lodash.default.intersection(srcMigrations,distMigrations).map(function(filename){return{name:filename,path:_path.default.join(srcMigrationsDir,filename)+".ts"}}).sort(function(a,b){return a>b?1:-1});onlyTs=_lodash.default.difference(srcMigrations,distMigrations).map(function(filename){return{name:filename,path:_path.default.join(srcMigrationsDir,filename)+".ts"}});onlyJs=_lodash.default.difference(distMigrations,srcMigrations).map(function(filename){return{name:filename,path:_path.default.join(distMigrationsDir,filename)+".js"}});return[2,{normal:normal,onlyTs:onlyTs,onlyJs:onlyJs}]}})})()}},{key:"getStatus",value:function getStatus(){return _async_to_generator(function(){var _this,_ref,normal,onlyTs,onlyJs,connKeys,statuses,preparedCodes;return _ts_generator(this,function(_state){switch(_state.label){case 0:_this=this;return[4,this.getMigrationCodes()];case 1:_ref=_state.sent(),normal=_ref.normal,onlyTs=_ref.onlyTs,onlyJs=_ref.onlyJs;if(onlyTs.length>0){console.debug({onlyTs:onlyTs});throw new _soexceptions.ServiceUnavailableException("There are un-compiled TS migration files.\nPlease compile them first.\n\n".concat(onlyTs.map(function(f){return f.name}).join("\n")))}if(!(onlyJs.length>0))return[3,3];console.debug({onlyJs:onlyJs});return[4,Promise.all(onlyJs.map(function(f){return _async_to_generator(function(){return _ts_generator(this,function(_state){(0,_child_process.execSync)("rm -f ".concat(f.path.replace("/src/","/dist/").replace(".ts",".js")));return[2]})})()}))];case 2:_state.sent();_state.label=3;case 3:connKeys=Object.keys(_api.Sonamu.dbConfig).filter(function(key){return key.endsWith("_slave")===false});return[4,Promise.all(connKeys.map(function(connKey){return _async_to_generator(function(){var knexOptions,tConn,status,pending,currentVersion,connection,_connection_user;return _ts_generator(this,function(_state){switch(_state.label){case 0:knexOptions=_api.Sonamu.dbConfig[connKey];tConn=(0,_knex.default)(knexOptions);return[4,function(){return _async_to_generator(function(){var err;return _ts_generator(this,function(_state){switch(_state.label){case 0:_state.trys.push([0,2,,3]);return[4,tConn.migrate.status()];case 1:return[2,_state.sent()];case 2:err=_state.sent();console.warn(_chalk.default.yellow("".concat(connKey,"의 마이그레이션 상태를 가져오는 데에 실패하였습니다. 데이터베이스가 올바르게 구성되지 않은 것 같습니다. 확인하시고 다시 시도해주세요.\n시도한 연결 설정:\n").concat(JSON.stringify(knexOptions.connection,null,2),"\n발생한 에러:\n").concat(err,"\n")));return[2,"error"];case 3:return[2]}})})()}()];case 1:status=_state.sent();return[4,function(){return _async_to_generator(function(){var _ref,fdList,err;return _ts_generator(this,function(_state){switch(_state.label){case 0:_state.trys.push([0,2,,3]);return[4,tConn.migrate.list()];case 1:_ref=_sliced_to_array.apply(void 0,[_state.sent(),2]),fdList=_ref[1];return[2,fdList.map(function(fd){return fd.file.replace(".js","")})];case 2:err=_state.sent();return[2,[]];case 3:return[2]}})})()}()];case 2:pending=_state.sent();return[4,function(){return _async_to_generator(function(){var err;return _ts_generator(this,function(_state){switch(_state.label){case 0:_state.trys.push([0,2,,3]);return[4,tConn.migrate.currentVersion()];case 1:return[2,_state.sent()];case 2:err=_state.sent();return[2,"error"];case 3:return[2]}})})()}()];case 3:currentVersion=_state.sent();connection=knexOptions.connection;return[4,tConn.destroy()];case 4:_state.sent();return[2,{name:connKey.replace("_master",""),connKey:connKey,connString:"mysql2://".concat((_connection_user=connection.user)!==null&&_connection_user!==void 0?_connection_user:"","@").concat(connection.host,":").concat(connection.port,"/").concat(connection.database),currentVersion:currentVersion,status:status,pending:pending}]}})})()}))];case 4:statuses=_state.sent();return[4,function(){return _async_to_generator(function(){var status0conn,compareDBconn,genCodes;return _ts_generator(this,function(_state){switch(_state.label){case 0:status0conn=statuses.find(function(status){return status.status===0});if(status0conn===undefined){return[2,[]]}compareDBconn=(0,_knex.default)(_api.Sonamu.dbConfig[status0conn.connKey]);return[4,this.compareMigrations(compareDBconn)];case 1:genCodes=_state.sent();return[4,compareDBconn.destroy()];case 2:_state.sent();return[2,genCodes]}})}).call(_this)}()];case 5:preparedCodes=_state.sent();return[2,{conns:statuses,codes:normal,preparedCodes:preparedCodes}]}})}).call(this)}},{key:"runAction",value:function runAction(action,targets){return _async_to_generator(function(){var configs,conns,result;return _ts_generator(this,function(_state){switch(_state.label){case 0:configs=_lodash.default.uniqBy(targets.map(function(target){return{connKey:target,options:_api.Sonamu.dbConfig[target]}}).filter(function(c){return c.options!==undefined}),function(param){var options=param.options;var _options_connection_port;return"".concat(options.connection.host,":").concat((_options_connection_port=options.connection.port)!==null&&_options_connection_port!==void 0?_options_connection_port:3306,"/").concat(options.connection.database)});return[4,Promise.all(configs.map(function(config){return _async_to_generator(function(){return _ts_generator(this,function(_state){return[2,{connKey:config.connKey,knex:(0,_knex.default)(config.options)}]})})()}))];case 1:conns=_state.sent();return[4,function(){return _async_to_generator(function(){return _ts_generator(this,function(_state){switch(action){case"latest":return[2,Promise.all(conns.map(function(param){var connKey=param.connKey,knex=param.knex;return _async_to_generator(function(){var _ref,batchNo,applied;return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,knex.migrate.latest()];case 1:_ref=_sliced_to_array.apply(void 0,[_state.sent(),2]),batchNo=_ref[0],applied=_ref[1];return[2,{connKey:connKey,batchNo:batchNo,applied:applied}]}})})()}))];case"rollback":return[2,Promise.all(conns.map(function(param){var connKey=param.connKey,knex=param.knex;return _async_to_generator(function(){var _ref,batchNo,applied;return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,knex.migrate.rollback()];case 1:_ref=_sliced_to_array.apply(void 0,[_state.sent(),2]),batchNo=_ref[0],applied=_ref[1];return[2,{connKey:connKey,batchNo:batchNo,applied:applied}]}})})()}))]}return[2]})})()}()];case 2:result=_state.sent();return[4,Promise.all(conns.map(function(param){var knex=param.knex;return knex.destroy()}))];case 3:_state.sent();return[2,result]}})})()}},{key:"delCodes",value:function delCodes(codeNames){return _async_to_generator(function(){var conns,delFiles,res;return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,this.getStatus()];case 1:conns=_state.sent().conns;if(conns.some(function(conn){return codeNames.some(function(codeName){return conn.pending.includes(codeName)===false})})){throw new Error("You cannot delete a migration file if there is already applied.")}delFiles=codeNames.map(function(codeName){return["".concat(_api.Sonamu.apiRootPath,"/src/migrations/").concat(codeName,".ts"),"".concat(_api.Sonamu.apiRootPath,"/dist/migrations/").concat(codeName,".js")]}).flat();return[4,Promise.all(delFiles.map(function(delFile){return _async_to_generator(function(){return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,(0,_fsutils.exists)(delFile)];case 1:if(!_state.sent())return[3,3];console.log(_chalk.default.red("DELETE: ".concat(delFile)));return[4,(0,_promises.unlink)(delFile)];case 2:_state.sent();return[2,delFiles.includes(".ts")?1:0];case 3:return[2,0]}})})()}))];case 2:res=_state.sent();return[2,_lodash.default.sum(res)]}})}).call(this)}},{key:"generatePreparedCodes",value:function generatePreparedCodes(){return _async_to_generator(function(){var preparedCodes,migrationsDir,_iteratorNormalCompletion,_didIteratorError,_iteratorError,_iterator,_step,_step_value,index,pcode,dateTag,filePath,err;return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,this.getStatus()];case 1:preparedCodes=_state.sent().preparedCodes;if(preparedCodes.length===0){console.log(_chalk.default.green("\n현재 모두 싱크된 상태입니다."));return[2,0]}migrationsDir="".concat(_api.Sonamu.apiRootPath,"/src/migrations");_iteratorNormalCompletion=true,_didIteratorError=false,_iteratorError=undefined;_state.label=2;case 2:_state.trys.push([2,7,8,9]);_iterator=preparedCodes.entries()[Symbol.iterator]();_state.label=3;case 3:if(!!(_iteratorNormalCompletion=(_step=_iterator.next()).done))return[3,6];_step_value=_sliced_to_array(_step.value,2),index=_step_value[0],pcode=_step_value[1];if(!pcode.formatted)return[3,5];dateTag=_luxon.DateTime.local().plus({seconds:index}).toFormat("yyyyMMddHHmmss");filePath="".concat(migrationsDir,"/").concat(dateTag,"_").concat(pcode.title,".ts");return[4,(0,_promises.writeFile)(filePath,pcode.formatted)];case 4:_state.sent();console.log(_chalk.default.green("MIGRTAION CREATED ".concat(filePath)));_state.label=5;case 5:_iteratorNormalCompletion=true;return[3,3];case 6:return[3,9];case 7:err=_state.sent();_didIteratorError=true;_iteratorError=err;return[3,9];case 8:try{if(!_iteratorNormalCompletion&&_iterator.return!=null){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}return[7];case 9:return[2,preparedCodes.length]}})}).call(this)}},{key:"clearPendingList",value:function clearPendingList(){return _async_to_generator(function(){var _ref,pendingList,migrationsDir,delList,_iteratorNormalCompletion,_didIteratorError,_iteratorError,_iterator,_step,p,err;return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,this.targets.pending.migrate.list()];case 1:_ref=_sliced_to_array.apply(void 0,[_state.sent(),2]),pendingList=_ref[1];migrationsDir="".concat(_api.Sonamu.apiRootPath,"/src/migrations");delList=pendingList.map(function(df){return _path.default.join(migrationsDir,df.file).replace(".js",".ts")});_iteratorNormalCompletion=true,_didIteratorError=false,_iteratorError=undefined;_state.label=2;case 2:_state.trys.push([2,8,9,10]);_iterator=delList[Symbol.iterator]();_state.label=3;case 3:if(!!(_iteratorNormalCompletion=(_step=_iterator.next()).done))return[3,7];p=_step.value;return[4,(0,_fsutils.exists)(p)];case 4:if(!_state.sent())return[3,6];return[4,(0,_promises.unlink)(p)];case 5:_state.sent();_state.label=6;case 6:_iteratorNormalCompletion=true;return[3,3];case 7:return[3,10];case 8:err=_state.sent();_didIteratorError=true;_iteratorError=err;return[3,10];case 9:try{if(!_iteratorNormalCompletion&&_iterator.return!=null){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}return[7];case 10:return[4,this.cleanUpDist(true)];case 11:_state.sent();return[2]}})}).call(this)}},{key:"check",value:function check(){return _async_to_generator(function(){var codes;return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,this.compareMigrations(this.targets.compare)];case 1:codes=_state.sent();if(codes.length===0){console.log(_chalk.default.green("\n현재 모두 싱크된 상태입니다."));return[2]}console.table(codes,["type","title"]);console.log(codes[0]);return[2]}})}).call(this)}},{key:"run",value:function run(){return _async_to_generator(function(){var _ref,pendingList,answer,codes,answer1,migrationsDir,_iteratorNormalCompletion,_didIteratorError,_iteratorError,_iterator,_step,_step_value,index,code,dateTag,filePath,err;return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,this.targets.pending.migrate.list()];case 1:_ref=_sliced_to_array.apply(void 0,[_state.sent(),2]),pendingList=_ref[1];if(!(pendingList.length>0))return[3,5];console.log(_chalk.default.red("pending 된 마이그레이션이 존재합니다."),pendingList.map(function(pending){return pending.file}));return[4,(0,_prompts.default)({type:"confirm",name:"value",message:"Shadow DB 테스트를 진행하시겠습니까?",initial:true})];case 2:answer=_state.sent();if(answer.value===false){return[2]}console.time(_chalk.default.blue("Migrator - runShadowTest"));return[4,this.runShadowTest()];case 3:_state.sent();console.timeEnd(_chalk.default.blue("Migrator - runShadowTest"));return[4,Promise.all(this.targets.apply.map(function(applyDb){return _async_to_generator(function(){var label,_ref;return _ts_generator(this,function(_state){switch(_state.label){case 0:label=_chalk.default.green("APPLIED ".concat(applyDb.client.connectionSettings.host," ").concat(applyDb.client.database()));console.time(label);return[4,applyDb.migrate.latest()];case 1:_ref=_sliced_to_array.apply(void 0,[_state.sent(),1]);console.timeEnd(label);return[2]}})})()}))];case 4:_state.sent();_state.label=5;case 5:return[4,this.compareMigrations(this.targets.compare)];case 6:codes=_state.sent();if(codes.length===0){console.log(_chalk.default.green("\n현재 모두 싱크된 상태입니다."));return[2]}console.table(codes,["type","title"]);return[4,(0,_prompts.default)({type:"confirm",name:"value",message:"마이그레이션 코드를 생성하시겠습니까?",initial:false})];case 7:answer1=_state.sent();if(answer1.value===false){return[2]}migrationsDir="".concat(_api.Sonamu.apiRootPath,"/src/migrations");_iteratorNormalCompletion=true,_didIteratorError=false,_iteratorError=undefined;_state.label=8;case 8:_state.trys.push([8,13,14,15]);_iterator=codes.entries()[Symbol.iterator]();_state.label=9;case 9:if(!!(_iteratorNormalCompletion=(_step=_iterator.next()).done))return[3,12];_step_value=_sliced_to_array(_step.value,2),index=_step_value[0],code=_step_value[1];if(!code.formatted)return[3,11];dateTag=_luxon.DateTime.local().plus({seconds:index}).toFormat("yyyyMMddHHmmss");filePath="".concat(migrationsDir,"/").concat(dateTag,"_").concat(code.title,".ts");return[4,(0,_promises.writeFile)(filePath,code.formatted)];case 10:_state.sent();console.log(_chalk.default.green("MIGRTAION CREATED ".concat(filePath)));_state.label=11;case 11:_iteratorNormalCompletion=true;return[3,9];case 12:return[3,15];case 13:err=_state.sent();_didIteratorError=true;_iteratorError=err;return[3,15];case 14:try{if(!_iteratorNormalCompletion&&_iterator.return!=null){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}return[7];case 15:return[2]}})}).call(this)}},{key:"rollback",value:function rollback(){return _async_to_generator(function(){var rollbackAllResult;return _ts_generator(this,function(_state){switch(_state.label){case 0:console.time(_chalk.default.red("rollback:"));return[4,Promise.all(this.targets.apply.map(function(db){return _async_to_generator(function(){return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,db.migrate.forceFreeMigrationsLock()];case 1:_state.sent();return[2,db.migrate.rollback(undefined,false)]}})})()}))];case 1:rollbackAllResult=_state.sent();console.dir({rollbackAllResult:rollbackAllResult},{depth:null});console.timeEnd(_chalk.default.red("rollback:"));return[2]}})}).call(this)}},{key:"cleanUpDist",value:function cleanUpDist(){var force=arguments.length>0&&arguments[0]!==void 0?arguments[0]:false;return _async_to_generator(function(){var files,_tmp,diffOnSrc,diffOnDist,answer,filesToRm,_iteratorNormalCompletion,_didIteratorError,_iteratorError,_iterator,_step,filePath,err;function getFilesUnder(dir){return _async_to_generator(function(){var migrationPath;return _ts_generator(this,function(_state){switch(_state.label){case 0:migrationPath=_path.default.join(_api.Sonamu.apiRootPath,dir,"migrations");return[4,(0,_fsutils.exists)(migrationPath)];case 1:if(!!_state.sent())return[3,3];return[4,(0,_promises.mkdir)(migrationPath,{recursive:true})];case 2:_state.sent();_state.label=3;case 3:return[4,(0,_promises.readdir)(migrationPath)];case 4:return[2,_state.sent().filter(function(filename){return filename.startsWith(".")===false})]}})})()}return _ts_generator(this,function(_state){switch(_state.label){case 0:_tmp={};return[4,getFilesUnder("src")];case 1:_tmp.src=_state.sent();return[4,getFilesUnder("dist")];case 2:files=(_tmp.dist=_state.sent(),_tmp);diffOnSrc=_lodash.default.differenceBy(files.src,files.dist,function(filename){return filename.split(".")[0]});if(diffOnSrc.length>0){throw new Error("컴파일 되지 않은 파일이 있습니다.\n"+diffOnSrc.join("\n"))}diffOnDist=_lodash.default.differenceBy(files.dist,files.src,function(filename){return filename.split(".")[0]});if(!(diffOnDist.length>0))return[3,13];console.log(_chalk.default.red("원본 ts파일을 찾을 수 없는 js파일이 있습니다."));console.log(diffOnDist);if(!!force)return[3,4];return[4,(0,_prompts.default)({type:"confirm",name:"value",message:"삭제를 진행하시겠습니까?",initial:true})];case 3:answer=_state.sent();if(answer.value===false){return[2]}_state.label=4;case 4:filesToRm=diffOnDist.map(function(filename){return _path.default.join(_api.Sonamu.apiRootPath,"dist","migrations",filename)});_iteratorNormalCompletion=true,_didIteratorError=false,_iteratorError=undefined;_state.label=5;case 5:_state.trys.push([5,10,11,12]);_iterator=filesToRm[Symbol.iterator]();_state.label=6;case 6:if(!!(_iteratorNormalCompletion=(_step=_iterator.next()).done))return[3,9];filePath=_step.value;return[4,(0,_promises.unlink)(filePath)];case 7:_state.sent();_state.label=8;case 8:_iteratorNormalCompletion=true;return[3,6];case 9:return[3,12];case 10:err=_state.sent();_didIteratorError=true;_iteratorError=err;return[3,12];case 11:try{if(!_iteratorNormalCompletion&&_iterator.return!=null){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}return[7];case 12:console.log(_chalk.default.green("".concat(filesToRm.length,"건 삭제되었습니다!")));_state.label=13;case 13:return[2]}})})()}},{key:"runShadowTest",value:function runShadowTest(){return _async_to_generator(function(){var tdb,tdbConn,shadowDatabase,tmpSqlPath,_tdbConn_port,_tdbConn_port1,sdb,_ref,batchNo,applied,e;return _ts_generator(this,function(_state){switch(_state.label){case 0:tdb=(0,_knex.default)(_api.Sonamu.dbConfig.test);tdbConn=_api.Sonamu.dbConfig.test.connection;shadowDatabase=tdbConn.database+"__migration_shadow";tmpSqlPath="/tmp/".concat(shadowDatabase,".sql");console.log(_chalk.default.magenta("".concat(tdbConn.database,"의 데이터 ").concat(tmpSqlPath,"로 덤프")));(0,_child_process.execSync)("mysqldump -h".concat(tdbConn.host," -P").concat((_tdbConn_port=tdbConn.port)!==null&&_tdbConn_port!==void 0?_tdbConn_port:3306," -u").concat(tdbConn.user," -p'").concat(tdbConn.password,"' ").concat(tdbConn.database," --single-transaction --no-create-db --triggers > ").concat(tmpSqlPath,";"));(0,_child_process.execSync)("sed -i'' -e 's/`".concat(tdbConn.database,"`/`").concat(shadowDatabase,"`/g' ").concat(tmpSqlPath,";"));console.log(_chalk.default.magenta("".concat(shadowDatabase," 리셋")));return[4,tdb.raw("DROP DATABASE IF EXISTS `".concat(shadowDatabase,"`;"))];case 1:_state.sent();return[4,tdb.raw("CREATE DATABASE `".concat(shadowDatabase,"`;"))];case 2:_state.sent();console.log(_chalk.default.magenta("".concat(shadowDatabase," 데이터베이스 생성")));(0,_child_process.execSync)("mysql -h".concat(tdbConn.host," -P").concat((_tdbConn_port1=tdbConn.port)!==null&&_tdbConn_port1!==void 0?_tdbConn_port1:3306," -u").concat(tdbConn.user," -p'").concat(tdbConn.password,"' ").concat(shadowDatabase," < ").concat(tmpSqlPath,";"));sdb=(0,_knex.default)(_object_spread_props(_object_spread({},_api.Sonamu.dbConfig.test),{connection:_object_spread_props(_object_spread({},tdbConn),{database:shadowDatabase,password:tdbConn.password})}));_state.label=3;case 3:_state.trys.push([3,6,7,9]);return[4,sdb.migrate.latest()];case 4:_ref=_sliced_to_array.apply(void 0,[_state.sent(),2]),batchNo=_ref[0],applied=_ref[1];console.log(_chalk.default.green("Shadow DB 테스트에 성공했습니다!"),{batchNo:batchNo,applied:applied});console.log(_chalk.default.magenta("".concat(shadowDatabase," 삭제")));return[4,tdb.raw("DROP DATABASE IF EXISTS `".concat(shadowDatabase,"`;"))];case 5:_state.sent();return[2,[{connKey:"shadow",batchNo:batchNo,applied:applied}]];case 6:e=_state.sent();console.error(e);throw new _soexceptions.ServiceUnavailableException("Shadow DB 테스트 진행 중 에러");case 7:return[4,tdb.destroy()];case 8:_state.sent();return[7];case 9:return[2]}})})()}},{key:"resetAll",value:function resetAll(){return _async_to_generator(function(){var answer,rollbackAllResult,migrationsDir;return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,(0,_prompts.default)({type:"confirm",name:"value",message:"모든 DB를 롤백하고 전체 마이그레이션 파일을 삭제하시겠습니까?",initial:false})];case 1:answer=_state.sent();if(answer.value===false){return[2]}console.time(_chalk.default.red("rollback-all:"));return[4,Promise.all(this.targets.apply.map(function(db){return _async_to_generator(function(){return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,db.migrate.forceFreeMigrationsLock()];case 1:_state.sent();return[2,db.migrate.rollback(undefined,true)]}})})()}))];case 2:rollbackAllResult=_state.sent();console.log({rollbackAllResult:rollbackAllResult});console.timeEnd(_chalk.default.red("rollback-all:"));migrationsDir="".concat(_api.Sonamu.apiRootPath,"/src/migrations");console.time(_chalk.default.red("delete migration files"));(0,_child_process.execSync)("rm -f ".concat(migrationsDir,"/*"));(0,_child_process.execSync)("rm -f ".concat(migrationsDir.replace("/src/","/dist/"),"/*"));console.timeEnd(_chalk.default.red("delete migration files"));return[2]}})}).call(this)}},{key:"compareMigrations",value:function compareMigrations(compareDB){return _async_to_generator(function(){var _this,entityIds,entitySetsWithJoinTable,joinTablesWithDup,joinTables,entitySets,codes;return _ts_generator(this,function(_state){switch(_state.label){case 0:_this=this;entityIds=_entitymanager.EntityManager.getAllIds();entitySetsWithJoinTable=entityIds.filter(function(entityId){var entity=_entitymanager.EntityManager.get(entityId);return entity.props.length>0}).map(function(entityId){var entity=_entitymanager.EntityManager.get(entityId);return _this.getMigrationSetFromEntity(entity)});joinTablesWithDup=entitySetsWithJoinTable.map(function(entitySet){return entitySet.joinTables}).flat();joinTables=Object.values(_lodash.default.groupBy(joinTablesWithDup,function(jt){return jt.table})).map(function(tables){if(tables.length===1){return tables[0]}return _object_spread_props(_object_spread({},tables[0]),{indexes:_lodash.default.uniqBy(tables.flatMap(function(t){return t.indexes}),function(index){return[index.type].concat(_to_consumable_array(index.columns.sort())).join("-")})})});entitySets=_to_consumable_array(entitySetsWithJoinTable).concat(_to_consumable_array(joinTables));return[4,Promise.all(entitySets.map(function(entitySet){return _async_to_generator(function(){var dbSet,_,_1,replaceColumnDefaultTo,entityColumns,dbColumns,entityIndexes,dbIndexes,replaceNoActionOnMySQL,entityForeigns,dbForeigns,droppingColumns,alterCodes,isEqualColumns,isEqualIndexes,_2,_3;return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,this.getMigrationSetFromDB(compareDB,entitySet.table)];case 1:dbSet=_state.sent();if(!(dbSet===null))return[3,4];return[4,this.generateCreateCode_ColumnAndIndexes(entitySet.table,entitySet.columns,entitySet.indexes)];case 2:_1=(_=[_state.sent()]).concat;return[4,this.generateCreateCode_Foreign(entitySet.table,entitySet.foreigns)];case 3:return[2,_1.apply(_,[_to_consumable_array.apply(void 0,[_state.sent()])])];case 4:replaceColumnDefaultTo=function(col){if(col.type==="float"&&col.defaultTo&&String(col.defaultTo).includes('"')===false){var _col_scale;col.defaultTo='"'.concat(Number(col.defaultTo).toFixed((_col_scale=col.scale)!==null&&_col_scale!==void 0?_col_scale:2),'"')}if(col.type==="string"&&col.defaultTo===""){col.defaultTo='""'}if(col.type==="boolean"&&col.defaultTo!==undefined){if(col.defaultTo==="0"||col.defaultTo==="false"){col.defaultTo="0"}else if(col.defaultTo==="1"||col.defaultTo==="true"){col.defaultTo="1"}}return col};entityColumns=_lodash.default.sortBy(entitySet.columns,function(a){return a.name}).map(replaceColumnDefaultTo);dbColumns=_lodash.default.sortBy(dbSet.columns,function(a){return a.name}).map(replaceColumnDefaultTo);entityIndexes=_lodash.default.sortBy(entitySet.indexes,function(a){return[a.type].concat(_to_consumable_array(a.columns.sort(function(c1,c2){return c1>c2?1:-1}))).join("-")});dbIndexes=_lodash.default.sortBy(dbSet.indexes,function(a){return[a.type].concat(_to_consumable_array(a.columns.sort(function(c1,c2){return c1>c2?1:-1}))).join("-")});replaceNoActionOnMySQL=function(f){var onDelete=f.onDelete,onUpdate=f.onUpdate;return _object_spread_props(_object_spread({},f),{onUpdate:onUpdate==="RESTRICT"?"NO ACTION":onUpdate,onDelete:onDelete==="RESTRICT"?"NO ACTION":onDelete})};entityForeigns=_lodash.default.sortBy(entitySet.foreigns,function(a){return[a.to].concat(_to_consumable_array(a.columns)).join("-")}).map(function(f){return replaceNoActionOnMySQL(f)});dbForeigns=_lodash.default.sortBy(dbSet.foreigns,function(a){return[a.to].concat(_to_consumable_array(a.columns)).join("-")}).map(function(f){return replaceNoActionOnMySQL(f)});droppingColumns=_lodash.default.differenceBy(dbColumns,entityColumns,function(col){return col.name});alterCodes=[];isEqualColumns=(0,_fastdeepequal.default)(entityColumns,dbColumns);isEqualIndexes=(0,_fastdeepequal.default)(entityIndexes.map(function(index){return _lodash.default.omit(index,["parser"])}),dbIndexes);if(!(!isEqualColumns||!isEqualIndexes))return[3,6];_2=alterCodes.push;return[4,this.generateAlterCode_ColumnAndIndexes(entitySet.table,entityColumns,entityIndexes,dbColumns,dbIndexes,dbSet.foreigns)];case 5:_2.apply(alterCodes,[_state.sent()]);_state.label=6;case 6:if(!((0,_fastdeepequal.default)(entityForeigns,dbForeigns)===false))return[3,8];_3=alterCodes.push;return[4,this.generateAlterCode_Foreigns(entitySet.table,entityForeigns,dbForeigns,droppingColumns)];case 7:_3.apply(alterCodes,[_state.sent()]);_state.label=8;case 8:if(alterCodes.every(function(alterCode){return alterCode===null})){return[2,null]}else{return[2,alterCodes.filter(function(alterCode){return alterCode!==null}).flat()]}return[2]}})}).call(_this)}))];case 1:codes=_state.sent().flat().filter(function(code){return code!==null});codes.sort(function(codeA,codeB){if(codeA.type==="foreign"&&codeB.type=="normal"){return 1}else if(codeA.type==="normal"&&codeB.type==="foreign"){return-1}else{return 0}});return[2,codes]}})}).call(this)}},{key:"getMigrationSetFromDB",value:function getMigrationSetFromDB(compareDB,table){return _async_to_generator(function(){var _this,dbColumns,dbIndexes,dbForeigns,ref,e,columns,dbIndexesGroup,parseIndexType,indexes,foreigns;return _ts_generator(this,function(_state){switch(_state.label){case 0:_this=this;_state.label=1;case 1:_state.trys.push([1,3,,4]);return[4,this.readTable(compareDB,table)];case 2:ref=_sliced_to_array.apply(void 0,[_state.sent(),3]),dbColumns=ref[0],dbIndexes=ref[1],dbForeigns=ref[2],ref;return[3,4];case 3:e=_state.sent();if((0,_types.isKnexError)(e)&&e.code==="ER_NO_SUCH_TABLE"){return[2,null]}console.error(e);return[2,null];case 4:columns=dbColumns.map(function(dbColumn){var dbColType=_this.resolveDBColType(dbColumn.Type,dbColumn.Field);return _object_spread({name:dbColumn.Field,nullable:dbColumn.Null!=="NO"},dbColType,function(){if(dbColumn.Default!==null){return{defaultTo:dbColumn.Default}}return{}}())});dbIndexesGroup=_lodash.default.groupBy(dbIndexes.filter(function(dbIndex){return dbIndex.Key_name!=="PRIMARY"&&!dbForeigns.find(function(dbForeign){return dbForeign.keyName===dbIndex.Key_name})}),function(dbIndex){return dbIndex.Key_name});parseIndexType=function(index){if(index.Index_type==="FULLTEXT"){return"fulltext"}return index.Non_unique===1?"index":"unique"};indexes=Object.keys(dbIndexesGroup).map(function(keyName){var currentIndexes=dbIndexesGroup[keyName];return{type:parseIndexType(currentIndexes[0]),columns:currentIndexes.map(function(currentIndex){return currentIndex.Column_name})}});foreigns=dbForeigns.map(function(dbForeign){return{columns:[dbForeign.from],to:"".concat(dbForeign.referencesTable,".").concat(dbForeign.referencesField),onUpdate:dbForeign.onUpdate,onDelete:dbForeign.onDelete}});return[2,{table:table,columns:columns,indexes:indexes,foreigns:foreigns}]}})}).call(this)}},{key:"resolveDBColType",value:function resolveDBColType(colType,colField){var _colType_split=_sliced_to_array(colType.split(" "),2),rawType=_colType_split[0],unsigned=_colType_split[1];var matched=rawType.match(/\(([0-9]+)\)/);var length;if(matched!==null&&matched[1]){rawType=rawType.replace(/\(([0-9]+)\)/,"");length=parseInt(matched[1])}if(rawType==="char"&&colField==="uuid"){return{type:"uuid"}}switch(rawType){case"int":return{type:"integer",unsigned:unsigned==="unsigned"};case"varchar":return _object_spread({type:"string"},length!==undefined&&{length:length});case"text":case"mediumtext":case"longtext":case"timestamp":case"json":case"date":case"time":return{type:rawType};case"datetime":return{type:"datetime"};case"tinyint":return{type:"boolean"};default:if(rawType.startsWith("decimal")){var _rawType_match;var _ref=_sliced_to_array((_rawType_match=rawType.match(/decimal\(([0-9]+),([0-9]+)\)/))!==null&&_rawType_match!==void 0?_rawType_match:[],3),precision=_ref[1],scale=_ref[2];return _object_spread({type:"decimal",precision:parseInt(precision),scale:parseInt(scale)},unsigned==="unsigned"&&{unsigned:true})}else if(rawType.startsWith("float")){var _rawType_match1;var _ref1=_sliced_to_array((_rawType_match1=rawType.match(/float\(([0-9]+),([0-9]+)\)/))!==null&&_rawType_match1!==void 0?_rawType_match1:[],3),precision1=_ref1[1],scale1=_ref1[2];return _object_spread({type:"float",precision:parseInt(precision1),scale:parseInt(scale1)},unsigned==="unsigned"&&{unsigned:true})}throw new Error("resolve 불가능한 DB컬럼 타입 ".concat(colType," ").concat(rawType))}}},{key:"readTable",value:function readTable(compareDB,tableName){return _async_to_generator(function(){var _ref,_cols,cols,_ref1,indexes,_ref2,_ref_,row,ddl,matched,foreignKeys,e;return _ts_generator(this,function(_state){switch(_state.label){case 0:_state.trys.push([0,4,,5]);return[4,compareDB.raw("SHOW FIELDS FROM ".concat(tableName))];case 1:_ref=_sliced_to_array.apply(void 0,[_state.sent(),1]),_cols=_ref[0];cols=_cols.map(function(col){return _object_spread({},col,col.Default!==null&&{Default:col.Default.replace(/[0-9]+/g,"").length>0&&col.Extra!=="DEFAULT_GENERATED"?'"'.concat(col.Default,'"'):col.Default})});return[4,compareDB.raw("SHOW INDEX FROM ".concat(tableName))];case 2:_ref1=_sliced_to_array.apply(void 0,[_state.sent(),1]),indexes=_ref1[0];return[4,compareDB.raw("SHOW CREATE TABLE ".concat(tableName))];case 3:_ref2=_sliced_to_array.apply(void 0,[_state.sent(),1]),_ref_=_sliced_to_array(_ref2[0],1),row=_ref_[0];ddl=row["Create Table"];matched=ddl.match(/CONSTRAINT .+/g);foreignKeys=(matched!==null&&matched!==void 0?matched:[]).map(function(line){var _replace_match_,_replace_match;var matched=line.match(/CONSTRAINT `(.+)` FOREIGN KEY \(`(.+)`\) REFERENCES `(.+)` \(`(.+)`\)( ON [A-Z ]+)*/);if(!matched){throw new Error("인식할 수 없는 FOREIGN KEY CONSTRAINT ".concat(line))}var _matched=_sliced_to_array(matched,6),keyName=_matched[1],from=_matched[2],referencesTable=_matched[3],referencesField=_matched[4],onClause=_matched[5];var _match;var _ref=_sliced_to_array((_match=(onClause!==null&&onClause!==void 0?onClause:"").match(/ON UPDATE ([A-Z ]+)$/))!==null&&_match!==void 0?_match:[],2),onUpdateFull=_ref[0],_onUpdate=_ref[1];var onUpdate=_onUpdate!==null&&_onUpdate!==void 0?_onUpdate:"NO ACTION";var _replace_match__trim;var onDelete=(_replace_match__trim=(_replace_match=(onClause!==null&&onClause!==void 0?onClause:"").replace(onUpdateFull!==null&&onUpdateFull!==void 0?onUpdateFull:"","").match(/ON DELETE ([A-Z ]+)/))===null||_replace_match===void 0?void 0:(_replace_match_=_replace_match[1])===null||_replace_match_===void 0?void 0:_replace_match_.trim())!==null&&_replace_match__trim!==void 0?_replace_match__trim:"NO ACTION";return{keyName:keyName,from:from,referencesTable:referencesTable,referencesField:referencesField,onDelete:onDelete,onUpdate:onUpdate}});return[2,[cols,indexes,foreignKeys]];case 4:e=_state.sent();throw e;case 5:return[2]}})})()}},{key:"getMigrationSetFromEntity",value:function getMigrationSetFromEntity(entity){var migrationSet=entity.props.reduce(function(r,prop){if((0,_types.isVirtualProp)(prop)){return r}if((0,_types.isHasManyRelationProp)(prop)){return r}if(!(0,_types.isRelationProp)(prop)){var type;if((0,_types.isTextProp)(prop)){type=prop.textType}else if((0,_types.isEnumProp)(prop)){type="string"}else{type=prop.type}var _prop_precision,_prop_scale;var column=_object_spread(_object_spread_props(_object_spread({name:prop.name,type:type},(0,_types.isIntegerProp)(prop)&&{unsigned:prop.unsigned===true},((0,_types.isStringProp)(prop)||(0,_types.isEnumProp)(prop))&&{length:prop.length}),{nullable:prop.nullable===true}),function(){if(prop.dbDefault!==undefined){return{defaultTo:prop.dbDefault}}return{}}(),((0,_types.isDecimalProp)(prop)||(0,_types.isFloatProp)(prop))&&{precision:(_prop_precision=prop.precision)!==null&&_prop_precision!==void 0?_prop_precision:8,scale:(_prop_scale=prop.scale)!==null&&_prop_scale!==void 0?_prop_scale:2});r.columns.push(column)}if((0,_types.isManyToManyRelationProp)(prop)){var relMd=_entitymanager.EntityManager.get(prop.with);var table1=entity.table;var table2=relMd.table;var join={from:"".concat(entity.table,".id"),through:{from:"".concat(prop.joinTable,".").concat(_inflection.default.singularize(table1),"_id"),to:"".concat(prop.joinTable,".").concat(_inflection.default.singularize(table2),"_id"),onUpdate:prop.onUpdate,onDelete:prop.onDelete},to:"".concat(relMd.table,".id")};var through=join.through;var fields=[through.from,through.to];r.joinTables.push({table:through.from.split(".")[0],indexes:[{type:"unique",columns:["uuid"]}].concat(_to_consumable_array(entity.indexes.filter(function(index){return index.columns.find(function(col){return col.includes(prop.joinTable+".")})}).map(function(index){return _object_spread_props(_object_spread({},index),{columns:index.columns.map(function(col){return col.replace(prop.joinTable+".","")})})}))),columns:[{name:"id",type:"integer",nullable:false,unsigned:true}].concat(_to_consumable_array(fields.map(function(field){return{name:field.split(".")[1],type:"integer",nullable:false,unsigned:true}})),[{name:"uuid",nullable:true,type:"uuid"}]),foreigns:fields.map(function(field){var col=field.split(".")[1];var to=function(){if(_inflection.default.singularize(join.to.split(".")[0])+"_id"===col){return join.to}else{return join.from}}();return{columns:[col],to:to,onUpdate:through.onUpdate,onDelete:through.onDelete}})});return r}else if((0,_types.isBelongsToOneRelationProp)(prop)||(0,_types.isOneToOneRelationProp)(prop)&&prop.hasJoinColumn){var idColumnName=prop.name+"_id";var _prop_nullable;r.columns.push({name:idColumnName,type:"integer",unsigned:true,nullable:(_prop_nullable=prop.nullable)!==null&&_prop_nullable!==void 0?_prop_nullable:false});var _prop_useConstraint;if(((_prop_useConstraint=prop.useConstraint)!==null&&_prop_useConstraint!==void 0?_prop_useConstraint:true)===true){var _prop_onUpdate,_prop_onDelete;r.foreigns.push({columns:[idColumnName],to:"".concat(_inflection.default.underscore(_inflection.default.pluralize(prop.with)).toLowerCase(),".id"),onUpdate:(_prop_onUpdate=prop.onUpdate)!==null&&_prop_onUpdate!==void 0?_prop_onUpdate:"RESTRICT",onDelete:(_prop_onDelete=prop.onDelete)!==null&&_prop_onDelete!==void 0?_prop_onDelete:"RESTRICT"})}}return r},{table:entity.table,columns:[],indexes:[],foreigns:[],joinTables:[]});migrationSet.indexes=entity.indexes.filter(function(index){return index.columns.find(function(col){return col.includes(".")===false})});migrationSet.columns=migrationSet.columns.concat({name:"uuid",nullable:true,type:"uuid"});migrationSet.indexes=migrationSet.indexes.concat({type:"unique",columns:["uuid"]});return migrationSet}},{key:"genColumnDefinitions",value:function genColumnDefinitions(columns){return columns.map(function(column){var chains=[];if(column.name==="id"){return"table.increments().primary();"}if(column.type==="float"||column.type==="decimal"){chains.push("".concat(column.type,"('").concat(column.name,"', ").concat(column.precision,", ").concat(column.scale,")"))}else{var columnType=column.type;var extraType;if(columnType.includes("text")&&columnType!=="text"){extraType=columnType;columnType="text"}chains.push("".concat(column.type,"('").concat(column.name,"'").concat(column.length?", ".concat(column.length):"").concat(extraType?", '".concat(extraType,"'"):"",")"))}if(column.unsigned){chains.push("unsigned()")}chains.push(column.nullable?"nullable()":"notNullable()");if(column.defaultTo!==undefined){if(typeof column.defaultTo==="string"&&column.defaultTo.startsWith('"')){chains.push("defaultTo(".concat(column.defaultTo,")"))}else{chains.push("defaultTo(knex.raw('".concat(column.defaultTo,"'))"))}}return"table.".concat(chains.join("."),";")})}},{key:"genIndexDefinitions",value:function genIndexDefinitions(indexes){if(indexes.length===0){return[]}var methodMap={index:"index",fulltext:"index",unique:"unique"};var lines=_lodash.default.uniq(indexes.reduce(function(r,index){r.push("table.".concat(methodMap[index.type],"([").concat(index.columns.map(function(col){return"'".concat(col,"'")}).join(","),"], ").concat(index.type==="fulltext"?"undefined, { indexType: 'FULLTEXT' }":"",")"));return r},[]));return lines}},{key:"genForeignDefinitions",value:function genForeignDefinitions(table,foreigns){return foreigns.reduce(function(r,foreign){var columnsStringQuote=foreign.columns.map(function(col){return"'".concat(col.replace("".concat(table,"."),""),"'")}).join(",");r.up.push("table.foreign('".concat(foreign.columns.join(","),"')\n .references('").concat(foreign.to,"')\n .onUpdate('").concat(foreign.onUpdate,"')\n .onDelete('").concat(foreign.onDelete,"')"));r.down.push("table.dropForeign([".concat(columnsStringQuote,"])"));return r},{up:[],down:[]})}},{key:"generateCreateCode_ColumnAndIndexes",value:function generateCreateCode_ColumnAndIndexes(table,columns,indexes){return _async_to_generator(function(){var _this,__partition,ngramIndexes,standardIndexes,lines,_tmp;return _ts_generator(this,function(_state){switch(_state.label){case 0:_this=this;__partition=_sliced_to_array(_lodash.default.partition(indexes,function(i){return i.type==="fulltext"&&i.parser==="ngram"}),2),ngramIndexes=__partition[0],standardIndexes=__partition[1];lines=['import { Knex } from "knex";',"","export async function up(knex: Knex): Promise<void> {",'await knex.schema.createTable("'.concat(table,'", (table) => {'),"// columns"].concat(_to_consumable_array(this.genColumnDefinitions(columns)),["","// indexes"],_to_consumable_array(standardIndexes.map(function(index){return _this.genIndexDefinition(index,table)})),["});"],_to_consumable_array(ngramIndexes.map(function(index){return _this.genIndexDefinition(index,table)})),["}","","export async function down(knex: Knex): Promise<void> {",' return knex.schema.dropTable("'.concat(table,'");'),"}"]);_tmp={table:table,type:"normal",title:"create__".concat(table)};return[4,_prettier.default.format(lines.join("\n"),{parser:"typescript"})];case 1:return[2,(_tmp.formatted=_state.sent(),_tmp)]}})}).call(this)}},{key:"generateCreateCode_Foreign",value:function generateCreateCode_Foreign(table,foreigns){return _async_to_generator(function(){var _this_genForeignDefinitions,up,down,lines,foreignKeysString,_tmp;return _ts_generator(this,function(_state){switch(_state.label){case 0:if(foreigns.length===0){return[2,[]]}_this_genForeignDefinitions=this.genForeignDefinitions(table,foreigns),up=_this_genForeignDefinitions.up,down=_this_genForeignDefinitions.down;if(up.length===0&&down.length===0){console.log("fk 가 뭔가 다릅니다");return[2,[]]}lines=['import { Knex } from "knex";',"","export async function up(knex: Knex): Promise<void> {",'return knex.schema.alterTable("'.concat(table,'", (table) => {'),"// create fk"].concat(_to_consumable_array(up),["});","}","","export async function down(knex: Knex): Promise<void> {",'return knex.schema.alterTable("'.concat(table,'", (table) => {'),"// drop fk"],_to_consumable_array(down),["});","}"]);foreignKeysString=foreigns.map(function(foreign){return foreign.columns.join("_")}).join("_");_tmp={table:table,type:"foreign",title:"foreign__".concat(table,"__").concat(foreignKeysString)};return[4,_prettier.default.format(lines.join("\n"),{parser:"typescript"})];case 1:return[2,[(_tmp.formatted=_state.sent(),_tmp)]]}})}).call(this)}},{key:"showMigrationSet",value:function showMigrationSet(which,migrationSet){var columns=migrationSet.columns,indexes=migrationSet.indexes,foreigns=migrationSet.foreigns;var styledChalk=which==="Entity"?_chalk.default.bgGreen.black:_chalk.default.bgBlue.black;console.log(styledChalk("".concat(which," ").concat(migrationSet.table," Columns ")));console.table(columns.map(function(column){return _object_spread({},_lodash.default.pick(column,["name","type","nullable","unsigned","length","defaultTo","precision","scale"]))}),["name","type","nullable","unsigned","length","defaultTo","precision","scale"]);if(indexes.length>0){console.log(styledChalk("".concat(which," ").concat(migrationSet.table," Indexes ")));console.table(indexes.map(function(index){return _object_spread({},_lodash.default.pick(index,["type","columns","name"]))}))}if(foreigns.length>0){console.log(_chalk.default.bgMagenta.black("".concat(which," ").concat(migrationSet.table," Foreigns ")));console.table(foreigns.map(function(foreign){return _object_spread({},_lodash.default.pick(foreign,["columns","to","onUpdate","onDelete"]))}))}}},{key:"generateAlterCode_ColumnAndIndexes",value:function generateAlterCode_ColumnAndIndexes(table,entityColumns,entityIndexes,dbColumns,dbIndexes,dbForeigns){return _async_to_generator(function(){var _this,alterColumnsTo,alterColumnLinesTo,alterIndexesTo,__partition,ngramIndexes,standardIndexes,indexNeedsToDrop,lines,formatted,title;return _ts_generator(this,function(_state){switch(_state.label){case 0:_this=this;alterColumnsTo=this.getAlterColumnsTo(entityColumns,dbColumns);alterColumnLinesTo=this.getAlterColumnLinesTo(alterColumnsTo,entityColumns,table,dbForeigns);alterIndexesTo=this.getAlterIndexesTo(entityIndexes,dbIndexes);__partition=_sliced_to_array(_lodash.default.partition(alterIndexesTo.add,function(i){return i.type==="fulltext"&&i.parser==="ngram"}),2),ngramIndexes=__partition[0],standardIndexes=__partition[1];indexNeedsToDrop=alterIndexesTo.drop.filter(function(index){return index.columns.every(function(colName){return alterColumnsTo.drop.map(function(col){return col.name}).includes(colName)})===false});lines=['import { Knex } from "knex";',"","export async function up(knex: Knex): Promise<void> {",'await knex.schema.alterTable("'.concat(table,'", (table) => {')].concat(_to_consumable_array(alterColumnsTo.add.length>0?alterColumnLinesTo.add.up:[]),_to_consumable_array(alterColumnsTo.drop.length>0?alterColumnLinesTo.drop.up:[]),_to_consumable_array(alterColumnsTo.alter.length>0?alterColumnLinesTo.alter.up:[]),_to_consumable_array(standardIndexes.map(function(index){return _this.genIndexDefinition(index,table)})),_to_consumable_array(indexNeedsToDrop.map(this.genIndexDropDefinition)),["});"],_to_consumable_array(ngramIndexes.map(function(index){return _this.genIndexDefinition(index,table)})),["}","","export async function down(knex: Knex): Promise<void> {",'return knex.schema.alterTable("'.concat(table,'", (table) => {')],_to_consumable_array(alterColumnsTo.add.length>0?alterColumnLinesTo.add.down:[]),_to_consumable_array(alterColumnsTo.drop.length>0?alterColumnLinesTo.drop.down:[]),_to_consumable_array(alterColumnsTo.alter.length>0?alterColumnLinesTo.alter.down:[]),_to_consumable_array(alterIndexesTo.add.filter(function(index){return index.columns.every(function(colName){return alterColumnsTo.add.map(function(col){return col.name}).includes(colName)})===false}).map(this.genIndexDropDefinition)),_to_consumable_array(indexNeedsToDrop.map(function(index){return _this.genIndexDefinition(index,table)})),["});","}"]);return[4,_prettier.default.format(lines.join("\n"),{parser:"typescript"})];case 1:formatted=_state.sent();title=["alter",table].concat(_to_consumable_array(["add","drop","alter"].map(function(action){var len=alterColumnsTo[action].length;if(len>0){return action+len}return null}).filter(function(part){return part!==null}))).join("_");return[2,[{table:table,title:title,formatted:formatted,type:"normal"}]]}})}).call(this)}},{key:"getAlterColumnsTo",value:function getAlterColumnsTo(entityColumns,dbColumns){var columnsTo={add:[],drop:[],alter:[]};var extraColumns={db:_lodash.default.differenceBy(dbColumns,entityColumns,function(col){return col.name}),entity:_lodash.default.differenceBy(entityColumns,dbColumns,function(col){return col.name})};if(extraColumns.entity.length>0){columnsTo.add=columnsTo.add.concat(extraColumns.entity)}if(extraColumns.db.length>0){columnsTo.drop=columnsTo.drop.concat(extraColumns.db)}var sameDbColumns=_lodash.default.intersectionBy(dbColumns,entityColumns,function(col){return col.name});var sameMdColumns=_lodash.default.intersectionBy(entityColumns,dbColumns,function(col){return col.name});columnsTo.alter=_lodash.default.differenceWith(sameDbColumns,sameMdColumns,function(a,b){return(0,_fastdeepequal.default)(a,b)});return columnsTo}},{key:"getAlterColumnLinesTo",value:function getAlterColumnLinesTo(columnsTo,entityColumns,table,dbForeigns){var _this=this;var linesTo={add:{up:[],down:[]},drop:{up:[],down:[]},alter:{up:[],down:[]}};linesTo.add={up:["// add"].concat(_to_consumable_array(this.genColumnDefinitions(columnsTo.add))),down:["// rollback - add","table.dropColumns(".concat(columnsTo.add.map(function(col){return"'".concat(col.name,"'")}).join(", "),")")]};var dropColumnNames=columnsTo.drop.map(function(col){return col.name});var fkToDropBeforeColumn=dbForeigns.filter(function(fk){return fk.columns.some(function(col){return dropColumnNames.includes(col)})});var dropFkLines=fkToDropBeforeColumn.map(function(fk){var columnsStringQuote=fk.columns.map(function(col){return"'".concat(col,"'")}).join(",");return"table.dropForeign([".concat(columnsStringQuote,"])")});var restoreFkLines=this.genForeignDefinitions(table,fkToDropBeforeColumn).up;linesTo.drop={up:_to_consumable_array(dropFkLines.length>0?["// drop foreign keys on columns to be dropped"].concat(_to_consumable_array(dropFkLines)):[]).concat(["// drop columns","table.dropColumns(".concat(columnsTo.drop.map(function(col){return"'".concat(col.name,"'")}).join(", "),")")]),down:["// rollback - drop columns"].concat(_to_consumable_array(this.genColumnDefinitions(columnsTo.drop)),_to_consumable_array(restoreFkLines.length>0?["// restore foreign keys"].concat(_to_consumable_array(restoreFkLines)):[]))};linesTo.alter=columnsTo.alter.reduce(function(r,dbColumn){var entityColumn=entityColumns.find(function(col){return col.name==dbColumn.name});if(entityColumn===undefined){return r}var columnDiffUp=_lodash.default.difference(_this.genColumnDefinitions([entityColumn]),_this.genColumnDefinitions([dbColumn]));var columnDiffDown=_lodash.default.difference(_this.genColumnDefinitions([dbColumn]),_this.genColumnDefinitions([entityColumn]));if(columnDiffUp.length>0){r.up=_to_consumable_array(r.up).concat(["// alter column"],_to_consumable_array(columnDiffUp.map(function(l){return l.replace(";","")+".alter();"})));r.down=_to_consumable_array(r.down).concat(["// rollback - alter column"],_to_consumable_array(columnDiffDown.map(function(l){return l.replace(";","")+".alter();"})))}return r},{up:[],down:[]});return linesTo}},{key:"getAlterIndexesTo",value:function getAlterIndexesTo(entityIndexes,dbIndexes){var indexesTo={add:[],drop:[]};var extraIndexes={db:_lodash.default.differenceBy(dbIndexes,entityIndexes,function(col){return[col.type,col.columns.join("-")].join("//")}),entity:_lodash.default.differenceBy(entityIndexes,dbIndexes,function(col){return[col.type,col.columns.join("-")].join("//")})};if(extraIndexes.entity.length>0){indexesTo.add=indexesTo.add.concat(extraIndexes.entity)}if(extraIndexes.db.length>0){indexesTo.drop=indexesTo.drop.concat(extraIndexes.db)}return indexesTo}},{key:"genIndexDefinition",value:function genIndexDefinition(index,table){var methodMap={index:"index",fulltext:"index",unique:"unique"};if(index.type==="fulltext"&&index.parser==="ngram"){var indexName="".concat(table,"_").concat(index.columns.join("_"),"_index");return"await knex.raw(`ALTER TABLE ".concat(table," ADD FULLTEXT INDEX ").concat(indexName," (").concat(index.columns.join(", "),") WITH PARSER ngram`);")}return"table.".concat(methodMap[index.type],"([").concat(index.columns.map(function(col){return"'".concat(col,"'")}).join(","),"]").concat(index.type==="fulltext"?", undefined, 'FULLTEXT'":"",")")}},{key:"genIndexDropDefinition",value:function genIndexDropDefinition(index){var methodMap={index:"Index",fulltext:"Index",unique:"Unique"};return"table.drop".concat(methodMap[index.type],"([").concat(index.columns.map(function(columnName){return"'".concat(columnName,"'")}).join(","),"])")}},{key:"generateAlterCode_Foreigns",value:function generateAlterCode_Foreigns(_0,_1,_2){return _async_to_generator(function(table,entityForeigns,dbForeigns){var droppingColumns,getKey,droppingColumnNames,fkTo,linesTo,hasLines,lines,formatted,title;var _arguments=arguments;return _ts_generator(this,function(_state){switch(_state.label){case 0:droppingColumns=_arguments.length>3&&_arguments[3]!==void 0?_arguments[3]:[];getKey=function(mf){return[mf.columns.join("-"),mf.to].join("///")};droppingColumnNames=droppingColumns.map(function(col){return col.name});fkTo=entityForeigns.reduce(function(result,entityF){var matchingDbF=dbForeigns.find(function(dbF){return getKey(entityF)===getKey(dbF)});if(!matchingDbF){result.add.push(entityF);return result}if((0,_fastdeepequal.default)(entityF,matchingDbF)===false){result.alterSrc.push(matchingDbF);result.alterDst.push(entityF);return result}return result},{add:[],drop:[],alterSrc:[],alterDst:[]});dbForeigns.forEach(function(dbF){var matchingEntityF=entityForeigns.find(function(entityF){return getKey(entityF)===getKey(dbF)});if(!matchingEntityF){var isColumnDropping=dbF.columns.some(function(col){return droppingColumnNames.includes(col)});if(!isColumnDropping){fkTo.drop.push(dbF)}}});linesTo={add:this.genForeignDefinitions(table,fkTo.add),drop:this.genForeignDefinitions(table,fkTo.drop),alterSrc:this.genForeignDefinitions(table,fkTo.alterSrc),alterDst:this.genForeignDefinitions(table,fkTo.alterDst)};hasLines=Object.values(linesTo).some(function(l){return l.up.length>0||l.down.length>0});if(!hasLines){return[2,[]]}lines=['import { Knex } from "knex";',"","export async function up(knex: Knex): Promise<void> {",'return knex.schema.alterTable("'.concat(table,'", (table) => {')].concat(_to_consumable_array(linesTo.drop.down),_to_consumable_array(linesTo.add.up),_to_consumable_array(linesTo.alterSrc.down),_to_consumable_array(linesTo.alterDst.up),["})","}","","export async function down(knex: Knex): Promise<void> {",'return knex.schema.alterTable("'.concat(table,'", (table) => {')],_to_consumable_array(linesTo.add.down),_to_consumable_array(linesTo.alterDst.down),_to_consumable_array(linesTo.alterSrc.up),_to_consumable_array(linesTo.drop.up),["})","}"]);return[4,_prettier.default.format(lines.join("\n"),{parser:"typescript"})];case 1:formatted=_state.sent();title=["alter",table,"foreigns"].join("_");return[2,[{table:table,title:title,formatted:formatted,type:"normal"}]]}})}).apply(this,arguments)}},{key:"destroy",value:function destroy(){return _async_to_generator(function(){return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,Promise.all(this.targets.apply.map(function(db){return db.destroy()}))];case 1:_state.sent();return[2]}})}).call(this)}}]);return Migrator}();
|
|
2
|
-
//# sourceMappingURL=migrator.js.map
|