@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
JavaScript
;
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');
}