sonamu 0.4.11 → 0.4.12
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/cli.js +51 -51
- package/dist/bin/cli.mjs +2 -2
- package/dist/{chunk-634GIW42.mjs → chunk-FKZK27YL.mjs} +2 -2
- package/dist/{chunk-GUKIIOZI.js → chunk-FYLFH3Q6.js} +100 -100
- package/dist/{chunk-QIHV5UYF.js → chunk-IEMX4VPN.js} +4 -4
- package/dist/{chunk-Z53BUBO4.js → chunk-INTZUNZ6.js} +7 -7
- package/dist/{chunk-PGPMEMK6.mjs → chunk-JQJTQQ7D.mjs} +2 -2
- package/dist/{chunk-GUV6I64Y.mjs → chunk-LNZTU4JC.mjs} +2 -2
- package/dist/{chunk-GUV6I64Y.mjs.map → chunk-LNZTU4JC.mjs.map} +1 -1
- package/dist/{chunk-A2BDNO7E.mjs → chunk-NPLUHS5L.mjs} +2 -2
- package/dist/{chunk-KX4762I3.js → chunk-ZLFDB43J.js} +2 -2
- package/dist/{chunk-KX4762I3.js.map → chunk-ZLFDB43J.js.map} +1 -1
- package/dist/database/drivers/knex/base-model.js +8 -8
- package/dist/database/drivers/knex/base-model.mjs +3 -3
- package/dist/database/drivers/kysely/base-model.js +9 -9
- package/dist/database/drivers/kysely/base-model.mjs +3 -3
- package/dist/index.js +9 -9
- package/dist/index.mjs +3 -3
- package/package.json +1 -1
- package/src/syncer/syncer.ts +1 -1
- /package/dist/{chunk-634GIW42.mjs.map → chunk-FKZK27YL.mjs.map} +0 -0
- /package/dist/{chunk-GUKIIOZI.js.map → chunk-FYLFH3Q6.js.map} +0 -0
- /package/dist/{chunk-QIHV5UYF.js.map → chunk-IEMX4VPN.js.map} +0 -0
- /package/dist/{chunk-Z53BUBO4.js.map → chunk-INTZUNZ6.js.map} +0 -0
- /package/dist/{chunk-PGPMEMK6.mjs.map → chunk-JQJTQQ7D.mjs.map} +0 -0
- /package/dist/{chunk-A2BDNO7E.mjs.map → chunk-NPLUHS5L.mjs.map} +0 -0
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
var
|
|
19
|
+
var _chunkZLFDB43Jjs = require('./chunk-ZLFDB43J.js');
|
|
20
20
|
|
|
21
21
|
// src/entity/migrator.ts
|
|
22
22
|
var _lodash = require('lodash'); var _lodash2 = _interopRequireDefault(_lodash);
|
|
@@ -34,10 +34,10 @@ var Migrator = class {
|
|
|
34
34
|
constructor(options) {
|
|
35
35
|
this.mode = options.mode;
|
|
36
36
|
if (this.mode === "dev") {
|
|
37
|
-
const devDB =
|
|
38
|
-
const testDB =
|
|
39
|
-
const fixtureLocalDB =
|
|
40
|
-
const uniqConfigs =
|
|
37
|
+
const devDB = _chunkZLFDB43Jjs.DB.getClient("development_master");
|
|
38
|
+
const testDB = _chunkZLFDB43Jjs.DB.getClient("test");
|
|
39
|
+
const fixtureLocalDB = _chunkZLFDB43Jjs.DB.getClient("fixture_local");
|
|
40
|
+
const uniqConfigs = _chunkZLFDB43Jjs.DB.getUniqueConfigs([
|
|
41
41
|
"development_master",
|
|
42
42
|
"test",
|
|
43
43
|
"fixture_local",
|
|
@@ -45,7 +45,7 @@ var Migrator = class {
|
|
|
45
45
|
]);
|
|
46
46
|
const applyDBs = [devDB, testDB, fixtureLocalDB];
|
|
47
47
|
if (uniqConfigs.length === 4) {
|
|
48
|
-
const fixtureRemoteDB =
|
|
48
|
+
const fixtureRemoteDB = _chunkZLFDB43Jjs.DB.getClient("fixture_remote");
|
|
49
49
|
applyDBs.push(fixtureRemoteDB);
|
|
50
50
|
}
|
|
51
51
|
this.targets = {
|
|
@@ -55,8 +55,8 @@ var Migrator = class {
|
|
|
55
55
|
apply: applyDBs
|
|
56
56
|
};
|
|
57
57
|
} else if (this.mode === "deploy") {
|
|
58
|
-
const productionDB =
|
|
59
|
-
const testDB =
|
|
58
|
+
const productionDB = _chunkZLFDB43Jjs.DB.getClient("production_master");
|
|
59
|
+
const testDB = _chunkZLFDB43Jjs.DB.getClient("test");
|
|
60
60
|
this.targets = {
|
|
61
61
|
pending: productionDB,
|
|
62
62
|
shadow: testDB,
|
|
@@ -67,8 +67,8 @@ var Migrator = class {
|
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
69
|
async getMigrationCodes() {
|
|
70
|
-
const srcMigrationsDir = `${
|
|
71
|
-
const distMigrationsDir = `${
|
|
70
|
+
const srcMigrationsDir = `${_chunkZLFDB43Jjs.Sonamu.apiRootPath}/src/migrations`;
|
|
71
|
+
const distMigrationsDir = `${_chunkZLFDB43Jjs.Sonamu.apiRootPath}/dist/migrations`;
|
|
72
72
|
if (_fsextra2.default.existsSync(srcMigrationsDir) === false) {
|
|
73
73
|
_fsextra2.default.mkdirSync(srcMigrationsDir, {
|
|
74
74
|
recursive: true
|
|
@@ -113,7 +113,7 @@ var Migrator = class {
|
|
|
113
113
|
const { normal, onlyTs, onlyJs } = await this.getMigrationCodes();
|
|
114
114
|
if (onlyTs.length > 0) {
|
|
115
115
|
console.debug({ onlyTs });
|
|
116
|
-
throw new (0,
|
|
116
|
+
throw new (0, _chunkZLFDB43Jjs.ServiceUnavailableException)(
|
|
117
117
|
`There are un-compiled TS migration files.
|
|
118
118
|
Please compile them first.
|
|
119
119
|
|
|
@@ -130,12 +130,12 @@ ${onlyTs.map((f) => f.name).join("\n")}`
|
|
|
130
130
|
})
|
|
131
131
|
);
|
|
132
132
|
}
|
|
133
|
-
const connKeys = Object.keys(
|
|
133
|
+
const connKeys = Object.keys(_chunkZLFDB43Jjs.DB.fullConfig).filter(
|
|
134
134
|
(key) => key.endsWith("_slave") === false
|
|
135
135
|
);
|
|
136
136
|
const statuses = await Promise.all(
|
|
137
137
|
connKeys.map(async (connKey) => {
|
|
138
|
-
const tConn =
|
|
138
|
+
const tConn = _chunkZLFDB43Jjs.DB.getClient(connKey);
|
|
139
139
|
const status = await (async () => {
|
|
140
140
|
try {
|
|
141
141
|
return await tConn.status();
|
|
@@ -172,7 +172,7 @@ ${onlyTs.map((f) => f.name).join("\n")}`
|
|
|
172
172
|
if (status0conn === void 0) {
|
|
173
173
|
return [];
|
|
174
174
|
}
|
|
175
|
-
const compareDBconn =
|
|
175
|
+
const compareDBconn = _chunkZLFDB43Jjs.DB.getClient(status0conn.connKey);
|
|
176
176
|
const genCodes = await this.compareMigrations(compareDBconn);
|
|
177
177
|
await compareDBconn.destroy();
|
|
178
178
|
return genCodes;
|
|
@@ -184,11 +184,11 @@ ${onlyTs.map((f) => f.name).join("\n")}`
|
|
|
184
184
|
};
|
|
185
185
|
}
|
|
186
186
|
async runAction(action, targets) {
|
|
187
|
-
const configs =
|
|
187
|
+
const configs = _chunkZLFDB43Jjs.DB.getUniqueConfigs(targets);
|
|
188
188
|
const conns = await Promise.all(
|
|
189
189
|
configs.map(async (config) => ({
|
|
190
190
|
connKey: config.connKey,
|
|
191
|
-
db:
|
|
191
|
+
db: _chunkZLFDB43Jjs.DB.getClient(config.connKey)
|
|
192
192
|
}))
|
|
193
193
|
);
|
|
194
194
|
const result = await (async () => {
|
|
@@ -236,8 +236,8 @@ ${onlyTs.map((f) => f.name).join("\n")}`
|
|
|
236
236
|
);
|
|
237
237
|
}
|
|
238
238
|
const delFiles = codeNames.map((codeName) => [
|
|
239
|
-
`${
|
|
240
|
-
`${
|
|
239
|
+
`${_chunkZLFDB43Jjs.Sonamu.apiRootPath}/src/migrations/${codeName}.ts`,
|
|
240
|
+
`${_chunkZLFDB43Jjs.Sonamu.apiRootPath}/dist/migrations/${codeName}.js`
|
|
241
241
|
]).flat();
|
|
242
242
|
const res = await Promise.all(
|
|
243
243
|
delFiles.map((delFile) => {
|
|
@@ -257,7 +257,7 @@ ${onlyTs.map((f) => f.name).join("\n")}`
|
|
|
257
257
|
console.log(_chalk2.default.green("\n\uD604\uC7AC \uBAA8\uB450 \uC2F1\uD06C\uB41C \uC0C1\uD0DC\uC785\uB2C8\uB2E4."));
|
|
258
258
|
return 0;
|
|
259
259
|
}
|
|
260
|
-
const migrationsDir = `${
|
|
260
|
+
const migrationsDir = `${_chunkZLFDB43Jjs.Sonamu.apiRootPath}/src/migrations`;
|
|
261
261
|
preparedCodes.filter((pcode) => pcode.formatted).map((pcode, index) => {
|
|
262
262
|
const dateTag = _luxon.DateTime.local().plus({ seconds: index }).toFormat("yyyyMMddHHmmss");
|
|
263
263
|
const filePath = `${migrationsDir}/${dateTag}_${pcode.title}.ts`;
|
|
@@ -268,7 +268,7 @@ ${onlyTs.map((f) => f.name).join("\n")}`
|
|
|
268
268
|
}
|
|
269
269
|
async clearPendingList() {
|
|
270
270
|
const pendingList = await this.targets.pending.getMigrations();
|
|
271
|
-
const migrationsDir = `${
|
|
271
|
+
const migrationsDir = `${_chunkZLFDB43Jjs.Sonamu.apiRootPath}/src/migrations`;
|
|
272
272
|
const delList = pendingList.map((df) => {
|
|
273
273
|
return _path2.default.join(migrationsDir, `${df}.ts`);
|
|
274
274
|
});
|
|
@@ -332,7 +332,7 @@ ${onlyTs.map((f) => f.name).join("\n")}`
|
|
|
332
332
|
if (answer.value === false) {
|
|
333
333
|
return;
|
|
334
334
|
}
|
|
335
|
-
const migrationsDir = `${
|
|
335
|
+
const migrationsDir = `${_chunkZLFDB43Jjs.Sonamu.apiRootPath}/src/migrations`;
|
|
336
336
|
codes.filter((code) => code.formatted).map((code, index) => {
|
|
337
337
|
const dateTag = _luxon.DateTime.local().plus({ seconds: index }).toFormat("yyyyMMddHHmmss");
|
|
338
338
|
const filePath = `${migrationsDir}/${dateTag}_${code.title}.ts`;
|
|
@@ -354,7 +354,7 @@ ${onlyTs.map((f) => f.name).join("\n")}`
|
|
|
354
354
|
const files = ["src", "dist"].reduce(
|
|
355
355
|
(r, which) => {
|
|
356
356
|
const migrationPath = _path2.default.join(
|
|
357
|
-
|
|
357
|
+
_chunkZLFDB43Jjs.Sonamu.apiRootPath,
|
|
358
358
|
which,
|
|
359
359
|
"migrations"
|
|
360
360
|
);
|
|
@@ -402,7 +402,7 @@ ${onlyTs.map((f) => f.name).join("\n")}`
|
|
|
402
402
|
}
|
|
403
403
|
}
|
|
404
404
|
const filesToRm = diffOnDist.map((filename) => {
|
|
405
|
-
return _path2.default.join(
|
|
405
|
+
return _path2.default.join(_chunkZLFDB43Jjs.Sonamu.apiRootPath, "dist", "migrations", filename);
|
|
406
406
|
});
|
|
407
407
|
filesToRm.map((filePath) => {
|
|
408
408
|
_fsextra2.default.unlinkSync(filePath);
|
|
@@ -411,7 +411,7 @@ ${onlyTs.map((f) => f.name).join("\n")}`
|
|
|
411
411
|
}
|
|
412
412
|
}
|
|
413
413
|
async runShadowTest() {
|
|
414
|
-
const tdb =
|
|
414
|
+
const tdb = _chunkZLFDB43Jjs.DB.getClient("test");
|
|
415
415
|
const tdbConn = tdb.connectionInfo;
|
|
416
416
|
const shadowDatabase = tdbConn.database + "__migration_shadow";
|
|
417
417
|
const tmpSqlPath = `/tmp/${shadowDatabase}.sql`;
|
|
@@ -449,7 +449,7 @@ ${onlyTs.map((f) => f.name).join("\n")}`
|
|
|
449
449
|
];
|
|
450
450
|
} catch (e) {
|
|
451
451
|
console.error(e);
|
|
452
|
-
throw new (0,
|
|
452
|
+
throw new (0, _chunkZLFDB43Jjs.ServiceUnavailableException)("Shadow DB \uD14C\uC2A4\uD2B8 \uC9C4\uD589 \uC911 \uC5D0\uB7EC");
|
|
453
453
|
} finally {
|
|
454
454
|
await tdb.destroy();
|
|
455
455
|
}
|
|
@@ -472,19 +472,19 @@ ${onlyTs.map((f) => f.name).join("\n")}`
|
|
|
472
472
|
);
|
|
473
473
|
console.log({ rollbackAllResult });
|
|
474
474
|
console.timeEnd(_chalk2.default.red("rollback-all:"));
|
|
475
|
-
const migrationsDir = `${
|
|
475
|
+
const migrationsDir = `${_chunkZLFDB43Jjs.Sonamu.apiRootPath}/src/migrations`;
|
|
476
476
|
console.time(_chalk2.default.red("delete migration files"));
|
|
477
477
|
_child_process.execSync.call(void 0, `rm -f ${migrationsDir}/*`);
|
|
478
478
|
_child_process.execSync.call(void 0, `rm -f ${migrationsDir.replace("/src/", "/dist/")}/*`);
|
|
479
479
|
console.timeEnd(_chalk2.default.red("delete migration files"));
|
|
480
480
|
}
|
|
481
481
|
async compareMigrations(compareDB) {
|
|
482
|
-
const entityIds =
|
|
482
|
+
const entityIds = _chunkZLFDB43Jjs.EntityManager.getAllIds();
|
|
483
483
|
const entitySetsWithJoinTable = entityIds.filter((entityId) => {
|
|
484
|
-
const entity =
|
|
484
|
+
const entity = _chunkZLFDB43Jjs.EntityManager.get(entityId);
|
|
485
485
|
return entity.props.length > 0;
|
|
486
486
|
}).map((entityId) => {
|
|
487
|
-
const entity =
|
|
487
|
+
const entity = _chunkZLFDB43Jjs.EntityManager.get(entityId);
|
|
488
488
|
return this.getMigrationSetFromEntity(entity);
|
|
489
489
|
});
|
|
490
490
|
const joinTablesWithDup = entitySetsWithJoinTable.map((entitySet) => entitySet.joinTables).flat();
|
|
@@ -514,12 +514,12 @@ ${onlyTs.map((f) => f.name).join("\n")}`
|
|
|
514
514
|
);
|
|
515
515
|
if (dbSet === null) {
|
|
516
516
|
return [
|
|
517
|
-
await
|
|
517
|
+
await _chunkZLFDB43Jjs.DB.generator.generateCreateCode_ColumnAndIndexes(
|
|
518
518
|
entitySet.table,
|
|
519
519
|
entitySet.columns,
|
|
520
520
|
entitySet.indexes
|
|
521
521
|
),
|
|
522
|
-
...await
|
|
522
|
+
...await _chunkZLFDB43Jjs.DB.generator.generateCreateCode_Foreign(
|
|
523
523
|
entitySet.table,
|
|
524
524
|
entitySet.foreigns
|
|
525
525
|
)
|
|
@@ -565,7 +565,7 @@ ${onlyTs.map((f) => f.name).join("\n")}`
|
|
|
565
565
|
if (isEqualColumns && isEqualIndexes) {
|
|
566
566
|
return null;
|
|
567
567
|
} else {
|
|
568
|
-
return
|
|
568
|
+
return _chunkZLFDB43Jjs.DB.generator.generateAlterCode_ColumnAndIndexes(
|
|
569
569
|
entitySet.table,
|
|
570
570
|
entityColumns,
|
|
571
571
|
entityIndexes,
|
|
@@ -591,7 +591,7 @@ ${onlyTs.map((f) => f.name).join("\n")}`
|
|
|
591
591
|
(a) => [a.to, ...a.columns].join("-")
|
|
592
592
|
).map((f) => replaceNoActionOnMySQL(f));
|
|
593
593
|
if (_fastdeepequal2.default.call(void 0, entityForeigns, dbForeigns) === false) {
|
|
594
|
-
return
|
|
594
|
+
return _chunkZLFDB43Jjs.DB.generator.generateAlterCode_Foreigns(
|
|
595
595
|
entitySet.table,
|
|
596
596
|
entityForeigns,
|
|
597
597
|
dbForeigns
|
|
@@ -630,7 +630,7 @@ ${onlyTs.map((f) => f.name).join("\n")}`
|
|
|
630
630
|
table
|
|
631
631
|
);
|
|
632
632
|
} catch (e) {
|
|
633
|
-
if (
|
|
633
|
+
if (_chunkZLFDB43Jjs.isKnexError.call(void 0, e) && e.code === "ER_NO_SUCH_TABLE") {
|
|
634
634
|
return null;
|
|
635
635
|
}
|
|
636
636
|
console.error(e);
|
|
@@ -807,17 +807,17 @@ ${onlyTs.map((f) => f.name).join("\n")}`
|
|
|
807
807
|
getMigrationSetFromEntity(entity) {
|
|
808
808
|
const migrationSet = entity.props.reduce(
|
|
809
809
|
(r, prop) => {
|
|
810
|
-
if (
|
|
810
|
+
if (_chunkZLFDB43Jjs.isVirtualProp.call(void 0, prop)) {
|
|
811
811
|
return r;
|
|
812
812
|
}
|
|
813
|
-
if (
|
|
813
|
+
if (_chunkZLFDB43Jjs.isHasManyRelationProp.call(void 0, prop)) {
|
|
814
814
|
return r;
|
|
815
815
|
}
|
|
816
|
-
if (!
|
|
816
|
+
if (!_chunkZLFDB43Jjs.isRelationProp.call(void 0, prop)) {
|
|
817
817
|
let type;
|
|
818
|
-
if (
|
|
818
|
+
if (_chunkZLFDB43Jjs.isTextProp.call(void 0, prop)) {
|
|
819
819
|
type = prop.textType;
|
|
820
|
-
} else if (
|
|
820
|
+
} else if (_chunkZLFDB43Jjs.isEnumProp.call(void 0, prop)) {
|
|
821
821
|
type = "string";
|
|
822
822
|
} else {
|
|
823
823
|
type = prop.type;
|
|
@@ -825,8 +825,8 @@ ${onlyTs.map((f) => f.name).join("\n")}`
|
|
|
825
825
|
const column = {
|
|
826
826
|
name: prop.name,
|
|
827
827
|
type,
|
|
828
|
-
...
|
|
829
|
-
...(
|
|
828
|
+
..._chunkZLFDB43Jjs.isIntegerProp.call(void 0, prop) && { unsigned: prop.unsigned === true },
|
|
829
|
+
...(_chunkZLFDB43Jjs.isStringProp.call(void 0, prop) || _chunkZLFDB43Jjs.isEnumProp.call(void 0, prop)) && {
|
|
830
830
|
length: prop.length
|
|
831
831
|
},
|
|
832
832
|
nullable: prop.nullable === true,
|
|
@@ -840,15 +840,15 @@ ${onlyTs.map((f) => f.name).join("\n")}`
|
|
|
840
840
|
})(),
|
|
841
841
|
// FIXME: float(N, M) deprecated
|
|
842
842
|
// Decimal, Float 타입의 경우 precision, scale 추가
|
|
843
|
-
...(
|
|
843
|
+
...(_chunkZLFDB43Jjs.isDecimalProp.call(void 0, prop) || _chunkZLFDB43Jjs.isFloatProp.call(void 0, prop)) && {
|
|
844
844
|
precision: _nullishCoalesce(prop.precision, () => ( 8)),
|
|
845
845
|
scale: _nullishCoalesce(prop.scale, () => ( 2))
|
|
846
846
|
}
|
|
847
847
|
};
|
|
848
848
|
r.columns.push(column);
|
|
849
849
|
}
|
|
850
|
-
if (
|
|
851
|
-
const relMd =
|
|
850
|
+
if (_chunkZLFDB43Jjs.isManyToManyRelationProp.call(void 0, prop)) {
|
|
851
|
+
const relMd = _chunkZLFDB43Jjs.EntityManager.get(prop.with);
|
|
852
852
|
const [table1, table2] = prop.joinTable.split("__");
|
|
853
853
|
const join = {
|
|
854
854
|
from: `${entity.table}.id`,
|
|
@@ -920,7 +920,7 @@ ${onlyTs.map((f) => f.name).join("\n")}`
|
|
|
920
920
|
})
|
|
921
921
|
});
|
|
922
922
|
return r;
|
|
923
|
-
} else if (
|
|
923
|
+
} else if (_chunkZLFDB43Jjs.isBelongsToOneRelationProp.call(void 0, prop) || _chunkZLFDB43Jjs.isOneToOneRelationProp.call(void 0, prop) && prop.hasJoinColumn) {
|
|
924
924
|
const idColumnName = prop.name + "_id";
|
|
925
925
|
r.columns.push({
|
|
926
926
|
name: idColumnName,
|
|
@@ -1058,13 +1058,13 @@ var RelationGraph = (_class = class {constructor() { _class.prototype.__init.cal
|
|
|
1058
1058
|
const node = this.graph.get(fixture.fixtureId);
|
|
1059
1059
|
for (const [, column] of Object.entries(fixture.columns)) {
|
|
1060
1060
|
const prop = column.prop;
|
|
1061
|
-
if (
|
|
1062
|
-
if (
|
|
1061
|
+
if (_chunkZLFDB43Jjs.isRelationProp.call(void 0, prop)) {
|
|
1062
|
+
if (_chunkZLFDB43Jjs.isBelongsToOneRelationProp.call(void 0, prop) || _chunkZLFDB43Jjs.isOneToOneRelationProp.call(void 0, prop) && prop.hasJoinColumn) {
|
|
1063
1063
|
const relatedFixtureId = `${prop.with}#${column.value}`;
|
|
1064
1064
|
if (this.graph.has(relatedFixtureId)) {
|
|
1065
1065
|
node.related.add(relatedFixtureId);
|
|
1066
1066
|
}
|
|
1067
|
-
} else if (
|
|
1067
|
+
} else if (_chunkZLFDB43Jjs.isManyToManyRelationProp.call(void 0, prop)) {
|
|
1068
1068
|
const relatedIds = column.value;
|
|
1069
1069
|
for (const relatedId of relatedIds) {
|
|
1070
1070
|
const relatedFixtureId = `${prop.with}#${relatedId}`;
|
|
@@ -1090,11 +1090,11 @@ var RelationGraph = (_class = class {constructor() { _class.prototype.__init.cal
|
|
|
1090
1090
|
}
|
|
1091
1091
|
tempVisited.add(fixtureId);
|
|
1092
1092
|
const node = this.graph.get(fixtureId);
|
|
1093
|
-
const entity =
|
|
1093
|
+
const entity = _chunkZLFDB43Jjs.EntityManager.get(node.entityId);
|
|
1094
1094
|
for (const depId of node.related) {
|
|
1095
1095
|
const depNode = this.graph.get(depId);
|
|
1096
1096
|
const relationProp = entity.props.find(
|
|
1097
|
-
(prop) =>
|
|
1097
|
+
(prop) => _chunkZLFDB43Jjs.isRelationProp.call(void 0, prop) && (_chunkZLFDB43Jjs.isBelongsToOneRelationProp.call(void 0, prop) || _chunkZLFDB43Jjs.isOneToOneRelationProp.call(void 0, prop) && prop.hasJoinColumn) && prop.with === depNode.entityId
|
|
1098
1098
|
);
|
|
1099
1099
|
if (relationProp && !relationProp.nullable) {
|
|
1100
1100
|
visit(depId);
|
|
@@ -1120,39 +1120,39 @@ var RelationGraph = (_class = class {constructor() { _class.prototype.__init.cal
|
|
|
1120
1120
|
var FixtureManagerClass = (_class2 = class {constructor() { _class2.prototype.__init2.call(this); }
|
|
1121
1121
|
__init2() {this.relationGraph = new RelationGraph()}
|
|
1122
1122
|
init() {
|
|
1123
|
-
|
|
1123
|
+
_chunkZLFDB43Jjs.DB.testInit();
|
|
1124
1124
|
}
|
|
1125
1125
|
async cleanAndSeed(usingTables) {
|
|
1126
1126
|
const tableNames = await (async () => {
|
|
1127
1127
|
if (usingTables) {
|
|
1128
1128
|
return usingTables;
|
|
1129
1129
|
}
|
|
1130
|
-
const tables = await
|
|
1130
|
+
const tables = await _chunkZLFDB43Jjs.DB.tdb.raw(
|
|
1131
1131
|
`SHOW TABLE STATUS WHERE Engine IS NOT NULL`
|
|
1132
1132
|
);
|
|
1133
1133
|
return tables.map((tableInfo) => tableInfo["Name"]);
|
|
1134
1134
|
})();
|
|
1135
|
-
await
|
|
1135
|
+
await _chunkZLFDB43Jjs.DB.tdb.raw(`SET FOREIGN_KEY_CHECKS = 0`);
|
|
1136
1136
|
for await (let tableName of tableNames) {
|
|
1137
1137
|
if (tableName == "migrations") {
|
|
1138
1138
|
continue;
|
|
1139
1139
|
}
|
|
1140
|
-
const [fdbChecksumRow] = await
|
|
1140
|
+
const [fdbChecksumRow] = await _chunkZLFDB43Jjs.DB.fdb.raw(
|
|
1141
1141
|
`CHECKSUM TABLE ${tableName}`
|
|
1142
1142
|
);
|
|
1143
1143
|
const fdbChecksum = fdbChecksumRow["Checksum"];
|
|
1144
|
-
const [tdbChecksumRow] = await
|
|
1144
|
+
const [tdbChecksumRow] = await _chunkZLFDB43Jjs.DB.tdb.raw(
|
|
1145
1145
|
`CHECKSUM TABLE ${tableName}`
|
|
1146
1146
|
);
|
|
1147
1147
|
const tdbChecksum = tdbChecksumRow["Checksum"];
|
|
1148
1148
|
if (fdbChecksum !== tdbChecksum) {
|
|
1149
|
-
await
|
|
1150
|
-
const rawQuery = `INSERT INTO ${
|
|
1151
|
-
SELECT * FROM ${
|
|
1152
|
-
await
|
|
1149
|
+
await _chunkZLFDB43Jjs.DB.tdb.truncate(tableName);
|
|
1150
|
+
const rawQuery = `INSERT INTO ${_chunkZLFDB43Jjs.DB.connectionInfo.test.database}.${tableName}
|
|
1151
|
+
SELECT * FROM ${_chunkZLFDB43Jjs.DB.connectionInfo.fixture_local.database}.${tableName}`;
|
|
1152
|
+
await _chunkZLFDB43Jjs.DB.tdb.raw(rawQuery);
|
|
1153
1153
|
}
|
|
1154
1154
|
}
|
|
1155
|
-
await
|
|
1155
|
+
await _chunkZLFDB43Jjs.DB.tdb.raw(`SET FOREIGN_KEY_CHECKS = 1`);
|
|
1156
1156
|
}
|
|
1157
1157
|
async getChecksum(db, tableName) {
|
|
1158
1158
|
const [checksumRow] = await db.raw(
|
|
@@ -1161,8 +1161,8 @@ var FixtureManagerClass = (_class2 = class {constructor() { _class2.prototype.__
|
|
|
1161
1161
|
return checksumRow.Checksum;
|
|
1162
1162
|
}
|
|
1163
1163
|
async sync() {
|
|
1164
|
-
const frdb =
|
|
1165
|
-
const tables = await
|
|
1164
|
+
const frdb = _chunkZLFDB43Jjs.DB.getClient("fixture_remote");
|
|
1165
|
+
const tables = await _chunkZLFDB43Jjs.DB.fdb.raw(
|
|
1166
1166
|
"SHOW TABLE STATUS WHERE Engine IS NOT NULL"
|
|
1167
1167
|
);
|
|
1168
1168
|
const tableNames = tables.map(
|
|
@@ -1171,13 +1171,13 @@ var FixtureManagerClass = (_class2 = class {constructor() { _class2.prototype.__
|
|
|
1171
1171
|
console.log(_chalk2.default.magenta("SYNC..."));
|
|
1172
1172
|
await Promise.all(
|
|
1173
1173
|
tableNames.map(async (tableName) => {
|
|
1174
|
-
if (tableName.startsWith(
|
|
1174
|
+
if (tableName.startsWith(_chunkZLFDB43Jjs.DB.migrationTable)) {
|
|
1175
1175
|
return;
|
|
1176
1176
|
}
|
|
1177
1177
|
const remoteChecksum = await this.getChecksum(frdb, tableName);
|
|
1178
|
-
const localChecksum = await this.getChecksum(
|
|
1178
|
+
const localChecksum = await this.getChecksum(_chunkZLFDB43Jjs.DB.fdb, tableName);
|
|
1179
1179
|
if (remoteChecksum !== localChecksum) {
|
|
1180
|
-
await
|
|
1180
|
+
await _chunkZLFDB43Jjs.DB.fdb.trx(async (transaction) => {
|
|
1181
1181
|
await transaction.raw(`SET FOREIGN_KEY_CHECKS = 0`);
|
|
1182
1182
|
await transaction.truncate(tableName);
|
|
1183
1183
|
const rows = await frdb.raw(`SELECT * FROM ${tableName}`);
|
|
@@ -1220,7 +1220,7 @@ var FixtureManagerClass = (_class2 = class {constructor() { _class2.prototype.__
|
|
|
1220
1220
|
})
|
|
1221
1221
|
)).flat()
|
|
1222
1222
|
);
|
|
1223
|
-
const wdb =
|
|
1223
|
+
const wdb = _chunkZLFDB43Jjs.DB.toClient(_chunkZLFDB43Jjs.DB.getDB("w"));
|
|
1224
1224
|
for (let query of queries) {
|
|
1225
1225
|
const [rsh] = await wdb.raw(query);
|
|
1226
1226
|
console.log({
|
|
@@ -1231,23 +1231,23 @@ var FixtureManagerClass = (_class2 = class {constructor() { _class2.prototype.__
|
|
|
1231
1231
|
}
|
|
1232
1232
|
async getImportQueries(entityId, field, id) {
|
|
1233
1233
|
console.log({ entityId, field, id });
|
|
1234
|
-
const entity =
|
|
1235
|
-
const wdb =
|
|
1234
|
+
const entity = _chunkZLFDB43Jjs.EntityManager.get(entityId);
|
|
1235
|
+
const wdb = _chunkZLFDB43Jjs.DB.toClient(_chunkZLFDB43Jjs.DB.getDB("w"));
|
|
1236
1236
|
const [row] = await wdb.raw(
|
|
1237
1237
|
`SELECT * FROM ${entity.table} WHERE ${field} = ${id} LIMIT 1`
|
|
1238
1238
|
);
|
|
1239
1239
|
if (row === void 0) {
|
|
1240
1240
|
throw new Error(`${entityId}#${id} row\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.`);
|
|
1241
1241
|
}
|
|
1242
|
-
const fixtureDatabase =
|
|
1243
|
-
const realDatabase =
|
|
1242
|
+
const fixtureDatabase = _chunkZLFDB43Jjs.DB.connectionInfo.fixture_remote.database;
|
|
1243
|
+
const realDatabase = _chunkZLFDB43Jjs.DB.connectionInfo.production_master.database;
|
|
1244
1244
|
const selfQuery = `INSERT IGNORE INTO \`${fixtureDatabase}\`.\`${entity.table}\` (SELECT * FROM \`${realDatabase}\`.\`${entity.table}\` WHERE \`id\` = ${id})`;
|
|
1245
1245
|
const args = Object.entries(entity.relations).filter(
|
|
1246
|
-
([, relation]) =>
|
|
1246
|
+
([, relation]) => _chunkZLFDB43Jjs.isBelongsToOneRelationProp.call(void 0, relation) || _chunkZLFDB43Jjs.isOneToOneRelationProp.call(void 0, relation) && relation.customJoinClause === void 0
|
|
1247
1247
|
).map(([, relation]) => {
|
|
1248
1248
|
let field2;
|
|
1249
1249
|
let id2;
|
|
1250
|
-
if (
|
|
1250
|
+
if (_chunkZLFDB43Jjs.isOneToOneRelationProp.call(void 0, relation) && !relation.hasJoinColumn) {
|
|
1251
1251
|
field2 = `${relation.name}_id`;
|
|
1252
1252
|
id2 = row["id"];
|
|
1253
1253
|
} else {
|
|
@@ -1268,14 +1268,14 @@ var FixtureManagerClass = (_class2 = class {constructor() { _class2.prototype.__
|
|
|
1268
1268
|
return [..._lodash2.default.uniq(relQueries.reverse().flat()), selfQuery];
|
|
1269
1269
|
}
|
|
1270
1270
|
async destory() {
|
|
1271
|
-
await
|
|
1272
|
-
await
|
|
1271
|
+
await _chunkZLFDB43Jjs.DB.testDestroy();
|
|
1272
|
+
await _chunkZLFDB43Jjs.DB.destroy();
|
|
1273
1273
|
}
|
|
1274
1274
|
async getFixtures(sourceDBName, targetDBName, searchOptions) {
|
|
1275
|
-
const sourceDB =
|
|
1276
|
-
const targetDB =
|
|
1275
|
+
const sourceDB = _chunkZLFDB43Jjs.DB.getClient(sourceDBName);
|
|
1276
|
+
const targetDB = _chunkZLFDB43Jjs.DB.getClient(targetDBName);
|
|
1277
1277
|
const { entityId, field, value, searchType } = searchOptions;
|
|
1278
|
-
const entity =
|
|
1278
|
+
const entity = _chunkZLFDB43Jjs.EntityManager.get(entityId);
|
|
1279
1279
|
const column = _optionalChain([entity, 'access', _10 => _10.props, 'access', _11 => _11.find, 'call', _12 => _12((prop) => prop.name === field), 'optionalAccess', _13 => _13.type]) === "relation" ? `${field}_id` : field;
|
|
1280
1280
|
let query = sourceDB.from(entity.table).selectAll();
|
|
1281
1281
|
if (searchType === "equals") {
|
|
@@ -1300,7 +1300,7 @@ var FixtureManagerClass = (_class2 = class {constructor() { _class2.prototype.__
|
|
|
1300
1300
|
}
|
|
1301
1301
|
}
|
|
1302
1302
|
for await (const fixture of fixtures) {
|
|
1303
|
-
const entity2 =
|
|
1303
|
+
const entity2 = _chunkZLFDB43Jjs.EntityManager.get(fixture.entityId);
|
|
1304
1304
|
const [row] = await targetDB.from(entity2.table).selectAll().where(["id", "=", fixture.id]).first().execute();
|
|
1305
1305
|
if (row) {
|
|
1306
1306
|
const [record] = await this.createFixtureRecord(entity2, row, {
|
|
@@ -1343,43 +1343,43 @@ var FixtureManagerClass = (_class2 = class {constructor() { _class2.prototype.__
|
|
|
1343
1343
|
belongsRecords: []
|
|
1344
1344
|
};
|
|
1345
1345
|
for (const prop of entity2.props) {
|
|
1346
|
-
if (
|
|
1346
|
+
if (_chunkZLFDB43Jjs.isVirtualProp.call(void 0, prop)) {
|
|
1347
1347
|
continue;
|
|
1348
1348
|
}
|
|
1349
1349
|
record.columns[prop.name] = {
|
|
1350
1350
|
prop,
|
|
1351
1351
|
value: row2[prop.name]
|
|
1352
1352
|
};
|
|
1353
|
-
const db = _nullishCoalesce(_optionalChain([options, 'optionalAccess', _14 => _14._db]), () => (
|
|
1354
|
-
if (
|
|
1355
|
-
const relatedEntity =
|
|
1353
|
+
const db = _nullishCoalesce(_optionalChain([options, 'optionalAccess', _14 => _14._db]), () => ( _chunkZLFDB43Jjs.DB.toClient(_chunkZLFDB43Jjs.DB.getDB("w"))));
|
|
1354
|
+
if (_chunkZLFDB43Jjs.isManyToManyRelationProp.call(void 0, prop)) {
|
|
1355
|
+
const relatedEntity = _chunkZLFDB43Jjs.EntityManager.get(prop.with);
|
|
1356
1356
|
const throughTable = prop.joinTable;
|
|
1357
1357
|
const fromColumn = `${_inflection2.default.singularize(entity2.table)}_id`;
|
|
1358
1358
|
const toColumn = `${_inflection2.default.singularize(relatedEntity.table)}_id`;
|
|
1359
1359
|
const _relatedIds = await db.from(throughTable).select(toColumn).where([fromColumn, "=", row2.id]).execute();
|
|
1360
1360
|
const relatedIds = _relatedIds.map((r) => parseInt(r[toColumn]));
|
|
1361
1361
|
record.columns[prop.name].value = relatedIds;
|
|
1362
|
-
} else if (
|
|
1363
|
-
const relatedEntity =
|
|
1362
|
+
} else if (_chunkZLFDB43Jjs.isHasManyRelationProp.call(void 0, prop)) {
|
|
1363
|
+
const relatedEntity = _chunkZLFDB43Jjs.EntityManager.get(prop.with);
|
|
1364
1364
|
const relatedIds = await db.from(relatedEntity.table).select("id").where([prop.joinColumn, "=", row2.id]).pluck("id");
|
|
1365
1365
|
record.columns[prop.name].value = relatedIds;
|
|
1366
|
-
} else if (
|
|
1367
|
-
const relatedEntity =
|
|
1366
|
+
} else if (_chunkZLFDB43Jjs.isOneToOneRelationProp.call(void 0, prop) && !prop.hasJoinColumn) {
|
|
1367
|
+
const relatedEntity = _chunkZLFDB43Jjs.EntityManager.get(prop.with);
|
|
1368
1368
|
const relatedProp = relatedEntity.props.find(
|
|
1369
|
-
(p) =>
|
|
1369
|
+
(p) => _chunkZLFDB43Jjs.isRelationProp.call(void 0, p) && p.with === entity2.id
|
|
1370
1370
|
);
|
|
1371
1371
|
if (relatedProp) {
|
|
1372
1372
|
const [relatedRow] = await db.from(relatedEntity.table).select("id").where([relatedProp.name, "=", row2.id]).first().execute();
|
|
1373
1373
|
record.columns[prop.name].value = _optionalChain([relatedRow, 'optionalAccess', _15 => _15.id]);
|
|
1374
1374
|
}
|
|
1375
|
-
} else if (
|
|
1375
|
+
} else if (_chunkZLFDB43Jjs.isRelationProp.call(void 0, prop)) {
|
|
1376
1376
|
const relatedId = row2[`${prop.name}_id`];
|
|
1377
1377
|
record.columns[prop.name].value = relatedId;
|
|
1378
1378
|
if (relatedId) {
|
|
1379
1379
|
record.belongsRecords.push(`${prop.with}#${relatedId}`);
|
|
1380
1380
|
}
|
|
1381
1381
|
if (!_optionalChain([options, 'optionalAccess', _16 => _16.singleRecord]) && relatedId) {
|
|
1382
|
-
const relatedEntity =
|
|
1382
|
+
const relatedEntity = _chunkZLFDB43Jjs.EntityManager.get(prop.with);
|
|
1383
1383
|
const [relatedRow] = await db.from(relatedEntity.table).selectAll().where(["id", "=", relatedId]).first().execute();
|
|
1384
1384
|
if (relatedRow) {
|
|
1385
1385
|
await create(relatedEntity, relatedRow);
|
|
@@ -1396,7 +1396,7 @@ var FixtureManagerClass = (_class2 = class {constructor() { _class2.prototype.__
|
|
|
1396
1396
|
const fixtures = _lodash2.default.uniqBy(_fixtures, (f) => f.fixtureId);
|
|
1397
1397
|
this.relationGraph.buildGraph(fixtures);
|
|
1398
1398
|
const insertionOrder = this.relationGraph.getInsertionOrder();
|
|
1399
|
-
const db =
|
|
1399
|
+
const db = _chunkZLFDB43Jjs.DB.getClient(dbName);
|
|
1400
1400
|
await db.trx(async (trx) => {
|
|
1401
1401
|
await trx.raw(`SET FOREIGN_KEY_CHECKS = 0`);
|
|
1402
1402
|
for (const fixtureId of insertionOrder) {
|
|
@@ -1426,7 +1426,7 @@ var FixtureManagerClass = (_class2 = class {constructor() { _class2.prototype.__
|
|
|
1426
1426
|
});
|
|
1427
1427
|
const records = [];
|
|
1428
1428
|
for await (const r of fixtures) {
|
|
1429
|
-
const entity =
|
|
1429
|
+
const entity = _chunkZLFDB43Jjs.EntityManager.get(r.entityId);
|
|
1430
1430
|
const [record] = await db.from(entity.table).selectAll().where(["id", "=", r.id]).first().execute();
|
|
1431
1431
|
records.push({
|
|
1432
1432
|
entityId: r.entityId,
|
|
@@ -1438,17 +1438,17 @@ var FixtureManagerClass = (_class2 = class {constructor() { _class2.prototype.__
|
|
|
1438
1438
|
prepareInsertData(fixture) {
|
|
1439
1439
|
const insertData = {};
|
|
1440
1440
|
for (const [propName, column] of Object.entries(fixture.columns)) {
|
|
1441
|
-
if (
|
|
1441
|
+
if (_chunkZLFDB43Jjs.isVirtualProp.call(void 0, column.prop)) {
|
|
1442
1442
|
continue;
|
|
1443
1443
|
}
|
|
1444
1444
|
const prop = column.prop;
|
|
1445
|
-
if (!
|
|
1445
|
+
if (!_chunkZLFDB43Jjs.isRelationProp.call(void 0, prop)) {
|
|
1446
1446
|
if (prop.type === "json") {
|
|
1447
1447
|
insertData[propName] = JSON.stringify(column.value);
|
|
1448
1448
|
} else {
|
|
1449
1449
|
insertData[propName] = column.value;
|
|
1450
1450
|
}
|
|
1451
|
-
} else if (
|
|
1451
|
+
} else if (_chunkZLFDB43Jjs.isBelongsToOneRelationProp.call(void 0, prop) || _chunkZLFDB43Jjs.isOneToOneRelationProp.call(void 0, prop) && prop.hasJoinColumn) {
|
|
1452
1452
|
insertData[`${propName}_id`] = column.value;
|
|
1453
1453
|
}
|
|
1454
1454
|
}
|
|
@@ -1456,7 +1456,7 @@ var FixtureManagerClass = (_class2 = class {constructor() { _class2.prototype.__
|
|
|
1456
1456
|
}
|
|
1457
1457
|
async insertFixture(db, fixture) {
|
|
1458
1458
|
const insertData = this.prepareInsertData(fixture);
|
|
1459
|
-
const entity =
|
|
1459
|
+
const entity = _chunkZLFDB43Jjs.EntityManager.get(fixture.entityId);
|
|
1460
1460
|
try {
|
|
1461
1461
|
const uniqueFound = await this.checkUniqueViolation(db, entity, fixture);
|
|
1462
1462
|
if (uniqueFound) {
|
|
@@ -1485,15 +1485,15 @@ var FixtureManagerClass = (_class2 = class {constructor() { _class2.prototype.__
|
|
|
1485
1485
|
async handleManyToManyRelations(db, fixture, fixtures) {
|
|
1486
1486
|
for (const [, column] of Object.entries(fixture.columns)) {
|
|
1487
1487
|
const prop = column.prop;
|
|
1488
|
-
if (
|
|
1488
|
+
if (_chunkZLFDB43Jjs.isManyToManyRelationProp.call(void 0, prop)) {
|
|
1489
1489
|
const joinTable = prop.joinTable;
|
|
1490
1490
|
const relatedIds = column.value;
|
|
1491
1491
|
for (const relatedId of relatedIds) {
|
|
1492
1492
|
if (!fixtures.find((f) => f.fixtureId === `${prop.with}#${relatedId}`)) {
|
|
1493
1493
|
continue;
|
|
1494
1494
|
}
|
|
1495
|
-
const entity =
|
|
1496
|
-
const relatedEntity =
|
|
1495
|
+
const entity = _chunkZLFDB43Jjs.EntityManager.get(fixture.entityId);
|
|
1496
|
+
const relatedEntity = _chunkZLFDB43Jjs.EntityManager.get(prop.with);
|
|
1497
1497
|
if (!entity || !relatedEntity) {
|
|
1498
1498
|
throw new Error(
|
|
1499
1499
|
`Entity not found: ${fixture.entityId}, ${prop.with}`
|
|
@@ -1526,7 +1526,7 @@ var FixtureManagerClass = (_class2 = class {constructor() { _class2.prototype.__
|
|
|
1526
1526
|
}
|
|
1527
1527
|
}
|
|
1528
1528
|
async addFixtureLoader(code) {
|
|
1529
|
-
const path2 =
|
|
1529
|
+
const path2 = _chunkZLFDB43Jjs.Sonamu.apiRootPath + "/src/testing/fixture.ts";
|
|
1530
1530
|
let content = _fs.readFileSync.call(void 0, path2).toString();
|
|
1531
1531
|
const fixtureLoaderStart = content.indexOf("const fixtureLoader = {");
|
|
1532
1532
|
const fixtureLoaderEnd = content.indexOf("};", fixtureLoaderStart);
|
|
@@ -1578,4 +1578,4 @@ var FixtureManager = new FixtureManagerClass();
|
|
|
1578
1578
|
|
|
1579
1579
|
|
|
1580
1580
|
exports.Migrator = Migrator; exports.FixtureManagerClass = FixtureManagerClass; exports.FixtureManager = FixtureManager;
|
|
1581
|
-
//# sourceMappingURL=chunk-
|
|
1581
|
+
//# sourceMappingURL=chunk-FYLFH3Q6.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } var _class;
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkZLFDB43Jjs = require('./chunk-ZLFDB43J.js');
|
|
4
4
|
|
|
5
5
|
// src/database/base-model.ts
|
|
6
6
|
var _luxon = require('luxon');
|
|
@@ -53,8 +53,8 @@ var BaseModelClassAbstract = (_class = class {constructor() { _class.prototype._
|
|
|
53
53
|
db: _db,
|
|
54
54
|
optimizeCountQuery
|
|
55
55
|
}) {
|
|
56
|
-
const db = _nullishCoalesce(_db, () => (
|
|
57
|
-
const dbClient =
|
|
56
|
+
const db = _nullishCoalesce(_db, () => ( _chunkZLFDB43Jjs.DB.getDB(subset.startsWith("A") ? "w" : "r")));
|
|
57
|
+
const dbClient = _chunkZLFDB43Jjs.DB.toClient(db);
|
|
58
58
|
baseTable = _nullishCoalesce(baseTable, () => ( _inflection2.default.pluralize(_inflection2.default.underscore(this.modelName))));
|
|
59
59
|
const queryMode = _nullishCoalesce(params.queryMode, () => ( (params.id !== void 0 ? "list" : "both")));
|
|
60
60
|
const { select, virtual, joins, loaders } = subsetQuery;
|
|
@@ -228,4 +228,4 @@ var BaseModelClassAbstract = (_class = class {constructor() { _class.prototype._
|
|
|
228
228
|
|
|
229
229
|
|
|
230
230
|
exports.BaseModelClassAbstract = BaseModelClassAbstract;
|
|
231
|
-
//# sourceMappingURL=chunk-
|
|
231
|
+
//# sourceMappingURL=chunk-IEMX4VPN.js.map
|