UNPKG

generator-code

Version:

Yeoman generator for Visual Studio Code extensions.

91 lines (83 loc) 3.58 kB
/*--------------------------------------------------------- * Copyright (C) Microsoft Corporation. All rights reserved. *--------------------------------------------------------*/ import Generator from 'yeoman-generator'; import * as prompts from './prompts.js'; import * as childProcess from 'child_process'; /** * @typedef {{ * extensionList: string[], * isCustomization: boolean * } & import('./index.js').ExtensionConfig} ExtensionConfig */ /** * @type {import('./index.js').ExtensionGenerator} */ export default { id: 'ext-extensionpack', aliases: ['extensionpack'], name: 'New Extension Pack', /** * @param {Generator} generator * @param {ExtensionConfig} extensionConfig */ prompting: async (generator, extensionConfig) => { await askForExtensionPackInfo(generator, extensionConfig); await prompts.askForExtensionDisplayName(generator, extensionConfig); await prompts.askForExtensionId(generator, extensionConfig); await prompts.askForExtensionDescription(generator, extensionConfig); await prompts.askForGit(generator, extensionConfig); }, /** * @param {Generator} generator * @param {ExtensionConfig} extensionConfig */ writing: (generator, extensionConfig) => { generator.fs.copy(generator.templatePath('vscode'), generator.destinationPath('.vscode')); generator.fs.copyTpl(generator.templatePath('package.json'), generator.destinationPath('package.json'), extensionConfig); generator.fs.copyTpl(generator.templatePath('vsc-extension-quickstart.md'), generator.destinationPath('vsc-extension-quickstart.md'), extensionConfig); generator.fs.copyTpl(generator.templatePath('README.md'), generator.destinationPath('README.md'), extensionConfig); generator.fs.copyTpl(generator.templatePath('CHANGELOG.md'), generator.destinationPath('CHANGELOG.md'), extensionConfig); generator.fs.copy(generator.templatePath('.vscodeignore'), generator.destinationPath('.vscodeignore')); if (extensionConfig.gitInit) { generator.fs.copy(generator.templatePath('gitignore'), generator.destinationPath('.gitignore')); generator.fs.copy(generator.templatePath('.gitattributes'), generator.destinationPath('.gitattributes')); } } } /** * @param {Generator} generator * @param {ExtensionConfig} extensionConfig */ function askForExtensionPackInfo(generator, extensionConfig) { extensionConfig.isCustomization = true; const defaultExtensionList = ['publisher.extensionName']; const getExtensionList = () => new Promise((resolve, reject) => { childProcess.exec( 'code --list-extensions', (error, stdout, stderr) => { if (error) { generator.log.error(error); } else { let out = stdout.trim(); if (out.length > 0) { extensionConfig.extensionList = out.split(/\s/); } } resolve(); } ); }); return generator.prompt({ type: 'confirm', name: 'addExtensions', message: 'Add the currently installed extensions to the extension pack?', default: true }).then(addExtensionsAnswer => { extensionConfig.extensionList = defaultExtensionList; if (addExtensionsAnswer.addExtensions) { return getExtensionList(); } }); }