719 lines
		
	
	
		
			21 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			719 lines
		
	
	
		
			21 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| 
 | |
| Object.defineProperty(exports, '__esModule', {
 | |
|   value: true
 | |
| });
 | |
| exports.default = void 0;
 | |
| 
 | |
| function _v() {
 | |
|   const data = _interopRequireDefault(require('v8'));
 | |
| 
 | |
|   _v = function _v() {
 | |
|     return data;
 | |
|   };
 | |
| 
 | |
|   return data;
 | |
| }
 | |
| 
 | |
| function _fs() {
 | |
|   const data = _interopRequireDefault(require('fs'));
 | |
| 
 | |
|   _fs = function _fs() {
 | |
|     return data;
 | |
|   };
 | |
| 
 | |
|   return data;
 | |
| }
 | |
| 
 | |
| function _betterSqlite() {
 | |
|   const data = _interopRequireDefault(require('better-sqlite3'));
 | |
| 
 | |
|   _betterSqlite = function _betterSqlite() {
 | |
|     return data;
 | |
|   };
 | |
| 
 | |
|   return data;
 | |
| }
 | |
| 
 | |
| var _constants = _interopRequireDefault(require('../constants'));
 | |
| 
 | |
| function _interopRequireDefault(obj) {
 | |
|   return obj && obj.__esModule ? obj : {default: obj};
 | |
| }
 | |
| 
 | |
| function _slicedToArray(arr, i) {
 | |
|   return (
 | |
|     _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest()
 | |
|   );
 | |
| }
 | |
| 
 | |
| function _nonIterableRest() {
 | |
|   throw new TypeError('Invalid attempt to destructure non-iterable instance');
 | |
| }
 | |
| 
 | |
