@ngserveio/ws
Version:
This library was generated with [Nx](https://nx.dev).
108 lines • 5.72 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const devkit_1 = require("@nx/devkit");
const path = require("path");
const ts_morph_1 = require("ts-morph");
const common_model_1 = require("../common-model");
const utilities_1 = require("../utilities");
// https://nx.dev/generators/modifying-files#ast-manipulation
function firebaseNgrxGenerator(tree, schema) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const domainNames = (0, devkit_1.names)(schema.domain);
const project = (0, utilities_1.getProject)(tree, `${domainNames.fileName}-ui-data-access`);
const collectionNames = (0, devkit_1.names)(schema.collection);
const storeFilePath = path.join(project.sourceRoot, 'lib');
console.log('Creating Store files for ', schema.collection);
yield (0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, './files/store'), storeFilePath, Object.assign(Object.assign({}, collectionNames), { template: '', domain: domainNames.fileName, domainProject: `${domainNames.fileName}/common` }));
console.log('Creating Model for ', schema.collection);
yield (0, common_model_1.default)(tree, {
name: schema.collection,
domain: schema.domain,
inputs: '',
});
const firebaseConfigPath = path.join(storeFilePath, `firebase-config.interface.ts`);
if (!tree.exists(firebaseConfigPath)) {
yield (0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, './files/data-access-module/config'), storeFilePath, Object.assign(Object.assign({}, domainNames), { template: '' }));
}
const storeModuleFilePath = path.join(storeFilePath, `${domainNames.fileName}-ui-data-access.module.ts`);
console.log('UPDATE ', storeModuleFilePath);
const updates = {
[storeModuleFilePath]: (sourceFile) => {
utilities_1.ModuleGeneratorUtil.addToModuleDecorator(sourceFile, {
imports: {
[`./${collectionNames.fileName}-store`]: [
`${collectionNames.className}StoreModule`,
],
[`@angular/fire/compat`]: ['AngularFireModule'],
[`@angular/fire/compat/firestore`]: [
{
moduleName: 'AngularFirestoreModule',
importText: 'AngularFirestoreModule.enablePersistence()',
},
],
[`@ngrx/store-devtools`]: [
{
moduleName: 'StoreDevtoolsModule',
importText: 'StoreDevtoolsModule.instrument({})',
},
],
[`@ngrx/store`]: [
{
moduleName: 'StoreModule',
importText: 'StoreModule.forRoot({})',
},
],
[`@ngrx/effects`]: [
{
moduleName: `EffectsModule`,
importText: 'EffectsModule.forRoot([])',
},
],
},
});
(0, utilities_1.createImportClassDeclaration)(sourceFile, `@angular/fire/compat`, [
'FIREBASE_APP_NAME',
'FIREBASE_OPTIONS',
]);
(0, utilities_1.createImportClassDeclaration)(sourceFile, '@angular/core', [
'ModuleWithProviders',
]);
const ngClassDeclaration = utilities_1.ModuleGeneratorUtil.findModuleClass(sourceFile);
let methodDeclaration = ngClassDeclaration.getFirstDescendantByKind(ts_morph_1.ts.SyntaxKind.MethodDeclaration);
if ((methodDeclaration === null || methodDeclaration === void 0 ? void 0 : methodDeclaration.getName()) !== 'forRoot') {
// Import the configuration
sourceFile.addImportDeclaration({
moduleSpecifier: './firebase-config.interface',
namedImports: [`I${domainNames.className}DataAccessConfig`],
});
methodDeclaration = ngClassDeclaration.addMethod({
isStatic: true,
name: 'forRoot',
returnType: `ModuleWithProviders<${domainNames.className}UiDataAccessModule>`,
parameters: [
{
type: `I${domainNames.className}DataAccessConfig`,
name: 'config',
},
],
});
// Add a forRoot method to the module for configuration of Firebase
methodDeclaration.setBodyText(`
return {
ngModule: ${domainNames.className}UiDataAccessModule,
providers: [
{ provide: FIREBASE_APP_NAME, useValue: config.appName },
{ provide: FIREBASE_OPTIONS, useValue: config.firebaseConfig },
],
};
`);
}
},
};
(0, utilities_1.updateSourceFiles)(tree, updates);
yield (0, devkit_1.formatFiles)(tree);
});
}
exports.default = firebaseNgrxGenerator;
//# sourceMappingURL=index.js.map