UNPKG

vscode-flutter-files

Version:

Quickly scaffold flutter bloc file templates

96 lines (85 loc) 2.59 kB
import { window, workspace, TextEditor, commands, Uri } from 'vscode'; import * as fs from 'fs'; import { IPath } from './models/path'; import { IFiles } from './models/file'; import { promisify } from './promisify'; import path = require('path'); const fsWriteFile = promisify(fs.writeFile); const fsExists = promisify(fs.exists); const fsMkdir = promisify(fs.mkdir); const fsCopyFile = promisify(fs.copyFile); const fsReaddir = promisify(fs.readdir); // Get file contents and create the new files in the folder export const createFiles = async (loc: IPath, files: IFiles[]) => { try { await writeFiles(files); } catch (ex) { await window.showErrorMessage(`File(s) could not be created. ${ex}`); } return loc.dirPath; }; const writeFiles = async (files: IFiles[]) => { // tslint:disable-next-line:ter-arrow-parens const filesPromises: Promise<any>[] = files.map((file) => { try { return fsWriteFile(file.name, file.content.toString()); } catch (_) { console.log(_); } }); await Promise.all(filesPromises); }; // Create the new folder export const createFolder = async (loc: IPath) => { try { if (loc.dirName) { const exists = await fsExists(loc.dirPath); if (exists) { throw new Error('Folder already exists'); } await fsMkdir(loc.dirPath); } } catch (_) { console.log(_); } return loc; }; export const createDirectory = async (pathDir: String) => { if (pathDir) { try { const exists = await fsExists(pathDir); if (exists) { return; } await fsMkdir(pathDir); } catch (_) { console.log(_); } } return; }; /** * Look ma, it's cp -R. * @param {string} src The path to the thing to copy. * @param {string} dest The path to the new copy. */ export const copyRecursiveSync = async (src: string, dest: string) => { const exists = fs.existsSync(src); const stats = exists && fs.statSync(src); const isDirectory = exists && stats.isDirectory(); console.log('isDirectory', isDirectory); if (isDirectory) { console.log('dest', dest); await createDirectory(dest); console.log('finish dest'); console.log('fs.readdirSync(src)', await fsReaddir(src)); const items = await fsReaddir(src); items.forEach((childItemName) => { console.log('childItemName', childItemName); copyRecursiveSync(path.join(src, childItemName), path.join(dest, childItemName)); }); } else { console.log('fsCopyFile'); await fsCopyFile(src, dest); // UPDATE FROM: fs.linkSync(src, dest); } };