| function _iterableToArrayLimit(arr, i) {
 | |
|   var _arr = [];
 | |
|   var _n = true;
 | |
|   var _d = false;
 | |
|   var _e = undefined;
 | |
|   try {
 | |
|     for (
 | |
|       var _i = arr[Symbol.iterator](), _s;
 | |
|       !(_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 _arrayWithHoles(arr) {
 | |
|   if (Array.isArray(arr)) return arr;
 | |
| }
 | |
| 
 | |
| class SQLitePersistence {
 | |
|   read(cachePath) {
 | |
|     // Get database, throw if does not exist.
 | |
|     const db = this.getDatabase(cachePath, true); // Create empty map to populate.
 | |
| 
 | |
|     const internalHasteMap = {
 | |
|       files: new Map(),
 | |
|       map: new Map(),
 | |
|       mocks: new Map(),
 | |
|       duplicates: new Map(),
 | |
|       clocks: new Map()
 | |
|     }; // Fetch files.
 | |
| 
 | |
|     const filesArr = db.prepare(`SELECT * FROM files`).all();
 | |
|     var _iteratorNormalCompletion = true;
 | |
|     var _didIteratorError = false;
 | |
|     var _iteratorError = undefined;
 | |
| 
 | |
|     try {
 | |
|       for (
 | |
|         var _iterator = filesArr[Symbol.iterator](), _step;
 | |
|         !(_iteratorNormalCompletion = (_step = _iterator.next()).done);
 | |
|         _iteratorNormalCompletion = true
 | |
|       ) {
 | |
|         const file = _step.value;
 | |
|         internalHasteMap.files.set(file.filePath, [
 | |
|           file.id,
 | |
|           file.mtime,
 | |
|           file.size,
 | |
|           file.visited,
 | |
|           file.dependencies,
 | |
|           file.sha1
 | |
|         ]);
 | |
|       } // Fetch map.
 | |
|     } catch (err) {
 | |
|       _didIteratorError = true;
 | |
|       _iteratorError = err;
 | |
|     } finally {
 | |
|       try {
 | |
|         if (!_iteratorNormalCompletion && _iterator.return != null) {
 | |
|           _iterator.return();
 | |
|         }
 | |
|       } finally {
 | |
|         if (_didIteratorError) {
 | |
|           throw _iteratorError;
 | |
|         }
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     const mapsArr = db.prepare(`SELECT * FROM map`).all();
 | |
|     var _iteratorNormalCompletion2 = true;
 | |
|     var _didIteratorError2 = false;
 | |
|     var _iteratorError2 = undefined;
 | |
| 
 | |
|     try {
 | |
|       for (
 | |
|         var _iterator2 = mapsArr[Symbol.iterator](), _step2;
 | |
|         !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done);
 | |
|         _iteratorNormalCompletion2 = true
 | |
|       ) {
 | |
|         const map = _step2.value;
 | |
|         const mapItem = {};
 | |
| 
 | |
|         if (map.genericPath !== null && map.genericType !== null) {
 | |
|           mapItem[_constants.default.GENERIC_PLATFORM] = [
 | |
|             map.genericPath,
 | |
|             map.genericType
 | |
|           ];
 | |
|         }
 | |
| 
 | |
|         if (map.nativePath !== null && map.nativeType !== null) {
 | |
|           mapItem[_constants.default.NATIVE_PLATFORM] = [
 | |
|             map.nativePath,
 | |
|             map.nativeType
 | |
|           ];
 | |
|         }
 | |
| 
 | |
|         if (map.iosPath !== null && map.iosType !== null) {
 | |
|           mapItem[_constants.default.IOS_PLATFORM] = [map.iosPath, map.iosType];
 | |
|         }
 | |
| 
 | |
|         if (map.androidPath !== null && map.androidType !== null) {
 | |
|           mapItem[_constants.default.ANDROID_PLATFORM] = [
 | |
|             map.androidPath,
 | |
|             map.androidType
 | |
|           ];
 | |
|         }
 | |
| 
 | |
|         internalHasteMap.map.set(map.name, mapItem);
 | |
|       } // Fetch mocks.
 | |
|     } catch (err) {
 | |
|       _didIteratorError2 = true;
 | |
|       _iteratorError2 = err;
 | |
|     } finally {
 | |
|       try {
 | |
|         if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
 | |
|           _iterator2.return();
 | |
|         }
 | |
|       } finally {
 | |
|         if (_didIteratorError2) {
 | |
|           throw _iteratorError2;
 | |
|         }
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     const mocksArr = db.prepare(`SELECT * FROM mocks`).all();
 | |
|     var _iteratorNormalCompletion3 = true;
 | |
|     var _didIteratorError3 = false;
 | |
|     var _iteratorError3 = undefined;
 | |
| 
 | |
|     try {
 | |
|       for (
 | |
|         var _iterator3 = mocksArr[Symbol.iterator](), _step3;
 | |
|         !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done);
 | |
|         _iteratorNormalCompletion3 = true
 | |
|       ) {
 | |
|         const mock = _step3.value;
 | |
|         internalHasteMap.mocks.set(mock.name, mock.filePath);
 | |
|       } // Fetch duplicates.
 | |
|     } catch (err) {
 | |
|       _didIteratorError3 = true;
 | |
|       _iteratorError3 = err;
 | |
|     } finally {
 | |
|       try {
 | |
|         if (!_iteratorNormalCompletion3 && _iterator3.return != null) {
 | |
|           _iterator3.return();
 | |
|         }
 | |
|       } finally {
 | |
|         if (_didIteratorError3) {
 | |
|           throw _iteratorError3;
 | |
|         }
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     const duplicatesArr = db.prepare(`SELECT * FROM duplicates`).all();
 | |
|     var _iteratorNormalCompletion4 = true;
 | |
|     var _didIteratorError4 = false;
 | |
|     var _iteratorError4 = undefined;
 | |
| 
 | |
|     try {
 | |
|       for (
 | |
|         var _iterator4 = duplicatesArr[Symbol.iterator](), _step4;
 | |
|         !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done);
 | |
|         _iteratorNormalCompletion4 = true
 | |
|       ) {
 | |
|         const duplicate = _step4.value;
 | |
|         internalHasteMap.duplicates.set(
 | |
|           name,
 | |
|           _v().default.deserialize(new Buffer(duplicate.serialized))
 | |
|         );
 | |
|       } // Fetch clocks.
 | |
|     } catch (err) {
 | |
|       _didIteratorError4 = true;
 | |
|       _iteratorError4 = err;
 | |
|     } finally {
 | |
|       try {
 | |
|         if (!_iteratorNormalCompletion4 && _iterator4.return != null) {
 | |
|           _iterator4.return();
 | |
|         }
 | |
|       } finally {
 | |
|         if (_didIteratorError4) {
 | |
|           throw _iteratorError4;
 | |
|         }
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     const clocksArr = db.prepare(`SELECT * FROM clocks`).all();
 | |
|     var _iteratorNormalCompletion5 = true;
 | |
|     var _didIteratorError5 = false;
 | |
|     var _iteratorError5 = undefined;
 | |
| 
 | |
|     try {
 | |
|       for (
 | |
|         var _iterator5 = clocksArr[Symbol.iterator](), _step5;
 | |
|         !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done);
 | |
|         _iteratorNormalCompletion5 = true
 | |
|       ) {
 | |
|         const clock = _step5.value;
 | |
|         internalHasteMap.clocks.set(clock.relativeRoot, clock.since);
 | |
|       } // Close database connection,
 | |
|     } catch (err) {
 | |
|       _didIteratorError5 = true;
 | |
|       _iteratorError5 = err;
 | |
|     } finally {
 | |
|       try {
 | |
|         if (!_iteratorNormalCompletion5 && _iterator5.return != null) {
 | |
|           _iterator5.return();
 | |
|         }
 | |
|       } finally {
 | |
|         if (_didIteratorError5) {
 | |
|           throw _iteratorError5;
 | |
|         }
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     db.close();
 | |
|     return internalHasteMap;
 | |
|   }
 | |
| 
 | |
|   write(cachePath, internalHasteMap, removedFiles, changedFiles) {
 | |
|     const db = this.getDatabase(cachePath, false);
 | |
|     db.transaction(() => {
 | |
|       // Incrementally update files.
 | |
|       const runFileStmt = (stmt, [filePath, file]) => {
 | |
|         stmt.run(
 | |
|           filePath,
 | |
|           file[_constants.default.ID],
 | |
|           file[_constants.default.MTIME],
 | |
|           file[_constants.default.SIZE],
 | |
|           file[_constants.default.VISITED],
 | |
|           file[_constants.default.DEPENDENCIES],
 | |
|           file[_constants.default.SHA1]
 | |
|         );
 | |
|       };
 | |
| 
 | |
|       if (changedFiles !== undefined) {
 | |
|         const removeFileStmt = db.prepare(`DELETE FROM files WHERE filePath=?`);
 | |
|         var _iteratorNormalCompletion6 = true;
 | |
|         var _didIteratorError6 = false;
 | |
|         var _iteratorError6 = undefined;
 | |
| 
 | |
|         try {
 | |
|           for (
 | |
|             var _iterator6 = removedFiles.keys()[Symbol.iterator](), _step6;
 | |
|             !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done);
 | |
|             _iteratorNormalCompletion6 = true
 | |
|           ) {
 | |
|             const filePath = _step6.value;
 | |
|             removeFileStmt.run(filePath);
 | |
|           }
 | |
|         } catch (err) {
 | |
|           _didIteratorError6 = true;
 | |
|           _iteratorError6 = err;
 | |
|         } finally {
 | |
|           try {
 | |
|             if (!_iteratorNormalCompletion6 && _iterator6.return != null) {
 | |
|               _iterator6.return();
 | |
|             }
 | |
|           } finally {
 | |
|             if (_didIteratorError6) {
 | |
|               throw _iteratorError6;
 | |
|             }
 | |
|           }
 | |
|         }
 | |
| 
 | |
|         const upsertFileStmt = db.prepare(
 | |
|           `INSERT OR REPLACE INTO files (filePath, id, mtime, size, visited, dependencies, sha1) VALUES (?, ?, ?, ?, ?, ?, ?)`
 | |
|         );
 | |
|         var _iteratorNormalCompletion7 = true;
 | |
|         var _didIteratorError7 = false;
 | |
|         var _iteratorError7 = undefined;
 | |
| 
 | |
|         try {
 | |
|           for (
 | |
|             var _iterator7 = changedFiles[Symbol.iterator](), _step7;
 | |
|             !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done);
 | |
|             _iteratorNormalCompletion7 = true
 | |
|           ) {
 | |
|             const changedFile = _step7.value;
 | |
|             runFileStmt(upsertFileStmt, changedFile);
 | |
|           }
 | |
|         } catch (err) {
 | |
|           _didIteratorError7 = true;
 | |
|           _iteratorError7 = err;
 | |
|         } finally {
 | |
|           try {
 | |
|             if (!_iteratorNormalCompletion7 && _iterator7.return != null) {
 | |
|               _iterator7.return();
 | |
|             }
 | |
|           } finally {
 | |
|             if (_didIteratorError7) {
 | |
|               throw _iteratorError7;
 | |
|             }
 | |
|           }
 | |
|         }
 | |
|       } else {
 | |
|         db.exec('DELETE FROM files');
 | |
|         const insertFileStmt = db.prepare(
 | |
|           `INSERT INTO files (filePath, id, mtime, size, visited, dependencies, sha1) VALUES (?, ?, ?, ?, ?, ?, ?)`
 | |
|         );
 | |
|         var _iteratorNormalCompletion8 = true;
 | |
|         var _didIteratorError8 = false;
 | |
|         var _iteratorError8 = undefined;
 | |
| 
 | |
|         try {
 | |
|           for (
 | |
|             var _iterator8 = internalHasteMap.files[Symbol.iterator](), _step8;
 | |
|             !(_iteratorNormalCompletion8 = (_step8 = _iterator8.next()).done);
 | |
|             _iteratorNormalCompletion8 = true
 | |
|           ) {
 | |
|             const file = _step8.value;
 | |
|             runFileStmt(insertFileStmt, file);
 | |
|           }
 | |
|         } catch (err) {
 | |
|           _didIteratorError8 = true;
 | |
|           _iteratorError8 = err;
 | |
|         } finally {
 | |
|           try {
 | |
|             if (!_iteratorNormalCompletion8 && _iterator8.return != null) {
 | |
|               _iterator8.return();
 | |
|             }
 | |
|           } finally {
 | |
|             if (_didIteratorError8) {
 | |
|               throw _iteratorError8;
 | |
|             }
 | |
|           }
 | |
|         }
 | |
|       } // Incrementally update map.
 | |
| 
 | |
|       const runMapStmt = (stmt, [name, mapItem]) => {
 | |
|         stmt.run(
 | |
|           name,
 | |
|           mapItem[_constants.default.GENERIC_PLATFORM] || [null, null],
 | |
|           mapItem[_constants.default.NATIVE_PLATFORM] || [null, null],
 | |
|           mapItem[_constants.default.IOS_PLATFORM] || [null, null],
 | |
|           mapItem[_constants.default.ANDROID_PLATFORM] || [null, null]
 | |
|         );
 | |
|       };
 | |
| 
 | |
|       if (changedFiles !== undefined) {
 | |
|         const removeMapItemStmt = db.prepare(`DELETE FROM map WHERE name=?`);
 | |
|         var _iteratorNormalCompletion9 = true;
 | |
|         var _didIteratorError9 = false;
 | |
|         var _iteratorError9 = undefined;
 | |
| 
 | |
|         try {
 | |
|           for (
 | |
|             var _iterator9 = removedFiles.values()[Symbol.iterator](), _step9;
 | |
|             !(_iteratorNormalCompletion9 = (_step9 = _iterator9.next()).done);
 | |
|             _iteratorNormalCompletion9 = true
 | |
|           ) {
 | |
|             const file = _step9.value;
 | |
|             removeMapItemStmt.run(file[_constants.default.ID]);
 | |
|           }
 | |
|         } catch (err) {
 | |
|           _didIteratorError9 = true;
 | |
|           _iteratorError9 = err;
 | |
|         } finally {
 | |
|           try {
 | |
|             if (!_iteratorNormalCompletion9 && _iterator9.return != null) {
 | |
|               _iterator9.return();
 | |
|             }
 | |
|           } finally {
 | |
|             if (_didIteratorError9) {
 | |
|               throw _iteratorError9;
 | |
|             }
 | |
|           }
 | |
|         }
 | |
| 
 | |
|         const upsertFileStmt = db.prepare(
 | |
|           `INSERT OR REPLACE INTO map (name, genericPath, genericType, nativePath, nativeType) VALUES (?, ?, ?, ?, ?)`
 | |
|         );
 | |
|         var _iteratorNormalCompletion10 = true;
 | |
|         var _didIteratorError10 = false;
 | |
|         var _iteratorError10 = undefined;
 | |
| 
 | |
|         try {
 | |
|           for (
 | |
|             var _iterator10 = changedFiles.values()[Symbol.iterator](), _step10;
 | |
|             !(_iteratorNormalCompletion10 = (_step10 = _iterator10.next())
 | |
|               .done);
 | |
|             _iteratorNormalCompletion10 = true
 | |
|           ) {
 | |
|             const changedFile = _step10.value;
 | |
| 
 | |
|             if (changedFile[_constants.default.MODULE]) {
 | |
|               const mapItem = internalHasteMap.map.get(
 | |
|                 changedFile[_constants.default.MODULE]
 | |
|               );
 | |
|               runMapStmt(upsertFileStmt, [
 | |
|                 changedFile[_constants.default.MODULE],
 | |
|                 mapItem
 | |
|               ]);
 | |
|             }
 | |
|           }
 | |
|         } catch (err) {
 | |
|           _didIteratorError10 = true;
 | |
|           _iteratorError10 = err;
 | |
|         } finally {
 | |
|           try {
 | |
|             if (!_iteratorNormalCompletion10 && _iterator10.return != null) {
 | |
|               _iterator10.return();
 | |
|             }
 | |
|           } finally {
 | |
|             if (_didIteratorError10) {
 | |
|               throw _iteratorError10;
 | |
|             }
 | |
|           }
 | |
|         }
 | |
|       } else {
 | |
|         db.exec('DELETE FROM map');
 | |
|         const insertMapItem = db.prepare(
 | |
|           `INSERT INTO map (name, genericPath, genericType, nativePath, nativeType, iosPath, iosType, androidPath, androidType) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`
 | |
|         );
 | |
|         var _iteratorNormalCompletion11 = true;
 | |
|         var _didIteratorError11 = false;
 | |
|         var _iteratorError11 = undefined;
 | |
| 
 | |
|         try {
 | |
|           for (
 | |
|             var _iterator11 = internalHasteMap.map[Symbol.iterator](), _step11;
 | |
|             !(_iteratorNormalCompletion11 = (_step11 = _iterator11.next())
 | |
|               .done);
 | |
|             _iteratorNormalCompletion11 = true
 | |
|           ) {
 | |
|             const mapItem = _step11.value;
 | |
|             runMapStmt(insertMapItem, mapItem);
 | |
|           }
 | |
|         } catch (err) {
 | |
|           _didIteratorError11 = true;
 | |
|           _iteratorError11 = err;
 | |
|         } finally {
 | |
|           try {
 | |
|             if (!_iteratorNormalCompletion11 && _iterator11.return != null) {
 | |
|               _iterator11.return();
 | |
|             }
 | |
|           } finally {
 | |
|             if (_didIteratorError11) {
 | |
|               throw _iteratorError11;
 | |
|             }
 | |
|           }
 | |
|         }
 | |
|       } // Replace mocks.
 | |
| 
 | |
|       db.exec('DELETE FROM mocks');
 | |
|       const insertMock = db.prepare(
 | |
|         `INSERT INTO mocks (name, filePath) VALUES (?, ?)`
 | |
|       );
 | |
|       var _iteratorNormalCompletion12 = true;
 | |
|       var _didIteratorError12 = false;
 | |
|       var _iteratorError12 = undefined;
 | |
| 
 | |
|       try {
 | |
|         for (
 | |
|           var _iterator12 = internalHasteMap.mocks[Symbol.iterator](), _step12;
 | |
|           !(_iteratorNormalCompletion12 = (_step12 = _iterator12.next()).done);
 | |
|           _iteratorNormalCompletion12 = true
 | |
|         ) {
 | |
|           const _step12$value = _slicedToArray(_step12.value, 2),
 | |
|             name = _step12$value[0],
 | |
|             filePath = _step12$value[1];
 | |
| 
 | |
|           insertMock.run(name, filePath);
 | |
|         } // Incrementally update duplicates.
 | |
|       } catch (err) {
 | |
|         _didIteratorError12 = true;
 | |
|         _iteratorError12 = err;
 | |
|       } finally {
 | |
|         try {
 | |
|           if (!_iteratorNormalCompletion12 && _iterator12.return != null) {
 | |
|             _iterator12.return();
 | |
|           }
 | |
|         } finally {
 | |
|           if (_didIteratorError12) {
 | |
|             throw _iteratorError12;
 | |
|           }
 | |
|         }
 | |
|       }
 | |
| 
 | |
|       if (changedFiles === undefined) {
 | |
|         const insertDuplicateStmt = db.prepare(
 | |
|           `INSERT INTO duplicates (name, serialized) VALUES (?, ?)`
 | |
|         );
 | |
|         var _iteratorNormalCompletion13 = true;
 | |
|         var _didIteratorError13 = false;
 | |
|         var _iteratorError13 = undefined;
 | |
| 
 | |
|         try {
 | |
|           for (
 | |
|             var _iterator13 = internalHasteMap.duplicates[Symbol.iterator](),
 | |
|               _step13;
 | |
|             !(_iteratorNormalCompletion13 = (_step13 = _iterator13.next())
 | |
|               .done);
 | |
|             _iteratorNormalCompletion13 = true
 | |
|           ) {
 | |
|             const _step13$value = _slicedToArray(_step13.value, 2),
 | |
|               name = _step13$value[0],
 | |
|               duplicate = _step13$value[1];
 | |
| 
 | |
|             insertDuplicateStmt.run(name, _v().default.serialize(duplicate));
 | |
|           }
 | |
|         } catch (err) {
 | |
|           _didIteratorError13 = true;
 | |
|           _iteratorError13 = err;
 | |
|         } finally {
 | |
|           try {
 | |
|             if (!_iteratorNormalCompletion13 && _iterator13.return != null) {
 | |
|               _iterator13.return();
 | |
|             }
 | |
|           } finally {
 | |
|             if (_didIteratorError13) {
 | |
|               throw _iteratorError13;
 | |
|             }
 | |
|           }
 | |
|         }
 | |
|       } else if (removedFiles.size) {
 | |
|         const upsertDuplicateStmt = db.prepare(
 | |
|           `INSERT OR REPLACE INTO duplicates (name, serialized) VALUES (?, ?)`
 | |
|         );
 | |
|         const deleteDuplicateStmt = db.prepare(
 | |
|           `DELETE FROM duplicates WHERE name=?`
 | |
|         );
 | |
|         var _iteratorNormalCompletion14 = true;
 | |
|         var _didIteratorError14 = false;
 | |
|         var _iteratorError14 = undefined;
 | |
| 
 | |
|         try {
 | |
|           for (
 | |
|             var _iterator14 = removedFiles.values()[Symbol.iterator](), _step14;
 | |
|             !(_iteratorNormalCompletion14 = (_step14 = _iterator14.next())
 | |
|               .done);
 | |
|             _iteratorNormalCompletion14 = true
 | |
|           ) {
 | |
|             const file = _step14.value;
 | |
|             const moduleID = file[_constants.default.ID];
 | |
|             const duplicate = internalHasteMap.duplicates.get(moduleID);
 | |
| 
 | |
|             if (duplicate) {
 | |
|               upsertDuplicateStmt.run(name, _v().default.serialize(duplicate));
 | |
|             } else {
 | |
|               deleteDuplicateStmt.run(name);
 | |
|             }
 | |
|           }
 | |
|         } catch (err) {
 | |
|           _didIteratorError14 = true;
 | |
|           _iteratorError14 = err;
 | |
|         } finally {
 | |
|           try {
 | |
|             if (!_iteratorNormalCompletion14 && _iterator14.return != null) {
 | |
|               _iterator14.return();
 | |
|             }
 | |
|           } finally {
 | |
|             if (_didIteratorError14) {
 | |
|               throw _iteratorError14;
 | |
|             }
 | |
|           }
 | |
|         }
 | |
|       } // Replace clocks.
 | |
| 
 | |
|       db.exec('DELETE FROM clocks');
 | |
|       const insertClock = db.prepare(
 | |
|         `INSERT INTO clocks (relativeRoot, since) VALUES (?, ?)`
 | |
|       );
 | |
|       var _iteratorNormalCompletion15 = true;
 | |
|       var _didIteratorError15 = false;
 | |
|       var _iteratorError15 = undefined;
 | |
| 
 | |
|       try {
 | |
|         for (
 | |
|           var _iterator15 = internalHasteMap.clocks[Symbol.iterator](), _step15;
 | |
|           !(_iteratorNormalCompletion15 = (_step15 = _iterator15.next()).done);
 | |
|           _iteratorNormalCompletion15 = true
 | |
|         ) {
 | |
|           const _step15$value = _slicedToArray(_step15.value, 2),
 | |
|             relativeRoot = _step15$value[0],
 | |
|             since = _step15$value[1];
 | |
| 
 | |
|           insertClock.run(relativeRoot, since);
 | |
|         }
 | |
|       } catch (err) {
 | |
|         _didIteratorError15 = true;
 | |
|         _iteratorError15 = err;
 | |
|       } finally {
 | |
|         try {
 | |
|           if (!_iteratorNormalCompletion15 && _iterator15.return != null) {
 | |
|             _iterator15.return();
 | |
|           }
 | |
|         } finally {
 | |
|           if (_didIteratorError15) {
 | |
|             throw _iteratorError15;
 | |
|           }
 | |
|         }
 | |
|       }
 | |
|     })();
 | |
|     db.close();
 | |
|   }
 | |
| 
 | |
|   getDatabase(cachePath, mustExist) {
 | |
|     const dbExists = _fs().default.existsSync(cachePath);
 | |
| 
 | |
|     if (dbExists === false && mustExist) {
 | |
|       throw new Error(`Haste SQLite DB does not exist at ${cachePath}`);
 | |
|     }
 | |
| 
 | |
|     const db = (0, _betterSqlite().default)(cachePath, {
 | |
|       fileMustExist: dbExists
 | |
|     });
 | |
| 
 | |
|     if (dbExists === false) {
 | |
|       db.exec(`CREATE TABLE IF NOT EXISTS files(
 | |
|         filePath text PRIMARY KEY,
 | |
|         id text NOT NULL,
 | |
|         mtime integer NOT NULL,
 | |
|         size integer NOT NULL,
 | |
|         visited integer NOT NULL,
 | |
|         dependencies text NOT NULL,
 | |
|         sha1 text
 | |
|       );`);
 | |
|       db.exec(`CREATE TABLE IF NOT EXISTS map(
 | |
|         name text NOT NULL,
 | |
|         genericPath text,
 | |
|         genericType integer,
 | |
|         nativePath text,
 | |
|         nativeType integer,
 | |
|         iosPath text,
 | |
|         iosType integer,
 | |
|         androidPath text,
 | |
|         androidType integer
 | |
|       );`);
 | |
|       db.exec(`CREATE TABLE IF NOT EXISTS mocks(
 | |
|         name text PRIMARY KEY,
 | |
|         filePath text NOT NULL
 | |
|       );`);
 | |
|       db.exec(`CREATE TABLE IF NOT EXISTS duplicates(
 | |
|         name text PRIMARY KEY,
 | |
|         serialized text NOT NULL
 | |
|       );`);
 | |
|       db.exec(`CREATE TABLE IF NOT EXISTS clocks(
 | |
|         relativeRoot text,
 | |
|         since text
 | |
|       );`);
 | |
|     }
 | |
| 
 | |
|     return db;
 | |
|   }
 | |
| 
 | |
|   getType() {
 | |
|     return 'sqlite';
 | |
|   }
 | |
| }
 | |
| 
 | |
| var _default = new SQLitePersistence();
 | |
| 
 | |
| exports.default = _default;
 |