UNPKG

simba-cli

Version:

A simple CLI to handle most basic and everyday usage cli command wishes

107 lines (98 loc) 3.03 kB
"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 ? `@override void initState() { super.initState(); } @override void didChangeDependencies() { super.didChangeDependencies(); // RouterService.routeObserver.subscribe(this, ModalRoute.of(context)!); } @override void didPushNext() { // implement logic on next route/page pushed } @override void didPopNext() { // implement on route/page popped logic here } @override Widget build(BuildContext context) { // TODO: implement build throw UnimplementedError(); } @override void dispose() { super.dispose(); }` : `@override 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() : ''} { @override Widget build(BuildContext context) { // TODO: implement build throw UnimplementedError(); } } `; }; const statefulWidget = (opts) => { return `import 'package:flutter/material.dart'; class {{widgetName}} extends StatefulWidget { @override _{{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