simba-cli
Version:
A simple CLI to handle most basic and everyday usage cli command wishes
107 lines (98 loc) • 3.03 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.generateWidget = void 0;
const path_1 = __importDefault(require("path"));
const process_1 = require("process");
const fs_extra_1 = require("fs-extra");
const yargs_1 = __importDefault(require("yargs"));
const log_1 = require("../log");
const helpers_1 = require("./helpers");
const routeAwareTitle = () => {
return ' with RouteAware';
};
const hookedStatefulBody = (hk) => {
return hk
? `
void initState() {
super.initState();
}
void didChangeDependencies() {
super.didChangeDependencies();
// RouterService.routeObserver.subscribe(this, ModalRoute.of(context)!);
}
void didPushNext() {
// implement logic on next route/page pushed
}
void didPopNext() {
// implement on route/page popped logic here
}
Widget build(BuildContext context) {
// TODO: implement build
throw UnimplementedError();
}
void dispose() {
super.dispose();
}`
: `
Widget build(BuildContext context) {
// TODO: implement build
throw UnimplementedError();
}`;
};
const statelessWidget = (opts) => {
return `import 'package:flutter/material.dart';
class {{widgetName}} extends StatelessWidget${opts.hooks ? routeAwareTitle() : ''} {
Widget build(BuildContext context) {
// TODO: implement build
throw UnimplementedError();
}
}
`;
};
const statefulWidget = (opts) => {
return `import 'package:flutter/material.dart';
class {{widgetName}} extends StatefulWidget {
_{{widgetName}}State createState() {
return _{{widgetName}}State();
}
}
class _{{widgetName}}State extends State<{{widgetName}}>${opts.hooks ? routeAwareTitle() : ''} {
${hookedStatefulBody(opts.hooks)}
}
`;
};
// Example command: as g w splash-screen --hooks --stateful
const generateWidget = (name) => {
const dir = (0, process_1.cwd)();
const filename = path_1.default.normalize(`${dir}/${name}.dart`);
const options = yargs_1.default.argv;
const widgetName = (0, helpers_1.getSchematicName)(name);
if (widgetName.err) {
log_1.Log.error(widgetName.err);
return;
}
if ((0, fs_extra_1.existsSync)(filename)) {
log_1.Log.error('Could not create widget because it already exists in same destination');
return;
}
// creates the file and directory path
(0, fs_extra_1.ensureFileSync)(filename);
// writes content to the file
const content = options.stateful ? statefulWidget(options) : statelessWidget(options);
const varMap = {
widgetName: widgetName.name,
};
(0, fs_extra_1.writeFileSync)(filename, (0, helpers_1.interpolateString)(content, varMap));
};
exports.generateWidget = generateWidget;
//# sourceMappingURL=widget.js.map