generator-code 1.11.0 → 1.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,18 +4,18 @@
4
4
  "version": "0.0.0",
5
5
  "private": true,
6
6
  "dependencies": {
7
- "@types/mocha": "^10.0.6",
7
+ "@types/mocha": "^10.0.7",
8
8
  "@types/node": "20.x",
9
9
  "@types/assert": "^1.5.10",
10
- "@typescript-eslint/eslint-plugin": "^7.11.0",
10
+ "@typescript-eslint/eslint-plugin": "^7.14.1",
11
11
  "@typescript-eslint/parser": "^7.11.0",
12
12
  "eslint": "^8.57.0",
13
- "glob": "^10.4.1",
14
- "mocha": "^10.4.0",
13
+ "glob": "^10.4.2",
14
+ "mocha": "^10.5.2",
15
15
  "typescript": "^5.4.5",
16
16
  "@vscode/test-cli": "^0.0.9",
17
17
  "@vscode/test-electron": "^2.4.0",
18
- "@vscode/test-web": "^0.0.54",
18
+ "@vscode/test-web": "^0.0.55",
19
19
  "@types/webpack-env": "^1.18.5",
20
20
  "@types/vscode-notebook-renderer": "^1.72.3",
21
21
  "concurrently": "^8.2.2",
@@ -25,7 +25,7 @@
25
25
  "ts-loader": "^9.5.1",
26
26
  "vscode-dts": "^0.3.3",
27
27
  "vscode-notebook-error-overlay": "^1.0.1",
28
- "webpack": "^5.92.0",
28
+ "webpack": "^5.92.1",
29
29
  "util": "^0.12.5",
30
30
  "webpack-cli": "^5.1.4",
31
31
  "webpack-dev-server": "^5.0.4",
@@ -9,13 +9,27 @@ import * as fs from 'fs';
9
9
  import * as plistParser from 'fast-plist';
10
10
  import request from 'request-light';
11
11
 
12
+ /**
13
+ * @typedef {{
14
+ * themeContent: Object,
15
+ * themeName: string,
16
+ * themeBase: string,
17
+ * themeFileName: string,
18
+ * tmThemeFileName: string,
19
+ * tmThemeContent: string,
20
+ * } & import('./index.js').ExtensionConfig} ExtensionConfig
21
+ */
22
+
23
+ /**
24
+ * @type {import('./index.js').ExtensionGenerator}
25
+ */
12
26
  export default {
13
27
  id: 'ext-colortheme',
14
28
  aliases: ['colortheme'],
15
29
  name: 'New Color Theme',
16
30
  /**
17
31
  * @param {Generator} generator
18
- * @param {Object} extensionConfig
32
+ * @param {ExtensionConfig} extensionConfig
19
33
  */
20
34
  prompting: async (generator, extensionConfig) => {
21
35
 
@@ -63,7 +77,7 @@ export default {
63
77
  },
64
78
  /**
65
79
  * @param {Generator} generator
66
- * @param {Object} extensionConfig
80
+ * @param {ExtensionConfig} extensionConfig
67
81
  */
68
82
  writing: (generator, extensionConfig) => {
69
83
  if (extensionConfig.tmThemeFileName) {
@@ -92,7 +106,7 @@ export default {
92
106
 
93
107
  /**
94
108
  * @param {Generator} generator
95
- * @param {Object} extensionConfig
109
+ * @param {ExtensionConfig} extensionConfig
96
110
  */
97
111
  async function askForThemeInfo(generator, extensionConfig) {
98
112
  if (generator.options['quick']) {
@@ -132,7 +146,12 @@ async function askForThemeInfo(generator, extensionConfig) {
132
146
  await convertTheme(null, extensionConfig, false, generator);
133
147
  }
134
148
  }
135
-
149
+ /**
150
+ * @param {string} location
151
+ * @param {ExtensionConfig} extensionConfig
152
+ * @param {boolean} inline
153
+ * @param {Generator} generator
154
+ */
136
155
  function convertTheme(location, extensionConfig, inline, generator) {
137
156
  if (!location) {
138
157
  extensionConfig.tmThemeFileName = '';
@@ -187,6 +206,12 @@ function convertTheme(location, extensionConfig, inline, generator) {
187
206
  }
188
207
  }
189
208
 
209
+ /**
210
+ * @param {ExtensionConfig} extensionConfig
211
+ * @param {string} tmThemeFileName
212
+ * @param {string} body
213
+ * @param {Generator} generator
214
+ */
190
215
  function processContent(extensionConfig, tmThemeFileName, body, generator) {
191
216
  const themeNameMatch = body.match(/<key>name<\/key>\s*<string>([^<]*)/);
192
217
  const themeName = themeNameMatch ? themeNameMatch[1] : '';
@@ -235,6 +260,11 @@ const mappings = {
235
260
  "ansiBrightCyan": ["terminal.ansiBrightCyan"], "ansiBrightWhite": ["terminal.ansiBrightWhite"]
236
261
  };
237
262
 
263
+ /**
264
+ * @param {string} content
265
+ * @param {string} tmThemeFileName
266
+ * @param {Generator} generator
267
+ */
238
268
  function migrate(content, tmThemeFileName, generator) {
239
269
  let result = {};
240
270
  let theme;
@@ -4,13 +4,23 @@
4
4
  import Generator from 'yeoman-generator';
5
5
  import * as prompts from './prompts.js';
6
6
 
7
+
8
+ /**
9
+ * @typedef {{
10
+ * checkJavaScript: boolean
11
+ * } & import('./index.js').ExtensionConfig} ExtensionConfig
12
+ */
13
+
14
+ /**
15
+ * @type {import('./index.js').ExtensionGenerator}
16
+ */
7
17
  export default {
8
18
  id: 'ext-command-js',
9
19
  aliases: ['js', 'command-js'],
10
20
  name: 'New Extension (JavaScript)',
11
21
  /**
12
22
  * @param {Generator} generator
13
- * @param {Object} extensionConfig
23
+ * @param {ExtensionConfig} extensionConfig
14
24
  */
15
25
  prompting: async (generator, extensionConfig) => {
16
26
  await prompts.askForExtensionDisplayName(generator, extensionConfig);
@@ -33,7 +43,7 @@ export default {
33
43
 
34
44
  /**
35
45
  * @param {Generator} generator
36
- * @param {Object} extensionConfig
46
+ * @param {ExtensionConfig} extensionConfig
37
47
  */
38
48
  writing: (generator, extensionConfig) => {
39
49
  generator.fs.copy(generator.templatePath('vscode'), generator.destinationPath('.vscode'));
@@ -5,8 +5,16 @@ import Generator from 'yeoman-generator';
5
5
  import { Chalk } from 'chalk';
6
6
  import * as prompts from './prompts.js';
7
7
 
8
+ /**
9
+ * @typedef {import('./index.js').ExtensionConfig} ExtensionConfig
10
+ */
11
+
12
+
8
13
  const chalk = new Chalk();
9
14
 
15
+ /**
16
+ * @type {import('./index.js').ExtensionGenerator}
17
+ */
10
18
  export default {
11
19
  id: 'ext-command-ts',
12
20
  aliases: ['ts', 'command-ts'],
@@ -14,7 +22,7 @@ export default {
14
22
  insidersName: 'New Extension with Proposed API (TypeScript)',
15
23
  /**
16
24
  * @param {Generator} generator
17
- * @param {Object} extensionConfig
25
+ * @param {ExtensionConfig} extensionConfig
18
26
  */
19
27
  prompting: async (generator, extensionConfig) => {
20
28
  await prompts.askForExtensionDisplayName(generator, extensionConfig);
@@ -27,7 +35,7 @@ export default {
27
35
  },
28
36
  /**
29
37
  * @param {Generator} generator
30
- * @param {Object} extensionConfig
38
+ * @param {ExtensionConfig} extensionConfig
31
39
  */
32
40
  writing: (generator, extensionConfig) => {
33
41
  const bundler = extensionConfig.bundler;
@@ -70,12 +78,15 @@ export default {
70
78
 
71
79
  /**
72
80
  * @param {Generator} generator
73
- * @param {Object} extensionConfig
81
+ * @param {ExtensionConfig} extensionConfig
74
82
  */
75
83
  endMessage: (generator, extensionConfig) => {
76
- if (extensionConfig.webpack) {
84
+ if (extensionConfig.bundler === 'webpack') {
77
85
  generator.log(chalk.yellow(`To run the extension you need to install the recommended extension 'amodio.tsl-problem-matcher'.`));
78
86
  generator.log('');
87
+ } else if (extensionConfig.bundler === 'esbuild') {
88
+ generator.log(chalk.yellow(`To run the extension you need to install the recommended extension 'connor4312.esbuild-problem-matchers'.`));
89
+ generator.log('');
79
90
  }
80
91
  }
81
92
  }
@@ -5,15 +5,21 @@ import Generator from 'yeoman-generator';
5
5
  import { Chalk } from 'chalk';
6
6
  import * as prompts from './prompts.js';
7
7
 
8
+ /**
9
+ * @typedef {import('./index.js').ExtensionConfig} ExtensionConfig
10
+ */
8
11
  const chalk = new Chalk();
9
12
 
13
+ /**
14
+ * @type {import('./index.js').ExtensionGenerator}
15
+ */
10
16
  export default {
11
17
  id: 'ext-command-web',
12
18
  aliases: ['web', 'command-web'],
13
19
  name: 'New Web Extension (TypeScript)',
14
20
  /**
15
21
  * @param {Generator} generator
16
- * @param {Object} extensionConfig
22
+ * @param {ExtensionConfig} extensionConfig
17
23
  */
18
24
  prompting: async (generator, extensionConfig) => {
19
25
  await prompts.askForExtensionDisplayName(generator, extensionConfig);
@@ -26,7 +32,7 @@ export default {
26
32
  },
27
33
  /**
28
34
  * @param {Generator} generator
29
- * @param {Object} extensionConfig
35
+ * @param {ExtensionConfig} extensionConfig
30
36
  */
31
37
  writing: (generator, extensionConfig) => {
32
38
  const bundler = extensionConfig.bundler;
@@ -72,10 +78,15 @@ export default {
72
78
  },
73
79
  /**
74
80
  * @param {Generator} generator
75
- * @param {Object} extensionConfig
81
+ * @param {ExtensionConfig} extensionConfig
76
82
  */
77
83
  endMessage: (generator, extensionConfig) => {
78
- generator.log(chalk.yellow(`To run the extension you need to install the recommended extension 'amodio.tsl-problem-matcher'.`));
79
- generator.log('');
84
+ if (extensionConfig.bundler === 'webpack') {
85
+ generator.log(chalk.yellow(`To run the extension you need to install the recommended extension 'amodio.tsl-problem-matcher'.`));
86
+ generator.log('');
87
+ } else if (extensionConfig.bundler === 'esbuild') {
88
+ generator.log(chalk.yellow(`To run the extension you need to install the recommended extension 'connor4312.esbuild-problem-matchers'.`));
89
+ generator.log('');
90
+ }
80
91
  }
81
92
  }
@@ -5,13 +5,24 @@ import Generator from 'yeoman-generator';
5
5
  import * as prompts from './prompts.js';
6
6
  import * as childProcess from 'child_process';
7
7
 
8
+
9
+ /**
10
+ * @typedef {{
11
+ * extensionList: string[],
12
+ * isCustomization: boolean
13
+ * } & import('./index.js').ExtensionConfig} ExtensionConfig
14
+ */
15
+
16
+ /**
17
+ * @type {import('./index.js').ExtensionGenerator}
18
+ */
8
19
  export default {
9
20
  id: 'ext-extensionpack',
10
21
  aliases: ['extensionpack'],
11
22
  name: 'New Extension Pack',
12
23
  /**
13
24
  * @param {Generator} generator
14
- * @param {Object} extensionConfig
25
+ * @param {ExtensionConfig} extensionConfig
15
26
  */
16
27
  prompting: async (generator, extensionConfig) => {
17
28
 
@@ -25,7 +36,7 @@ export default {
25
36
  },
26
37
  /**
27
38
  * @param {Generator} generator
28
- * @param {Object} extensionConfig
39
+ * @param {ExtensionConfig} extensionConfig
29
40
  */
30
41
  writing: (generator, extensionConfig) => {
31
42
  generator.fs.copy(generator.templatePath('vscode'), generator.destinationPath('.vscode'));
@@ -40,7 +51,10 @@ export default {
40
51
  }
41
52
  }
42
53
  }
43
-
54
+ /**
55
+ * @param {Generator} generator
56
+ * @param {ExtensionConfig} extensionConfig
57
+ */
44
58
  function askForExtensionPackInfo(generator, extensionConfig) {
45
59
  extensionConfig.isCustomization = true;
46
60
  const defaultExtensionList = ['publisher.extensionName'];
@@ -51,7 +65,7 @@ function askForExtensionPackInfo(generator, extensionConfig) {
51
65
  'code --list-extensions',
52
66
  (error, stdout, stderr) => {
53
67
  if (error) {
54
- generator.env.error(error);
68
+ generator.log.error(error);
55
69
  } else {
56
70
  let out = stdout.trim();
57
71
  if (out.length > 0) {
@@ -4,13 +4,20 @@
4
4
  import Generator from 'yeoman-generator';
5
5
  import * as prompts from './prompts.js';
6
6
 
7
+ /**
8
+ * @typedef { import('./index.js').ExtensionConfig} ExtensionConfig
9
+ */
10
+
11
+ /**
12
+ * @type {import('./index.js').ExtensionGenerator}
13
+ */
7
14
  export default {
8
15
  id: 'ext-keymap',
9
16
  aliases: ['keymap'],
10
17
  name: 'New Keymap',
11
18
  /**
12
19
  * @param {Generator} generator
13
- * @param {Object} extensionConfig
20
+ * @param {ExtensionConfig} extensionConfig
14
21
  */
15
22
  prompting: async (generator, extensionConfig) => {
16
23
  await prompts.askForExtensionDisplayName(generator, extensionConfig);
@@ -21,7 +28,7 @@ export default {
21
28
  },
22
29
  /**
23
30
  * @param {Generator} generator
24
- * @param {Object} extensionConfig
31
+ * @param {ExtensionConfig} extensionConfig
25
32
  */
26
33
  writing: (generator, extensionConfig) => {
27
34
  generator.fs.copy(generator.templatePath('vscode'), generator.destinationPath('.vscode'));
@@ -9,13 +9,28 @@ import * as plistParser from 'fast-plist';
9
9
  import request from 'request-light';
10
10
  import * as validator from './validator.js';
11
11
 
12
+ /**
13
+ * @typedef {{
14
+ * languageId: string,
15
+ * languageName: string,
16
+ * languageExtensions: string[],
17
+ * languageScopeName: string,
18
+ * languageContent: string,
19
+ * languageFileName: string,
20
+ * isCustomization: boolean
21
+ * } & import('./index.js').ExtensionConfig} ExtensionConfig
22
+ */
23
+
24
+ /**
25
+ * @type {import('./index.js').ExtensionGenerator}
26
+ */
12
27
  export default {
13
28
  id: 'ext-language',
14
29
  aliases: ['language'],
15
30
  name: 'New Language Support',
16
31
  /**
17
32
  * @param {Generator} generator
18
- * @param {Object} extensionConfig
33
+ * @param {ExtensionConfig} extensionConfig
19
34
  */
20
35
  prompting: async (generator, extensionConfig) => {
21
36
  await askForLanguageInfo(generator, extensionConfig);
@@ -34,7 +49,7 @@ export default {
34
49
  },
35
50
  /**
36
51
  * @param {Generator} generator
37
- * @param {Object} extensionConfig
52
+ * @param {ExtensionConfig} extensionConfig
38
53
  */
39
54
  writing: (generator, extensionConfig) => {
40
55
  if (!extensionConfig.languageContent) {
@@ -60,7 +75,7 @@ export default {
60
75
  }
61
76
  /**
62
77
  * @param {Generator} generator
63
- * @param {Object} extensionConfig
78
+ * @param {ExtensionConfig} extensionConfig
64
79
  */
65
80
  function askForLanguageInfo(generator, extensionConfig) {
66
81
  extensionConfig.isCustomization = true;
@@ -77,7 +92,7 @@ function askForLanguageInfo(generator, extensionConfig) {
77
92
 
78
93
  /**
79
94
  * @param {Generator} generator
80
- * @param {Object} extensionConfig
95
+ * @param {ExtensionConfig} extensionConfig
81
96
  */
82
97
  function askForLanguageId(generator, extensionConfig) {
83
98
  generator.log('Enter the id of the language. The id is an identifier and is single, lower-case name such as \'php\', \'javascript\'');
@@ -93,7 +108,7 @@ function askForLanguageId(generator, extensionConfig) {
93
108
 
94
109
  /**
95
110
  * @param {Generator} generator
96
- * @param {Object} extensionConfig
111
+ * @param {ExtensionConfig} extensionConfig
97
112
  */
98
113
  function askForLanguageName(generator, extensionConfig) {
99
114
  generator.log('Enter the name of the language. The name will be shown in the VS Code editor mode selector.');
@@ -109,7 +124,7 @@ function askForLanguageName(generator, extensionConfig) {
109
124
 
110
125
  /**
111
126
  * @param {Generator} generator
112
- * @param {Object} extensionConfig
127
+ * @param {ExtensionConfig} extensionConfig
113
128
  */
114
129
  function askForLanguageExtensions(generator, extensionConfig) {
115
130
  generator.log('Enter the file extensions of the language. Use commas to separate multiple entries (e.g. .ruby, .rb)');
@@ -125,7 +140,7 @@ function askForLanguageExtensions(generator, extensionConfig) {
125
140
 
126
141
  /**
127
142
  * @param {Generator} generator
128
- * @param {Object} extensionConfig
143
+ * @param {ExtensionConfig} extensionConfig
129
144
  */
130
145
  function askForLanguageScopeName(generator, extensionConfig) {
131
146
  generator.log('Enter the root scope name of the grammar (e.g. source.ruby)');
@@ -139,6 +154,10 @@ function askForLanguageScopeName(generator, extensionConfig) {
139
154
  });
140
155
  }
141
156
 
157
+ /**
158
+ * @param {string} location
159
+ * @param {ExtensionConfig} extensionConfig
160
+ */
142
161
  function convertGrammar(location, extensionConfig) {
143
162
  extensionConfig.languageId = '';
144
163
  extensionConfig.languageName = '';
@@ -189,6 +208,11 @@ function convertGrammar(location, extensionConfig) {
189
208
  }
190
209
  }
191
210
 
211
+ /**
212
+ * @param {ExtensionConfig} extensionConfig
213
+ * @param {string} fileName
214
+ * @param {string} body
215
+ */
192
216
  function processContent(extensionConfig, fileName, body) {
193
217
  let languageInfo;
194
218
  if (path.extname(fileName) === '.json') {
@@ -251,5 +275,5 @@ function processContent(extensionConfig, fileName, body) {
251
275
  extensionConfig.languageExtensions = languageId ? ['.' + languageId] : [];
252
276
  }
253
277
  extensionConfig.languageContent = body;
254
- return Promise.resolve(extensionConfig);
278
+ return Promise.resolve();
255
279
  };
@@ -5,15 +5,27 @@ import Generator from 'yeoman-generator';
5
5
  import * as prompts from './prompts.js';
6
6
  import { Chalk } from 'chalk';
7
7
 
8
+ /**
9
+ * @typedef {{
10
+ * lpLanguageId: string,
11
+ * lpLanguageName: string,
12
+ * lpLocalizedLanguageName: string,
13
+ * isCustomization: boolean
14
+ * } & import('./index.js').ExtensionConfig} ExtensionConfig
15
+ */
16
+
8
17
  const chalk = new Chalk();
9
18
 
19
+ /**
20
+ * @type {import('./index.js').ExtensionGenerator}
21
+ */
10
22
  export default {
11
23
  id: 'ext-localization',
12
24
  aliases: ['localization'],
13
25
  name: 'New Language Pack (Localization)',
14
26
  /**
15
27
  * @param {Generator} generator
16
- * @param {Object} extensionConfig
28
+ * @param {ExtensionConfig} extensionConfig
17
29
  */
18
30
  prompting: async (generator, extensionConfig) => {
19
31
 
@@ -29,7 +41,7 @@ export default {
29
41
  },
30
42
  /**
31
43
  * @param {Generator} generator
32
- * @param {Object} extensionConfig
44
+ * @param {ExtensionConfig} extensionConfig
33
45
  */
34
46
  writing: (generator, extensionConfig) => {
35
47
  generator.fs.copyTpl(generator.templatePath('package.json'), generator.destinationPath('package.json'), extensionConfig);
@@ -57,7 +69,7 @@ export default {
57
69
 
58
70
  /**
59
71
  * @param {Generator} generator
60
- * @param {Object} extensionConfig
72
+ * @param {ExtensionConfig} extensionConfig
61
73
  */
62
74
  function askForLanguageId(generator, extensionConfig) {
63
75
  extensionConfig.isCustomization = true;
@@ -77,7 +89,7 @@ function askForLanguageId(generator, extensionConfig) {
77
89
 
78
90
  /**
79
91
  * @param {Generator} generator
80
- * @param {Object} extensionConfig
92
+ * @param {ExtensionConfig} extensionConfig
81
93
  */
82
94
  function askForLanguageName(generator, extensionConfig) {
83
95
  extensionConfig.isCustomization = true;
@@ -100,7 +112,7 @@ function askForLanguageName(generator, extensionConfig) {
100
112
 
101
113
  /**
102
114
  * @param {Generator} generator
103
- * @param {Object} extensionConfig
115
+ * @param {ExtensionConfig} extensionConfig
104
116
  */
105
117
  function askForLocalizedLanguageName(generator, extensionConfig) {
106
118
  extensionConfig.isCustomization = true;
@@ -4,13 +4,20 @@
4
4
  import Generator from 'yeoman-generator';
5
5
  import * as prompts from './prompts.js';
6
6
 
7
+ /**
8
+ * @typedef {import('./index.js').ExtensionConfig} ExtensionConfig
9
+ */
10
+
11
+ /**
12
+ * @type {import('./index.js').ExtensionGenerator}
13
+ */
7
14
  export default {
8
15
  id: 'ext-notebook-renderer',
9
16
  aliases: ['notebook'],
10
17
  name: 'New Notebook Renderer (TypeScript)',
11
18
  /**
12
19
  * @param {Generator} generator
13
- * @param {Object} extensionConfig
20
+ * @param {ExtensionConfig} extensionConfig
14
21
  */
15
22
  prompting: async (generator, extensionConfig) => {
16
23
  await prompts.askForExtensionDisplayName(generator, extensionConfig);
@@ -25,7 +32,7 @@ export default {
25
32
  },
26
33
  /**
27
34
  * @param {Generator} generator
28
- * @param {Object} extensionConfig
35
+ * @param {ExtensionConfig} extensionConfig
29
36
  */
30
37
  writing: (generator, extensionConfig) => {
31
38
 
@@ -62,7 +69,7 @@ export default {
62
69
 
63
70
  /**
64
71
  * @param {Generator} generator
65
- * @param {Object} extensionConfig
72
+ * @param {ExtensionConfig} extensionConfig
66
73
  */
67
74
  async function askForNotebookRendererInfo(generator, extensionConfig) {
68
75
  const answers = await generator.prompt([
@@ -7,13 +7,25 @@ import * as path from 'path';
7
7
  import * as fs from 'fs';
8
8
  import * as plistParser from 'fast-plist';
9
9
 
10
+
11
+ /**
12
+ * @typedef {{
13
+ * snippets: object,
14
+ * languageId: string,
15
+ * isCustomization: boolean
16
+ * } & import('./index.js').ExtensionConfig} ExtensionConfig
17
+ */
18
+
19
+ /**
20
+ * @type {import('./index.js').ExtensionGenerator}
21
+ */
10
22
  export default {
11
23
  id: 'ext-snippets',
12
24
  aliases: ['snippets'],
13
25
  name: 'New Code Snippets',
14
26
  /**
15
27
  * @param {Generator} generator
16
- * @param {Object} extensionConfig
28
+ * @param {ExtensionConfig} extensionConfig
17
29
  */
18
30
  prompting: async (generator, extensionConfig) => {
19
31
  await askForSnippetsInfo(generator, extensionConfig);
@@ -28,7 +40,7 @@ export default {
28
40
  },
29
41
  /**
30
42
  * @param {Generator} generator
31
- * @param {Object} extensionConfig
43
+ * @param {ExtensionConfig} extensionConfig
32
44
  */
33
45
  writing: (generator, extensionConfig) => {
34
46
  generator.fs.copy(generator.templatePath('vscode'), generator.destinationPath('.vscode'));
@@ -46,14 +58,14 @@ export default {
46
58
  }
47
59
  /**
48
60
  * @param {Generator} generator
49
- * @param {Object} extensionConfig
61
+ * @param {ExtensionConfig} extensionConfig
50
62
  */
51
63
  function askForSnippetsInfo(generator, extensionConfig) {
52
64
  extensionConfig.isCustomization = true;
53
65
  let snippetFolderParam = generator.options['snippetFolder'] || generator.options['extensionParam'];
54
66
 
55
67
  if (snippetFolderParam) {
56
- let count = processSnippetFolder(snippetFolderParam, generator);
68
+ let count = processSnippetFolder(snippetFolderParam, generator, extensionConfig);
57
69
  if (count <= 0) {
58
70
  generator.log('')
59
71
  }
@@ -72,7 +84,7 @@ function askForSnippetsInfo(generator, extensionConfig) {
72
84
  let snippetPath = snippetAnswer.snippetPath;
73
85
 
74
86
  if (typeof snippetPath === 'string' && snippetPath.length > 0) {
75
- const count = processSnippetFolder(snippetPath, generator);
87
+ const count = processSnippetFolder(snippetPath, generator, extensionConfig);
76
88
  if (count <= 0) {
77
89
  return snippetPrompt();
78
90
  }
@@ -91,7 +103,7 @@ function askForSnippetsInfo(generator, extensionConfig) {
91
103
 
92
104
  /**
93
105
  * @param {Generator} generator
94
- * @param {Object} extensionConfig
106
+ * @param {ExtensionConfig} extensionConfig
95
107
  */
96
108
  function askForSnippetLanguage(generator, extensionConfig) {
97
109
  let snippetLanguage = generator.options['snippetLanguage'] || generator.options['extensionParam2'];
@@ -111,8 +123,12 @@ function askForSnippetLanguage(generator, extensionConfig) {
111
123
  extensionConfig.languageId = idAnswer.languageId;
112
124
  });
113
125
  }
114
-
115
- function processSnippetFolder(folderPath, generator) {
126
+ /**
127
+ * @param {string} folderPath
128
+ * @param {Generator} generator
129
+ * @param {ExtensionConfig} extensionConfig
130
+ */
131
+ function processSnippetFolder(folderPath, generator, extensionConfig) {
116
132
  var errors = [], snippets = {};
117
133
  var snippetCount = 0;
118
134
  var languageId = null;
@@ -122,8 +138,8 @@ function processSnippetFolder(folderPath, generator) {
122
138
  generator.log("No valid snippets found in " + folderPath + (errors.length > 0 ? '.\n' + errors.join('\n') : ''));
123
139
  return count;
124
140
  }
125
- generator.extensionConfig.snippets = snippets;
126
- generator.extensionConfig.languageId = languageId;
141
+ extensionConfig.snippets = snippets;
142
+ extensionConfig.languageId = languageId;
127
143
  generator.log(count + " snippet(s) found and converted." + (errors.length > 0 ? '\n\nProblems while converting: \n' + errors.join('\n') : ''));
128
144
  return count;
129
145
 
@@ -20,6 +20,41 @@ import localization from './generate-localization.js';
20
20
  import notebook from './generate-notebook-renderer.js';
21
21
  import snippets from './generate-snippets.js';
22
22
 
23
+
24
+
25
+ /**
26
+ * @typedef {{
27
+ * insiders: boolean,
28
+ * installDependencies: boolean,
29
+ * dependencyVersions: Object.<string, string>,
30
+ * dep: (name: string) => string,
31
+ * vsCodeEngine: string,
32
+ * type: string,
33
+ * name: string,
34
+ * description: string,
35
+ * displayName: string,
36
+ * pkgManager: 'npm' | 'yarn' | 'pnpm',
37
+ * gitInit: boolean,
38
+ * bundler: 'webpack' | 'esbuild' | 'unbundled',
39
+ * proposedAPI: boolean,
40
+ * }} ExtensionConfig
41
+ *
42
+ * @typedef {{
43
+ * id: string,
44
+ * insidersName?: string,
45
+ * aliases: string[],
46
+ * name: string,
47
+ * update?: boolean,
48
+ * prompting: (generator: Generator, extensionConfig: ExtensionConfig) => Promise<void>,
49
+ * writing: (generator: Generator, extensionConfig: ExtensionConfig) => void,
50
+ * endMessage?: (generator: Generator, extensionConfig: ExtensionConfig) => void,
51
+ * }} ExtensionGenerator
52
+ */
53
+
54
+
55
+ /**
56
+ * @type {ExtensionGenerator[]}
57
+ */
23
58
  const extensionGenerators = [
24
59
  commandts, commandjs, colortheme, language, snippets, keymap, extensionpack, localization,
25
60
  commandweb, notebook
@@ -27,6 +62,11 @@ const extensionGenerators = [
27
62
 
28
63
  export default class extends Generator {
29
64
 
65
+ /**
66
+ * @type {ExtensionConfig}
67
+ */
68
+ extensionConfig;
69
+
30
70
  constructor(args, opts) {
31
71
  super(args, opts);
32
72
  this.description = 'Generates a Visual Studio Code extension ready for development.';
@@ -8,9 +8,13 @@ import Generator from 'yeoman-generator';
8
8
  import * as validator from './validator.js';
9
9
  import * as path from 'path';
10
10
 
11
+ /**
12
+ * @typedef {import('./index.js').ExtensionConfig} ExtensionConfig
13
+ */
14
+
11
15
  /**
12
16
  * @param {Generator} generator
13
- * @param {Object} extensionConfig
17
+ * @param {ExtensionConfig} extensionConfig
14
18
  */
15
19
  export function askForExtensionDisplayName(generator, extensionConfig) {
16
20
  let extensionDisplayName = generator.options['extensionDisplayName'];
@@ -38,7 +42,7 @@ export function askForExtensionDisplayName(generator, extensionConfig) {
38
42
  /**
39
43
  * Ask for extension id ("name" in package.json)
40
44
  * @param {Generator} generator
41
- * @param {Object} extensionConfig
45
+ * @param {ExtensionConfig} extensionConfig
42
46
  */
43
47
  export function askForExtensionId(generator, extensionConfig) {
44
48
  const extensionName = generator.options['extensionId'];
@@ -69,7 +73,7 @@ export function askForExtensionId(generator, extensionConfig) {
69
73
  /**
70
74
  * Ask for extension description
71
75
  * @param {Generator} generator
72
- * @param {Object} extensionConfig
76
+ * @param {ExtensionConfig} extensionConfig
73
77
  */
74
78
  export function askForExtensionDescription(generator, extensionConfig) {
75
79
  const extensionDescription = generator.options['extensionDescription'];
@@ -94,7 +98,7 @@ export function askForExtensionDescription(generator, extensionConfig) {
94
98
 
95
99
  /**
96
100
  * @param {Generator} generator
97
- * @param {Object} extensionConfig
101
+ * @param {ExtensionConfig} extensionConfig
98
102
  */
99
103
  export function askForGit(generator, extensionConfig) {
100
104
  const gitInit = generator.options['gitInit'];
@@ -119,7 +123,7 @@ export function askForGit(generator, extensionConfig) {
119
123
 
120
124
  /**
121
125
  * @param {Generator} generator
122
- * @param {Object} extensionConfig
126
+ * @param {ExtensionConfig} extensionConfig
123
127
  */
124
128
  export function askForPackageManager(generator, extensionConfig) {
125
129
  const pkgManager = generator.options['pkgManager'];
@@ -158,8 +162,9 @@ export function askForPackageManager(generator, extensionConfig) {
158
162
  }
159
163
 
160
164
  /**
161
- * @param {Generator} generator
162
- * @param {Object} extensionConfig
165
+ * @param {Generator} generator
166
+ * @param {ExtensionConfig} extensionConfig
167
+ * @param {'webpack' | 'esbuild' | 'unbundled'} defaultBundler
163
168
  */
164
169
  export function askForBundler(generator, extensionConfig, allowNone = true, defaultBundler = 'unbundled') {
165
170
  const bundler = generator.options['bundler'];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "generator-code",
3
- "version": "1.11.0",
3
+ "version": "1.11.1",
4
4
  "description": "Yeoman generator for Visual Studio Code extensions.",
5
5
  "keywords": [
6
6
  "yeoman-generator",
@@ -39,13 +39,13 @@
39
39
  "fast-plist": "^0.1.3",
40
40
  "request-light": "^0.7.0",
41
41
  "which": "^4.0.0",
42
- "yeoman-generator": "^7.2.0",
42
+ "yeoman-generator": "^7.3.2",
43
43
  "yosay": "^3.0.0"
44
44
  },
45
45
  "devDependencies": {
46
- "@types/mocha": "^10.0.6",
47
- "@types/node": "^18.18.5",
48
- "mocha": "^10.4.0",
46
+ "@types/mocha": "^10.0.7",
47
+ "@types/node": "^18.19.39",
48
+ "mocha": "^10.5.2",
49
49
  "yeoman-environment": "^4.4.1",
50
50
  "yeoman-test": "^8.3.0"
51
51
  }