@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 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