UNPKG

@constructorfleet/ultimate-govee

Version:

Library for interacting with Govee devices written in Typescript.

72 lines 3.19 kB
"use strict"; var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.InjectPersisted = exports.createPersistedFileProviders = exports.FileWriter = exports.FileReader = exports.RootDirectoryProvider = exports.InjectRootDirectory = exports.RootDirectoryKey = exports.MODULE_OPTIONS_TOKEN = exports.ASYNC_OPTIONS_TYPE = exports.OPTIONS_TYPE = exports.ConfigurableModuleClass = exports.InjectGetPersistedFile = exports.GetPersistedFileKey = void 0; const common_1 = require("@nestjs/common"); const fs_1 = require("fs"); const promises_1 = require("fs/promises"); const path_1 = require("path"); exports.GetPersistedFileKey = 'PersistedFile'; exports.InjectGetPersistedFile = (0, common_1.Inject)(exports.GetPersistedFileKey); _a = new common_1.ConfigurableModuleBuilder({ moduleName: 'PersistModule', optionsInjectionToken: 'Persist.Module.Options', }) .setExtras({ isGlobal: true, }, (definition, extras) => { const providers = (0, exports.createPersistedFileProviders)(); return { ...definition, global: extras.isGlobal, providers: [...(definition.providers ?? []), ...providers], exports: [...(definition.exports ?? []), ...providers], }; }) .setClassMethodName('forRoot') .build(), exports.ConfigurableModuleClass = _a.ConfigurableModuleClass, exports.OPTIONS_TYPE = _a.OPTIONS_TYPE, exports.ASYNC_OPTIONS_TYPE = _a.ASYNC_OPTIONS_TYPE, exports.MODULE_OPTIONS_TOKEN = _a.MODULE_OPTIONS_TOKEN; exports.RootDirectoryKey = 'Persist.Root.Directory'; exports.InjectRootDirectory = (0, common_1.Inject)(exports.RootDirectoryKey); exports.RootDirectoryProvider = { provide: exports.RootDirectoryKey, inject: [exports.MODULE_OPTIONS_TOKEN], useFactory: (options) => options.rootDirectory ?? './', }; exports.FileReader = { provide: 'Persist.File.Reader', useFactory: () => promises_1.readFile, }; exports.FileWriter = { provide: 'Persist.File.Writer', useFactory: () => promises_1.writeFile, }; const persistedFiles = {}; const createPersistedFileProviders = () => Object.entries(persistedFiles).map(([filePath, options]) => ({ provide: `Persisted.${filePath}`, inject: [exports.RootDirectoryKey], useFactory: async (rootDirectory) => { const fullFilePath = (0, path_1.join)(rootDirectory ?? '.', filePath); try { if (!(0, fs_1.existsSync)(fullFilePath)) { return undefined; } const data = await (0, promises_1.readFile)(fullFilePath, { encoding: 'utf-8' }); if (!options.transform) { return JSON.parse(data); } return options.transform(JSON.parse(data)); } catch (err) { return; } }, })); exports.createPersistedFileProviders = createPersistedFileProviders; const InjectPersisted = (persistedFile) => { if (persistedFiles[persistedFile.filename] === undefined) { persistedFiles[persistedFile.filename] = persistedFile; } return (0, common_1.Inject)(`Persisted.${persistedFile.filename}`); }; exports.InjectPersisted = InjectPersisted; //# sourceMappingURL=persist.providers.js.map