generator-code 1.7.8 → 1.8.0

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,30 +4,30 @@
4
4
  "version": "0.0.0",
5
5
  "private": true,
6
6
  "dependencies": {
7
- "@types/mocha": "^10.0.1",
8
- "@types/node": "16.x",
9
- "@typescript-eslint/eslint-plugin": "^6.4.1",
10
- "@typescript-eslint/parser": "^6.4.1",
11
- "eslint": "^8.47.0",
12
- "glob": "^10.3.3",
7
+ "@types/mocha": "^10.0.3",
8
+ "@types/node": "18.x",
9
+ "@typescript-eslint/eslint-plugin": "^6.9.0",
10
+ "@typescript-eslint/parser": "^6.9.0",
11
+ "eslint": "^8.52.0",
12
+ "glob": "^10.3.10",
13
13
  "mocha": "^10.2.0",
14
- "typescript": "^5.1.6",
15
- "@vscode/test-electron": "^2.3.4",
16
- "@vscode/test-web": "^0.0.45",
17
- "@types/webpack-env": "^1.18.1",
18
- "@types/vscode-notebook-renderer": "^1.72.0",
19
- "concurrently": "^8.2.1",
14
+ "typescript": "^5.2.2",
15
+ "@vscode/test-electron": "^2.3.6",
16
+ "@vscode/test-web": "^0.0.48",
17
+ "@types/webpack-env": "^1.18.3",
18
+ "@types/vscode-notebook-renderer": "^1.72.2",
19
+ "concurrently": "^8.2.2",
20
20
  "css-loader": "^6.8.1",
21
- "fork-ts-checker-webpack-plugin": "^8.0.0",
21
+ "fork-ts-checker-webpack-plugin": "^9.0.0",
22
22
  "style-loader": "^3.3.3",
23
- "ts-loader": "^9.4.4",
23
+ "ts-loader": "^9.5.0",
24
24
  "vscode-dts": "^0.3.3",
25
25
  "vscode-notebook-error-overlay": "^1.0.1",
26
- "webpack": "^5.88.2",
26
+ "webpack": "^5.89.0",
27
27
  "util": "^0.12.5",
28
28
  "webpack-cli": "^5.1.4",
29
29
  "webpack-dev-server": "^4.15.1",
30
- "assert": "^2.0.0",
30
+ "assert": "^2.1.0",
31
31
  "process": "^0.11.10"
32
32
  }
33
33
  }
@@ -2,14 +2,15 @@
2
2
  * Copyright (C) Microsoft Corporation. All rights reserved.
3
3
  *--------------------------------------------------------*/
4
4
  'use strict';
5
- const request = require('request-light');
6
- const fs = require('fs');
7
- const path = require('path');
5
+ import request from 'request-light';
6
+ import * as fs from 'fs';
7
+ import * as path from 'path';
8
+ import { fileURLToPath } from 'url';
8
9
 
9
10
  const fallbackVersion = '^1.54.0';
10
11
  let versionPromise = undefined;
11
12
 
