@asapjs/sequelize 0.3.5 → 0.3.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.
Files changed (145) hide show
  1. package/dist/dbml/index.d.ts +5 -0
  2. package/dist/dbml/index.d.ts.map +1 -0
  3. package/dist/dbml/index.js +127 -0
  4. package/dist/dbml/index.js.map +1 -0
  5. package/dist/dto/ExtendableDto.d.ts +27 -0
  6. package/dist/dto/ExtendableDto.d.ts.map +1 -0
  7. package/dist/dto/ExtendableDto.js +145 -0
  8. package/dist/dto/ExtendableDto.js.map +1 -0
  9. package/dist/dto/PaginationQueryDto.d.ts +6 -0
  10. package/dist/dto/PaginationQueryDto.d.ts.map +1 -0
  11. package/dist/dto/PaginationQueryDto.js +25 -0
  12. package/dist/dto/PaginationQueryDto.js.map +1 -0
  13. package/dist/dto/index.d.ts +10 -0
  14. package/dist/dto/index.d.ts.map +1 -0
  15. package/dist/dto/index.js +19 -0
  16. package/dist/dto/index.js.map +1 -0
  17. package/dist/index.d.ts +8 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +26 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/repository/index.d.ts +24 -0
  22. package/dist/repository/index.d.ts.map +1 -0
  23. package/dist/repository/index.js +73 -0
  24. package/dist/repository/index.js.map +1 -0
  25. package/dist/sequelize/index.d.ts +11 -0
  26. package/dist/sequelize/index.d.ts.map +1 -0
  27. package/dist/sequelize/index.js +109 -0
  28. package/dist/sequelize/index.js.map +1 -0
  29. package/dist/table/index.d.ts +4 -0
  30. package/dist/table/index.d.ts.map +1 -0
  31. package/dist/table/index.js +42 -0
  32. package/dist/table/index.js.map +1 -0
  33. package/dist/types/array.d.ts +7 -0
  34. package/dist/types/array.d.ts.map +1 -0
  35. package/dist/types/array.js +58 -0
  36. package/dist/types/array.js.map +1 -0
  37. package/dist/types/base64.d.ts +10 -0
  38. package/dist/types/base64.d.ts.map +1 -0
  39. package/dist/types/base64.js +20 -0
  40. package/dist/types/base64.js.map +1 -0
  41. package/dist/types/belongsto.d.ts +6 -0
  42. package/dist/types/belongsto.d.ts.map +1 -0
  43. package/dist/types/belongsto.js +27 -0
  44. package/dist/types/belongsto.js.map +1 -0
  45. package/dist/types/binary.d.ts +10 -0
  46. package/dist/types/binary.d.ts.map +1 -0
  47. package/dist/types/binary.js +20 -0
  48. package/dist/types/binary.js.map +1 -0
  49. package/dist/types/boolean.d.ts +9 -0
  50. package/dist/types/boolean.d.ts.map +1 -0
  51. package/dist/types/boolean.js +27 -0
  52. package/dist/types/boolean.js.map +1 -0
  53. package/dist/types/dateonly.d.ts +8 -0
  54. package/dist/types/dateonly.d.ts.map +1 -0
  55. package/dist/types/dateonly.js +20 -0
  56. package/dist/types/dateonly.js.map +1 -0
  57. package/dist/types/datetime.d.ts +8 -0
  58. package/dist/types/datetime.d.ts.map +1 -0
  59. package/dist/types/datetime.js +20 -0
  60. package/dist/types/datetime.js.map +1 -0
  61. package/dist/types/decemal.d.ts +11 -0
  62. package/dist/types/decemal.d.ts.map +1 -0
  63. package/dist/types/decemal.js +30 -0
  64. package/dist/types/decemal.js.map +1 -0
  65. package/dist/types/double.d.ts +11 -0
  66. package/dist/types/double.d.ts.map +1 -0
  67. package/dist/types/double.js +27 -0
  68. package/dist/types/double.js.map +1 -0
  69. package/dist/types/dto.d.ts +10 -0
  70. package/dist/types/dto.d.ts.map +1 -0
  71. package/dist/types/dto.js +23 -0
  72. package/dist/types/dto.js.map +1 -0
  73. package/dist/types/enum.d.ts +9 -0
  74. package/dist/types/enum.d.ts.map +1 -0
  75. package/dist/types/enum.js +26 -0
  76. package/dist/types/enum.js.map +1 -0
  77. package/dist/types/float.d.ts +11 -0
  78. package/dist/types/float.d.ts.map +1 -0
  79. package/dist/types/float.js +27 -0
  80. package/dist/types/float.js.map +1 -0
  81. package/dist/types/foreignkey.d.ts +6 -0
  82. package/dist/types/foreignkey.d.ts.map +1 -0
  83. package/dist/types/foreignkey.js +33 -0
  84. package/dist/types/foreignkey.js.map +1 -0
  85. package/dist/types/generators/toSequelizeGenerator.d.ts +3 -0
  86. package/dist/types/generators/toSequelizeGenerator.d.ts.map +1 -0
  87. package/dist/types/generators/toSequelizeGenerator.js +6 -0
  88. package/dist/types/generators/toSequelizeGenerator.js.map +1 -0
  89. package/dist/types/generators/toSwaggerGenerator.d.ts +10 -0
  90. package/dist/types/generators/toSwaggerGenerator.d.ts.map +1 -0
  91. package/dist/types/generators/toSwaggerGenerator.js +6 -0
  92. package/dist/types/generators/toSwaggerGenerator.js.map +1 -0
  93. package/dist/types/generators/typeGenerator.d.ts +15 -0
  94. package/dist/types/generators/typeGenerator.d.ts.map +1 -0
  95. package/dist/types/generators/typeGenerator.js +38 -0
  96. package/dist/types/generators/typeGenerator.js.map +1 -0
  97. package/dist/types/index.d.ts +26 -0
  98. package/dist/types/index.d.ts.map +1 -0
  99. package/dist/types/index.js +53 -0
  100. package/dist/types/index.js.map +1 -0
  101. package/dist/types/int.d.ts +12 -0
  102. package/dist/types/int.d.ts.map +1 -0
  103. package/dist/types/int.js +27 -0
  104. package/dist/types/int.js.map +1 -0
  105. package/dist/types/json.d.ts +9 -0
  106. package/dist/types/json.d.ts.map +1 -0
  107. package/dist/types/json.js +31 -0
  108. package/dist/types/json.js.map +1 -0
  109. package/dist/types/long.d.ts +12 -0
  110. package/dist/types/long.d.ts.map +1 -0
  111. package/dist/types/long.js +27 -0
  112. package/dist/types/long.js.map +1 -0
  113. package/dist/types/paging.d.ts +6 -0
  114. package/dist/types/paging.d.ts.map +1 -0
  115. package/dist/types/paging.js +81 -0
  116. package/dist/types/paging.js.map +1 -0
  117. package/dist/types/password.d.ts +6 -0
  118. package/dist/types/password.d.ts.map +1 -0
  119. package/dist/types/password.js +20 -0
  120. package/dist/types/password.js.map +1 -0
  121. package/dist/types/query.d.ts +20 -0
  122. package/dist/types/query.d.ts.map +1 -0
  123. package/dist/types/query.js +32 -0
  124. package/dist/types/query.js.map +1 -0
  125. package/dist/types/string.d.ts +11 -0
  126. package/dist/types/string.d.ts.map +1 -0
  127. package/dist/types/string.js +26 -0
  128. package/dist/types/string.js.map +1 -0
  129. package/dist/types/text.d.ts +9 -0
  130. package/dist/types/text.d.ts.map +1 -0
  131. package/dist/types/text.js +16 -0
  132. package/dist/types/text.js.map +1 -0
  133. package/dist/types/type.d.ts +7 -0
  134. package/dist/types/type.d.ts.map +1 -0
  135. package/dist/types/type.js +3 -0
  136. package/dist/types/type.js.map +1 -0
  137. package/dist/utils/getUserIdInQuery.d.ts +2 -0
  138. package/dist/utils/getUserIdInQuery.d.ts.map +1 -0
  139. package/dist/utils/getUserIdInQuery.js +6 -0
  140. package/dist/utils/getUserIdInQuery.js.map +1 -0
  141. package/dist/utils/isClass.d.ts +3 -0
  142. package/dist/utils/isClass.d.ts.map +1 -0
  143. package/dist/utils/isClass.js +4 -0
  144. package/dist/utils/isClass.js.map +1 -0
  145. package/package.json +2 -2
