@famgia/omnify-atlas 0.0.98 → 0.0.99
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/index.cjs +141 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +72 -10
- package/dist/index.d.ts +72 -10
- package/dist/index.js +125 -0
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.cjs
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
2
3
|
var __defProp = Object.defineProperty;
|
|
3
4
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
5
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
5
7
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
8
|
var __export = (target, all) => {
|
|
7
9
|
for (var name in all)
|
|
@@ -15,6 +17,14 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
15
17
|
}
|
|
16
18
|
return to;
|
|
17
19
|
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
18
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
29
|
|
|
20
30
|
// src/index.ts
|
|
@@ -22,6 +32,7 @@ var index_exports = {};
|
|
|
22
32
|
__export(index_exports, {
|
|
23
33
|
LOCK_FILE_NAME: () => LOCK_FILE_NAME,
|
|
24
34
|
LOCK_FILE_VERSION: () => LOCK_FILE_VERSION,
|
|
35
|
+
addEnhancedMigrationRecord: () => addEnhancedMigrationRecord,
|
|
25
36
|
addMigrationRecord: () => addMigrationRecord,
|
|
26
37
|
applySchema: () => applySchema,
|
|
27
38
|
buildSchemaHashes: () => buildSchemaHashes,
|
|
@@ -33,11 +44,15 @@ __export(index_exports, {
|
|
|
33
44
|
computeSchemaHash: () => computeSchemaHash,
|
|
34
45
|
createEmptyLockFile: () => createEmptyLockFile,
|
|
35
46
|
diffHclSchemas: () => diffHclSchemas,
|
|
47
|
+
extractTableNameFromFilename: () => extractTableNameFromFilename,
|
|
48
|
+
extractTimestampFromFilename: () => extractTimestampFromFilename,
|
|
49
|
+
findMigrationByTable: () => findMigrationByTable,
|
|
36
50
|
formatDiffSummary: () => formatDiffSummary,
|
|
37
51
|
formatPreview: () => formatPreview,
|
|
38
52
|
generateHclSchema: () => generateHclSchema,
|
|
39
53
|
generateHclTable: () => generateHclTable,
|
|
40
54
|
generatePreview: () => generatePreview,
|
|
55
|
+
getMigrationsToRegenerate: () => getMigrationsToRegenerate,
|
|
41
56
|
getPrimaryKeyType: () => getPrimaryKeyType,
|
|
42
57
|
getTimestampType: () => getTimestampType,
|
|
43
58
|
hasBlockingIssues: () => hasBlockingIssues,
|
|
@@ -55,6 +70,7 @@ __export(index_exports, {
|
|
|
55
70
|
updateLockFile: () => updateLockFile,
|
|
56
71
|
updateLockFileV1: () => updateLockFileV1,
|
|
57
72
|
validateHcl: () => validateHcl,
|
|
73
|
+
validateMigrations: () => validateMigrations,
|
|
58
74
|
writeLockFile: () => writeLockFile
|
|
59
75
|
});
|
|
60
76
|
module.exports = __toCommonJS(index_exports);
|
|
@@ -492,6 +508,125 @@ function addMigrationRecord(lockFile, fileName, schemas, migrationContent) {
|
|
|
492
508
|
migrations: [...lockFile.migrations, record]
|
|
493
509
|
};
|
|
494
510
|
}
|
|
511
|
+
function addEnhancedMigrationRecord(lockFile, options) {
|
|
512
|
+
const record = {
|
|
513
|
+
fileName: options.fileName,
|
|
514
|
+
timestamp: options.timestamp,
|
|
515
|
+
tableName: options.tableName,
|
|
516
|
+
type: options.type,
|
|
517
|
+
generatedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
518
|
+
schemas: options.schemas,
|
|
519
|
+
checksum: computeHash(options.content)
|
|
520
|
+
};
|
|
521
|
+
return {
|
|
522
|
+
...lockFile,
|
|
523
|
+
updatedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
524
|
+
migrations: [...lockFile.migrations, record]
|
|
525
|
+
};
|
|
526
|
+
}
|
|
527
|
+
function extractTimestampFromFilename(fileName) {
|
|
528
|
+
const match = fileName.match(/^(\d{4}_\d{2}_\d{2}_\d{6})_/);
|
|
529
|
+
return match ? match[1] : null;
|
|
530
|
+
}
|
|
531
|
+
function extractTableNameFromFilename(fileName) {
|
|
532
|
+
const createMatch = fileName.match(/_create_(.+)_table\.php$/);
|
|
533
|
+
if (createMatch) return createMatch[1];
|
|
534
|
+
const updateMatch = fileName.match(/_update_(.+)_table\.php$/);
|
|
535
|
+
if (updateMatch) return updateMatch[1];
|
|
536
|
+
const dropMatch = fileName.match(/_drop_(.+)_table\.php$/);
|
|
537
|
+
if (dropMatch) return dropMatch[1];
|
|
538
|
+
return null;
|
|
539
|
+
}
|
|
540
|
+
async function validateMigrations(lockFile, migrationsDir) {
|
|
541
|
+
const missingFiles = [];
|
|
542
|
+
const modifiedFiles = [];
|
|
543
|
+
const staleFiles = [];
|
|
544
|
+
let filesOnDisk = [];
|
|
545
|
+
try {
|
|
546
|
+
const { readdirSync } = await import("fs");
|
|
547
|
+
filesOnDisk = readdirSync(migrationsDir).filter((f) => f.endsWith(".php"));
|
|
548
|
+
} catch {
|
|
549
|
+
}
|
|
550
|
+
const filesOnDiskSet = new Set(filesOnDisk);
|
|
551
|
+
for (const migration of lockFile.migrations) {
|
|
552
|
+
const fileName = migration.fileName;
|
|
553
|
+
if (!filesOnDiskSet.has(fileName)) {
|
|
554
|
+
missingFiles.push(fileName);
|
|
555
|
+
continue;
|
|
556
|
+
}
|
|
557
|
+
if (migration.checksum) {
|
|
558
|
+
try {
|
|
559
|
+
const { readFileSync } = await import("fs");
|
|
560
|
+
const { join: join3 } = await import("path");
|
|
561
|
+
const content = readFileSync(join3(migrationsDir, fileName), "utf8");
|
|
562
|
+
const currentChecksum = computeHash(content);
|
|
563
|
+
if (currentChecksum !== migration.checksum) {
|
|
564
|
+
modifiedFiles.push(fileName);
|
|
565
|
+
}
|
|
566
|
+
} catch {
|
|
567
|
+
}
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
const trackedFileNames = new Set(lockFile.migrations.map((m) => m.fileName));
|
|
571
|
+
const now = /* @__PURE__ */ new Date();
|
|
572
|
+
for (const fileName of filesOnDisk) {
|
|
573
|
+
if (!trackedFileNames.has(fileName)) {
|
|
574
|
+
const timestamp = extractTimestampFromFilename(fileName);
|
|
575
|
+
if (timestamp) {
|
|
576
|
+
const [year, month, day] = timestamp.split("_").slice(0, 3).map(Number);
|
|
577
|
+
const fileDate = new Date(year, month - 1, day);
|
|
578
|
+
const daysDiff = (now.getTime() - fileDate.getTime()) / (1e3 * 60 * 60 * 24);
|
|
579
|
+
if (daysDiff > 7) {
|
|
580
|
+
staleFiles.push(fileName);
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
return {
|
|
586
|
+
valid: missingFiles.length === 0 && modifiedFiles.length === 0,
|
|
587
|
+
missingFiles,
|
|
588
|
+
modifiedFiles,
|
|
589
|
+
staleFiles,
|
|
590
|
+
totalTracked: lockFile.migrations.length,
|
|
591
|
+
totalOnDisk: filesOnDisk.length
|
|
592
|
+
};
|
|
593
|
+
}
|
|
594
|
+
function findMigrationByTable(lockFile, tableName, type) {
|
|
595
|
+
return lockFile.migrations.find((m) => {
|
|
596
|
+
const mig = m;
|
|
597
|
+
if (mig.tableName) {
|
|
598
|
+
return mig.tableName === tableName && (!type || mig.type === type);
|
|
599
|
+
}
|
|
600
|
+
const extractedTable = extractTableNameFromFilename(m.fileName);
|
|
601
|
+
return extractedTable === tableName;
|
|
602
|
+
});
|
|
603
|
+
}
|
|
604
|
+
function getMigrationsToRegenerate(lockFile, missingFiles) {
|
|
605
|
+
const missingSet = new Set(missingFiles);
|
|
606
|
+
const result = [];
|
|
607
|
+
for (const migration of lockFile.migrations) {
|
|
608
|
+
if (!missingSet.has(migration.fileName)) continue;
|
|
609
|
+
const mig = migration;
|
|
610
|
+
const timestamp = mig.timestamp ?? extractTimestampFromFilename(migration.fileName);
|
|
611
|
+
if (!timestamp) continue;
|
|
612
|
+
const tableName = mig.tableName ?? extractTableNameFromFilename(migration.fileName);
|
|
613
|
+
if (!tableName) continue;
|
|
614
|
+
let type = mig.type ?? "create";
|
|
615
|
+
if (!mig.type) {
|
|
616
|
+
if (migration.fileName.includes("_create_")) type = "create";
|
|
617
|
+
else if (migration.fileName.includes("_update_")) type = "alter";
|
|
618
|
+
else if (migration.fileName.includes("_drop_")) type = "drop";
|
|
619
|
+
}
|
|
620
|
+
result.push({
|
|
621
|
+
fileName: migration.fileName,
|
|
622
|
+
timestamp,
|
|
623
|
+
tableName,
|
|
624
|
+
type,
|
|
625
|
+
schemas: migration.schemas
|
|
626
|
+
});
|
|
627
|
+
}
|
|
628
|
+
return result;
|
|
629
|
+
}
|
|
495
630
|
|
|
496
631
|
// src/hcl/type-mapper.ts
|
|
497
632
|
var MYSQL_TYPES = {
|
|
@@ -1653,6 +1788,7 @@ function hasBlockingIssues(_preview) {
|
|
|
1653
1788
|
0 && (module.exports = {
|
|
1654
1789
|
LOCK_FILE_NAME,
|
|
1655
1790
|
LOCK_FILE_VERSION,
|
|
1791
|
+
addEnhancedMigrationRecord,
|
|
1656
1792
|
addMigrationRecord,
|
|
1657
1793
|
applySchema,
|
|
1658
1794
|
buildSchemaHashes,
|
|
@@ -1664,11 +1800,15 @@ function hasBlockingIssues(_preview) {
|
|
|
1664
1800
|
computeSchemaHash,
|
|
1665
1801
|
createEmptyLockFile,
|
|
1666
1802
|
diffHclSchemas,
|
|
1803
|
+
extractTableNameFromFilename,
|
|
1804
|
+
extractTimestampFromFilename,
|
|
1805
|
+
findMigrationByTable,
|
|
1667
1806
|
formatDiffSummary,
|
|
1668
1807
|
formatPreview,
|
|
1669
1808
|
generateHclSchema,
|
|
1670
1809
|
generateHclTable,
|
|
1671
1810
|
generatePreview,
|
|
1811
|
+
getMigrationsToRegenerate,
|
|
1672
1812
|
getPrimaryKeyType,
|
|
1673
1813
|
getTimestampType,
|
|
1674
1814
|
hasBlockingIssues,
|
|
@@ -1686,6 +1826,7 @@ function hasBlockingIssues(_preview) {
|
|
|
1686
1826
|
updateLockFile,
|
|
1687
1827
|
updateLockFileV1,
|
|
1688
1828
|
validateHcl,
|
|
1829
|
+
validateMigrations,
|
|
1689
1830
|
writeLockFile
|
|
1690
1831
|
});
|
|
1691
1832
|
//# sourceMappingURL=index.cjs.map
|