12
- function getLatestVSCodeVersion() {
13
+ export function getLatestVSCodeVersion() {
13
14
  if (!versionPromise) {
14
15
  versionPromise = request.xhr({ url: 'https://update.code.visualstudio.com/api/releases/stable', headers: { "X-API-Version": "2" } }).then(res => {
15
16
  if (res.status === 200) {
@@ -37,11 +38,11 @@ function getLatestVSCodeVersion() {
37
38
  }
38
39
  return versionPromise;
39
40
  };
40
- module.exports.getLatestVSCodeVersion = getLatestVSCodeVersion;
41
41
 
42
- module.exports.getDependencyVersions = async function () {
42
+ export async function getDependencyVersions() {
43
43
  const vscodeVersion = await getLatestVSCodeVersion();
44
- const versions = JSON.parse((await fs.promises.readFile(path.join(__dirname, 'dependencyVersions', 'package.json'))).toString()).dependencies;
44
+ const currentFileName = fileURLToPath(import.meta.url);
45
+ const versions = JSON.parse((await fs.promises.readFile(path.join(currentFileName, '..', 'dependencyVersions', 'package.json'))).toString()).dependencies;
45
46
  versions["@types/vscode"] = vscodeVersion
46
47
  return versions;
47
48
  }
@@ -1,21 +1,20 @@
1
1
  /*---------------------------------------------------------
2
2
  * Copyright (C) Microsoft Corporation. All rights reserved.
3
3
  *--------------------------------------------------------*/
4
+ import Generator from 'yeoman-generator';
5
+ import * as prompts from './prompts.js';
6
+ import * as validator from './validator.js';
7
+ import * as path from 'path';
8
+ import * as fs from 'fs';
9
+ import * as plistParser from 'fast-plist';
10
+ import request from 'request-light';
4
11
 
5
- const prompts = require("./prompts");
6
- const validator = require('./validator');
7
- const sanitize = require("sanitize-filename");
8
- const path = require('path');
9
- const fs = require('fs');
10
- const plistParser = require('fast-plist');
11
- const request = require('request-light');
12
-
13
- module.exports = {
12
+ export default {
14
13
  id: 'ext-colortheme',
15
14
  aliases: ['colortheme'],
16
15
  name: 'New Color Theme',
17
16
  /**
18
- * @param {import('yeoman-generator')} generator
17
+ * @param {Generator} generator
19
18
  * @param {Object} extensionConfig
20
19
  */
21
20
  prompting: async (generator, extensionConfig) => {
@@ -63,14 +62,14 @@ module.exports = {
63
62
  await prompts.askForGit(generator, extensionConfig);
64
63
  },
65
64
  /**
66
- * @param {import('yeoman-generator')} generator
65
+ * @param {Generator} generator
67
66
  * @param {Object} extensionConfig
68
67
  */
69
68
  writing: (generator, extensionConfig) => {
70
69
  if (extensionConfig.tmThemeFileName) {
71
70
  generator.fs.copyTpl(generator.templatePath('themes/theme.tmTheme'), generator.destinationPath('themes', extensionConfig.tmThemeFileName), extensionConfig);
72
71
  }
73
- extensionConfig.themeFileName = sanitize(extensionConfig.themeName + '-color-theme.json');
72
+ extensionConfig.themeFileName = validator.sanitizeFilename(extensionConfig.themeName + '-color-theme.json');
74
73
  if (extensionConfig.themeContent) {
75
74
  extensionConfig.themeContent.name = extensionConfig.themeName;
76
75
  generator.fs.copyTpl(generator.templatePath('themes/color-theme.json'), generator.destinationPath('themes', extensionConfig.themeFileName), extensionConfig);
@@ -92,7 +91,7 @@ module.exports = {
92
91
  }
93
92
 
94
93
  /**
95
- * @param {import('yeoman-generator')} generator
94
+ * @param {Generator} generator
96
95
  * @param {Object} extensionConfig
97
96
  */
98
97
  async function askForThemeInfo(generator, extensionConfig) {
@@ -1,15 +1,15 @@
1
1
  /*---------------------------------------------------------
2
2
  * Copyright (C) Microsoft Corporation. All rights reserved.
3
3
  *--------------------------------------------------------*/
4
+ import Generator from 'yeoman-generator';
5
+ import * as prompts from './prompts.js';
4
6
 
5
- const prompts = require("./prompts");
6
-
7
- module.exports = {
7
+ export default {
8
8
  id: 'ext-command-js',
9
9
  aliases: ['js', 'command-js'],
10
10
  name: 'New Extension (JavaScript)',
11
11
  /**
12
- * @param {import('yeoman-generator')} generator
12
+ * @param {Generator} generator
13
13
  * @param {Object} extensionConfig
14
14
  */
15
15
  prompting: async (generator, extensionConfig) => {
@@ -32,7 +32,7 @@ module.exports = {
32
32
  },
33
33
 
34
34
  /**
35
- * @param {import('yeoman-generator')} generator
35
+ * @param {Generator} generator
36
36
  * @param {Object} extensionConfig
37
37
  */
38
38
  writing: (generator, extensionConfig) => {
@@ -1,17 +1,19 @@
1
1
  /*---------------------------------------------------------
2
2
  * Copyright (C) Microsoft Corporation. All rights reserved.
3
3
  *--------------------------------------------------------*/
4
+ import Generator from 'yeoman-generator';
5
+ import { Chalk } from 'chalk';
6
+ import * as prompts from './prompts.js';
4
7
 
5
- const chalk = require("chalk");
6
- const prompts = require("./prompts");
8
+ const chalk = new Chalk();
7
9
 
8
- module.exports = {
10
+ export default {
9
11
  id: 'ext-command-ts',
10
12
  aliases: ['ts', 'command-ts'],
11
13
  name: 'New Extension (TypeScript)',
12
14
  insidersName: 'New Extension with Proposed API (TypeScript)',
13
15
  /**
14
- * @param {import('yeoman-generator')} generator
16
+ * @param {Generator} generator
15
17
  * @param {Object} extensionConfig
16
18
  */
17
19
  prompting: async (generator, extensionConfig) => {
@@ -24,7 +26,7 @@ module.exports = {
24
26
  await prompts.askForPackageManager(generator, extensionConfig);
25
27
  },
26
28
  /**
27
- * @param {import('yeoman-generator')} generator
29
+ * @param {Generator} generator
28
30
  * @param {Object} extensionConfig
29
31
  */
30
32
  writing: (generator, extensionConfig) => {
@@ -63,7 +65,7 @@ module.exports = {
63
65
  },
64
66
 
65
67
  /**
66
- * @param {import('yeoman-generator')} generator
68
+ * @param {Generator} generator
67
69
  * @param {Object} extensionConfig
68
70
  */
69
71
  endMessage: (generator, extensionConfig) => {
@@ -1,16 +1,18 @@
1
1
  /*---------------------------------------------------------
2
2
  * Copyright (C) Microsoft Corporation. All rights reserved.
3
3
  *--------------------------------------------------------*/
4
+ import Generator from 'yeoman-generator';
5
+ import { Chalk } from 'chalk';
6
+ import * as prompts from './prompts.js';
4
7
 
5
- const chalk = require("chalk");
6
- const prompts = require("./prompts");
8
+ const chalk = new Chalk();
7
9
 
8
- module.exports = {
10
+ export default {
9
11
  id: 'ext-command-web',
10
12
  aliases: ['web', 'command-web'],
11
13
  name: 'New Web Extension (TypeScript)',
12
14
  /**
13
- * @param {import('yeoman-generator')} generator
15
+ * @param {Generator} generator
14
16
  * @param {Object} extensionConfig
15
17
  */
16
18
  prompting: async (generator, extensionConfig) => {
@@ -22,7 +24,7 @@ module.exports = {
22
24
  await prompts.askForPackageManager(generator, extensionConfig);
23
25
  },
24
26
  /**
25
- * @param {import('yeoman-generator')} generator
27
+ * @param {Generator} generator
26
28
  * @param {Object} extensionConfig
27
29
  */
28
30
  writing: (generator, extensionConfig) => {
@@ -55,7 +57,7 @@ module.exports = {
55
57
  extensionConfig.proposedAPI = false;
56
58
  },
57
59
  /**
58
- * @param {import('yeoman-generator')} generator
60
+ * @param {Generator} generator
59
61
  * @param {Object} extensionConfig
60
62
  */
61
63
  endMessage: (generator, extensionConfig) => {
@@ -1,16 +1,16 @@
1
1
  /*---------------------------------------------------------
2
2
  * Copyright (C) Microsoft Corporation. All rights reserved.
3
3
  *--------------------------------------------------------*/
4
+ import Generator from 'yeoman-generator';
5
+ import * as prompts from './prompts.js';
6
+ import * as childProcess from 'child_process';
4
7
 
5
- const prompts = require("./prompts");
6
- let childProcess = require('child_process');
7
-
8
- module.exports = {
8
+ export default {
9
9
  id: 'ext-extensionpack',
10
10
  aliases: ['extensionpack'],
11
11
  name: 'New Extension Pack',
12
12
  /**
13
- * @param {import('yeoman-generator')} generator
13
+ * @param {Generator} generator
14
14
  * @param {Object} extensionConfig
15
15
  */
16
16
  prompting: async (generator, extensionConfig) => {
@@ -24,7 +24,7 @@ module.exports = {
24
24
  await prompts.askForGit(generator, extensionConfig);
25
25
  },
26
26
  /**
27
- * @param {import('yeoman-generator')} generator
27
+ * @param {Generator} generator
28
28
  * @param {Object} extensionConfig
29
29
  */
30
30
  writing: (generator, extensionConfig) => {
@@ -1,15 +1,15 @@
1
1
  /*---------------------------------------------------------
2
2
  * Copyright (C) Microsoft Corporation. All rights reserved.
3
3
  *--------------------------------------------------------*/
4
+ import Generator from 'yeoman-generator';
5
+ import * as prompts from './prompts.js';
4
6
 
5
- const prompts = require("./prompts");
6
-
7
- module.exports = {
7
+ export default {
8
8
  id: 'ext-keymap',
9
9
  aliases: ['keymap'],
10
10
  name: 'New Keymap',
11
11
  /**
12
- * @param {import('yeoman-generator')} generator
12
+ * @param {Generator} generator
13
13
  * @param {Object} extensionConfig
14
14
  */
15
15
  prompting: async (generator, extensionConfig) => {
@@ -20,7 +20,7 @@ module.exports = {
20
20
  await prompts.askForGit(generator, extensionConfig);
21
21
  },
22
22
  /**
23
- * @param {import('yeoman-generator')} generator
23
+ * @param {Generator} generator
24
24
  * @param {Object} extensionConfig
25
25
  */
26
26
  writing: (generator, extensionConfig) => {
@@ -1,20 +1,20 @@
1
1
  /*---------------------------------------------------------
2
2
  * Copyright (C) Microsoft Corporation. All rights reserved.
3
3
  *--------------------------------------------------------*/
4
-
5
- const prompts = require("./prompts");
6
- const sanitize = require("sanitize-filename");
7
- const path = require('path');
8
- const fs = require('fs');
9
- const plistParser = require('fast-plist');
10
- const request = require('request-light');
11
-
12
- module.exports = {
4
+ import Generator from 'yeoman-generator';
5
+ import * as prompts from './prompts.js';
6
+ import * as path from 'path';
7
+ import * as fs from 'fs';
8
+ import * as plistParser from 'fast-plist';
9
+ import request from 'request-light';
10
+ import * as validator from './validator.js';
11
+
12
+ export default {
13
13
  id: 'ext-language',
14
14
  aliases: ['language'],
15
15
  name: 'New Language Support',
16
16
  /**
17
- * @param {import('yeoman-generator')} generator
17
+ * @param {Generator} generator
18
18
  * @param {Object} extensionConfig
19
19
  */
20
20
  prompting: async (generator, extensionConfig) => {
@@ -33,16 +33,16 @@ module.exports = {
33
33
 
34
34
  },
35
35
  /**
36
- * @param {import('yeoman-generator')} generator
36
+ * @param {Generator} generator
37
37
  * @param {Object} extensionConfig
38
38
  */
39
39
  writing: (generator, extensionConfig) => {
40
40
  if (!extensionConfig.languageContent) {
41
- extensionConfig.languageFileName = sanitize(extensionConfig.languageId + '.tmLanguage.json');
41
+ extensionConfig.languageFileName = validator.sanitizeFilename(extensionConfig.languageId + '.tmLanguage.json');
42
42
 
43
43
  generator.fs.copyTpl(generator.templatePath('syntaxes/new.tmLanguage.json'), generator.destinationPath('syntaxes', extensionConfig.languageFileName), extensionConfig);
44
44
  } else {
45
- generator.fs.copyTpl(generator.templatePath('syntaxes/language.tmLanguage'), generator.destinationPath('syntaxes', sanitize(extensionConfig.languageFileName)), extensionConfig);
45
+ generator.fs.copyTpl(generator.templatePath('syntaxes/language.tmLanguage'), generator.destinationPath('syntaxes', validator.sanitizeFilename(extensionConfig.languageFileName)), extensionConfig);
46
46
  }
47
47
 
48
48
  generator.fs.copy(generator.templatePath('vscode'), generator.destinationPath('.vscode'));
@@ -59,7 +59,7 @@ module.exports = {
59
59
  }
60
60
  }
61
61
  /**
62
- * @param {import('yeoman-generator')} generator
62
+ * @param {Generator} generator
63
63
  * @param {Object} extensionConfig
64
64
  */
65
65
  function askForLanguageInfo(generator, extensionConfig) {
@@ -76,7 +76,7 @@ function askForLanguageInfo(generator, extensionConfig) {
76
76
  }
77
77
 
78
78
  /**
79
- * @param {import('yeoman-generator')} generator
79
+ * @param {Generator} generator
80
80
  * @param {Object} extensionConfig
81
81
  */
82
82
  function askForLanguageId(generator, extensionConfig) {
@@ -92,7 +92,7 @@ function askForLanguageId(generator, extensionConfig) {
92
92
  }
93
93
 
94
94
  /**
95
- * @param {import('yeoman-generator')} generator
95
+ * @param {Generator} generator
96
96
  * @param {Object} extensionConfig
97
97
  */
98
98
  function askForLanguageName(generator, extensionConfig) {
@@ -108,7 +108,7 @@ function askForLanguageName(generator, extensionConfig) {
108
108
  }
109
109
 
110
110
  /**
111
- * @param {import('yeoman-generator')} generator
111
+ * @param {Generator} generator
112
112
  * @param {Object} extensionConfig
113
113
  */
114
114
  function askForLanguageExtensions(generator, extensionConfig) {
@@ -124,7 +124,7 @@ function askForLanguageExtensions(generator, extensionConfig) {
124
124
  }
125
125
 
126
126
  /**
127
- * @param {import('yeoman-generator')} generator
127
+ * @param {Generator} generator
128
128
  * @param {Object} extensionConfig
129
129
  */
130
130
  function askForLanguageScopeName(generator, extensionConfig) {
@@ -154,10 +154,13 @@ function convertGrammar(location, extensionConfig) {
154
154
  // load from url
155
155
  return request.xhr({ url: location }).then(r => {
156
156
  if (r.status == 200) {
157
- var contentDisposition = r.headers && r.headers['content-disposition'];
158
- var fileName = '';
157
+ let contentDisposition = r.headers && r.headers['content-disposition'];
158
+ if (Array.isArray(contentDisposition)) {
159
+ contentDisposition = contentDisposition[0];
160
+ }
161
+ let fileName = '';
159
162
  if (contentDisposition) {
160
- var fileNameMatch = contentDisposition.match(/filename="([^"]*)/);
163
+ const fileNameMatch = contentDisposition.match(/filename="([^"]*)/);
161
164
  if (fileNameMatch) {
162
165
  fileName = fileNameMatch[1];
163
166
  }
@@ -170,7 +173,7 @@ function convertGrammar(location, extensionConfig) {
170
173
 
171
174
  } else {
172
175
  // load from disk
173
- var body = null;
176
+ let body = null;
174
177
  // trim the spaces of the location path
175
178
  location = location.trim()
176
179
  try {
@@ -187,7 +190,7 @@ function convertGrammar(location, extensionConfig) {
187
190
  }
188
191
 
189
192
  function processContent(extensionConfig, fileName, body) {
190
- var languageInfo;
193
+ let languageInfo;
191
194
  if (path.extname(fileName) === '.json') {
192
195
  try {
193
196
  languageInfo = JSON.parse(body);
@@ -212,19 +215,19 @@ function processContent(extensionConfig, fileName, body) {
212
215
  extensionConfig.languageName = languageInfo.name || '';
213
216
 
214
217
  // evaluate language id
215
- var languageId = '';
216
- var languageScopeName;
218
+ let languageId = '';
219
+ let languageScopeName;
217
220
 
218
221
  if (languageInfo.scopeName) {
219
222
  languageScopeName = languageInfo.scopeName;
220
223
 
221
- var lastIndexOfDot = languageInfo.scopeName.lastIndexOf('.');
224
+ const lastIndexOfDot = languageInfo.scopeName.lastIndexOf('.');
222
225
  if (lastIndexOfDot) {
223
226
  languageId = languageInfo.scopeName.substring(lastIndexOfDot + 1);
224
227
  }
225
228
  }
226
229
  if (!languageId && fileName) {
227
- var lastIndexOfDot2 = fileName.lastIndexOf('.');
230
+ const lastIndexOfDot2 = fileName.lastIndexOf('.');
228
231
  if (lastIndexOfDot2 && fileName.substring(lastIndexOfDot2 + 1) == 'tmLanguage') {
229
232
  languageId = fileName.substring(0, lastIndexOfDot2);
230
233
  }
@@ -1,16 +1,18 @@
1
1
  /*---------------------------------------------------------
2
2
  * Copyright (C) Microsoft Corporation. All rights reserved.
3
3
  *--------------------------------------------------------*/
4
+ import Generator from 'yeoman-generator';
5
+ import * as prompts from './prompts.js';
6
+ import { Chalk } from 'chalk';
4
7
 
5
- const prompts = require("./prompts");
6
- const chalk = require("chalk");
8
+ const chalk = new Chalk();
7
9
 
8
- module.exports = {
10
+ export default {
9
11
  id: 'ext-localization',
10
12
  aliases: ['localization'],
11
13
  name: 'New Language Pack (Localization)',
12
14
  /**
13
- * @param {import('yeoman-generator')} generator
15
+ * @param {Generator} generator
14
16
  * @param {Object} extensionConfig
15
17
  */
16
18
  prompting: async (generator, extensionConfig) => {
@@ -26,7 +28,7 @@ module.exports = {
26
28
  await prompts.askForPackageManager(generator, extensionConfig);
27
29
  },
28
30
  /**
29
- * @param {import('yeoman-generator')} generator
31
+ * @param {Generator} generator
30
32
  * @param {Object} extensionConfig
31
33
  */
32
34
  writing: (generator, extensionConfig) => {
@@ -54,7 +56,7 @@ module.exports = {
54
56
  }
55
57
 
56
58
  /**
57
- * @param {import('yeoman-generator')} generator
59
+ * @param {Generator} generator
58
60
  * @param {Object} extensionConfig
59
61
  */
60
62
  function askForLanguageId(generator, extensionConfig) {
@@ -74,7 +76,7 @@ function askForLanguageId(generator, extensionConfig) {
74
76
  }
75
77
 
76
78
  /**
77
- * @param {import('yeoman-generator')} generator
79
+ * @param {Generator} generator
78
80
  * @param {Object} extensionConfig
79
81
  */
80
82
  function askForLanguageName(generator, extensionConfig) {
@@ -97,7 +99,7 @@ function askForLanguageName(generator, extensionConfig) {
97
99
  }
98
100
 
99
101
  /**
100
- * @param {import('yeoman-generator')} generator
102
+ * @param {Generator} generator
101
103
  * @param {Object} extensionConfig
102
104
  */
103
105
  function askForLocalizedLanguageName(generator, extensionConfig) {
@@ -1,15 +1,15 @@
1
1
  /*---------------------------------------------------------
2
2
  * Copyright (C) Microsoft Corporation. All rights reserved.
3
3
  *--------------------------------------------------------*/
4
+ import Generator from 'yeoman-generator';
5
+ import * as prompts from './prompts.js';
4
6
 
5
- const prompts = require("./prompts");
6
-
7
- module.exports = {
7
+ export default {
8
8
  id: 'ext-notebook-renderer',
9
9
  aliases: ['notebook'],
10
10
  name: 'New Notebook Renderer (TypeScript)',
11
11
  /**
12
- * @param {import('yeoman-generator')} generator
12
+ * @param {Generator} generator
13
13
  * @param {Object} extensionConfig
14
14
  */
15
15
  prompting: async (generator, extensionConfig) => {
@@ -24,7 +24,7 @@ module.exports = {
24
24
 
25
25
  },
26
26
  /**
27
- * @param {import('yeoman-generator')} generator
27
+ * @param {Generator} generator
28
28
  * @param {Object} extensionConfig
29
29
  */
30
30
  writing: (generator, extensionConfig) => {
@@ -60,7 +60,7 @@ module.exports = {
60
60
  }
61
61
 
62
62
  /**
63
- * @param {import('yeoman-generator')} generator
63
+ * @param {Generator} generator
64
64
  * @param {Object} extensionConfig
65
65
  */
66
66
  async function askForNotebookRendererInfo(generator, extensionConfig) {
@@ -1,18 +1,18 @@
1
1
  /*---------------------------------------------------------
2
2
  * Copyright (C) Microsoft Corporation. All rights reserved.
3
3
  *--------------------------------------------------------*/
4
+ import Generator from 'yeoman-generator';
5
+ import * as prompts from "./prompts.js";
6
+ import * as path from 'path';
7
+ import * as fs from 'fs';
8
+ import * as plistParser from 'fast-plist';
4
9
 
5
- const prompts = require("./prompts");
6
- const path = require('path');
7
- const fs = require('fs');
8
- const plistParser = require('fast-plist');
9
-
10
- module.exports = {
10
+ export default {
11
11
  id: 'ext-snippets',
12
12
  aliases: ['snippets'],
13
13
  name: 'New Code Snippets',
14
14
  /**
15
- * @param {import('yeoman-generator')} generator
15
+ * @param {Generator} generator
16
16
  * @param {Object} extensionConfig
17
17
  */
18
18
  prompting: async (generator, extensionConfig) => {
@@ -27,7 +27,7 @@ module.exports = {
27
27
 
28
28
  },
29
29
  /**
30
- * @param {import('yeoman-generator')} generator
30
+ * @param {Generator} generator
31
31
  * @param {Object} extensionConfig
32
32
  */
33
33
  writing: (generator, extensionConfig) => {
@@ -45,7 +45,7 @@ module.exports = {
45
45
  }
46
46
  }
47
47
  /**
48
- * @param {import('yeoman-generator')} generator
48
+ * @param {Generator} generator
49
49
  * @param {Object} extensionConfig
50
50
  */
51
51
  function askForSnippetsInfo(generator, extensionConfig) {
@@ -90,7 +90,7 @@ function askForSnippetsInfo(generator, extensionConfig) {
90
90
  }
91
91
 
92
92
  /**
93
- * @param {import('yeoman-generator')} generator
93
+ * @param {Generator} generator
94
94
  * @param {Object} extensionConfig
95
95
  */
96
96
  function askForSnippetLanguage(generator, extensionConfig) {
@@ -3,30 +3,29 @@
3
3
  *--------------------------------------------------------*/
4
4
  'use strict';
5
5
 
6
- const Generator = require('yeoman-generator');
7
- const yosay = require('yosay');
8
-
9
- const path = require('path');
10
- const env = require('./env');
11
- const which = require('which');
12
-
13
- const colortheme = require('./generate-colortheme');
14
- const commandjs = require('./generate-command-js');
15
- const commandts = require('./generate-command-ts');
16
- const commandweb = require('./generate-command-web');
17
- const extensionpack = require('./generate-extensionpack');
18
- const keymap = require('./generate-keymap');
19
- const language = require('./generate-language');
20
- const localization = require('./generate-localization');
21
- const notebook = require('./generate-notebook-renderer');
22
- const snippets = require('./generate-snippets');
6
+ import Generator from 'yeoman-generator';
7
+ import yosay from 'yosay';
8
+ import { fileURLToPath } from 'url';
9
+ import * as path from 'path';
10
+ import * as env from './env.js';
11
+ import which from 'which';
12
+ import colortheme from './generate-colortheme.js';
13
+ import commandjs from './generate-command-js.js';
14
+ import commandts from './generate-command-ts.js';
15
+ import commandweb from './generate-command-web.js';
16
+ import extensionpack from './generate-extensionpack.js';
17
+ import keymap from './generate-keymap.js';
18
+ import language from './generate-language.js';
19
+ import localization from './generate-localization.js';
20
+ import notebook from './generate-notebook-renderer.js';
21
+ import snippets from './generate-snippets.js';
23
22
 
24
23
  const extensionGenerators = [
25
24
  commandts, commandjs, colortheme, language, snippets, keymap, extensionpack, localization,
26
25
  commandweb, notebook
27
26
  ]
28
27
 
29
- module.exports = class extends Generator {
28
+ export default class extends Generator {
30
29
 
31
30
  constructor(args, opts) {
32
31
  super(args, opts);
@@ -126,6 +125,7 @@ module.exports = class extends Generator {
126
125
  try {
127
126
  await this.extensionGenerator.prompting(this, this.extensionConfig);
128
127
  } catch (e) {
128
+ console.log(e);
129
129
  this.abort = true;
130
130
  }
131
131
 
@@ -143,7 +143,8 @@ module.exports = class extends Generator {
143
143
  this.log();
144
144
  this.log(`Writing in ${this.destinationPath()}...`);
145
145
 
146
- this.sourceRoot(path.join(__dirname, './templates/' + this.extensionConfig.type));
146
+ const currentFilename = fileURLToPath(import.meta.url);
147
+ this.sourceRoot(path.join(currentFilename, '../templates/' + this.extensionConfig.type));
147
148
 
148
149
  return this.extensionGenerator.writing(this, this.extensionConfig);
149
150
  }
@@ -151,12 +152,15 @@ module.exports = class extends Generator {
151
152
  // Installation
152
153
  install() {
153
154
  if (this.abort) {
155
+ // @ts-ignore
154
156
  this.env.options.skipInstall = true;
155
157
  return;
156
158
  }
157
159
  if (this.extensionConfig.installDependencies) {
160
+ // @ts-ignore
158
161
  this.env.options.nodePackageManager = this.extensionConfig.pkgManager;
159
162
  } else {
163
+ // @ts-ignore
160
164
  this.env.options.skipInstall = true;
161
165
  }
162
166
  }
@@ -185,7 +189,7 @@ module.exports = class extends Generator {
185
189
 
186
190
  // Git init
187
191
  if (this.extensionConfig.gitInit) {
188
- this.spawnCommand('git', ['init', '--quiet', '--initial-branch=main']);
192
+ this.spawnCommand('git', ['init', '--quiet']);
189
193
  }
190
194
 
191
195
  if (this.extensionConfig.proposedAPI) {
@@ -3,14 +3,16 @@
3
3
  * Copyright (C) Microsoft Corporation. All rights reserved.
4
4
  *--------------------------------------------------------*/
5
5
 
6
- const validator = require('./validator');
7
- const path = require('path');
6
+ import Generator from 'yeoman-generator';
7
+
8
+ import * as validator from './validator.js';
9
+ import * as path from 'path';
8
10
 
9
11
  /**
10
- * @param {import('yeoman-generator')} generator
12
+ * @param {Generator} generator
11
13
  * @param {Object} extensionConfig
12
14
  */
13
- exports.askForExtensionDisplayName = (generator, extensionConfig) => {
15
+ export function askForExtensionDisplayName(generator, extensionConfig) {
14
16
  let extensionDisplayName = generator.options['extensionDisplayName'];
15
17
  if (extensionDisplayName) {
16
18
  extensionConfig.displayName = extensionDisplayName;
@@ -35,10 +37,10 @@ exports.askForExtensionDisplayName = (generator, extensionConfig) => {
35
37
 
36
38
  /**
37
39
  * Ask for extension id ("name" in package.json)
38
- * @param {import('yeoman-generator')} generator
40
+ * @param {Generator} generator
39
41
  * @param {Object} extensionConfig
40
42
  */
41
- exports.askForExtensionId = (generator, extensionConfig) => {
43
+ export function askForExtensionId(generator, extensionConfig) {
42
44
  let extensionName = generator.options['extensionId'];
43
45
  if (extensionName) {
44
46
  extensionConfig.name = extensionName;
@@ -66,10 +68,10 @@ exports.askForExtensionId = (generator, extensionConfig) => {
66
68
 
67
69
  /**
68
70
  * Ask for extension description
69
- * @param {import('yeoman-generator')} generator
71
+ * @param {Generator} generator
70
72
  * @param {Object} extensionConfig
71
73
  */
72
- exports.askForExtensionDescription = (generator, extensionConfig) => {
74
+ export function askForExtensionDescription(generator, extensionConfig) {
73
75
  let extensionDescription = generator.options['extensionDescription'];
74
76
  if (extensionDescription) {
75
77
  extensionConfig.description = extensionDescription;
@@ -91,10 +93,10 @@ exports.askForExtensionDescription = (generator, extensionConfig) => {
91
93
  }
92
94
 
93
95
  /**
94
- * @param {import('yeoman-generator')} generator
96
+ * @param {Generator} generator
95
97
  * @param {Object} extensionConfig
96
98
  */
97
- exports.askForGit = (generator, extensionConfig) => {
99
+ export function askForGit(generator, extensionConfig) {
98
100
  let gitInit = generator.options['gitInit'];
99
101
  if (typeof gitInit === 'boolean') {
100
102
  extensionConfig.gitInit = Boolean(gitInit);
@@ -116,10 +118,10 @@ exports.askForGit = (generator, extensionConfig) => {
116
118
  }
117
119
 
118
120
  /**
119
- * @param {import('yeoman-generator')} generator
121
+ * @param {Generator} generator
120
122
  * @param {Object} extensionConfig
121
123
  */
122
- exports.askForPackageManager = (generator, extensionConfig) => {
124
+ export function askForPackageManager(generator, extensionConfig) {
123
125
  let pkgManager = generator.options['pkgManager'];
124
126
  if (pkgManager === 'npm' || pkgManager === 'yarn' || pkgManager === 'pnpm') {
125
127
  extensionConfig.pkgManager = pkgManager;
@@ -156,10 +158,10 @@ exports.askForPackageManager = (generator, extensionConfig) => {
156
158
  }
157
159
 
158
160
  /**
159
- * @param {import('yeoman-generator')} generator
161
+ * @param {Generator} generator
160
162
  * @param {Object} extensionConfig
161
163
  */
162
- exports.askForWebpack = (generator, extensionConfig) => {
164
+ export function askForWebpack(generator, extensionConfig) {
163
165
  let webpack = generator.options['webpack'];
164
166
  if (typeof webpack === 'boolean') {
165
167
  extensionConfig.webpack = Boolean(webpack);
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "compilerOptions": {
3
- "module": "commonjs",
4
- "target": "ES2020",
3
+ "module": "Node16",
4
+ "target": "ES2022",
5
5
  "checkJs": <%- JSON.stringify(checkJavaScript) %>, /* Typecheck .js files. */
6
6
  "lib": [
7
- "ES2020"
7
+ "ES2022"
8
8
  ]
9
9
  },
10
10
  "exclude": [
@@ -2,7 +2,7 @@ const path = require('path');
2
2
  const Mocha = require('mocha');
3
3
  const glob = require('glob');
4
4
 
5
- function run() {
5
+ async function run() {
6
6
  // Create the mocha test
7
7
  const mocha = new Mocha({
8
8
  ui: 'tdd',
@@ -10,34 +10,25 @@ function run() {
10
10
  });
11
11
 
12
12
  const testsRoot = path.resolve(__dirname, '..');
13
+ const files = await glob('**/**.test.js', { cwd: testsRoot });
13
14
 
14
- return new Promise((c, e) => {
15
- const testFiles = new glob.Glob('**/**.test.js', { cwd: testsRoot });
16
- const testFileStream = testFiles.stream();
15
+ // Add files to the test suite
16
+ files.forEach(f => mocha.addFile(path.resolve(testsRoot, f)));
17
17
 
18
- testFileStream.on('data', (file) => {
19
- // Add files to the test suite
20
- mocha.addFile(path.resolve(testsRoot, file));
18
+ try {
19
+ return new Promise((c, e) => {
20
+ // Run the mocha test
21
+ mocha.run(failures => {
22
+ if (failures > 0) {
23
+ e(new Error(`${failures} tests failed.`));
24
+ } else {
25
+ c();
26
+ }
27
+ });
21
28
  });
22
- testFileStream.on('error', (err) => {
23
- e(err);
24
- });
25
- testFileStream.on('end', () => {
26
- try {
27
- // Run the mocha test
28
- mocha.run(failures => {
29
- if (failures > 0) {
30
- e(new Error(`${failures} tests failed.`));
31
- } else {
32
- c();
33
- }
34
- });
35
- } catch (err) {
36
- console.error(err);
37
- e(err);
38
- }
39
- });
40
- });
29
+ } catch (err) {
30
+ console.error(err);
31
+ }
41
32
  }
42
33
 
43
34
  module.exports = {
@@ -9,7 +9,13 @@
9
9
  "@typescript-eslint"
10
10
  ],
11
11
  "rules": {
12
- "@typescript-eslint/naming-convention": "warn",
12
+ "@typescript-eslint/naming-convention": [
13
+ "warn",
14
+ {
15
+ "selector": "import",
16
+ "format": [ "camelCase", "PascalCase" ]
17
+ }
18
+ ],
13
19
  "@typescript-eslint/semi": "warn",
14
20
  "curly": "warn",
15
21
  "eqeqeq": "warn",
@@ -21,4 +27,4 @@
21
27
  "dist",
22
28
  "**/*.d.ts"
23
29
  ]
24
- }
30
+ }
@@ -1,8 +1,8 @@
1
1
  import * as path from 'path';
2
- import * as Mocha from 'mocha';
3
- import * as glob from 'glob';
2
+ import Mocha from 'mocha';
3
+ import { glob } from 'glob';
4
4
 
5
- export function run(): Promise<void> {
5
+ export async function run(): Promise<void> {
6
6
  // Create the mocha test
7
7
  const mocha = new Mocha({
8
8
  ui: 'tdd',
@@ -10,31 +10,23 @@ export function run(): Promise<void> {
10
10
  });
11
11
 
12
12
  const testsRoot = path.resolve(__dirname, '..');
13
+ const files = await glob('**/**.test.js', { cwd: testsRoot });
13
14
 
14
- return new Promise((c, e) => {
15
- const testFiles = new glob.Glob("**/**.test.js", { cwd: testsRoot });
16
- const testFileStream = testFiles.stream();
15
+ // Add files to the test suite
16
+ files.forEach(f => mocha.addFile(path.resolve(testsRoot, f)));
17
17
 
18
- testFileStream.on("data", (file) => {
19
- mocha.addFile(path.resolve(testsRoot, file));
18
+ try {
19
+ return new Promise<void>((c, e) => {
20
+ // Run the mocha test
21
+ mocha.run(failures => {
22
+ if (failures > 0) {
23
+ e(new Error(`${failures} tests failed.`));
24
+ } else {
25
+ c();
26
+ }
27
+ });
20
28
  });
21
- testFileStream.on("error", (err) => {
22
- e(err);
23
- });
24
- testFileStream.on("end", () => {
25
- try {
26
- // Run the mocha test
27
- mocha.run(failures => {
28
- if (failures > 0) {
29
- e(new Error(`${failures} tests failed.`));
30
- } else {
31
- c();
32
- }
33
- });
34
- } catch (err) {
35
- console.error(err);
36
- e(err);
37
- }
38
- });
39
- });
29
+ } catch (err) {
30
+ console.error(err);
31
+ }
40
32
  }
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "compilerOptions": {
3
- "module": "commonjs",
4
- "target": "ES2020",
3
+ "module": "Node16",
4
+ "target": "ES2022",
5
5
  "outDir": "out",
6
6
  "lib": [
7
- "ES2020"
7
+ "ES2022"
8
8
  ],
9
9
  "sourceMap": true,
10
10
  "rootDir": "src",
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "compilerOptions": {
3
- "module": "commonjs",
4
- "target": "ES2020",
3
+ "module": "Node16",
4
+ "target": "ES2022",
5
5
  "lib": [
6
- "ES2020"
6
+ "ES2022"
7
7
  ],
8
8
  "sourceMap": true,
9
9
  "rootDir": "src",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "compilerOptions": {
3
- "module": "commonjs",
3
+ "module": "Node16",
4
4
  "target": "ES2020",
5
5
  "outDir": "dist",
6
6
  "lib": [
@@ -1,40 +1,32 @@
1
1
  import * as path from 'path';
2
- import * as Mocha from 'mocha';
3
- import * as glob from 'glob';
2
+ import Mocha from 'mocha';
3
+ import { glob } from 'glob';
4
4
 
5
- export function run(): Promise<void> {
6
- // Create the mocha test
7
- const mocha = new Mocha({
8
- ui: 'tdd',
9
- color: true
10
- });
5
+ export async function run(): Promise<void> {
6
+ // Create the mocha test
7
+ const mocha = new Mocha({
8
+ ui: 'tdd',
9
+ color: true
10
+ });
11
11
 
12
- const testsRoot = path.resolve(__dirname, '..');
12
+ const testsRoot = path.resolve(__dirname, '..');
13
+ const files = await glob('**/**.test.js', { cwd: testsRoot });
13
14
 
14
- return new Promise((c, e) => {
15
- const testFiles = new glob.Glob("**/**.test.js", { cwd: testsRoot });
16
- const testFileStream = testFiles.stream();
15
+ // Add files to the test suite
16
+ files.forEach(f => mocha.addFile(path.resolve(testsRoot, f)));
17
17
 
18
- testFileStream.on("data", (file) => {
19
- mocha.addFile(path.resolve(testsRoot, file));
20
- });
21
- testFileStream.on("error", (err) => {
22
- e(err);
23
- });
24
- testFileStream.on("end", () => {
25
- try {
26
- // Run the mocha test
27
- mocha.run(failures => {
28
- if (failures > 0) {
29
- e(new Error(`${failures} tests failed.`));
30
- } else {
31
- c();
32
- }
33
- });
34
- } catch (err) {
35
- console.error(err);
36
- e(err);
37
- }
38
- });
39
- });
18
+ try {
19
+ return new Promise<void>((c, e) => {
20
+ // Run the mocha test
21
+ mocha.run(failures => {
22
+ if (failures > 0) {
23
+ e(new Error(`${failures} tests failed.`));
24
+ } else {
25
+ c();
26
+ }
27
+ });
28
+ });
29
+ } catch (err) {
30
+ console.error(err);
31
+ }
40
32
  }
@@ -1,12 +1,11 @@
1
1
  {
2
2
  "compilerOptions": {
3
- "module": "commonjs",
4
- "target": "ES2019",
3
+ "module": "Node16",
4
+ "target": "ES2022",
5
5
  "lib": [
6
- "ES2019"
6
+ "ES2022"
7
7
  ],
8
8
  "types": ["node"],
9
- "moduleResolution": "node",
10
9
  "sourceMap": true,
11
10
  "strict": true /* enable all strict type-checking options */
12
11
  /* Additional Checks */
@@ -3,7 +3,10 @@
3
3
  *--------------------------------------------------------*/
4
4
  var nameRegex = /^[a-z0-9][a-z0-9\-]*$/i;
5
5
 
6
- module.exports.validatePublisher = function(publisher) {
6
+ /**
7
+ * @param {string} publisher
8
+ */
9
+ export function validatePublisher(publisher) {
7
10
  if (!publisher) {
8
11
  return "Missing publisher name";
9
12
  }
@@ -15,7 +18,10 @@ module.exports.validatePublisher = function(publisher) {
15
18
  return true;
16
19
  }
17
20
 
18
- module.exports.validateExtensionId = function(id) {
21
+ /**
22
+ * @param {string} id
23
+ */
24
+ export function validateExtensionId(id) {
19
25
  if (!id) {
20
26
  return "Missing extension identifier";
21
27
  }
@@ -27,6 +33,27 @@ module.exports.validateExtensionId = function(id) {
27
33
  return true;
28
34
  }
29
35
 
30
- module.exports.validateNonEmpty = function(name) {
36
+ /**
37
+ * @param {string | any[]} name
38
+ */
39
+ export function validateNonEmpty(name) {
31
40
  return name && name.length > 0;
32
- }
41
+ }
42
+
43
+ const illegalRe = /[\/\?<>\\:\*\|"]/g;
44
+ const controlRe = /[\x00-\x1f\x80-\x9f]/g;
45
+ const reservedRe = /^\.+$/;
46
+ const windowsReservedRe = /^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\..*)?$/i;
47
+ const windowsTrailingRe = /[\. ]+$/;
48
+
49
+ /**
50
+ * @param {string} input
51
+ */
52
+ export function sanitizeFilename(input) {
53
+ return input
54
+ .replace(illegalRe, '')
55
+ .replace(controlRe, '')
56
+ .replace(reservedRe, '')
57
+ .replace(windowsReservedRe, '')
58
+ .replace(windowsTrailingRe, '');
59
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "generator-code",
3
- "version": "1.7.8",
3
+ "version": "1.8.0",
4
4
  "description": "Yeoman generator for Visual Studio Code extensions.",
5
5
  "keywords": [
6
6
  "yeoman-generator",
@@ -10,6 +10,7 @@
10
10
  "vs code",
11
11
  "extensions"
12
12
  ],
13
+ "type": "module",
13
14
  "repository": {
14
15
  "type": "git",
15
16
  "url": "https://github.com/Microsoft/vscode-generator-code.git"
@@ -25,7 +26,7 @@
25
26
  "url": "https://github.com/Microsoft"
26
27
  },
27
28
  "engines": {
28
- "node": ">=14.15.0"
29
+ "node": ">=16.x"
29
30
  },
30
31
  "scripts": {
31
32
  "test": "mocha",
@@ -34,20 +35,18 @@
34
35
  "postversion": "git push && git push --tags"
35
36
  },
36
37
  "dependencies": {
37
- "chalk": "^4.1.2",
38
+ "chalk": "^5.3.0",
38
39
  "fast-plist": "^0.1.3",
39
40
  "request-light": "^0.7.0",
40
- "sanitize-filename": "^1.6.3",
41
- "which": "^3.0.1",
42
- "yeoman-generator": "^5.9.0",
43
- "yosay": "^2.0.2"
41
+ "which": "^4.0.0",
42
+ "yeoman-generator": "^6.0.1",
43
+ "yosay": "^3.0.0"
44
44
  },
45
45
  "devDependencies": {
46
- "@types/mocha": "^10.0.1",
46
+ "@types/mocha": "^10.0.3",
47
47
  "@types/node": "^16.x",
48
- "@types/yeoman-generator": "^5.2.11",
49
48
  "mocha": "^10.2.0",
50
49
  "yeoman-environment": "^3.19.3",
51
- "yeoman-test": "^7.4.0"
50
+ "yeoman-test": "^8.2.0"
52
51
  }
53
52
  }