UNPKG

@assylman/riverpod-cli

Version:

nodejs cli for creating well structured flutter riverpod folders and files needed to work with Riverpod plugin

117 lines (116 loc) 5.34 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.generateService = generateService; const fs_1 = __importDefault(require("fs")); const utils_1 = require("../utils"); const features_1 = require("../features"); const providers_1 = require("../providers"); const serviceDart = '_service.dart'; const indexDart = 'services.dart'; function generateService(name, options) { const target = options.target; const libDir = target != null ? (0, utils_1.formattingTarget)(target) : '/lib/features'; const featureDirectory = '.' + libDir + '/' + name; const serviceDirectory = featureDirectory + '/services'; const serviceAbstractFileName = serviceDirectory + '/' + name + serviceDart; const serviceIndexFileName = serviceDirectory + '/' + indexDart; const dirs = serviceDirectory.split('/').filter(n => n && n != 'lib'); var fullDirs; for (const dir of dirs) { if (!fullDirs) { fullDirs = './lib/' + dir; } else { fullDirs += '/' + dir; } if (!fs_1.default.existsSync(fullDirs)) { try { fs_1.default.mkdirSync(fullDirs, { recursive: true }); } catch (err) { console.error(err); } } } fs_1.default.writeFileSync(serviceAbstractFileName, generateAbstractInterface(name), { flag: "w" }); if (options.l) { const localServiceFileName = serviceDirectory + '/' + name + '_local' + serviceDart; fs_1.default.writeFileSync(localServiceFileName, generateLocalClass(name, options, libDir), { flag: "w" }); } if (options.r) { const remoteServiceFileName = serviceDirectory + '/' + name + '_remote' + serviceDart; fs_1.default.writeFileSync(remoteServiceFileName, generateRemoteClass(name, options, libDir), { flag: "w" }); } if (options.i) { fs_1.default.writeFileSync(serviceIndexFileName, generateIndexBarrelFile(name, options, libDir), { flag: "w" }); (0, features_1.generateFeatureIndexFile)(name, utils_1.Commands.service, featureDirectory); } if (options.p) { (0, providers_1.generateProvider)(name, options, utils_1.Commands.service); } } function generateAbstractInterface(name) { return [ `abstract interface class ${(0, utils_1.toPascalCase)(name) + 'Service'} {`, ` /// Your abstract methods goes here`, `}`, ].join('\n'); } function generateLocalClass(name, options, libDir) { const serviceName = (0, utils_1.toPascalCase)(name); const serviceFileName = name + serviceDart; const serviceImplName = serviceName + 'LocalService'; const useAbsoluteImports = options.useAbsoluteImports; var importName = useAbsoluteImports ? `import 'package:${options.packageName}${libDir}/${name}/services/${serviceFileName}';` : `import './${serviceFileName}';`; if (options.i) { importName = useAbsoluteImports ? `import 'package:${options.packageName}${libDir}/${name}/services/${indexDart}';` : `import './${indexDart}';`; } return [ `${importName}`, ``, `class ${serviceImplName} implements ${serviceName}Service {`, ` const ${serviceImplName}();`, ``, ` /// Your override methods goes here`, `}`, ].join('\n'); } function generateRemoteClass(name, options, libDir) { const serviceName = (0, utils_1.toPascalCase)(name); const serviceFileName = name + serviceDart; const serviceImplName = serviceName + 'RemoteService'; const useAbsoluteImports = options.useAbsoluteImports; var importName = useAbsoluteImports ? `import 'package:${options.packageName}${libDir}/${name}/services/${serviceFileName}';` : `import './${serviceFileName}';`; if (options.i) { importName = useAbsoluteImports ? `import 'package:${options.packageName}${libDir}/${name}/services/${indexDart}';` : `import './${indexDart}';`; } return [ `${importName}`, ``, `class ${serviceImplName} implements ${serviceName}Service {`, ` const ${serviceImplName}();`, ``, ` /// Your override methods goes here`, `}`, ].join('\n'); } function generateIndexBarrelFile(name, options, libDir) { const serviceFileName = name + serviceDart; const useAbsoluteImports = options.useAbsoluteImports; const exportServiceName = useAbsoluteImports ? `export 'package:${options.packageName}${libDir}/${name}/services/${serviceFileName}';` : `export './${name}${serviceDart}';`; const exportLocalServiceName = useAbsoluteImports ? `export 'package:${options.packageName}${libDir}/${name}/services/${name}_local_service.dart';` : `export './${name}_local_service.dart';`; const exportRemoteServiceName = useAbsoluteImports ? `export 'package:${options.packageName}${libDir}/${name}/services/${name}_remote_service.dart';` : `export './${name}_remote_service.dart';`; const content = [ exportServiceName, ]; if (options.l) { content.push(exportLocalServiceName); } if (options.r) { content.push(exportRemoteServiceName); } return content.join('\n'); }