From 665c61cb96cf18d9d01cace441c4778899c05ef4 Mon Sep 17 00:00:00 2001 From: "Brian A. Ignacio" Date: Wed, 26 Feb 2020 22:28:09 +0800 Subject: [PATCH 1/4] read Cmakelists file for project name (VSC-248) (#43) read build project_description json file for project name --- README.md | 2 -- docs/C_CPP_CONFIGURATION.md | 17 ++++++++++++---- i18n/en/package.i18n.json | 1 - i18n/es/package.i18n.json | 1 - i18n/zh-CN/package.i18n.json | 1 - package.json | 14 ++++--------- package.nls.json | 1 - src/espIdf/size/idfSize.ts | 14 +++++++------ src/extension.ts | 12 +++++++---- src/workspaceConfig.ts | 35 +++++++++++++++++++++------------ templates/.vscode/launch.json | 4 ++-- templates/.vscode/settings.json | 2 +- templates/.vscode/tasks.json | 27 ++++++++++++++++++++++++- 13 files changed, 84 insertions(+), 47 deletions(-) diff --git a/README.md b/README.md index 19f64d62e..5994c6ff2 100644 --- a/README.md +++ b/README.md @@ -127,7 +127,6 @@ These are project IDF Project specific settings | Setting | Description | | --- | --- | -| `idf.projectName` | Project Name | | `idf.espIdfPath` | Path to locate ESP-IDF framework (IDF_PATH) | | `idf.toolsPath` | Path to locate ESP-IDF Tools (IDF_TOOLS_PATH) | | `idf.pythonBinPath` | Python absolute binary path used to execute ESP-IDF Python Scripts | @@ -217,7 +216,6 @@ Projects folders and workspace level settings are defined in the `.code-workspac ], "settings": { "idf.port": "/dev/ttyUSB1", - "idf.projectName": "hello-world", "idf.espIdfPath": "${env:HOME}/esp/esp-idf" } } diff --git a/docs/C_CPP_CONFIGURATION.md b/docs/C_CPP_CONFIGURATION.md index 2386edb52..d3ca62785 100644 --- a/docs/C_CPP_CONFIGURATION.md +++ b/docs/C_CPP_CONFIGURATION.md @@ -2,13 +2,15 @@ ## Why configure this file? -The [C/C++ Extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools) is used to provide C and C++ syntax highlights, code navigation and Go to declaration/definition within C and C++ files. +The [C/C++ Extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools) is used to provide C and C++ syntax highlight, code navigation and Go to declaration/definition within C and C++ files. The file is located in {PROJECT_DIR}/.vscode/c_cpp_properties.json and can be generated by using **Create ESP-IDF Project** command. ## Default configuration -With this configuration, the Intellisense engine of the C/C++ extension will include all header files found by performing a recursive search of the `${config:idf.espIdfPath}/components` folder. Both **Default** and **Tag Parser** engines are supported. An example configuration that should work with most projects is shown below. +With this configuration, the Intellisense engine of the C/C++ extension will include all header files found by performing a recursive search of the `${config:idf.espIdfPath}/components` folder. For this configuration to work, you need to set you C/C++ Extension Intellisense engine to **Tag Parser**. + +An example configuration that should work with most projects is shown below. ``` { @@ -17,10 +19,16 @@ With this configuration, the Intellisense engine of the C/C++ extension will inc "name": "Linux", "cStandard": "c11", "cppStandard": "c++17", - "includePath": ["${config:idf.espIdfPath}/components/**"], + "includePath": [ + "${config:idf.espIdfPath}/components/**", + "${config:idf.espIdfPathWin}/components/**", + "${workspaceFolder}/**" + ], "browse": { "path": [ - "${config:idf.espIdfPath}/components" + "${config:idf.espIdfPath}/components", + "${config:idf.espIdfPathWin}/components", + "${workspaceFolder}" ], "limitSymbolsToIncludedHeaders": false } @@ -35,6 +43,7 @@ With this configuration, the Intellisense engine of the C/C++ extension will inc For this configuration, you must build your project beforehand in order to generate `${workspaceFolder}/build/compile_commands.json` (where ${workspaceFolder} is your project directory). This file will then be used to resolve your C/C++ headers. ``` + { "configurations": [ { diff --git a/i18n/en/package.i18n.json b/i18n/en/package.i18n.json index 227d70773..27d403249 100644 --- a/i18n/en/package.i18n.json +++ b/i18n/en/package.i18n.json @@ -21,7 +21,6 @@ "debug.initConfig.description": "A new configuration for launch ESP-IDF projects", "param.adapterTargetName": "Target name for ESP-IDF Debug Adapter", "param.openOcdConfigFilesList": "List of configuration files inside OpenOCD Scripts directory", - "param.projectName": "Project Name", "param.baudRate": "Device Baud rate", "param.port": "Path of selected device port", "param.pythonBinPath": "Python absolute binary path used to execute ESP-IDF Python Scripts", diff --git a/i18n/es/package.i18n.json b/i18n/es/package.i18n.json index 788637883..4fd7c0425 100644 --- a/i18n/es/package.i18n.json +++ b/i18n/es/package.i18n.json @@ -21,7 +21,6 @@ "debug.initConfig.description": "Nueva configuración para proyectos ESP-IDF", "param.adapterTargetName": "Target para el ESP-IDF Debug Adapter", "param.openOcdConfigFilesList": "Lista de archivos de connfiguracion en el directorio OpenOCD Scripts", - "param.projectName": "Nombre de proyecto", "param.baudRate": "Tasa de baudios del dispositivo", "param.port": "Ruta del puerto serial del dispositivo ESP-IDF", "param.pythonBinPath": "Ruta absoluta del ejecutable Python para ESP-IDF", diff --git a/i18n/zh-CN/package.i18n.json b/i18n/zh-CN/package.i18n.json index 1ab2e0438..05dd24af8 100644 --- a/i18n/zh-CN/package.i18n.json +++ b/i18n/zh-CN/package.i18n.json @@ -21,7 +21,6 @@ "debug.initConfig.description": "启用 ESP-IDF 项目的新配置", "param.adapterTargetName": "ESP-IDF调试适配器的目标名称", "param.openOcdConfigFilesList": "OpenOCD脚本目录中的配置文件列表", - "param.projectName": "项目名称", "param.baudRate": "设备波特率", "param.port": "选中的烧录端口路径", "param.pythonBinPath": "项目构建使用的 Python 解释器的绝对路径", diff --git a/package.json b/package.json index 7e311df96..2b11b4438 100644 --- a/package.json +++ b/package.json @@ -217,12 +217,6 @@ "description": "%param.baudRate%", "scope": "resource" }, - "idf.projectName": { - "type": "string", - "default": "app-template", - "description": "%param.projectName%", - "scope": "resource" - }, "idf.openOcdConfigs": { "type": "array", "default": [ @@ -402,8 +396,8 @@ "type": "cppdbg", "request": "launch", "MIMode": "gdb", - "miDebuggerPath": "${config:idf.xtensaEsp32Path}/bin/xtensa-esp32-elf-gdb", - "program": "${workspaceFolder}/build/${config:idf.projectName}.elf", + "miDebuggerPath": "xtensa-esp32-elf-gdb", + "program": "${workspaceFolder}/build/${command:espIdf.getProjectName}.elf", "cwd": "${workspaceFolder}", "setupCommands": [ { @@ -433,8 +427,8 @@ "type": "cppdbg", "request": "launch", "MIMode": "gdb", - "miDebuggerPath": "${config:idf.xtensaEsp32Path}/bin/xtensa-esp32-elf-gdb", - "program": "${workspaceFolder}/build/${config:idf.projectName}.elf", + "miDebuggerPath": "xtensa-esp32-elf-gdb", + "program": "${workspaceFolder}/build/${command:espIdf.getProjectName}.elf", "cwd": "${workspaceFolder}", "setupCommands": [ { diff --git a/package.nls.json b/package.nls.json index c94cf4f25..a1a84f667 100644 --- a/package.nls.json +++ b/package.nls.json @@ -21,7 +21,6 @@ "debug.initConfig.description": "A new configuration for launch ESP-IDF projects", "param.adapterTargetName": "Target name for ESP-IDF Debug Adapter", "param.openOcdConfigFilesList": "List of configuration files inside OpenOCD Scripts directory", - "param.projectName": "Project Name", "param.baudRate": "Device Baud rate", "param.port": "Path of selected device port", "param.pythonBinPath": "Python absolute binary path used to execute ESP-IDF Python Scripts", diff --git a/src/espIdf/size/idfSize.ts b/src/espIdf/size/idfSize.ts index c351011fc..0db2a1fe9 100644 --- a/src/espIdf/size/idfSize.ts +++ b/src/espIdf/size/idfSize.ts @@ -22,6 +22,7 @@ import * as idfConf from "../../idfConfiguration"; import { LocDictionary } from "../../localizationDictionary"; import { Logger } from "../../logger/logger"; import { fileExists, spawn } from "../../utils"; +import { getProjectName } from "../../workspaceConfig"; export class IDFSize { private readonly workspaceRoot: vscode.Uri; @@ -40,13 +41,14 @@ export class IDFSize { this.locDict.localize( "idfSize.canceledError", "Cannot proceed with size analysis on a canceled context")); } - if (!this.isBuiltAlready()) { + const isBuilt = await this.isBuiltAlready(); + if (!isBuilt) { throw new Error( this.locDict.localize( "idfSize.buildFirstError", "Build is required for a size analysis, build your project first")); } try { - const mapFilePath = this.mapFilePath(); + const mapFilePath = await this.mapFilePath(); let locMsg = this.locDict.localize("idfSize.overviewMsg", "Gathering Overview"); const overview = await this.idfCommandInvoker(["idf_size.py", mapFilePath, "--json"]); @@ -66,8 +68,8 @@ export class IDFSize { } } - private mapFilePath(): string { - const projectName = idfConf.readParameter("idf.projectName"); + private async mapFilePath() { + const projectName = await getProjectName(this.workspaceRoot.fsPath); return path.join(this.workspaceRoot.fsPath, "build", `${projectName}.map`); } @@ -76,8 +78,8 @@ export class IDFSize { return path.join(idfPathDir, "tools"); } - private isBuiltAlready(): boolean { - return fileExists(this.mapFilePath()); + private async isBuiltAlready() { + return fileExists(await this.mapFilePath()); } private async idfCommandInvoker(args: string[]) { diff --git a/src/extension.ts b/src/extension.ts index 8d0c8163b..4e371fb61 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -39,7 +39,7 @@ import { getOnboardingInitialValues } from "./onboarding/onboardingInit"; import { OnBoardingPanel } from "./onboarding/OnboardingPanel"; import * as utils from "./utils"; import { PreCheck } from "./utils"; -import { initSelectedWorkspace, updateIdfComponentsTree, updateProjectName } from "./workspaceConfig"; +import { getProjectName, initSelectedWorkspace, updateIdfComponentsTree } from "./workspaceConfig"; // Global variables shared by commands let workspaceRoot: vscode.Uri; @@ -196,7 +196,6 @@ export async function activate(context: vscode.ExtensionContext) { } else { workspaceRoot = option.uri; const projDescPath = path.join(workspaceRoot.fsPath, "build", "project_description.json"); - updateProjectName(projDescPath); updateIdfComponentsTree(projDescPath); const workspaceFolderInfo = { clickCommand: "espIdf.pickAWorkspaceFolder", @@ -357,6 +356,13 @@ export async function activate(context: vscode.ExtensionContext) { const debugProvider = new IdfDebugConfigurationProvider(); context.subscriptions.push(vscode.debug.registerDebugConfigurationProvider("cppdbg", debugProvider)); + + registerIDFCommand("espIdf.getProjectName", () => { + PreCheck.perform([openFolderCheck], async () => { + return await getProjectName(workspaceRoot.fsPath); + }); + }); + registerIDFCommand("espIdf.createVsCodeFolder", () => { PreCheck.perform([openFolderCheck], () => { utils.createVscodeFolder(workspaceRoot.fsPath); @@ -630,7 +636,6 @@ const build = () => { try { await buildManager.build(); const projDescPath = path.join(workspaceRoot.fsPath, "build", "project_description.json"); - updateProjectName(projDescPath); updateIdfComponentsTree(projDescPath); Logger.infoNotify("Build Successfully"); } catch (error) { @@ -781,7 +786,6 @@ const buildFlashAndMonitor = () => { progress.report({ message: "Building project...", increment: 20}); await buildManager.build(); const projDescPath = path.join(workspaceRoot.fsPath, "build", "project_description.json"); - updateProjectName(projDescPath); updateIdfComponentsTree(projDescPath); progress.report({ message: "Flashing project into device...", increment: 60}); const model = await createFlashModel(flasherArgsJsonPath, port, baudRate); diff --git a/src/workspaceConfig.ts b/src/workspaceConfig.ts index e646358d0..8c1284122 100644 --- a/src/workspaceConfig.ts +++ b/src/workspaceConfig.ts @@ -15,16 +15,13 @@ import * as fs from "fs"; import * as path from "path"; import * as vscode from "vscode"; -import { ConfserverProcess } from "./espIdf/menuconfig/confServerProcess"; import { IdfTreeDataProvider } from "./idfComponentsDataProvider"; -import * as idfConf from "./idfConfiguration"; import { Logger } from "./logger/logger"; import * as utils from "./utils"; export function initSelectedWorkspace(status: vscode.StatusBarItem) { const workspaceRoot = vscode.workspace.workspaceFolders[0].uri; const projDescPath = path.join(workspaceRoot.fsPath, "build", "project_description.json"); - updateProjectName(projDescPath); updateIdfComponentsTree(projDescPath); const workspaceFolderInfo = { clickCommand: "espIdf.pickAWorkspaceFolder", @@ -45,16 +42,28 @@ export function updateIdfComponentsTree(projectDescriptionPath: string) { idfDataProvider.refresh(projectDescriptionPath); } -export function updateProjectName(projectDescriptionPath: string) { - if (!utils.fileExists(projectDescriptionPath)) { - return; - } - fs.readFile(projectDescriptionPath, (err, data) => { - if (err) { - Logger.errorNotify(err.message, err); - return; +export function getProjectName(workspacePath: string): Promise { + const projDescJsonPath = path.join(workspacePath, "build", "project_description.json"); + return new Promise((resolve, reject) => { + try { + if (!utils.fileExists(projDescJsonPath)) { + reject(new Error(`${projDescJsonPath} doesn't exist.`)); + } + fs.readFile(projDescJsonPath, (err, data) => { + if (err) { + Logger.error(err.message, err); + reject(err); + } + const projDescJson = JSON.parse(data.toString()); + if (Object.prototype.hasOwnProperty.call(projDescJson, "project_name")) { + resolve(projDescJson.project_name); + } else { + reject(new Error(`project_name field doesn't exist in ${projDescJsonPath}.`)); + } + }); + } catch (error) { + Logger.error(error.message, error); + reject(error); } - const projDescJson = JSON.parse(data.toString()); - idfConf.writeParameter("idf.projectName", projDescJson.project_name); }); } diff --git a/templates/.vscode/launch.json b/templates/.vscode/launch.json index 137724b2c..67f839635 100644 --- a/templates/.vscode/launch.json +++ b/templates/.vscode/launch.json @@ -10,9 +10,9 @@ "request": "launch", "MIMode": "gdb", "miDebuggerPath": "xtensa-esp32-elf-gdb", - "program": "${workspaceFolder}/build/${config:idf.projectName}.elf", + "program": "${workspaceFolder}/build/${command:espIdf.getProjectName}.elf", "windows": { - "program": "${workspaceFolder}\\build\\${config:idf.projectName}.elf", + "program": "${workspaceFolder}\\build\\${command:espIdf.getProjectName}.elf", }, "cwd": "${workspaceFolder}", "setupCommands": [ diff --git a/templates/.vscode/settings.json b/templates/.vscode/settings.json index 9862e375e..9240c97cc 100644 --- a/templates/.vscode/settings.json +++ b/templates/.vscode/settings.json @@ -7,5 +7,5 @@ "[c]": { "editor.quickSuggestions": true }, - "C_Cpp.intelliSenseEngineFallback": "Disabled" + "C_Cpp.intelliSenseEngineFallback": "Enabled" } \ No newline at end of file diff --git a/templates/.vscode/tasks.json b/templates/.vscode/tasks.json index 5e60b22db..2df44f681 100644 --- a/templates/.vscode/tasks.json +++ b/templates/.vscode/tasks.json @@ -10,6 +10,11 @@ "windows": { "command": "${config:idf.pythonBinPathWin} ${config:idf.espIdfPathWin}\\tools\\idf.py build" }, + "options": { + "env": { + "PATH": "${config:idf.customExtraPaths}" + } + }, "problemMatcher": { "owner": "cpp", "fileLocation": "absolute", @@ -51,6 +56,11 @@ "windows": { "command": "${config:idf.pythonBinPathWin} ${config:idf.espIdfPathWin}\\tools\\idf.py fullclean" }, + "options": { + "env": { + "PATH": "${config:idf.customExtraPaths}" + } + }, "problemMatcher": { "owner": "cpp", "fileLocation": "absolute", @@ -71,6 +81,11 @@ "windows": { "command": "${config:idf.pythonBinPathWin} ${config:idf.espIdfPathWin}\\tools\\idf.py flash -p ${config:idf.portWin} -b ${config:idf.baudRate}" }, + "options": { + "env": { + "PATH": "${config:idf.customExtraPaths}" + } + }, "problemMatcher": { "owner": "cpp", "fileLocation": "absolute", @@ -91,7 +106,12 @@ "command": "${config:idf.pythonBinPath} ${config:idf.espIdfPath}/tools/idf.py -p ${config:idf.port} -b ${config:idf.baudRate} monitor", "windows": { "command": "${config:idf.pythonBinPathWin} ${config:idf.espIdfPathWin}\\tools\\idf.py monitor -p ${config:idf.portWin} -b ${config:idf.baudRate}" - } + }, + "options": { + "env": { + "PATH": "${config:idf.customExtraPaths}" + } + }, }, { "label":"OpenOCD: Start openOCD", @@ -106,6 +126,11 @@ "windows": { "command": "openocd.exe -s ${command:espIdf.getOpenOcdScriptValue} ${command:espIdf.getOpenOcdConfigs}" }, + "options": { + "env": { + "PATH": "${config:idf.customExtraPaths}" + } + }, "problemMatcher": { "owner": "cpp", "fileLocation": "absolute", From 59ddb2a637b1c046842c71f490f0c565b3258b94 Mon Sep 17 00:00:00 2001 From: "Brian A. Ignacio" Date: Wed, 26 Feb 2020 22:31:01 +0800 Subject: [PATCH 2/4] Feature/localization kv val (VSC-226) (VSC-246) (#41) * add gulp i18n validation and src missing key log --- gulpfile.js | 44 ++- .../menuconfig/MenuconfigPanel.i18n.json | 6 +- i18n/es/out/extension.i18n.json | 4 - i18n/zh-CN/out/extension.i18n.json | 5 +- package.json | 1 + schema.i18n.json | 123 +++++++ src/localizationDictionary.ts | 38 +- yarn.lock | 324 ++++++++++++------ 8 files changed, 427 insertions(+), 118 deletions(-) create mode 100644 schema.i18n.json diff --git a/gulpfile.js b/gulpfile.js index 2ab6c01a6..08f1cc812 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -18,6 +18,7 @@ const vsce = require('vsce'); const nls = require('vscode-nls-dev'); const { readdirSync, statSync } = require('fs'); const { join } = require('path'); +const glob = require("glob"); // If all VS Code languages are supported you can use nls.coreLanguages const languages = []; // [{ folderName: 'zh-CN', id: 'zh-CN' }, { folderName: 'es', id: 'es' }]; @@ -51,9 +52,50 @@ function vscePackage(done) { done(); } -const build = gulp.series(clean, addI18n); +function getPathParts(pathToUse) { + const parts = pathToUse.replace(join(__dirname, "i18n"), "").split(/(?:\\|\/)/g); + parts.splice(0, 2); + parts[parts.length - 1] = parts[parts.length - 1].replace(/(\.).*/g, ""); + return parts; +} + +const reduceSchemaObj = (schemaObj, parts) => { + return parts.reduce((obj, key) => + (obj && obj[key] !== undefined) ? obj[key] : undefined, schemaObj); +} + +function validateLocalizationFiles(done) { + const schema = require("./schema.i18n.json"); + languages.forEach((l) => { + const langDirPath = join(__dirname, "i18n", l.folderName, "**", "*.i18n.json"); + glob(langDirPath, (err, locFiles) => { + if (err) { + throw err; + } + locFiles.forEach((locFile) => { + const localeJson = require(locFile); + const parts = getPathParts(locFile); + const schemaKeys = reduceSchemaObj(schema, parts); + schemaKeys.forEach((schemaKey) => { + if (!localeJson.hasOwnProperty(schemaKey)) { + throw `${schemaKey} not defined in ${locFile}`; + } + }); + Object.keys(localeJson).forEach((fileKey) => { + if (schemaKeys.indexOf(fileKey) < 0) { + console.log(`Unknown property ${fileKey} defined in ${locFile}`); + } + }); + }); + }); + }); + done(); +} + +const build = gulp.series(clean, addI18n, validateLocalizationFiles); exports.clean = clean; exports.build = build; +exports.validateLocalization = validateLocalizationFiles; exports.publish = gulp.series(build, vscePublish); exports.vscePkg = gulp.series(build, vscePackage); exports.default = build; diff --git a/i18n/en/out/espIdf/menuconfig/MenuconfigPanel.i18n.json b/i18n/en/out/espIdf/menuconfig/MenuconfigPanel.i18n.json index d69b34df3..d38c14848 100644 --- a/i18n/en/out/espIdf/menuconfig/MenuconfigPanel.i18n.json +++ b/i18n/en/out/espIdf/menuconfig/MenuconfigPanel.i18n.json @@ -4,5 +4,9 @@ "menuconfig.saveValues": "Saved changes in GUI menuconfig", "menuconfig.discardValues": "Discarded changes in GUI menuconfig", "menuconfig.wrongIdfPath": "Wrong IDF_PATH in workspace settings. Would you like to set it?", - "menuconfig.enterIdfPath": "Enter IDF_PATH Path" + "menuconfig.enterIdfPath": "Enter IDF_PATH Path", + "menuconfig.changesNotSaved": "Changes in GUI Menuconfig have not been saved. Would you like to save them?", + "menuconfig.save": "Save", + "menuconfig.discard": "Don't save", + "menuconfig.returnGuiconfig": "Return to GUI Menuconfig" } \ No newline at end of file diff --git a/i18n/es/out/extension.i18n.json b/i18n/es/out/extension.i18n.json index b9a968901..754c9b9ad 100644 --- a/i18n/es/out/extension.i18n.json +++ b/i18n/es/out/extension.i18n.json @@ -1,10 +1,6 @@ { "extension.defaultFoldersGeneratedMessage": "Se han creado las carpetas plantilla.", "extension.openFolderFirst": "Abre una carpeta primero.", - "extension.notSerialPortFoundMessage": "No se ha encontrado un puerto serial", - "extension.selectSerialPortMessage":"Selecciona el puerto serial de tu dispositivo ESP-IDF", - "extension.noPortSelectedMessage": "No se ha elegido ningún puerto", - "extension.portHasBeenSelectedMessage": "Se ha actualizado el puerto a ", "espIdf.pickAWorkspaceFolder.text": "Seleccione el folder actual", "extension.noFolderMessage": "Ningún espacio de trabajo seleccionado", "selectFrameworkMessage": "Seleccione una plataforma para definir ruta", diff --git a/i18n/zh-CN/out/extension.i18n.json b/i18n/zh-CN/out/extension.i18n.json index 6739c07a2..77a93f21b 100644 --- a/i18n/zh-CN/out/extension.i18n.json +++ b/i18n/zh-CN/out/extension.i18n.json @@ -1,10 +1,6 @@ { "extension.defaultFoldersGeneratedMessage": "已生成默认文件夹", "extension.openFolderFirst": "请先打开文件夹", - "extension.notSerialPortFoundMessage": "找不到可用串口", - "extension.selectSerialPortMessage":"请选择可用的串口", - "extension.noPortSelectedMessage": "串口未选中", - "extension.portHasBeenSelectedMessage": "串口已选中 ", "espIdf.pickAWorkspaceFolder.text": "请选择当前工作文件夹", "extension.noFolderMessage": "未选择工作区", "selectFrameworkMessage": "选择框架并设定路径", @@ -20,6 +16,7 @@ "extension.enterIdfPathMessage": "请输入 IDF_PATH 路径", "extension.enterIdfToolsPathMessage": "请输入 IDF_TOOLS_PATH 路径", "extension.enterDevicePortMessage": "请输入设备端口路径", + "extension.enterDeviceTargetMessage": "输入要使用的 Espressif 设备", "extension.enterDeviceBaudRateMessage": "请输入设备波特率", "extension.cmdNotWebIDE": "所选命令在WebIDE中不可用", "extension.enterOpenOcdConfigMessage": "在OpenOCD脚本目录中输入配置文件列表", diff --git a/package.json b/package.json index 2b11b4438..3c3a2912f 100644 --- a/package.json +++ b/package.json @@ -495,6 +495,7 @@ "package": "vsce package --yarn -o esp-idf-extension.vsix", "release": "vsce publish --yarn -p ${VS_MARKETPLACE_TOKEN}", "gulp_clean": "gulp clean", + "validateLocalization": "gulp validateLocalization", "webpack": "webpack --mode production" }, "devDependencies": { diff --git a/schema.i18n.json b/schema.i18n.json new file mode 100644 index 000000000..8a6d0735f --- /dev/null +++ b/schema.i18n.json @@ -0,0 +1,123 @@ +{ + "out": { + "espIdf": { + "menuconfig": { + "MenuconfigPanel": [ + "menuconfig.panelName", + "menuconfig.loadDefaultValues", + "menuconfig.discardValues", + "menuconfig.saveValues", + "menuconfig.wrongIdfPath", + "menuconfig.enterIdfPath", + "menuconfig.changesNotSaved", + "menuconfig.save", + "menuconfig.discard", + "menuconfig.returnGuiconfig" + ] + }, + "serial": { + "SerialPort": [ + "serial.notSerialPortFoundMessage", + "serial.noPortSelectedMessage", + "serial.portHasBeenSelectedMessage", + "serial.selectSerialPortMessage" + ] + }, + "size": { + "idfSize": [ + "idfSize.canceledError", + "idfSize.filesMsg", + "idfSize.buildFirstError", + "idfSize.overviewMsg", + "idfSize.archivesMsg", + "idfSize.commandError" + ] + } + }, + "extension": [ + "extension.defaultFoldersGeneratedMessage", + "extension.openFolderFirst", + "espIdf.pickAWorkspaceFolder.text", + "extension.noFolderMessage", + "selectFrameworkMessage", + "extension.noOptionMessage", + "extension.noPathUpdatedMessage", + "extension.selectConfigMessage", + "extension.noParamUpdatedMessage", + "extension.defaultSdkconfigGeneratedMessage", + "extension.openFolderSdkconfigMessage", + "extension.waitProcessIsFinishedMessage", + "extension.elfNotFoundMessage", + "extension.gdbNotFoundMessage", + "extension.enterIdfPathMessage", + "extension.enterIdfToolsPathMessage", + "extension.enterDevicePortMessage", + "extension.enterDeviceTargetMessage", + "extension.enterDeviceBaudRateMessage", + "extension.enterOpenOcdConfigMessage", + "extension.enterCustomPathsMessage", + "extension.cmdNotWebIDE" + ], + "idfComponentsDataProvider": [ + "idfComponentDataProvider.proj_desc_not_found" + ], + "idfConfiguration": [ + "idfConfiguration.hasBeenUpdated" + ], + "utils": [ + "utils.currentFolder", + "utils.openComponentTitle" + ] + }, + "views": { + "menuconfig": [ + "save", + "discard", + "reset" + ] + }, + "package": [ + "espIdf.createFiles.title", + "espIdf.setPath.title", + "espIdf.setTarget.title", + "espIdf.configDevice.title", + "menuconfig.start.title", + "espIdf.setDefaultConfig.title", + "espIdf.selectPort.title", + "espIdf.buildDevice.title", + "espIdf.flashDevice.title", + "espIdf.monitorDevice.title", + "espIdf.onboarding.title", + "espIdf.examples.title", + "espIdf.buildFlashMonitor.title", + "espIdf.pickAWorkspaceFolder.title", + "espIdf.size.title", + "espIdf.apptrace.title", + "espIdf.openOCDCommand.title", + "debug.initConfig.name", + "debug.initConfig.description", + "param.adapterTargetName", + "param.openOcdConfigFilesList", + "param.projectName", + "param.baudRate", + "param.port", + "param.pythonBinPath", + "param.pythonSystemBinPath", + "param.espIdfPath", + "param.toolsPath", + "param.exportPaths", + "param.exportVars", + "param.useIDFKConfigStyle", + "param.showOnboardingOnInit", + "view.components.name", + "configuration.title", + "espIdf.apptrace.archive.refresh.title", + "espIdf.apptrace.archive.showReport.title", + "espIdf.apptrace.customize.title", + "trace.poll_period.description", + "trace.trace_size.description", + "trace.stop_tmo.description", + "trace.wait4halt.description", + "trace.skip_size.description" + ] +} \ No newline at end of file diff --git a/src/localizationDictionary.ts b/src/localizationDictionary.ts index a371a3f86..bee5ee638 100644 --- a/src/localizationDictionary.ts +++ b/src/localizationDictionary.ts @@ -18,6 +18,8 @@ import { Logger } from "./logger/logger"; export class LocDictionary { private dictionary: object; + private schemaProperties: string[]; + private localizationFile: string; /** * Representation of a language dictionary for a source file. @@ -29,10 +31,11 @@ export class LocDictionary { const localeConf = JSON.parse(process.env.VSCODE_NLS_CONFIG); const locDirPath = path.join(extensionName, "i18n", localeConf.locale, type); const subPath = this.getLocalizationFilePath(absolutePath); - const locJsonPath = path.join(locDirPath, subPath + ".i18n.json"); - if (fs.existsSync(locDirPath) && fs.existsSync(locJsonPath)) { + this.localizationFile = path.join(locDirPath, subPath + ".i18n.json"); + if (fs.existsSync(locDirPath) && fs.existsSync(this.localizationFile)) { try { - this.dictionary = JSON.parse(fs.readFileSync(locJsonPath).toString()); + this.dictionary = JSON.parse(fs.readFileSync(this.localizationFile).toString()); + this.schemaProperties = this.getDictionaryType(); } catch (error) { Logger.errorNotify("Failed to load localization, by default will only display in English", error); } @@ -43,6 +46,9 @@ export class LocDictionary { if (this.dictionary && this.dictionary.hasOwnProperty(key)) { return this.dictionary[key]; } + if (this.schemaProperties && this.schemaProperties.hasOwnProperty(key)) { + Logger.infoNotify(`${this.localizationFile} doesn't contain localization for ${key}`); + } return defaultMsg; } @@ -50,6 +56,32 @@ export class LocDictionary { return this.dictionary; } + public getSchemaParts(pathToUse: string): string[] { + const extensionName = __dirname.replace(path.sep + "dist", ""); + const parts = pathToUse.replace(path.join(extensionName, "i18n"), "").split(/(?:\\|\/)/g); + parts.splice(0, 2); + parts[parts.length - 1] = parts[parts.length - 1].replace(/(\.).*/g, ""); + return parts; + } + + public getDictionaryType() { + const extensionName = __dirname.replace(path.sep + "dist", ""); + const dictionarySchema = JSON.parse(fs.readFileSync(path.join(extensionName, "schema.i18n.json")).toString()); + const parts = this.getSchemaParts(this.localizationFile); + const keys = this.reduceSchemaObj(dictionarySchema, parts); + if (keys) { + return keys; + } else { + const err = new Error(`Error with parsing localization schema for ${this.localizationFile}`); + Logger.errorNotify(err.message, err); + } + } + + private reduceSchemaObj = (schemaObj, parts: string[]) => { + return parts.reduce((obj, key) => + (obj && obj[key] !== undefined) ? obj[key] : undefined, schemaObj); + } + private getLocalizationFilePath(absolutePath: string) { const parts = absolutePath.replace("src" + path.sep, "").split(/(?:\\|\/)/g); parts[parts.length - 1] = parts[parts.length - 1].replace(/(\.).*/g, ""); diff --git a/yarn.lock b/yarn.lock index 7bb75b584..eecddacaa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -18,29 +18,29 @@ esutils "^2.0.2" js-tokens "^4.0.0" -"@fortawesome/fontawesome-common-types@^0.2.26": - version "0.2.26" - resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.26.tgz#6e0b13a752676036f8196f8a1500d53a27b4adc1" - integrity sha512-CcM/fIFwZlRdiWG/25xE/wHbtyUuCtqoCTrr6BsWw7hH072fR++n4L56KPydAr3ANgMJMjT8v83ZFIsDc7kE+A== +"@fortawesome/fontawesome-common-types@^0.2.27": + version "0.2.27" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.27.tgz#19706345859fc46adf3684ed01d11b40903b87e9" + integrity sha512-97GaByGaXDGMkzcJX7VmR/jRJd8h1mfhtA7RsxDBN61GnWE/PPCZhOdwG/8OZYktiRUF0CvFOr+VgRkJrt6TWg== "@fortawesome/fontawesome-free@^5.9.0": - version "5.12.0" - resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-5.12.0.tgz#8ceb9f09edfb85ea18a6c7bf098f6f5dd5ffd62b" - integrity sha512-vKDJUuE2GAdBERaQWmmtsciAMzjwNrROXA5KTGSZvayAsmuTGjam5z6QNqNPCwDfVljLWuov1nEC3mEQf/n6fQ== + version "5.12.1" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-5.12.1.tgz#2a98fea9fbb8a606ddc79a4680034e9d5591c550" + integrity sha512-ZtjIIFplxncqxvogq148C3hBLQE+W3iJ8E4UvJ09zIJUgzwLcROsWwFDErVSXY2Plzao5J9KUYNHKHMEUYDMKw== "@fortawesome/fontawesome-svg-core@^1.2.21": - version "1.2.26" - resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.26.tgz#671569271d6b532cdea5e3deb8ff16f8b7ac251d" - integrity sha512-3Dfd/v2IztP1TxKOxZiB5+4kaOZK9mNy0KU1vVK7nFlPWz3gzxrCWB+AloQhQUoJ8HhGqbzjliK89Vl7PExGbw== + version "1.2.27" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.27.tgz#e4db8e3be81a40988213507c3e3d0c158a6641a3" + integrity sha512-sOD3DKynocnHYpuw2sLPnTunDj7rLk91LYhi2axUYwuGe9cPCw7Bsu9EWtVdNJP+IYgTCZIbyARKXuy5K/nv+Q== dependencies: - "@fortawesome/fontawesome-common-types" "^0.2.26" + "@fortawesome/fontawesome-common-types" "^0.2.27" "@fortawesome/free-solid-svg-icons@^5.10.1": - version "5.12.0" - resolved "https://registry.yarnpkg.com/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.12.0.tgz#8decac5844e60453cc0c7c51437d1461df053a35" - integrity sha512-CnpsWs6GhTs9ekNB3d8rcO5HYqRkXbYKf2YNiAlTWbj5eVlPqsd/XH1F9If8jkcR1aegryAbln/qYeKVZzpM0g== + version "5.12.1" + resolved "https://registry.yarnpkg.com/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.12.1.tgz#76b6f958a3471821ff146f8f955e6d7cfe87147c" + integrity sha512-k3MwRFFUhyL4cuCJSaHDA0YNYMELDXX0h8JKtWYxO5XD3Dn+maXOMrVAAiNGooUyM2v/wz/TOaM0jxYVKeXX7g== dependencies: - "@fortawesome/fontawesome-common-types" "^0.2.26" + "@fortawesome/fontawesome-common-types" "^0.2.27" "@fortawesome/vue-fontawesome@^0.1.6": version "0.1.9" @@ -93,9 +93,9 @@ "@types/node" "*" "@types/node@*": - version "13.1.8" - resolved "https://registry.yarnpkg.com/@types/node/-/node-13.1.8.tgz#1d590429fe8187a02707720ecf38a6fe46ce294b" - integrity sha512-6XzyyNM9EKQW4HKuzbo/CkOIjn/evtCmsU+MUM1xDfJ+3/rNjBttM1NgN7AOQvN6tP1Sl1D1PIKMreTArnxM9A== + version "13.7.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-13.7.1.tgz#238eb34a66431b71d2aaddeaa7db166f25971a0d" + integrity sha512-Zq8gcQGmn4txQEJeiXo/KiLpon8TzAl0kmKH4zdWctPj05nWwp1ClMdAVEloqrQKfaC48PNLdgN/aVaLqUrluA== "@types/node@^7.10.9": version "7.10.9" @@ -113,9 +113,9 @@ integrity sha1-EHPEvIJHVK49EM+riKsCN7qWTk0= "@types/vscode@^1.30.0": - version "1.41.0" - resolved "https://registry.yarnpkg.com/@types/vscode/-/vscode-1.41.0.tgz#b0d75920220f84e07093285e59180c0f11d336cd" - integrity sha512-7SfeY5u9jgiELwxyLB3z7l6l/GbN9CqpCQGkcRlB7tKRFBxzbz2PoBfGrLxI1vRfUCIq5+hg5vtDHExwq5j3+A== + version "1.42.0" + resolved "https://registry.yarnpkg.com/@types/vscode/-/vscode-1.42.0.tgz#0ad891a9487e91e34be7c56985058a179031eb76" + integrity sha512-ds6TceMsh77Fs0Mq0Vap6Y72JbGWB8Bay4DrnJlf5d9ui2RSe1wis13oQm+XhguOeH1HUfLGzaDAoupTUtgabw== "@types/yauzl@^2.9.1": version "2.9.1" @@ -389,9 +389,9 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: color-convert "^1.9.0" ansi-to-html@^0.6.11: - version "0.6.13" - resolved "https://registry.yarnpkg.com/ansi-to-html/-/ansi-to-html-0.6.13.tgz#c72eae8b63e5ca0643aab11bfc6e6f2217425833" - integrity sha512-Ys2/umuaTlQvP9DLkaa7UzRKF2FLrfod/hNHXS9QhXCrw7seObG6ksOGmNz3UoK+adwM8L9vQfG7mvaxfJ3Jvw== + version "0.6.14" + resolved "https://registry.yarnpkg.com/ansi-to-html/-/ansi-to-html-0.6.14.tgz#65fe6d08bba5dd9db33f44a20aec331e0010dad8" + integrity sha512-7ZslfB1+EnFSDO5Ju+ue5Y6It19DRnZXWv8jrGHgIlPna5Mh4jz7BV5jCbQneXNFurQcKoolaaAjHtgSBfOIuA== dependencies: entities "^1.1.2" @@ -1031,9 +1031,9 @@ chokidar@^2.0.0, chokidar@^2.0.2: fsevents "^1.2.7" chownr@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.3.tgz#42d837d5239688d55f303003a508230fa6727142" - integrity sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw== + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== chrome-trace-event@^1.0.2: version "1.0.2" @@ -1066,9 +1066,9 @@ class-utils@^0.3.5: static-extend "^0.1.1" clean-css@4.2.x: - version "4.2.1" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.1.tgz#2d411ef76b8569b6d0c84068dabe85b0aa5e5c17" - integrity sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g== + version "4.2.3" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78" + integrity sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA== dependencies: source-map "~0.6.0" @@ -1437,7 +1437,7 @@ debug@3.1.0: dependencies: ms "2.0.0" -debug@3.2.6, debug@^3.0.0, debug@^3.1.0: +debug@3.2.6, debug@^3.0.0, debug@^3.1.0, debug@^3.2.6: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== @@ -1487,6 +1487,11 @@ deep-equal@^1.0.0: object-keys "^1.1.1" regexp.prototype.flags "^1.2.0" +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + default-compare@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/default-compare/-/default-compare-1.0.0.tgz#cb61131844ad84d84788fb68fd01681ca7781a2f" @@ -1569,6 +1574,11 @@ detect-file@^1.0.0: resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= +detect-libc@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= + didyoumean@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.1.tgz#e92edfdada6537d484d73c0172fd1eba0c4976ff" @@ -2132,9 +2142,9 @@ flush-write-stream@^1.0.0, flush-write-stream@^1.0.2: readable-stream "^2.3.6" follow-redirects@^1.6.1: - version "1.9.0" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.9.0.tgz#8d5bcdc65b7108fe1508649c79c12d732dcedb4f" - integrity sha512-CRcPzsSIbXyVDl0QI01muNDu69S8trU4jArW9LpOt2WtC6LyUJetcIrmfHsRBx7/Jb6GHJUiuqyYxPooFfNt6A== + version "1.10.0" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.10.0.tgz#01f5263aee921c6a54fb91667f08f4155ce169eb" + integrity sha512-4eyLK6s6lH32nOvLLwlIOnr9zrL8Sm+OvW4pVTJNoXeGzYIkHVf+pADQi+OJ0E67hiuSLezPVPyBcIZO50TmmQ== dependencies: debug "^3.0.0" @@ -2198,6 +2208,13 @@ fs-extra@^8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" +fs-minipass@^1.2.5: + version "1.2.7" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" + integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== + dependencies: + minipass "^2.6.0" + fs-mkdirp-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz#0b7815fc3201c6a69e14db98ce098c16935259eb" @@ -2417,12 +2434,12 @@ globby@^6.1.0: pinkie-promise "^2.0.0" globule@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/globule/-/globule-1.3.0.tgz#41d0e9fb44afd4b80d93a23263714f90b3dec904" - integrity sha512-YlD4kdMqRCQHrhVdonet4TdRtv1/sZKepvoxNT4Nrhrp5HI8XFfc8kFlGlBn2myBo80aGp8Eft259mbcUJhgSg== + version "1.3.1" + resolved "https://registry.yarnpkg.com/globule/-/globule-1.3.1.tgz#90a25338f22b7fbeb527cee63c629aea754d33b9" + integrity sha512-OVyWOHgw29yosRHCHo7NncwR1hW5ew0W/UrvtwvjefVJeQ26q4/8r8FmPsSF1hJ93IgWkyv16pCTz6WblMzm/g== dependencies: glob "~7.1.1" - lodash "~4.17.10" + lodash "~4.17.12" minimatch "~3.0.2" glogg@^1.0.0: @@ -2500,7 +2517,7 @@ har-schema@^2.0.0: resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= -har-validator@~5.1.0: +har-validator@~5.1.3: version "5.1.3" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== @@ -2707,7 +2724,7 @@ husky@^2.5.0: run-node "^1.0.0" slash "^3.0.0" -iconv-lite@^0.4.19: +iconv-lite@^0.4.19, iconv-lite@^0.4.4: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -2731,6 +2748,13 @@ iferr@^0.1.5: resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= +ignore-walk@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" + integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== + dependencies: + minimatch "^3.0.4" + import-fresh@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" @@ -2797,7 +2821,7 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -ini@^1.3.4, ini@^1.3.5: +ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== @@ -2938,11 +2962,9 @@ is-extglob@^2.1.0, is-extglob@^2.1.1: integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= is-finite@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" - integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko= - dependencies: - number-is-nan "^1.0.0" + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" + integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== is-fullwidth-code-point@^1.0.0: version "1.0.0" @@ -3114,9 +3136,9 @@ isstream@0.1.x, isstream@~0.1.2: integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= js-base64@^2.1.8: - version "2.5.1" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.1.tgz#1efa39ef2c5f7980bb1784ade4a8af2de3291121" - integrity sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw== + version "2.5.2" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.2.tgz#313b6274dda718f714d00b3330bbae6e38e90209" + integrity sha512-Vg8czh0Q7sFBSUMWWArX/miJeBWYBPpdU/3M/DKSaekLMqrqVPaedp+5mZhie/r0lgrcaYBfwXatEew6gwgiQQ== js-tokens@^4.0.0: version "4.0.0" @@ -3331,7 +3353,7 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" -lodash@^4.0.0, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.15, lodash@^4.17.3, lodash@^4.17.5, lodash@~4.17.10: +lodash@^4.0.0, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.15, lodash@^4.17.3, lodash@^4.17.5, lodash@~4.17.12: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== @@ -3611,6 +3633,21 @@ minimist@^1.1.3, minimist@^1.2.0: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= +minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" + integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.2.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" + integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== + dependencies: + minipass "^2.9.0" + mississippi@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" @@ -3749,6 +3786,15 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" +needle@^2.2.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.3.2.tgz#3342dea100b7160960a450dc8c22160ac712a528" + integrity sha512-DUzITvPVDUy6vczKKYTnWc/pBZ0EnjMJnQ3y+Jo5zfKFimJs7S3HFCxCRZYB9FUZcrzUQr3WsmvZgddMEIZv6w== + dependencies: + debug "^3.2.6" + iconv-lite "^0.4.4" + sax "^1.2.4" + neo-async@^2.5.0, neo-async@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" @@ -3841,6 +3887,22 @@ node-libs-browser@^2.2.1: util "^0.11.0" vm-browserify "^1.0.1" +node-pre-gyp@*: + version "0.14.0" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz#9a0596533b877289bcad4e143982ca3d904ddc83" + integrity sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA== + dependencies: + detect-libc "^1.0.2" + mkdirp "^0.5.1" + needle "^2.2.1" + nopt "^4.0.1" + npm-packlist "^1.1.6" + npmlog "^4.0.2" + rc "^1.2.7" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^4.4.2" + node-sass@^4.13.0: version "4.13.1" resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.13.1.tgz#9db5689696bb2eec2c32b98bfea4c7a2e992d0a3" @@ -3871,6 +3933,14 @@ node-sass@^4.13.0: dependencies: abbrev "1" +nopt@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= + dependencies: + abbrev "1" + osenv "^0.1.4" + normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" @@ -3910,6 +3980,27 @@ now-and-later@^2.0.0: dependencies: once "^1.3.2" +npm-bundled@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" + integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA== + dependencies: + npm-normalize-package-bin "^1.0.1" + +npm-normalize-package-bin@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" + integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== + +npm-packlist@^1.1.6: + version "1.4.8" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" + integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A== + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + npm-normalize-package-bin "^1.0.1" + npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" @@ -3917,7 +4008,7 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" -"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0: +"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== @@ -4081,7 +4172,7 @@ os@0.1.1: resolved "https://registry.yarnpkg.com/os/-/os-0.1.1.tgz#208845e89e193ad4d971474b93947736a56d13f3" integrity sha1-IIhF6J4ZOtTZcUdLk5R3NqVtE/M= -osenv@0, osenv@^0.1.3: +osenv@0, osenv@^0.1.3, osenv@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== @@ -4136,9 +4227,9 @@ p-try@^2.0.0: integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== pako@~1.0.5: - version "1.0.10" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732" - integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw== + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== parallel-transform@^1.1.0: version "1.2.0" @@ -4504,7 +4595,7 @@ pseudomap@^1.0.2: resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= -psl@^1.1.24: +psl@^1.1.28: version "1.7.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.7.0.tgz#f1c4c47a8ef97167dea5d6bbf4816d736e884a3c" integrity sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ== @@ -4551,12 +4642,12 @@ punycode@1.3.2: resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= -punycode@^1.2.4, punycode@^1.4.1: +punycode@^1.2.4: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= -punycode@^2.1.0: +punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== @@ -4604,6 +4695,16 @@ randomfill@^1.0.3: randombytes "^2.0.5" safe-buffer "^5.1.0" +rc@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + read-pkg-up@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" @@ -4652,9 +4753,9 @@ read@^1.0.7: util-deprecate "~1.0.1" "readable-stream@2 || 3", readable-stream@^3.0.1, readable-stream@^3.1.1: - version "3.5.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.5.0.tgz#465d70e6d1087f6162d079cd0b5db7fbebfd1606" - integrity sha512-gSz026xs2LfxBPudDuI41V1lka8cxg64E66SGe78zJlsUofOg/yqwezdIcdfwik6B4h8LFmWPA9ef9X3FiNFLA== + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== dependencies: inherits "^2.0.3" string_decoder "^1.1.1" @@ -4775,9 +4876,9 @@ replace-homedir@^1.0.0: remove-trailing-separator "^1.1.0" request@^2.87.0, request@^2.88.0: - version "2.88.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" - integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== dependencies: aws-sign2 "~0.7.0" aws4 "^1.8.0" @@ -4786,7 +4887,7 @@ request@^2.87.0, request@^2.88.0: extend "~3.0.2" forever-agent "~0.6.1" form-data "~2.3.2" - har-validator "~5.1.0" + har-validator "~5.1.3" http-signature "~1.2.0" is-typedarray "~1.0.0" isstream "~0.1.2" @@ -4796,7 +4897,7 @@ request@^2.87.0, request@^2.88.0: performance-now "^2.1.0" qs "~6.5.2" safe-buffer "^5.1.2" - tough-cookie "~2.4.3" + tough-cookie "~2.5.0" tunnel-agent "^0.6.0" uuid "^3.3.2" @@ -4848,9 +4949,9 @@ resolve-url@^0.2.1: integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.3.2, resolve@^1.4.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.0.tgz#1b7ca96073ebb52e741ffd799f6b39ea462c67f5" - integrity sha512-+hTmAldEGE80U2wJJDC1lebb5jWqvTYAfm3YZ1ckk1gBr0MnCqUKlwK1e+anaFljIl+F5tR5IoZcm4ZDA1zMQw== + version "1.15.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" + integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w== dependencies: path-parse "^1.0.6" @@ -4859,7 +4960,7 @@ ret@~0.1.10: resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== -rimraf@2, rimraf@^2.5.4, rimraf@^2.6.3: +rimraf@2, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== @@ -4929,7 +5030,7 @@ sass-loader@^7.1.0: pify "^4.0.1" semver "^6.3.0" -sax@>=0.6.0: +sax@>=0.6.0, sax@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== @@ -5374,7 +5475,7 @@ strip-indent@^1.0.1: dependencies: get-stdin "^4.0.1" -strip-json-comments@2.0.1: +strip-json-comments@2.0.1, strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= @@ -5456,6 +5557,19 @@ tar@^2.0.0: fstream "^1.0.12" inherits "2" +tar@^4.4.2: + version "4.4.13" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" + integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== + dependencies: + chownr "^1.1.1" + fs-minipass "^1.2.5" + minipass "^2.8.6" + minizlib "^1.2.1" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.3" + terser-webpack-plugin@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz#5ecaf2dbdc5fb99745fd06791f46fc9ddb1c9a7c" @@ -5584,13 +5698,13 @@ toposort@^1.0.0: resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.7.tgz#2e68442d9f64ec720b8cc89e6443ac6caa950029" integrity sha1-LmhELZ9k7HILjMieZEOsbKqVACk= -tough-cookie@~2.4.3: - version "2.4.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" - integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== +tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== dependencies: - psl "^1.1.24" - punycode "^1.4.1" + psl "^1.1.28" + punycode "^2.1.1" tree-kill@^1.2.2: version "1.2.2" @@ -5985,9 +6099,9 @@ vm-browserify@^1.0.1: integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== vsce@^1.52.0: - version "1.71.0" - resolved "https://registry.yarnpkg.com/vsce/-/vsce-1.71.0.tgz#3018cbea9e4dff4aeae86a09c3416e45b46bb6b3" - integrity sha512-7k+LPC4oJYPyyxs0a5nh4A8CleQ6+2EMPiAiX/bDyN+PmwJFm2FFPqLRxdIsIWfFnkW4ZMQBf10+W62dCRd9kQ== + version "1.73.0" + resolved "https://registry.yarnpkg.com/vsce/-/vsce-1.73.0.tgz#f65b501f0d1e45e50b220b284a47df164c4e847b" + integrity sha512-6W37Ebbkj3uF3WhT+SCfRtsneRQEFcGvf/XYz+b6OAgDCj4gPurWyDVrqw/HLsbP1WflGIyUfVZ8t5M7kQp6Uw== dependencies: azure-devops-node-api "^7.2.0" chalk "^2.4.2" @@ -6011,17 +6125,17 @@ vsce@^1.52.0: yazl "^2.2.2" vscode-debugadapter@^1.33.0: - version "1.37.1" - resolved "https://registry.yarnpkg.com/vscode-debugadapter/-/vscode-debugadapter-1.37.1.tgz#7d7076e64e9786fe4fcb0c156e1ed24184a9fb2b" - integrity sha512-g/xNsUdkrd0DifaoRJ4+wypSMsMbK47fGpetpmIOnOQiDFjtYKvqxsgyUZ4BOj2jKP2Xa40B4YXfUUJpqreWJg== + version "1.38.0" + resolved "https://registry.yarnpkg.com/vscode-debugadapter/-/vscode-debugadapter-1.38.0.tgz#764a2cef6634cf17c35e1ca97fa1faa253ac87c1" + integrity sha512-rm4qmbqj8aAaE8sUt4hX2HZUi7Nmtmf10fiGPqbLZWSFPrBi6myxhrQ0HPeG6Xep5rEgrGzVwCJ/lSGPz2ja1A== dependencies: mkdirp "^0.5.1" - vscode-debugprotocol "1.37.0" + vscode-debugprotocol "1.38.0" -vscode-debugprotocol@1.37.0, vscode-debugprotocol@^1.33.0: - version "1.37.0" - resolved "https://registry.yarnpkg.com/vscode-debugprotocol/-/vscode-debugprotocol-1.37.0.tgz#e8c4694a078d18ea1a639553a7a241b35c1e6f6d" - integrity sha512-ppZLEBbFRVNsK0YpfgFi/x2CDyihx0F+UpdKmgeJcvi05UgSXYdO0n9sDVYwoGvvYQPvlpDQeWuY0nloOC4mPA== +vscode-debugprotocol@1.38.0, vscode-debugprotocol@^1.33.0: + version "1.38.0" + resolved "https://registry.yarnpkg.com/vscode-debugprotocol/-/vscode-debugprotocol-1.38.0.tgz#7a9bcd457e6642f48fabef114c0fa1c25a2fb1e7" + integrity sha512-oam9iSjNfXSn71a8bmNsXv8k/rIKSOcllIPrFnNgxd1EMBpfnum+gb7lmRpcH0zSjGb+OH8Ncn8B5tv8srWbNQ== vscode-jsonrpc@^4.0.0: version "4.0.0" @@ -6095,9 +6209,9 @@ vscode-uri@^1.0.6: integrity sha512-obtSWTlbJ+a+TFRYGaUumtVwb+InIUVI0Lu0VBUAPmj2cU5JutEXg3xUE0c2J5Tcy7h2DEKVJBFi+Y9ZSFzzPQ== vue-class-component@^7.1.0: - version "7.2.2" - resolved "https://registry.yarnpkg.com/vue-class-component/-/vue-class-component-7.2.2.tgz#aecc6d28801f64c61eb04407cf3a5476da26b0c0" - integrity sha512-QjVfjRffux0rUBNtxr1hvUxDrfifDvk9q/OSdB/sKIlfxAudDF2E1YTeiEC+qOYIOOBGWkgSKQSnast6H+S38w== + version "7.2.3" + resolved "https://registry.yarnpkg.com/vue-class-component/-/vue-class-component-7.2.3.tgz#a5b1abd53513a72ad51098752e2dedd499807cca" + integrity sha512-oEqYpXKaFN+TaXU+mRLEx8dX0ah85aAJEe61mpdoUrq0Bhe/6sWhyZX1JjMQLhVsHAkncyhedhmCdDVSasUtDw== vue-hot-reload-api@^2.3.0, vue-hot-reload-api@^2.3.2: version "2.3.4" @@ -6105,9 +6219,9 @@ vue-hot-reload-api@^2.3.0, vue-hot-reload-api@^2.3.2: integrity sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog== vue-loader@^15.7.1: - version "15.8.3" - resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-15.8.3.tgz#857cb9e30eb5fc25e66db48dce7e4f768602a23c" - integrity sha512-yFksTFbhp+lxlm92DrKdpVIWMpranXnTEuGSc0oW+Gk43M9LWaAmBTnfj5+FCdve715mTHvo78IdaXf5TbiTJg== + version "15.9.0" + resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-15.9.0.tgz#5d4b0378a4606188fc83e587ed23c94bc3a10998" + integrity sha512-FeDHvTSpwyLeF7LIV1PYkvqUQgTJ8UmOxhSlCyRSxaXCKk+M6NF4tDQsLsPPNeDPyR7TfRQ8MLg6v+8PsDV9xQ== dependencies: "@vue/component-compiler-utils" "^3.1.0" hash-sum "^1.0.2" @@ -6116,9 +6230,9 @@ vue-loader@^15.7.1: vue-style-loader "^4.1.0" vue-property-decorator@^8.2.1: - version "8.3.0" - resolved "https://registry.yarnpkg.com/vue-property-decorator/-/vue-property-decorator-8.3.0.tgz#536f027dc7d626f37c8d85a2dc02f0a6cb979440" - integrity sha512-77YtTbZHd5CNiPzbqv51kEgL48yvD2dUDfF28vEyw3MbQ9bBAb/tDyFzskcqjNRbWyXk1vq4oM2CK/LfhxuIBg== + version "8.4.0" + resolved "https://registry.yarnpkg.com/vue-property-decorator/-/vue-property-decorator-8.4.0.tgz#f4e641f84ca51a7b4721e236392a1efbb6eac00b" + integrity sha512-0o85LJSTLZvDaB7IXfmpONfAQZ7NgScFvptFSrlFFSsScR716muJb3mMFojNnKC3Vpm7CM4PsmHNdk30uuNpag== dependencies: vue-class-component "^7.1.0" @@ -6183,9 +6297,9 @@ watchpack@^1.6.0: neo-async "^2.5.0" webpack-cli@^3.3.5: - version "3.3.10" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.10.tgz#17b279267e9b4fb549023fae170da8e6e766da13" - integrity sha512-u1dgND9+MXaEt74sJR4PR7qkPxXUSQ0RXYq8x1L6Jg1MYVEmGPrH6Ah6C4arD4r0J1P5HKjRqpab36k0eIzPqg== + version "3.3.11" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.11.tgz#3bf21889bf597b5d82c38f215135a411edfdc631" + integrity sha512-dXlfuml7xvAFwYUPsrtQAA9e4DOe58gnzSxhgrO/ZM/gyXTBowrsYeubyN4mqGhYdpXMFNyQ6emjJS9M7OBd4g== dependencies: chalk "2.4.2" cross-spawn "6.0.5" @@ -6208,9 +6322,9 @@ webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1: source-map "~0.6.1" webpack@^4.35.3: - version "4.41.5" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.41.5.tgz#3210f1886bce5310e62bb97204d18c263341b77c" - integrity sha512-wp0Co4vpyumnp3KlkmpM5LWuzvZYayDwM2n17EHFr4qxBBbRokC7DJawPJC7TfSFZ9HZ6GsdH40EBj4UV0nmpw== + version "4.41.6" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.41.6.tgz#12f2f804bf6542ef166755050d4afbc8f66ba7e1" + integrity sha512-yxXfV0Zv9WMGRD+QexkZzmGIh54bsvEs+9aRWxnN8erLWEOehAKUTeNBoUbA6HPEZPlRo7KDi2ZcNveoZgK9MA== dependencies: "@webassemblyjs/ast" "1.8.5" "@webassemblyjs/helper-module-context" "1.8.5" @@ -6339,7 +6453,7 @@ yallist@^2.1.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= -yallist@^3.0.2: +yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== From 6f88aac49897da92b1fe05d5ab7dfa4e95ceda5e Mon Sep 17 00:00:00 2001 From: "Brian A. Ignacio" Date: Thu, 27 Feb 2020 13:53:41 +0800 Subject: [PATCH 3/4] rm unused i18n field, add unknown field (#48) --- gulpfile.js | 2 +- schema.i18n.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gulpfile.js b/gulpfile.js index 08f1cc812..8ba08ebe4 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -78,7 +78,7 @@ function validateLocalizationFiles(done) { const schemaKeys = reduceSchemaObj(schema, parts); schemaKeys.forEach((schemaKey) => { if (!localeJson.hasOwnProperty(schemaKey)) { - throw `${schemaKey} not defined in ${locFile}`; + throw new Error(`${schemaKey} not defined in ${locFile}`); } }); Object.keys(localeJson).forEach((fileKey) => { diff --git a/schema.i18n.json b/schema.i18n.json index 8a6d0735f..924739f36 100644 --- a/schema.i18n.json +++ b/schema.i18n.json @@ -78,6 +78,7 @@ }, "package": [ "espIdf.createFiles.title", + "espIdf.createVsCodeFolder.title", "espIdf.setPath.title", "espIdf.setTarget.title", "espIdf.configDevice.title", @@ -98,7 +99,6 @@ "debug.initConfig.description", "param.adapterTargetName", "param.openOcdConfigFilesList", - "param.projectName", "param.baudRate", "param.port", "param.pythonBinPath", From 81bcc954a25ea179bebe7e8c839f8b50d3bd078d Mon Sep 17 00:00:00 2001 From: Soumesh Banerjee Date: Thu, 27 Feb 2020 11:33:56 +0530 Subject: [PATCH 4/4] v0.1.4 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3c3a2912f..8bdacdedf 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "preview": true, "displayName": "Espressif IDF", "description": "Espressif IoT Development Framework", - "version": "0.1.3", + "version": "0.1.4", "license": "Apache-2.0", "publisher": "espressif", "icon": "espressif_icon.png",