Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/extensions/copilot/test/simulation/fixtures/multiFileEdit/two-edits/generate-command-ts.js
13405 views
1
/*---------------------------------------------------------
2
* Copyright (C) Microsoft Corporation. All rights reserved.
3
*--------------------------------------------------------*/
4
import Generator from 'yeoman-generator';
5
import * as prompts from './prompts.js';
6
7
/**
8
* @typedef {import('./index.js').ExtensionConfig} ExtensionConfig
9
*/
10
11
12
const chalk = new Chalk();
13
14
/**
15
* @type {import('./index.js').ExtensionGenerator}
16
*/
17
export default {
18
id: 'ext-command-ts',
19
aliases: ['ts', 'command-ts'],
20
name: 'New Extension (TypeScript)',
21
insidersName: 'New Extension with Proposed API (TypeScript)',
22
/**
23
* @param {Generator} generator
24
* @param {ExtensionConfig} extensionConfig
25
*/
26
prompting: async (generator, extensionConfig) => {
27
await prompts.askForExtensionDisplayName(generator, extensionConfig);
28
await prompts.askForExtensionId(generator, extensionConfig);
29
await prompts.askForExtensionDescription(generator, extensionConfig);
30
31
await prompts.askForGit(generator, extensionConfig);
32
await prompts.askForBundler(generator, extensionConfig);
33
await prompts.askForPackageManager(generator, extensionConfig);
34
},
35
/**
36
* @param {Generator} generator
37
* @param {ExtensionConfig} extensionConfig
38
*/
39
writing: (generator, extensionConfig) => {
40
const bundler = extensionConfig.bundler;
41
if (bundler && (bundler === 'webpack' || bundler === 'esbuild')) {
42
const bundlerPath = bundler === 'esbuild' ? 'vscode-esbuild' : 'vscode-webpack';
43
const bundlerFile = bundler === 'esbuild' ? 'esbuild.js' : 'webpack.config.js';
44
generator.fs.copy(generator.templatePath(bundlerPath, 'vscode'), generator.destinationPath('.vscode'));
45
generator.fs.copyTpl(generator.templatePath(bundlerPath, 'package.json'), generator.destinationPath('package.json'), extensionConfig);
46
generator.fs.copyTpl(generator.templatePath(bundlerPath, 'tsconfig.json'), generator.destinationPath('tsconfig.json'), extensionConfig);
47
generator.fs.copyTpl(generator.templatePath(bundlerPath, '.vscodeignore'), generator.destinationPath('.vscodeignore'), extensionConfig);
48
generator.fs.copyTpl(generator.templatePath(bundlerPath, bundlerFile), generator.destinationPath(bundlerFile), extensionConfig);
49
generator.fs.copyTpl(generator.templatePath(bundlerPath, 'vsc-extension-quickstart.md'), generator.destinationPath('vsc-extension-quickstart.md'), extensionConfig);
50
} else {
51
generator.fs.copy(generator.templatePath('vscode'), generator.destinationPath('.vscode'));
52
generator.fs.copyTpl(generator.templatePath('package.json'), generator.destinationPath('package.json'), extensionConfig);
53
generator.fs.copyTpl(generator.templatePath('tsconfig.json'), generator.destinationPath('tsconfig.json'), extensionConfig);
54
generator.fs.copyTpl(generator.templatePath('.vscodeignore'), generator.destinationPath('.vscodeignore'), extensionConfig);
55
generator.fs.copyTpl(generator.templatePath('vsc-extension-quickstart.md'), generator.destinationPath('vsc-extension-quickstart.md'), extensionConfig);
56
}
57
58
if (extensionConfig.gitInit) {
59
generator.fs.copy(generator.templatePath('gitignore'), generator.destinationPath('.gitignore'));
60
}
61
generator.fs.copyTpl(generator.templatePath('README.md'), generator.destinationPath('README.md'), extensionConfig);
62
generator.fs.copyTpl(generator.templatePath('CHANGELOG.md'), generator.destinationPath('CHANGELOG.md'), extensionConfig);
63
generator.fs.copyTpl(generator.templatePath('src/extension.ts'), generator.destinationPath('src/extension.ts'), extensionConfig);
64
generator.fs.copy(generator.templatePath('src/test'), generator.destinationPath('src/test'));
65
generator.fs.copy(generator.templatePath('.vscode-test.mjs'), generator.destinationPath('.vscode-test.mjs'));
66
generator.fs.copy(generator.templatePath('eslint.config.mjs'), generator.destinationPath('eslint.config.mjs'));
67
68
if (extensionConfig.pkgManager === 'yarn') {
69
generator.fs.copyTpl(generator.templatePath('.yarnrc'), generator.destinationPath('.yarnrc'), extensionConfig);
70
} else if (extensionConfig.pkgManager === 'pnpm') {
71
generator.fs.copyTpl(generator.templatePath('.npmrc-pnpm'), generator.destinationPath('.npmrc'), extensionConfig);
72
}
73
74
extensionConfig.installDependencies = true;
75
extensionConfig.proposedAPI = extensionConfig.insiders;
76
},
77
78
/**
79
* @param {Generator} generator
80
* @param {ExtensionConfig} extensionConfig
81
*/
82
endMessage: (generator, extensionConfig) => {
83
if (extensionConfig.bundler === 'webpack') {
84
generator.log(chalk.yellow(`To run the extension you need to install the recommended extension 'amodio.tsl-problem-matcher'.`));
85
generator.log('');
86
} else if (extensionConfig.bundler === 'esbuild') {
87
generator.log(chalk.yellow(`To run the extension you need to install the recommended extension 'connor4312.esbuild-problem-matchers'.`));
88
generator.log('');
89
}
90
}
91
}
92
93