UNPKG

create-expo-cljs-app

Version:

Create a react native application with Expo and Shadow-CLJS!

80 lines (61 loc) 1.76 kB
/** * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * * @format */ "use strict"; const Module = require("./Module"); const Package = require("./Package"); class ModuleCache { constructor(options) { this._getClosestPackage = options.getClosestPackage; this._moduleCache = Object.create(null); this._packageCache = Object.create(null); this._packageModuleMap = new WeakMap(); } getModule(filePath) { if (!this._moduleCache[filePath]) { this._moduleCache[filePath] = new Module(filePath, this); } return this._moduleCache[filePath]; } getPackage(filePath) { if (!this._packageCache[filePath]) { this._packageCache[filePath] = new Package({ file: filePath }); } return this._packageCache[filePath]; } getPackageForModule(module) { let packagePath = this._packageModuleMap.get(module); if (packagePath) { if (this._packageCache[packagePath]) { return this._packageCache[packagePath]; } else { this._packageModuleMap.delete(module); } } packagePath = this._getClosestPackage(module.path); if (!packagePath) { return null; } this._packageModuleMap.set(module, packagePath); return this.getPackage(packagePath); } processFileChange(type, filePath) { if (this._moduleCache[filePath]) { this._moduleCache[filePath].invalidate(); delete this._moduleCache[filePath]; } if (this._packageCache[filePath]) { this._packageCache[filePath].invalidate(); delete this._packageCache[filePath]; } } } module.exports = ModuleCache;