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.
- package/generators/app/dependencyVersions/package.json +16 -16
- package/generators/app/env.js +8 -7
- package/generators/app/generate-colortheme.js +12 -13
- package/generators/app/generate-command-js.js +5 -5
- package/generators/app/generate-command-ts.js +8 -6
- package/generators/app/generate-command-web.js +8 -6
- package/generators/app/generate-extensionpack.js +6 -6
- package/generators/app/generate-keymap.js +5 -5
- package/generators/app/generate-language.js +30 -27
- package/generators/app/generate-localization.js +10 -8
- package/generators/app/generate-notebook-renderer.js +6 -6
- package/generators/app/generate-snippets.js +10 -10
- package/generators/app/index.js +24 -20
- package/generators/app/prompts.js +16 -14
- package/generators/app/templates/ext-command-js/jsconfig.json +3 -3
- package/generators/app/templates/ext-command-js/test/suite/index.js +17 -26
- package/generators/app/templates/ext-command-ts/.eslintrc.json +8 -2
- package/generators/app/templates/ext-command-ts/src/test/suite/index.ts +19 -27
- package/generators/app/templates/ext-command-ts/tsconfig.json +3 -3
- package/generators/app/templates/ext-command-ts/vscode-webpack/tsconfig.json +3 -3
- package/generators/app/templates/ext-command-web/tsconfig.json +1 -1
- package/generators/app/templates/ext-notebook-renderer/src/test/suite/index.ts +26 -34
- package/generators/app/templates/ext-notebook-renderer/src/tsconfig-base.json +3 -4
- package/generators/app/validator.js +31 -4
- package/package.json +9 -10
|
@@ -4,30 +4,30 @@
|
|
|
4
4
|
"version": "0.0.0",
|
|
5
5
|
"private": true,
|
|
6
6
|
"dependencies": {
|
|
7
|
-
"@types/mocha": "^10.0.
|
|
8
|
-
"@types/node": "
|
|
9
|
-
"@typescript-eslint/eslint-plugin": "^6.
|
|
10
|
-
"@typescript-eslint/parser": "^6.
|
|
11
|
-
"eslint": "^8.
|
|
12
|
-
"glob": "^10.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.
|
|
15
|
-
"@vscode/test-electron": "^2.3.
|
|
16
|
-
"@vscode/test-web": "^0.0.
|
|
17
|
-
"@types/webpack-env": "^1.18.
|
|
18
|
-
"@types/vscode-notebook-renderer": "^1.72.
|
|
19
|
-
"concurrently": "^8.2.
|
|
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": "^
|
|
21
|
+
"fork-ts-checker-webpack-plugin": "^9.0.0",
|
|
22
22
|
"style-loader": "^3.3.3",
|
|
23
|
-
"ts-loader": "^9.
|
|
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.
|
|
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.
|
|
30
|
+
"assert": "^2.1.0",
|
|
31
31
|
"process": "^0.11.10"
|
|
32
32
|
}
|
|
33
33
|
}
|
package/generators/app/env.js
CHANGED
|
@@ -2,14 +2,15 @@
|
|
|
2
2
|
* Copyright (C) Microsoft Corporation. All rights reserved.
|
|
3
3
|
*--------------------------------------------------------*/
|
|
4
4
|
'use strict';
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
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
|
-
|
|
42
|
+
export async function getDependencyVersions() {
|
|
43
43
|
const vscodeVersion = await getLatestVSCodeVersion();
|
|
44
|
-
const
|
|
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
|
-
|
|
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 {
|
|
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 {
|
|
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 =
|
|
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 {
|
|
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
|
-
|
|
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 {
|
|
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 {
|
|
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 =
|
|
6
|
-
const prompts = require("./prompts");
|
|
8
|
+
const chalk = new Chalk();
|
|
7
9
|
|
|
8
|
-
|
|
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 {
|
|
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 {
|
|
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 {
|
|
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 =
|
|
6
|
-
const prompts = require("./prompts");
|
|
8
|
+
const chalk = new Chalk();
|
|
7
9
|
|
|
8
|
-
|
|
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 {
|
|
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 {
|
|
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 {
|
|
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
|
-
|
|
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 {
|
|
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 {
|
|
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
|
-
|
|
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 {
|
|
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 {
|
|
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
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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 {
|
|
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 {
|
|
36
|
+
* @param {Generator} generator
|
|
37
37
|
* @param {Object} extensionConfig
|
|
38
38
|
*/
|
|
39
39
|
writing: (generator, extensionConfig) => {
|
|
40
40
|
if (!extensionConfig.languageContent) {
|
|
41
|
-
extensionConfig.languageFileName =
|
|
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',
|
|
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 {
|
|
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 {
|
|
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 {
|
|
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 {
|
|
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 {
|
|
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
|
-
|
|
158
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
216
|
-
|
|
218
|
+
let languageId = '';
|
|
219
|
+
let languageScopeName;
|
|
217
220
|
|
|
218
221
|
if (languageInfo.scopeName) {
|
|
219
222
|
languageScopeName = languageInfo.scopeName;
|
|
220
223
|
|
|
221
|
-
|
|
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
|
-
|
|
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
|
|
6
|
-
const chalk = require("chalk");
|
|
8
|
+
const chalk = new Chalk();
|
|
7
9
|
|
|
8
|
-
|
|
10
|
+
export default {
|
|
9
11
|
id: 'ext-localization',
|
|
10
12
|
aliases: ['localization'],
|
|
11
13
|
name: 'New Language Pack (Localization)',
|
|
12
14
|
/**
|
|
13
|
-
* @param {
|
|
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 {
|
|
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 {
|
|
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 {
|
|
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 {
|
|
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
|
-
|
|
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 {
|
|
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 {
|
|
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 {
|
|
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
|
-
|
|
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 {
|
|
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 {
|
|
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 {
|
|
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 {
|
|
93
|
+
* @param {Generator} generator
|
|
94
94
|
* @param {Object} extensionConfig
|
|
95
95
|
*/
|
|
96
96
|
function askForSnippetLanguage(generator, extensionConfig) {
|
package/generators/app/index.js
CHANGED
|
@@ -3,30 +3,29 @@
|
|
|
3
3
|
*--------------------------------------------------------*/
|
|
4
4
|
'use strict';
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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'
|
|
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
|
-
|
|
7
|
-
|
|
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 {
|
|
12
|
+
* @param {Generator} generator
|
|
11
13
|
* @param {Object} extensionConfig
|
|
12
14
|
*/
|
|
13
|
-
|
|
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 {
|
|
40
|
+
* @param {Generator} generator
|
|
39
41
|
* @param {Object} extensionConfig
|
|
40
42
|
*/
|
|
41
|
-
|
|
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 {
|
|
71
|
+
* @param {Generator} generator
|
|
70
72
|
* @param {Object} extensionConfig
|
|
71
73
|
*/
|
|
72
|
-
|
|
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 {
|
|
96
|
+
* @param {Generator} generator
|
|
95
97
|
* @param {Object} extensionConfig
|
|
96
98
|
*/
|
|
97
|
-
|
|
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 {
|
|
121
|
+
* @param {Generator} generator
|
|
120
122
|
* @param {Object} extensionConfig
|
|
121
123
|
*/
|
|
122
|
-
|
|
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 {
|
|
161
|
+
* @param {Generator} generator
|
|
160
162
|
* @param {Object} extensionConfig
|
|
161
163
|
*/
|
|
162
|
-
|
|
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);
|
|
@@ -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
|
-
|
|
15
|
-
|
|
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
|
-
|
|
19
|
-
|
|
20
|
-
mocha
|
|
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
|
-
|
|
23
|
-
|
|
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":
|
|
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
|
|
3
|
-
import
|
|
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
|
-
|
|
15
|
-
|
|
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
|
-
|
|
19
|
-
|
|
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
|
-
|
|
22
|
-
|
|
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,40 +1,32 @@
|
|
|
1
1
|
import * as path from 'path';
|
|
2
|
-
import
|
|
3
|
-
import
|
|
2
|
+
import Mocha from 'mocha';
|
|
3
|
+
import { glob } from 'glob';
|
|
4
4
|
|
|
5
|
-
export function run(): Promise<void> {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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
|
-
|
|
12
|
+
const testsRoot = path.resolve(__dirname, '..');
|
|
13
|
+
const files = await glob('**/**.test.js', { cwd: testsRoot });
|
|
13
14
|
|
|
14
|
-
|
|
15
|
-
|
|
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
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
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": "
|
|
4
|
-
"target": "
|
|
3
|
+
"module": "Node16",
|
|
4
|
+
"target": "ES2022",
|
|
5
5
|
"lib": [
|
|
6
|
-
"
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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": ">=
|
|
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": "^
|
|
38
|
+
"chalk": "^5.3.0",
|
|
38
39
|
"fast-plist": "^0.1.3",
|
|
39
40
|
"request-light": "^0.7.0",
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
"
|
|
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.
|
|
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": "^
|
|
50
|
+
"yeoman-test": "^8.2.0"
|
|
52
51
|
}
|
|
53
52
|
}
|