@constructorfleet/ultimate-govee
Version:
Library for interacting with Govee devices written in Typescript.
72 lines • 3.19 kB
JavaScript
;
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