@@ -0,0 +1,5 @@
1
+ import { TypeIsData } from '../types';
2
+ export declare const addTable: (name: string, className: string, data: {
3
+ [k: string]: TypeIsData;
4
+ }) => Promise<void>, getDBMLData: () => Promise<any>;
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dbml/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAuJtC,eAAO,MAAQ,QAAQ,SA/GU,MAAM,aAAa,MAAM;;qBA+GjC,WAAW,oBAA0B,CAAC"}
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ var _a;
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.getDBMLData = exports.addTable = void 0;
17
+ /* eslint-disable no-nested-ternary */
18
+ const core_1 = require("@asapjs/core");
19
+ const promises_1 = __importDefault(require("fs/promises"));
20
+ const idColumnData = `id int PK`;
21
+ class DBMLApplication {
22
+ constructor() {
23
+ this.tableNames = {};
24
+ this.tables = [];
25
+ this.relations = [];
26
+ this.enums = [];
27
+ this.generatedDBMLData = null;
28
+ this.addTable = (name, className, data) => __awaiter(this, void 0, void 0, function* () {
29
+ this.tableNames = Object.assign(Object.assign({}, this.tableNames), { [className]: name });
30
+ // console.log(this.tableNames);
31
+ const tableInfo = { name, columns: [], data };
32
+ this.tables.push(tableInfo);
33
+ });
34
+ this.generateProjectData = () => {
35
+ var _a;
36
+ const config = (0, core_1.getConfig)();
37
+ const projectName = config === null || config === void 0 ? void 0 : config.projectName;
38
+ const databaseType = ((_a = config === null || config === void 0 ? void 0 : config.db) === null || _a === void 0 ? void 0 : _a.dialect) || 'MySQL';
39
+ return `Project ${projectName} {
40
+ database_type: '${databaseType}'
41
+ Note: '''
42
+ # ${projectName}-erd
43
+ '''
44
+ }`;
45
+ };
46
+ this.generateEnumColumn = (columnData) => {
47
+ return `${columnData.name} ${columnData.type} ${columnData.note ? `[note: '${columnData.note}']` : ''}`;
48
+ };
49
+ this.generateGeneralColumn = (columnData) => {
50
+ return `${columnData.name} ${columnData.type} ${columnData.note ? `[note: '${columnData.note}']` : ''}`;
51
+ };
52
+ this.generateTableData = (tableInfo) => {
53
+ const columnDatas = tableInfo.columns.map((v) => {
54
+ if (v.type === 'enum') {
55
+ return this.generateEnumColumn(v);
56
+ }
57
+ else {
58
+ return this.generateGeneralColumn(v);
59
+ }
60
+ });
61
+ return `Table ${tableInfo.name} {
62
+ ${[idColumnData, ...columnDatas].join('\n ')}
63
+ }`;
64
+ };
65
+ this.generateEnumData = (enumData) => {
66
+ return `Enum ${enumData.name} {
67
+ ${enumData.values.join('\n ')}
68
+ }`;
69
+ };
70
+ this.generateRelationData = (relationInfo) => {
71
+ var _a;
72
+ return `ref: ${relationInfo.fromTableName}.${relationInfo.fromTableColumnName} > ${((_a = this.tableNames) === null || _a === void 0 ? void 0 : _a[relationInfo.toTableClassName]) || relationInfo.toTableClassName}.id`;
73
+ };
74
+ this.generateDBMLData = () => __awaiter(this, void 0, void 0, function* () {
75
+ const projectData = this.generateProjectData();
76
+ const tableData = yield Promise.all(this.tables.map((tableInfo) => {
77
+ Object.entries(tableInfo.data).forEach(([key, v]) => {
78
+ var _a, _b, _c, _d;
79
+ if (v.__name === 'foreignkey') {
80
+ tableInfo.columns.push({
81
+ name: key,
82
+ type: 'int',
83
+ note: '',
84
+ });
85
+ this.relations.push({
86
+ fromTableName: tableInfo === null || tableInfo === void 0 ? void 0 : tableInfo.name,
87
+ fromTableColumnName: key,
88
+ toTableClassName: (_a = v.toSequelize) === null || _a === void 0 ? void 0 : _a.call(v)().name,
89
+ });
90
+ }
91
+ else if (v.__name !== 'belongsto') {
92
+ const enumData = (_c = (_b = v.toSwagger) === null || _b === void 0 ? void 0 : _b.call(v)) === null || _c === void 0 ? void 0 : _c.enum;
93
+ const enumName = `${tableInfo === null || tableInfo === void 0 ? void 0 : tableInfo.name}_${key}_enum`;
94
+ tableInfo.columns.push({
95
+ name: key,
96
+ type: enumData ? enumName : v.__name,
97
+ note: (_d = v.toSwagger) === null || _d === void 0 ? void 0 : _d.call(v).description,
98
+ enum: enumData,
99
+ });
100
+ if (enumData) {
101
+ this.enums.push({
102
+ name: enumName,
103
+ values: enumData,
104
+ });
105
+ }
106
+ }
107
+ });
108
+ return tableInfo;
109
+ }));
110
+ const tableDatas = tableData.map((table) => this.generateTableData(table));
111
+ const enumDatas = this.enums.map((enumData) => this.generateEnumData(enumData));
112
+ const relationDatas = this.relations.map((relationData) => this.generateRelationData(relationData));
113
+ const combinedData = [projectData, ...tableDatas, ...enumDatas, ...relationDatas];
114
+ this.generatedDBMLData = combinedData.join('\n\n');
115
+ });
116
+ this.getDBMLData = () => __awaiter(this, void 0, void 0, function* () {
117
+ if (this.generatedDBMLData === null) {
118
+ this.generateDBMLData();
119
+ }
120
+ yield promises_1.default.mkdir('./src/dbml', { recursive: true });
121
+ yield promises_1.default.writeFile('./src/dbml/database.dbml', this.generatedDBMLData);
122
+ return this.generatedDBMLData;
123
+ });
124
+ }
125
+ }
126
+ _a = new DBMLApplication(), exports.addTable = _a.addTable, exports.getDBMLData = _a.getDBMLData;
127
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/dbml/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import 'reflect-metadata';
2
+ import { Model } from 'sequelize-typescript';
3
+ import { Attributes, Includeable } from 'sequelize';
4
+ interface DtoMiddlewareReturn {
5
+ as?: string;
6
+ model: typeof Model;
7
+ attributes: Attributes<Model>;
8
+ include?: Includeable[];
9
+ }
10
+ export default class ExtendableDto {
11
+ static isInitlized: boolean;
12
+ init: () => void;
13
+ map: (data: any) => any;
14
+ pagingMap: (data: any) => any;
15
+ middleware: (as?: string | undefined, user?: any, extraAs?: string[] | undefined) => DtoMiddlewareReturn;
16
+ generateScheme: () => {
17
+ type: string;
18
+ properties: {
19
+ [key: string]: unknown;
20
+ };
21
+ };
22
+ swagger: () => {
23
+ $ref: string;
24
+ };
25
+ }
26
+ export {};
27
+ //# sourceMappingURL=ExtendableDto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExtendableDto.d.ts","sourceRoot":"","sources":["../../src/dto/ExtendableDto.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAE1B,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAW,MAAM,WAAW,CAAC;AAQ7D,UAAU,mBAAmB;IAC3B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,OAAO,KAAK,CAAC;IACpB,UAAU,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;IAC9B,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;CACzB;AAED,MAAM,CAAC,OAAO,OAAO,aAAa;IAChC,MAAM,CAAC,WAAW,UAAS;IAEpB,IAAI,aAGT;IAEK,GAAG,SAAU,GAAG,KAAG,GAAG,CAsC3B;IAEK,SAAS,SAAU,GAAG,KAAG,GAAG,CAIjC;IAEK,UAAU,mCAAwB,GAAG,yDAmF1C;IAEK,cAAc;;;;;MAsBnB;IAEK,OAAO;;MAKZ;CACH"}
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ require("reflect-metadata");
4
+ const sequelize_1 = require("sequelize");
5
+ const types_1 = require("../types");
6
+ const core_1 = require("@asapjs/core");
7
+ const router_1 = require("@asapjs/router");
8
+ class ExtendableDto {
9
+ constructor() {
10
+ this.init = () => {
11
+ const dtoName = this.constructor.name;
12
+ (0, router_1.addScheme)({ name: dtoName, data: this.generateScheme() });
13
+ };
14
+ this.map = (data) => {
15
+ const types = (0, types_1.getTypesData)(this);
16
+ const properties = Object.assign({}, types);
17
+ const o = (data === null || data === void 0 ? void 0 : data.dataValues) || data;
18
+ const isArray = Array.isArray(o);
19
+ if (isArray) {
20
+ return o.map((item) => this.map(item));
21
+ }
22
+ return Object.keys(properties).reduce((p, key) => {
23
+ var _a, _b;
24
+ const property = properties[key];
25
+ if (property.__name === 'dto') {
26
+ // DTO TYPE인데 toSequelize가 없을 경우
27
+ if (!property.toSequelize) {
28
+ core_1.logger.error(`@asapjs/sequelize :: @TypeIs.DTO - ${key}에서 에러가 발생했습니다.`);
29
+ process.exit(1);
30
+ }
31
+ const data = property.toSequelize();
32
+ if (!data.dto) {
33
+ core_1.logger.error(`@asapjs/sequelize :: @TypeIs.DTO - ${key}에 dto가 전달되지 않았습니다..`);
34
+ process.exit(1);
35
+ }
36
+ p[key] = !!(o === null || o === void 0 ? void 0 : o[key]) ? new data.dto().map(o === null || o === void 0 ? void 0 : o[key]) : null;
37
+ }
38
+ else if (property.__name === 'query') {
39
+ p[key] = (_a = property === null || property === void 0 ? void 0 : property.fixValue) === null || _a === void 0 ? void 0 : _a.call(property, o === null || o === void 0 ? void 0 : o[key]);
40
+ }
41
+ else {
42
+ p[key] = ((_b = property === null || property === void 0 ? void 0 : property.fixValue) === null || _b === void 0 ? void 0 : _b.call(property, o === null || o === void 0 ? void 0 : o[key])) || (o === null || o === void 0 ? void 0 : o[key]);
43
+ }
44
+ return p;
45
+ }, {});
46
+ };
47
+ this.pagingMap = (data) => {
48
+ const o = data.data;
49
+ return Object.assign(Object.assign({}, data), { data: o.map((item) => this.map(item)) });
50
+ };
51
+ this.middleware = (as, user, extraAs) => {
52
+ const modelInfo = Reflect.getMetadata('sequelize::dtoInfo', this);
53
+ const types = (0, types_1.getTypesData)(this);
54
+ const extraAsData = extraAs ? [...extraAs, as].filter((v) => !!v) : as ? [as] : [];
55
+ const attributes = [];
56
+ const include = [];
57
+ if (types) {
58
+ // DTO와 QUERY TYPE은 따로 Include 필요하기 때문에 필터링
59
+ const attributesOptions = Object.entries(types).filter(([key, v]) => !['dto', 'query'].includes(v.__name));
60
+ if (attributesOptions) {
61
+ attributesOptions.forEach(([key, v]) => {
62
+ attributes.push(key);
63
+ });
64
+ }
65
+ // QUERY TYPE 필터링
66
+ const queryOptions = Object.entries(types).filter(([key, v]) => v.__name === 'query');
67
+ if (queryOptions) {
68
+ queryOptions.forEach(([key, v]) => {
69
+ // QUERY TYPE인데 toSequelize가 없을 경우
70
+ if (!v.toSequelize) {
71
+ core_1.logger.error(`@asapjs/sequelize :: @TypeIs.QUERY - ${key}에서 에러가 발생했습니다.`);
72
+ process.exit(1);
73
+ }
74
+ if (!v.toSequelize().query) {
75
+ core_1.logger.error(`@asapjs/sequelize :: @TypeIs.QUERY - ${key}에 query가 전달되지 않았습니다..`);
76
+ process.exit(1);
77
+ }
78
+ const association = extraAsData.length >= 2 ? '`' + `${extraAsData.join('->')}` + '`' : as || modelInfo.defineTable.name;
79
+ attributes.push([
80
+ (0, sequelize_1.literal)(v.toSequelize().query({
81
+ association: association,
82
+ user,
83
+ })),
84
+ key,
85
+ ]);
86
+ });
87
+ }
88
+ // DTO TYPE 필터링
89
+ const connectOptions = Object.entries(types).filter(([key, v]) => v.__name === 'dto');
90
+ if (connectOptions) {
91
+ connectOptions.forEach(([key, v]) => {
92
+ // DTO TYPE인데 toSequelize가 없을 경우
93
+ if (!v.toSequelize) {
94
+ core_1.logger.error(`@asapjs/sequelize :: @TypeIs.DTO - ${key}에서 에러가 발생했습니다.`);
95
+ process.exit(1);
96
+ }
97
+ const data = v.toSequelize();
98
+ if (!data.dto) {
99
+ core_1.logger.error(`@asapjs/sequelize :: @TypeIs.DTO - ${key}에 dto가 전달되지 않았습니다..`);
100
+ process.exit(1);
101
+ }
102
+ include.push(new data.dto().middleware((data === null || data === void 0 ? void 0 : data.as) || key, user, extraAsData));
103
+ });
104
+ }
105
+ }
106
+ const result = {
107
+ model: modelInfo.defineTable,
108
+ attributes,
109
+ };
110
+ if (as)
111
+ result.as = as;
112
+ if (include.length > 0)
113
+ result.include = include;
114
+ return result;
115
+ };
116
+ this.generateScheme = () => {
117
+ const types = (0, types_1.getTypesData)(this);
118
+ const data = Object.keys(types).reduce((p, key) => {
119
+ var _a, _b;
120
+ const property = types[key];
121
+ if (property.toSwagger) {
122
+ p[key] = property.toSwagger() || null;
123
+ }
124
+ else {
125
+ core_1.logger.warn(`@asapjs/sequelize :: TypeIs.${(_b = (_a = property === null || property === void 0 ? void 0 : property.__name) === null || _a === void 0 ? void 0 : _a.toUpperCase) === null || _b === void 0 ? void 0 : _b.call(_a)}에 toSwagger가 정의되지 않았습니다.`);
126
+ p[key] = null;
127
+ }
128
+ return p;
129
+ }, {});
130
+ return {
131
+ type: 'object',
132
+ properties: data,
133
+ };
134
+ };
135
+ this.swagger = () => {
136
+ const dtoName = this.constructor.name;
137
+ return {
138
+ $ref: (0, router_1.generateSchemeRefWithName)(dtoName),
139
+ };
140
+ };
141
+ }
142
+ }
143
+ exports.default = ExtendableDto;
144
+ ExtendableDto.isInitlized = false;
145
+ //# sourceMappingURL=ExtendableDto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExtendableDto.js","sourceRoot":"","sources":["../../src/dto/ExtendableDto.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { ExtendableDto } from './index';
2
+ export default class PaginationQueryDto extends ExtendableDto {
3
+ page: number;
4
+ limit: number;
5
+ }
6
+ //# sourceMappingURL=PaginationQueryDto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PaginationQueryDto.d.ts","sourceRoot":"","sources":["../../src/dto/PaginationQueryDto.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,aAAa;IAE3D,IAAI,EAAE,MAAM,CAAC;IAGb,KAAK,EAAE,MAAM,CAAC;CACf"}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const types_1 = require("../types");
13
+ const index_1 = require("./index");
14
+ class PaginationQueryDto extends index_1.ExtendableDto {
15
+ }
16
+ __decorate([
17
+ types_1.TypeIs.INT({ comment: '페이지' }),
18
+ __metadata("design:type", Number)
19
+ ], PaginationQueryDto.prototype, "page", void 0);
20
+ __decorate([
21
+ types_1.TypeIs.INT({ comment: '한 페이지당 표시 개수' }),
22
+ __metadata("design:type", Number)
23
+ ], PaginationQueryDto.prototype, "limit", void 0);
24
+ exports.default = PaginationQueryDto;
25
+ //# sourceMappingURL=PaginationQueryDto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PaginationQueryDto.js","sourceRoot":"","sources":["../../src/dto/PaginationQueryDto.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,oCAAkC;AAClC,mCAAwC;AAExC,MAAqB,kBAAmB,SAAQ,qBAAa;CAM5D;AAJC;IADC,cAAM,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;;gDAClB;AAGb;IADC,cAAM,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC;;iDAC1B;AALhB,qCAMC"}
@@ -0,0 +1,10 @@
1
+ import 'reflect-metadata';
2
+ import { Model, TableOptions } from 'sequelize-typescript';
3
+ export declare function Dto(info: {
4
+ timestamps?: boolean;
5
+ name?: string;
6
+ defineTable: typeof Model;
7
+ }): (target: any, options?: TableOptions) => void;
8
+ export { default as ExtendableDto } from './ExtendableDto';
9
+ export { default as PaginationQueryDto } from './PaginationQueryDto';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dto/index.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAE1B,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAE3D,wBAAgB,GAAG,CAAC,IAAI,EAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,OAAO,KAAK,CAAA;CAAE,YACjE,GAAG,YAAW,YAAY,KAAQ,IAAI,CAOhE;AAED,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.PaginationQueryDto = exports.ExtendableDto = exports.Dto = void 0;
7
+ require("reflect-metadata");
8
+ function Dto(info) {
9
+ return function (target, options = {}) {
10
+ const args = Object.assign(Object.assign({}, info), { timestamps: info.timestamps === undefined });
11
+ Reflect.defineMetadata('sequelize::dtoInfo', args, target.prototype);
12
+ };
13
+ }
14
+ exports.Dto = Dto;
15
+ var ExtendableDto_1 = require("./ExtendableDto");
16
+ Object.defineProperty(exports, "ExtendableDto", { enumerable: true, get: function () { return __importDefault(ExtendableDto_1).default; } });
17
+ var PaginationQueryDto_1 = require("./PaginationQueryDto");
18
+ Object.defineProperty(exports, "PaginationQueryDto", { enumerable: true, get: function () { return __importDefault(PaginationQueryDto_1).default; } });
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/dto/index.ts"],"names":[],"mappings":";;;;;;AAAA,4BAA0B;AAI1B,SAAgB,GAAG,CAAC,IAAwE;IAC1F,OAAO,UAAU,MAAW,EAAE,UAAwB,EAAE;QACtD,MAAM,IAAI,mCACL,IAAI,KACP,UAAU,EAAE,IAAI,CAAC,UAAU,KAAK,SAAS,GAC1C,CAAC;QACF,OAAO,CAAC,cAAc,CAAC,oBAAoB,EAAE,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IACvE,CAAC,CAAC;AACJ,CAAC;AARD,kBAQC;AAED,iDAA2D;AAAlD,+HAAA,OAAO,OAAiB;AACjC,2DAAqE;AAA5D,yIAAA,OAAO,OAAsB"}
@@ -0,0 +1,8 @@
1
+ export { ExtendableDto, PaginationQueryDto, Dto } from './dto';
2
+ export { initSequelizeModule, getSequelize, modelsSync, generateDBML } from './sequelize';
3
+ export { default as Repository } from './repository';
4
+ export { Table } from './table';
5
+ export { TypeIs, DtoOrTypeIs } from './types';
6
+ export { getUserIdInQuery } from './utils/getUserIdInQuery';
7
+ export { getDBMLData } from './dbml';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC1F,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getDBMLData = exports.getUserIdInQuery = exports.TypeIs = exports.Table = exports.Repository = exports.generateDBML = exports.modelsSync = exports.getSequelize = exports.initSequelizeModule = exports.Dto = exports.PaginationQueryDto = exports.ExtendableDto = void 0;
7
+ var dto_1 = require("./dto");
8
+ Object.defineProperty(exports, "ExtendableDto", { enumerable: true, get: function () { return dto_1.ExtendableDto; } });
9
+ Object.defineProperty(exports, "PaginationQueryDto", { enumerable: true, get: function () { return dto_1.PaginationQueryDto; } });
10
+ Object.defineProperty(exports, "Dto", { enumerable: true, get: function () { return dto_1.Dto; } });
11
+ var sequelize_1 = require("./sequelize");
12
+ Object.defineProperty(exports, "initSequelizeModule", { enumerable: true, get: function () { return sequelize_1.initSequelizeModule; } });
13
+ Object.defineProperty(exports, "getSequelize", { enumerable: true, get: function () { return sequelize_1.getSequelize; } });
14
+ Object.defineProperty(exports, "modelsSync", { enumerable: true, get: function () { return sequelize_1.modelsSync; } });
15
+ Object.defineProperty(exports, "generateDBML", { enumerable: true, get: function () { return sequelize_1.generateDBML; } });
16
+ var repository_1 = require("./repository");
17
+ Object.defineProperty(exports, "Repository", { enumerable: true, get: function () { return __importDefault(repository_1).default; } });
18
+ var table_1 = require("./table");
19
+ Object.defineProperty(exports, "Table", { enumerable: true, get: function () { return table_1.Table; } });
20
+ var types_1 = require("./types");
21
+ Object.defineProperty(exports, "TypeIs", { enumerable: true, get: function () { return types_1.TypeIs; } });
22
+ var getUserIdInQuery_1 = require("./utils/getUserIdInQuery");
23
+ Object.defineProperty(exports, "getUserIdInQuery", { enumerable: true, get: function () { return getUserIdInQuery_1.getUserIdInQuery; } });
24
+ var dbml_1 = require("./dbml");
25
+ Object.defineProperty(exports, "getDBMLData", { enumerable: true, get: function () { return dbml_1.getDBMLData; } });
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAAA,6BAA+D;AAAtD,oGAAA,aAAa,OAAA;AAAE,yGAAA,kBAAkB,OAAA;AAAE,0FAAA,GAAG,OAAA;AAC/C,yCAA0F;AAAjF,gHAAA,mBAAmB,OAAA;AAAE,yGAAA,YAAY,OAAA;AAAE,uGAAA,UAAU,OAAA;AAAE,yGAAA,YAAY,OAAA;AACpE,2CAAqD;AAA5C,yHAAA,OAAO,OAAc;AAC9B,iCAAgC;AAAvB,8FAAA,KAAK,OAAA;AACd,iCAA8C;AAArC,+FAAA,MAAM,OAAA;AACf,6DAA4D;AAAnD,oHAAA,gBAAgB,OAAA;AACzB,+BAAqC;AAA5B,mGAAA,WAAW,OAAA"}
@@ -0,0 +1,24 @@
1
+ import { Model, ModelCtor } from 'sequelize-typescript';
2
+ import { FindOptions } from 'sequelize';
3
+ import { ExtendableDto } from '../dto';
4
+ interface IArgs<T extends Model> extends FindOptions<T> {
5
+ exportTo: typeof ExtendableDto;
6
+ user?: any;
7
+ paging?: {
8
+ page: number;
9
+ limit: number;
10
+ };
11
+ }
12
+ declare type FindAllResponse<T> = T[];
13
+ declare type FindOneResponse<T> = T | null;
14
+ export default class Repository {
15
+ private getOptionsWithArgs;
16
+ private findAll;
17
+ private findOne;
18
+ repository: {
19
+ findAll: <T extends Model<any, any>>(model: ModelCtor<T>, args: IArgs<T>) => Promise<FindAllResponse<T>>;
20
+ findOne: <T_1 extends Model<any, any>>(model: ModelCtor<T_1>, args: IArgs<T_1>) => Promise<FindOneResponse<T_1>>;
21
+ };
22
+ }
23
+ export {};
24
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/repository/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAEvC,UAAU,KAAK,CAAC,CAAC,SAAS,KAAK,CAAE,SAAQ,WAAW,CAAC,CAAC,CAAC;IACrD,QAAQ,EAAE,OAAO,aAAa,CAAC;IAC/B,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAC1C;AAED,aAAK,eAAe,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AAC9B,aAAK,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAEnC,MAAM,CAAC,OAAO,OAAO,UAAU;IAC7B,OAAO,CAAC,kBAAkB,CAkBxB;IAEF,OAAO,CAAC,OAAO,CAqBb;IAEF,OAAO,CAAC,OAAO,CAIb;IAEK,UAAU;;;MAGf;CACH"}
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __rest = (this && this.__rest) || function (s, e) {
12
+ var t = {};
13
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
14
+ t[p] = s[p];
15
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
16
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
17
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
18
+ t[p[i]] = s[p[i]];
19
+ }
20
+ return t;
21
+ };
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ class Repository {
24
+ constructor() {
25
+ this.getOptionsWithArgs = (args) => {
26
+ const { exportTo: Dto, user, paging } = args, options = __rest(args, ["exportTo", "user", "paging"]);
27
+ const exportDto = new Dto();
28
+ const _a = exportDto.middleware(undefined, user), { model: _ } = _a, queryOptions = __rest(_a, ["model"]);
29
+ const page = parseInt(String(paging === null || paging === void 0 ? void 0 : paging.page), 10);
30
+ const limit = parseInt(String(paging === null || paging === void 0 ? void 0 : paging.limit), 10);
31
+ const pagingOptions = paging
32
+ ? {
33
+ limit,
34
+ offset: limit * page,
35
+ }
36
+ : {};
37
+ const query = Object.assign(Object.assign(Object.assign({}, queryOptions), options), pagingOptions);
38
+ return query;
39
+ };
40
+ this.findAll = (model, args) => __awaiter(this, void 0, void 0, function* () {
41
+ var _a, _b;
42
+ const query = this.getOptionsWithArgs(args);
43
+ if (args === null || args === void 0 ? void 0 : args.paging) {
44
+ const { rows: raws, count: total } = yield model.findAndCountAll(query);
45
+ const page = parseInt(String((_a = args === null || args === void 0 ? void 0 : args.paging) === null || _a === void 0 ? void 0 : _a.page), 10);
46
+ const limit = parseInt(String((_b = args === null || args === void 0 ? void 0 : args.paging) === null || _b === void 0 ? void 0 : _b.limit), 10);
47
+ const max_page = Math.ceil(total / limit) - 1;
48
+ return {
49
+ data: raws,
50
+ page,
51
+ page_size: limit,
52
+ max_page,
53
+ has_prev: page !== 0,
54
+ has_next: max_page > page,
55
+ total_elements: total,
56
+ };
57
+ }
58
+ const raws = yield model.findAll(query);
59
+ return raws;
60
+ });
61
+ this.findOne = (model, args) => __awaiter(this, void 0, void 0, function* () {
62
+ const query = this.getOptionsWithArgs(args);
63
+ const raw = yield model.findOne(query);
64
+ return raw;
65
+ });
66
+ this.repository = {
67
+ findAll: this.findAll,
68
+ findOne: this.findOne,
69
+ };
70
+ }
71
+ }
72
+ exports.default = Repository;
73
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/repository/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAcA,MAAqB,UAAU;IAA/B;QACU,uBAAkB,GAAG,CAAkB,IAAc,EAAE,EAAE;YAC/D,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAiB,IAAI,EAAhB,OAAO,UAAK,IAAI,EAAlD,8BAA2C,CAAO,CAAC;YACzD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC;YAC5B,MAAM,KAAgC,SAAS,CAAC,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,EAArE,EAAE,KAAK,EAAE,CAAC,OAA2D,EAAtD,YAAY,cAA3B,SAA6B,CAAwC,CAAC;YAE5E,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;YAChD,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;YAElD,MAAM,aAAa,GAAG,MAAM;gBAC1B,CAAC,CAAC;oBACE,KAAK;oBACL,MAAM,EAAE,KAAK,GAAG,IAAI;iBACrB;gBACH,CAAC,CAAC,EAAE,CAAC;YAEP,MAAM,KAAK,iDAAQ,YAAY,GAAK,OAAO,GAAK,aAAa,CAAE,CAAC;YAEhE,OAAO,KAAK,CAAC;QACf,CAAC,CAAC;QAEM,YAAO,GAAG,CAAwB,KAAmB,EAAE,IAAc,EAA+B,EAAE;;YAC5G,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAI,IAAI,CAAC,CAAC;YAE/C,IAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,EAAE;gBAChB,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,MAAM,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;gBACxE,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,0CAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;gBACtD,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,0CAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;gBACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC9C,OAAO;oBACL,IAAI,EAAE,IAAI;oBACV,IAAI;oBACJ,SAAS,EAAE,KAAK;oBAChB,QAAQ;oBACR,QAAQ,EAAE,IAAI,KAAK,CAAC;oBACpB,QAAQ,EAAE,QAAQ,GAAG,IAAI;oBACzB,cAAc,EAAE,KAAK;iBACf,CAAC;aACV;YAED,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACxC,OAAO,IAAW,CAAC;QACrB,CAAC,CAAA,CAAC;QAEM,YAAO,GAAG,CAAwB,KAAmB,EAAE,IAAc,EAA+B,EAAE;YAC5G,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAI,IAAI,CAAC,CAAC;YAC/C,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACvC,OAAO,GAAU,CAAC;QACpB,CAAC,CAAA,CAAC;QAEK,eAAU,GAAG;YAClB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC;IACJ,CAAC;CAAA;AAtDD,6BAsDC"}
@@ -0,0 +1,11 @@
1
+ import { Sequelize, SequelizeOptions } from 'sequelize-typescript';
2
+ import 'reflect-metadata';
3
+ export declare const dbInit: (config: SequelizeOptions) => Promise<Sequelize>;
4
+ export declare const loadPath: (path: string, subPath: string) => Promise<void>;
5
+ export declare const addModelsToSequelize: () => Promise<void>;
6
+ export declare const addDtosToSwagger: () => Promise<void>;
7
+ export declare const modelsSync: () => Promise<boolean>;
8
+ export declare const getSequelize: () => Sequelize;
9
+ export declare const initSequelizeModule: (dirname: string) => Promise<Sequelize>;
10
+ export declare const generateDBML: () => Promise<void>;
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sequelize/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,SAAS,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAKrF,OAAO,kBAAkB,CAAC;AAQ1B,eAAO,MAAM,MAAM,WAAkB,gBAAgB,uBA0CpD,CAAC;AAEF,eAAO,MAAM,QAAQ,SAAgB,MAAM,WAAW,MAAM,kBAa3D,CAAC;AAEF,eAAO,MAAM,oBAAoB,qBAGhC,CAAC;AAEF,eAAO,MAAM,gBAAgB,qBAG5B,CAAC;AAEF,eAAO,MAAM,UAAU,wBAItB,CAAC;AAEF,eAAO,MAAM,YAAY,iBAAmB,CAAC;AAE7C,eAAO,MAAM,mBAAmB,YAAmB,MAAM,KAAG,QAAQ,SAAS,CAM5E,CAAC;AAEF,eAAO,MAAM,YAAY,qBAAiB,CAAC"}