From 5fde1c33e397f60d99b0eb3df22d20621877d4a1 Mon Sep 17 00:00:00 2001 From: CaptainIRS <36656347+CaptainIRS@users.noreply.github.com> Date: Mon, 7 Feb 2022 00:07:08 +0530 Subject: [PATCH 1/6] feat: Add VSCode extension --- .vscode/settings.json | 2 +- package.json | 4 +- packages/extension/.eslintrc.json | 18 + packages/extension/.gitignore | 4 + packages/extension/.vscode/extensions.json | 5 + packages/extension/.vscode/launch.json | 31 + packages/extension/.vscode/settings.json | 13 + packages/extension/.vscode/tasks.json | 37 + packages/extension/.vscodeignore | 13 + packages/extension/.yarnrc | 1 + packages/extension/README.md | 3 + packages/extension/assets | 1 + packages/extension/media/icon.svg | 66 ++ packages/extension/package.json | 150 +++ .../extension/src/config/config.example.ts | 1 + packages/extension/src/executors/cExecutor.ts | 70 ++ .../extension/src/executors/cppExecutor.ts | 78 ++ packages/extension/src/executors/executor.ts | 106 +++ .../extension/src/executors/pythonExecutor.ts | 59 ++ packages/extension/src/extension.ts | 27 + .../extension/src/pages/mapDesignerStatic.ts | 43 + .../extension/src/pages/rendererStatic.ts | 32 + .../extension/src/panels/mapDesignerPanel.ts | 181 ++++ .../extension/src/panels/rendererPanel.ts | 124 +++ .../src/providers/tree-data/mapProvider.ts | 149 +++ .../providers/tree-data/sourceCodeProvider.ts | 260 ++++++ packages/extension/tsconfig.json | 15 + packages/extension/webpack.config.js | 110 +++ packages/map-designer/package.json | 5 +- packages/map-designer/vite.prod.config.ts | 14 +- packages/renderer/package.json | 5 +- packages/renderer/vite.prod.config.ts | 14 +- vite.prod.config.ts | 12 +- yarn.lock | 869 +++++++++++++++--- 34 files changed, 2378 insertions(+), 144 deletions(-) create mode 100644 packages/extension/.eslintrc.json create mode 100644 packages/extension/.gitignore create mode 100644 packages/extension/.vscode/extensions.json create mode 100644 packages/extension/.vscode/launch.json create mode 100644 packages/extension/.vscode/settings.json create mode 100644 packages/extension/.vscode/tasks.json create mode 100644 packages/extension/.vscodeignore create mode 100644 packages/extension/.yarnrc create mode 100644 packages/extension/README.md create mode 120000 packages/extension/assets create mode 100644 packages/extension/media/icon.svg create mode 100644 packages/extension/package.json create mode 100644 packages/extension/src/config/config.example.ts create mode 100644 packages/extension/src/executors/cExecutor.ts create mode 100644 packages/extension/src/executors/cppExecutor.ts create mode 100644 packages/extension/src/executors/executor.ts create mode 100644 packages/extension/src/executors/pythonExecutor.ts create mode 100644 packages/extension/src/extension.ts create mode 100644 packages/extension/src/pages/mapDesignerStatic.ts create mode 100644 packages/extension/src/pages/rendererStatic.ts create mode 100644 packages/extension/src/panels/mapDesignerPanel.ts create mode 100644 packages/extension/src/panels/rendererPanel.ts create mode 100644 packages/extension/src/providers/tree-data/mapProvider.ts create mode 100644 packages/extension/src/providers/tree-data/sourceCodeProvider.ts create mode 100644 packages/extension/tsconfig.json create mode 100644 packages/extension/webpack.config.js diff --git a/.vscode/settings.json b/.vscode/settings.json index faa23854..26631c51 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,7 +1,7 @@ { "files.exclude": { "**/.husky": true, - "**/.vscode": true, + ".vscode": true, "**/.yarn": true, "**/coverage": true, "**/dist": true, diff --git a/package.json b/package.json index 89d20c38..3ac3ef80 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ }, "dependencies": { "@codecharacter-2022/client": "workspace:packages/client", + "@codecharacter-2022/extension": "workspace:packages/extension", "@codecharacter-2022/map-designer": "workspace:packages/map-designer", "@codecharacter-2022/renderer": "workspace:packages/renderer", "@fortawesome/fontawesome-svg-core": "^1.2.36", @@ -131,7 +132,8 @@ }, "jest": { "preset": "ts-jest", - "testEnvironment": "node" + "testEnvironment": "node", + "testRegex": "/__tests__/.*test.[jt]sx?$" }, "lint-staged": { "*.{ts,.tsx}": [ diff --git a/packages/extension/.eslintrc.json b/packages/extension/.eslintrc.json new file mode 100644 index 00000000..5dfecab7 --- /dev/null +++ b/packages/extension/.eslintrc.json @@ -0,0 +1,18 @@ +{ + "root": true, + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 6, + "sourceType": "module" + }, + "plugins": ["@typescript-eslint"], + "rules": { + "@typescript-eslint/naming-convention": "warn", + "@typescript-eslint/semi": "warn", + "curly": "warn", + "eqeqeq": "warn", + "no-throw-literal": "warn", + "semi": "off" + }, + "ignorePatterns": ["out", "dist", "**/*.d.ts"] +} diff --git a/packages/extension/.gitignore b/packages/extension/.gitignore new file mode 100644 index 00000000..31030798 --- /dev/null +++ b/packages/extension/.gitignore @@ -0,0 +1,4 @@ +.vscode-test +dist +out +src/config/config.ts diff --git a/packages/extension/.vscode/extensions.json b/packages/extension/.vscode/extensions.json new file mode 100644 index 00000000..57dbdae4 --- /dev/null +++ b/packages/extension/.vscode/extensions.json @@ -0,0 +1,5 @@ +{ + // See http://go.microsoft.com/fwlink/?LinkId=827846 + // for the documentation about the extensions.json format + "recommendations": ["dbaeumer.vscode-eslint", "amodio.tsl-problem-matcher"] +} diff --git a/packages/extension/.vscode/launch.json b/packages/extension/.vscode/launch.json new file mode 100644 index 00000000..cd540529 --- /dev/null +++ b/packages/extension/.vscode/launch.json @@ -0,0 +1,31 @@ +// A launch configuration that compiles the extension and then opens it inside a new window +// Use IntelliSense to learn about possible attributes. +// Hover to view descriptions of existing attributes. +// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Run Extension", + "type": "extensionHost", + "request": "launch", + "args": ["--extensionDevelopmentPath=${workspaceFolder}"], + "outFiles": ["${workspaceFolder}/dist/**/*.js"], + "preLaunchTask": "${defaultBuildTask}" + }, + { + "name": "Extension Tests", + "type": "extensionHost", + "request": "launch", + "args": [ + "--extensionDevelopmentPath=${workspaceFolder}", + "--extensionTestsPath=${workspaceFolder}/out/test/suite/index" + ], + "outFiles": [ + "${workspaceFolder}/out/**/*.js", + "${workspaceFolder}/dist/**/*.js" + ], + "preLaunchTask": "tasks: watch-tests" + } + ] +} diff --git a/packages/extension/.vscode/settings.json b/packages/extension/.vscode/settings.json new file mode 100644 index 00000000..64ee9296 --- /dev/null +++ b/packages/extension/.vscode/settings.json @@ -0,0 +1,13 @@ +// Place your settings in this file to overwrite default and user settings. +{ + "files.exclude": { + "out": false, // set this to true to hide the "out" folder with the compiled JS files + "dist": false // set this to true to hide the "dist" folder with the compiled JS files + }, + "search.exclude": { + "out": true, // set this to false to include "out" folder in search results + "dist": true // set this to false to include "dist" folder in search results + }, + // Turn off tsc task auto detection since we have the necessary tasks as npm scripts + "typescript.tsc.autoDetect": "off" +} diff --git a/packages/extension/.vscode/tasks.json b/packages/extension/.vscode/tasks.json new file mode 100644 index 00000000..bb452adf --- /dev/null +++ b/packages/extension/.vscode/tasks.json @@ -0,0 +1,37 @@ +// See https://go.microsoft.com/fwlink/?LinkId=733558 +// for the documentation about the tasks.json format +{ + "version": "2.0.0", + "tasks": [ + { + "type": "npm", + "script": "watch", + "problemMatcher": ["$ts-webpack-watch", "$tslint-webpack-watch"], + "isBackground": true, + "presentation": { + "reveal": "never", + "group": "watchers" + }, + "group": { + "kind": "build", + "isDefault": true + } + }, + { + "type": "npm", + "script": "watch-tests", + "problemMatcher": "$tsc-watch", + "isBackground": true, + "presentation": { + "reveal": "never", + "group": "watchers" + }, + "group": "build" + }, + { + "label": "tasks: watch-tests", + "dependsOn": ["npm: watch", "npm: watch-tests"], + "problemMatcher": [] + } + ] +} diff --git a/packages/extension/.vscodeignore b/packages/extension/.vscodeignore new file mode 100644 index 00000000..c6136798 --- /dev/null +++ b/packages/extension/.vscodeignore @@ -0,0 +1,13 @@ +.vscode/** +.vscode-test/** +out/** +node_modules/** +src/** +.gitignore +.yarnrc +webpack.config.js +vsc-extension-quickstart.md +**/tsconfig.json +**/.eslintrc.json +**/*.map +**/*.ts diff --git a/packages/extension/.yarnrc b/packages/extension/.yarnrc new file mode 100644 index 00000000..f757a6ac --- /dev/null +++ b/packages/extension/.yarnrc @@ -0,0 +1 @@ +--ignore-engines true \ No newline at end of file diff --git a/packages/extension/README.md b/packages/extension/README.md new file mode 100644 index 00000000..afdbcd93 --- /dev/null +++ b/packages/extension/README.md @@ -0,0 +1,3 @@ +# CodeCharacter 2022 VSCode Extension + +An extension for VSCode that allows players to play CodeCharacter from the comfort of their IDE. diff --git a/packages/extension/assets b/packages/extension/assets new file mode 120000 index 00000000..1ea7d147 --- /dev/null +++ b/packages/extension/assets @@ -0,0 +1 @@ +../../public/assets/ \ No newline at end of file diff --git a/packages/extension/media/icon.svg b/packages/extension/media/icon.svg new file mode 100644 index 00000000..1d6873ea --- /dev/null +++ b/packages/extension/media/icon.svg @@ -0,0 +1,66 @@ + + + + + Rook + + Western white-side Rook + + + + + + + + + Rook + + + + diff --git a/packages/extension/package.json b/packages/extension/package.json new file mode 100644 index 00000000..ab019697 --- /dev/null +++ b/packages/extension/package.json @@ -0,0 +1,150 @@ +{ + "name": "@codecharacter-2022/extension", + "displayName": "CodeCharacter 2022", + "description": "An extension for simulating code for CodeCharacter 2022 locally", + "version": "2022.0.1", + "engines": { + "vscode": "^1.63.0" + }, + "categories": [ + "Other" + ], + "activationEvents": [ + "onView:codecharacter-2022-codes" + ], + "main": "./dist/extension.js", + "contributes": { + "commands": [ + { + "command": "codecharacter-2022.helloWorld", + "title": "Hello World" + }, + { + "command": "codecharacter-2022.addMapFile", + "title": "Add Map File", + "icon": "$(add)" + }, + { + "command": "codecharacter-2022.deleteMapFile", + "title": "Delete Map File", + "icon": "$(trash)" + }, + { + "command": "codecharacter-2022.runCode", + "title": "Run Code", + "icon": "media/icon.svg" + }, + { + "command": "codecharacter-2022.deleteCodeFile", + "title": "Delete Code", + "icon": "$(trash)" + }, + { + "command": "codecharacter-2022.addCodeFile", + "title": "Add Code", + "icon": "$(add)" + } + ], + "viewsContainers": { + "activitybar": [ + { + "id": "codecharacter-2022", + "title": "CodeCharacter 2022", + "icon": "media/icon.svg" + } + ] + }, + "menus": { + "editor/title": [ + { + "command": "codecharacter-2022.runCode", + "group": "navigation", + "when": "resourceFilename =~ /\\.(c|cpp|js|py|java)$/ && resourcePath =~ /codes/ && editorFocus" + } + ], + "view/title": [ + { + "command": "codecharacter-2022.addMapFile", + "when": "view == codecharacter-2022-maps", + "group": "navigation" + } + ], + "view/item/context": [ + { + "command": "codecharacter-2022.deleteCodeFile", + "when": "view == codecharacter-2022-codes && viewItem == sourceFile", + "group": "inline" + }, + { + "command": "codecharacter-2022.deleteMapFile", + "when": "view == codecharacter-2022-maps && viewItem == map", + "group": "inline" + }, + { + "command": "codecharacter-2022.addCodeFile", + "when": "view == codecharacter-2022-codes && viewItem == sourceFolder", + "group": "inline" + } + ] + }, + "views": { + "codecharacter-2022": [ + { + "id": "codecharacter-2022-codes", + "name": "Local Source Code Files", + "icon": "media/icons.svg", + "contextualTitle": "Source Code Files" + }, + { + "id": "codecharacter-2022-maps", + "name": "Local Maps", + "icon": "media/icons.svg", + "contextualTitle": "Map Files" + } + ] + }, + "viewsWelcome": [ + { + "view": "codecharacter-2022-codes", + "contents": "No local source file found.\n[Add Source File](command:codecharacter-2022.addSourceFile)" + }, + { + "view": "codecharacter-2022-maps", + "contents": "No local map found.\n[Add Map File](command:codecharacter-2022.addMapFile)" + } + ] + }, + "scripts": { + "vscode:prepublish": "yarn run package", + "compile": "webpack", + "watch": "webpack --watch", + "package": "webpack --mode production --devtool hidden-source-map", + "compile-tests": "tsc -p . --outDir out", + "watch-tests": "tsc -p . -w --outDir out", + "pretest": "yarn run compile-tests && yarn run compile && yarn run lint", + "lint": "eslint src --ext ts", + "test": "node ./out/test/runTest.js" + }, + "devDependencies": { + "@types/glob": "^7.2.0", + "@types/mocha": "^9.0.0", + "@types/node": "14.x", + "@types/rimraf": "^3.0.2", + "@types/vscode": "^1.63.0", + "@typescript-eslint/eslint-plugin": "^5.9.1", + "@typescript-eslint/parser": "^5.9.1", + "@vscode/test-electron": "^2.0.3", + "eslint": "^8.6.0", + "glob": "^7.2.0", + "mocha": "^9.1.3", + "ts-loader": "^9.2.6", + "typescript": "^4.5.4", + "webpack": "^5.66.0", + "webpack-cli": "^4.9.1" + }, + "dependencies": { + "@codecharacter-2022/map-designer": "workspace:^", + "@codecharacter-2022/renderer": "workspace:^", + "rimraf": "^3.0.2" + } +} diff --git a/packages/extension/src/config/config.example.ts b/packages/extension/src/config/config.example.ts new file mode 100644 index 00000000..0df2ba67 --- /dev/null +++ b/packages/extension/src/config/config.example.ts @@ -0,0 +1 @@ +export const SIMULATOR_PATH = '/path'; diff --git a/packages/extension/src/executors/cExecutor.ts b/packages/extension/src/executors/cExecutor.ts new file mode 100644 index 00000000..f2577b2d --- /dev/null +++ b/packages/extension/src/executors/cExecutor.ts @@ -0,0 +1,70 @@ +import * as vscode from 'vscode'; +import * as fs from 'fs'; +import * as path from 'path'; +import * as os from 'os'; +import { spawn, spawnSync } from 'child_process'; +import { + getLogFromSimulatorLog, + outputChannel, + provideInitialInput, +} from './executor'; +import { SIMULATOR_PATH } from '../config/config'; + +export class CCodeExecutor { + async execute( + mapData: Array>, + uri: vscode.Uri, + ): Promise { + const executablePath = this._compile(uri); + const userExecutable = spawn(executablePath); + const simulatorExecutable = spawn(SIMULATOR_PATH); + return new Promise((resolve, reject) => { + let simulatorLog = ''; + outputChannel?.show(); + userExecutable.stdout.on('data', data => { + simulatorExecutable.stdin.write(data); + outputChannel?.append(data.toString()); + }); + simulatorExecutable.stdout.on('data', data => { + userExecutable.stdin.write(data); + outputChannel?.append(data.toString()); + simulatorLog += data.toString(); + }); + userExecutable.on('close', () => { + simulatorExecutable.kill(); + setTimeout(() => resolve(getLogFromSimulatorLog(simulatorLog)), 1000); + }); + simulatorExecutable.on('close', () => { + userExecutable.kill(); + setTimeout(() => resolve(getLogFromSimulatorLog(simulatorLog)), 1000); + }); + userExecutable.on('error', err => { + reject(err); + }); + simulatorExecutable.on('error', err => { + reject(err); + }); + + provideInitialInput( + mapData, + userExecutable.stdin, + simulatorExecutable.stdin, + ); + }); + } + + private _compile(uri: vscode.Uri): string { + const tmpdir = fs.mkdtempSync(path.join(os.tmpdir(), 'cc_')); + const executablePath = path.join(tmpdir, 'main'); + const child = spawnSync('gcc', ['-o', executablePath, uri.fsPath]); + outputChannel?.clear(); + outputChannel?.append(child.stdout.toString()); + outputChannel?.append(child.stderr.toString()); + if (child.status !== 0) { + throw new Error('Compilation failed'); + } else { + vscode.window.showInformationMessage('Compilation succeeded'); + return executablePath; + } + } +} diff --git a/packages/extension/src/executors/cppExecutor.ts b/packages/extension/src/executors/cppExecutor.ts new file mode 100644 index 00000000..5d1863b5 --- /dev/null +++ b/packages/extension/src/executors/cppExecutor.ts @@ -0,0 +1,78 @@ +import * as vscode from 'vscode'; +import * as fs from 'fs'; +import * as path from 'path'; +import * as os from 'os'; +import { spawn, spawnSync } from 'child_process'; +import { + getLogFromSimulatorLog, + outputChannel, + provideInitialInput, +} from './executor'; +import { SIMULATOR_PATH } from '../config/config'; + +export class CppCodeExecutor { + async execute( + mapData: Array>, + uri: vscode.Uri, + ): Promise { + const executablePath = this._compile(uri); + const userExecutable = spawn(executablePath); + const simulatorExecutable = spawn(SIMULATOR_PATH); + return new Promise((resolve, reject) => { + let simulatorLog = ''; + outputChannel?.show(); + userExecutable.stdout.on('data', data => { + simulatorExecutable.stdin.write(data); + outputChannel?.append(`>>> ${data.toString()}`); + }); + simulatorExecutable.stdout.on('data', data => { + userExecutable.stdin.write(data); + outputChannel?.append(`<<< ${data.toString()}`); + simulatorLog += data.toString(); + }); + + userExecutable.stderr.on('data', data => { + outputChannel?.append(`[E] ${data.toString()}`); + }); + simulatorExecutable.stderr.on('data', data => { + outputChannel?.append(`[E] ${data.toString()}`); + }); + + userExecutable.on('close', () => { + simulatorExecutable.kill(); + setTimeout(() => resolve(getLogFromSimulatorLog(simulatorLog)), 1000); + }); + simulatorExecutable.on('close', () => { + userExecutable.kill(); + setTimeout(() => resolve(getLogFromSimulatorLog(simulatorLog)), 1000); + }); + userExecutable.on('error', err => { + reject(err); + }); + simulatorExecutable.on('error', err => { + reject(err); + }); + + provideInitialInput( + mapData, + userExecutable.stdin, + simulatorExecutable.stdin, + ); + }); + } + + private _compile(uri: vscode.Uri): string { + const tmpdir = fs.mkdtempSync(path.join(os.tmpdir(), 'cc_')); + const executablePath = path.join(tmpdir, 'main'); + const child = spawnSync('g++', ['-o', executablePath, uri.fsPath]); + outputChannel?.clear(); + outputChannel?.append(child.stdout.toString()); + outputChannel?.append(child.stderr.toString()); + if (child.status !== 0) { + throw new Error('Compilation failed'); + } else { + vscode.window.showInformationMessage('Compilation succeeded'); + return executablePath; + } + } +} diff --git a/packages/extension/src/executors/executor.ts b/packages/extension/src/executors/executor.ts new file mode 100644 index 00000000..00460aeb --- /dev/null +++ b/packages/extension/src/executors/executor.ts @@ -0,0 +1,106 @@ +import * as vscode from 'vscode'; +import { Writable } from 'stream'; +import { rendererPanel } from '../panels/rendererPanel'; +import { CCodeExecutor } from './cExecutor'; +import { CppCodeExecutor } from './cppExecutor'; +import { PythonCodeExecutor } from './pythonExecutor'; + +export const outputChannel = vscode.window.createOutputChannel( + 'Code Character Executor', +); + +export const provideInitialInput = ( + mapData: Array>, + userStdin: Writable, + simulatorStdin: Writable, +) => { + for (let writeable of [userStdin, simulatorStdin]) { + writeable.write('100 1000\n'); + writeable.write('2\n'); + writeable.write('10 3 3 3 1\n'); + writeable.write('10 3 3 3 1\n'); + writeable.write('2\n'); + writeable.write('10 4 5 1 1\n'); + writeable.write('10 6 5 1 1\n'); + writeable.write('64 64 '); + for (let y = 0; y < mapData.length; y++) { + for (let x = 0; x < mapData[y].length; x++) { + writeable.write(`${mapData[y][x]} `); + } + } + writeable.write('\n'); + } +}; + +export const getLogFromSimulatorLog = (log: string): string => { + const indexOfInit = log.indexOf('INIT'); + const indexOfEnd = log.indexOf('END'); + return log.substring(indexOfInit, indexOfEnd + 3); +}; + +class Executor { + cExecutor: CCodeExecutor; + cppExecutor: CppCodeExecutor; + pythonExecutor: PythonCodeExecutor; + + constructor() { + this.cExecutor = new CCodeExecutor(); + this.cppExecutor = new CppCodeExecutor(); + this.pythonExecutor = new PythonCodeExecutor(); + } + + async execute( + context: vscode.ExtensionContext, + mapData: Array>, + uri: vscode.Uri, + languageId: string, + ): Promise { + return new Promise((resolve, reject) => { + switch (languageId) { + case 'c': + this.cExecutor + .execute(mapData, uri) + .then(log => { + rendererPanel.renderLog(log, context); + vscode.window.showInformationMessage('Execution succeeded'); + resolve(); + }) + .catch(err => { + reject(err); + vscode.window.showErrorMessage(`Execution failed: ${err}`); + }); + break; + case 'cpp': + this.cppExecutor + .execute(mapData, uri) + .then(log => { + rendererPanel.renderLog(log, context); + vscode.window.showInformationMessage('Execution succeeded'); + resolve(); + }) + .catch(err => { + reject(err); + vscode.window.showErrorMessage(`Execution failed: ${err}`); + }); + break; + case 'python': + this.pythonExecutor + .execute(mapData, uri) + .then(log => { + rendererPanel.renderLog(log, context); + vscode.window.showInformationMessage('Execution succeeded'); + resolve(); + }) + .catch(err => { + reject(err); + vscode.window.showErrorMessage(`Execution failed: ${err}`); + }); + break; + default: + reject('Unsupported language'); + } + }); + } +} + +export const executor = new Executor(); diff --git a/packages/extension/src/executors/pythonExecutor.ts b/packages/extension/src/executors/pythonExecutor.ts new file mode 100644 index 00000000..e1d26ec6 --- /dev/null +++ b/packages/extension/src/executors/pythonExecutor.ts @@ -0,0 +1,59 @@ +import * as vscode from 'vscode'; +import { spawn } from 'child_process'; +import { + getLogFromSimulatorLog, + outputChannel, + provideInitialInput, +} from './executor'; +import { SIMULATOR_PATH } from '../config/config'; + +export class PythonCodeExecutor { + async execute( + mapData: Array>, + uri: vscode.Uri, + ): Promise { + const userExecutable = spawn('python3', ['-u', uri.fsPath]); + const simulatorExecutable = spawn(SIMULATOR_PATH); + return new Promise((resolve, reject) => { + let simulatorLog = ''; + outputChannel?.show(); + userExecutable.stdout.on('data', data => { + simulatorExecutable.stdin.write(data); + outputChannel?.append(`>>> ${data.toString()}`); + }); + simulatorExecutable.stdout.on('data', data => { + userExecutable.stdin.write(data); + outputChannel?.append(`<<< ${data.toString()}`); + simulatorLog += data.toString(); + }); + + userExecutable.stderr.on('data', data => { + outputChannel?.append(`[E] ${data.toString()}`); + }); + simulatorExecutable.stderr.on('data', data => { + outputChannel?.append(`[E] ${data.toString()}`); + }); + + userExecutable.on('close', () => { + simulatorExecutable.kill(); + setTimeout(() => resolve(getLogFromSimulatorLog(simulatorLog)), 1000); + }); + simulatorExecutable.on('close', () => { + userExecutable.kill(); + setTimeout(() => resolve(getLogFromSimulatorLog(simulatorLog)), 1000); + }); + userExecutable.on('error', err => { + reject(err); + }); + simulatorExecutable.on('error', err => { + reject(err); + }); + + provideInitialInput( + mapData, + userExecutable.stdin, + simulatorExecutable.stdin, + ); + }); + } +} diff --git a/packages/extension/src/extension.ts b/packages/extension/src/extension.ts new file mode 100644 index 00000000..46324297 --- /dev/null +++ b/packages/extension/src/extension.ts @@ -0,0 +1,27 @@ +import { MapProvider } from './providers/tree-data/mapProvider'; +import { SourceCodeProvider } from './providers/tree-data/sourceCodeProvider'; +import * as path from 'path'; +import * as vscode from 'vscode'; + +export function activate(context: vscode.ExtensionContext) { + console.log('CodeCharacter 2022 extension is now active'); + + // vscode.commands.executeCommand( + // 'vscode.openFolder', + // vscode.Uri.file(path.join(context.globalStorageUri.fsPath, 'data')), + // false, + // ); + vscode.commands.executeCommand('codecharacter-2022-codes.focus'); + + const mapProvider = new MapProvider(context); + vscode.window.createTreeView('codecharacter-2022-maps', { + treeDataProvider: mapProvider, + }); + + const sourceCodeProvider = new SourceCodeProvider(context); + vscode.window.createTreeView('codecharacter-2022-codes', { + treeDataProvider: sourceCodeProvider, + }); +} + +export function deactivate() {} diff --git a/packages/extension/src/pages/mapDesignerStatic.ts b/packages/extension/src/pages/mapDesignerStatic.ts new file mode 100644 index 00000000..e8a0b6d8 --- /dev/null +++ b/packages/extension/src/pages/mapDesignerStatic.ts @@ -0,0 +1,43 @@ +import * as ReactDOM from 'react-dom'; +import * as React from 'react'; +import { + MapDesignerComponent, + MapDesignerUtils, +} from '@codecharacter-2022/map-designer'; + +type VSCode = { + postMessage(message: any): void; + getState(): any; + setState(state: any): void; +}; + +declare var vscode: VSCode; + +const saveMapCallback = (mapData: Array>) => { + vscode.postMessage({ + command: 'saveMap', + mapData: mapData, + }); +}; + +window.addEventListener('message', event => { + const message = event.data; + switch (message.command) { + case 'loadMap': + const mapData = message.mapData; + MapDesignerUtils.preloadMap(mapData); + MapDesignerUtils.loadMap(mapData); + break; + default: + break; + } +}); + +ReactDOM.render( + React.createElement(MapDesignerComponent, { saveMapCallback }), + document.getElementById('root'), +); + +vscode.postMessage({ + command: 'ready', +}); diff --git a/packages/extension/src/pages/rendererStatic.ts b/packages/extension/src/pages/rendererStatic.ts new file mode 100644 index 00000000..cde1ee37 --- /dev/null +++ b/packages/extension/src/pages/rendererStatic.ts @@ -0,0 +1,32 @@ +import * as ReactDOM from 'react-dom'; +import * as React from 'react'; +import { RendererComponent, RendererUtils } from '@codecharacter-2022/renderer'; + +type VSCode = { + postMessage(message: any): void; + getState(): any; + setState(state: any): void; +}; + +declare var vscode: VSCode; + +window.addEventListener('message', event => { + const message = event.data; + switch (message.command) { + case 'loadLog': + const log = message.log; + RendererUtils.loadLog(log); + break; + default: + break; + } +}); + +ReactDOM.render( + React.createElement(RendererComponent), + document.getElementById('root'), +); + +vscode.postMessage({ + command: 'ready', +}); diff --git a/packages/extension/src/panels/mapDesignerPanel.ts b/packages/extension/src/panels/mapDesignerPanel.ts new file mode 100644 index 00000000..9b8a6eb6 --- /dev/null +++ b/packages/extension/src/panels/mapDesignerPanel.ts @@ -0,0 +1,181 @@ +import * as vscode from 'vscode'; +import * as path from 'path'; +import * as fs from 'fs'; + +export class MapDesignerPanel { + panel: vscode.WebviewPanel | undefined; + + currentMapFilePath!: string; + + latestMapData!: Array>; + + context!: vscode.ExtensionContext; + + loadMap(mapFile: string, context: vscode.ExtensionContext) { + this.context = context; + this.currentMapFilePath = path.join( + context.globalStorageUri.fsPath, + 'data', + 'maps', + mapFile, + ); + + if (!this.panel) { + this.panel = vscode.window.createWebviewPanel( + 'mapDesignerPanel', + 'Map Designer', + vscode.ViewColumn.One, + { + enableScripts: true, + retainContextWhenHidden: true, + }, + ); + + const staticScriptPath = vscode.Uri.file( + path.join(context.extensionPath, 'dist', 'map-designer-static.js'), + ); + + const assetsPath = vscode.Uri.file( + path.join(context.extensionPath, 'assets'), + ); + + const staticScriptSrc = this.panel.webview.asWebviewUri(staticScriptPath); + const assetsSrc = this.panel.webview.asWebviewUri(assetsPath); + + this.panel.webview.html = this._getMapDesignerWebView( + staticScriptSrc, + assetsSrc, + ); + + this.panel.onDidDispose(() => { + this.panel = undefined; + }); + + this.panel.webview.onDidReceiveMessage(message => { + switch (message.command) { + case 'saveMap': + fs.writeFile( + this.currentMapFilePath, + JSON.stringify(message.mapData), + err => { + if (err) { + vscode.window.showErrorMessage(err.message); + } else { + vscode.commands.executeCommand( + 'codecharacter-2022.refreshMaps', + ); + vscode.window.showInformationMessage( + 'Map saved successfully', + ); + } + }, + ); + break; + case 'ready': + this.panel?.webview.postMessage({ + command: 'loadMap', + mapData: this.latestMapData, + }); + break; + default: + vscode.window.showInformationMessage('Message not recognized'); + break; + } + }); + } else { + this.panel.reveal(); + } + + fs.readFile(this.currentMapFilePath, (err, data) => { + if (err) { + vscode.window.showErrorMessage(err.message); + } + if (data && this.panel) { + try { + this.latestMapData = JSON.parse(data.toString()); + } catch (e) { + vscode.window.showErrorMessage('Map file is not valid JSON'); + return; + } + this.panel.title = `${mapFile} (Map)`; + this.panel.iconPath = vscode.Uri.file( + path.join(context.extensionPath, 'media', 'icon.svg'), + ); + this.panel.webview.postMessage({ + command: 'loadMap', + mapData: this.latestMapData, + }); + } + }); + } + + closePanelOnDelete(fileName: string) { + if (this.panel) { + if ( + this.currentMapFilePath === + path.join( + this.context.globalStorageUri.fsPath, + 'data', + 'maps', + fileName, + ) + ) { + this.panel.dispose(); + } + } + } + + _getMapDesignerWebView(staticScriptSrc: vscode.Uri, assetsSrc: vscode.Uri) { + return ` + + + + + Map Designer + + + + + + + +
+ + + + `; + } +} + +export const mapDesignerPanel = new MapDesignerPanel(); diff --git a/packages/extension/src/panels/rendererPanel.ts b/packages/extension/src/panels/rendererPanel.ts new file mode 100644 index 00000000..c1c7ea35 --- /dev/null +++ b/packages/extension/src/panels/rendererPanel.ts @@ -0,0 +1,124 @@ +import * as vscode from 'vscode'; +import * as path from 'path'; + +class RendererPanel { + panel: vscode.WebviewPanel | undefined; + + renderLog(log: string, context: vscode.ExtensionContext) { + let logLocal: string = log; + if (!this.panel) { + this.panel = vscode.window.createWebviewPanel( + 'rendererPanel', + 'Renderer', + vscode.ViewColumn.Beside, + { + enableScripts: true, + retainContextWhenHidden: true, + }, + ); + + const staticScriptPath = vscode.Uri.file( + path.join(context.extensionPath, 'dist', 'renderer-static.js'), + ); + + const assetsPath = vscode.Uri.file( + path.join(context.extensionPath, 'assets'), + ); + + const staticScriptSrc = this.panel.webview.asWebviewUri(staticScriptPath); + const assetsSrc = this.panel.webview.asWebviewUri(assetsPath); + + this.panel.webview.html = this._getRendererWebView( + staticScriptSrc, + assetsSrc, + ); + + this.panel.iconPath = vscode.Uri.file( + path.join(context.extensionPath, 'media', 'icon.svg'), + ); + + this.panel.onDidDispose(() => { + this.panel = undefined; + }); + } else { + this.panel.reveal(vscode.ViewColumn.Beside); + } + + this.panel?.webview.postMessage({ + command: 'loadLog', + log: logLocal, + }); + this.panel.webview.onDidReceiveMessage(message => { + switch (message.command) { + case 'ready': + setTimeout(() => { + this.panel?.webview.postMessage({ + command: 'loadLog', + log: logLocal, + }); + logLocal = ''; + }, 3000); + break; + default: + break; + } + }); + } + + private _getRendererWebView( + staticScriptSrc: vscode.Uri, + assetsSrc: vscode.Uri, + ) { + return ` + + + + + Renderer + + + + + + + +
+ + + + `; + } +} + +export const rendererPanel = new RendererPanel(); diff --git a/packages/extension/src/providers/tree-data/mapProvider.ts b/packages/extension/src/providers/tree-data/mapProvider.ts new file mode 100644 index 00000000..945cbdc6 --- /dev/null +++ b/packages/extension/src/providers/tree-data/mapProvider.ts @@ -0,0 +1,149 @@ +import * as fs from 'fs'; +import * as path from 'path'; +import * as vscode from 'vscode'; +import { mapDesignerPanel } from '../../panels/mapDesignerPanel'; + +export class CodeCharacterMap extends vscode.TreeItem { + constructor(public readonly fileName: string) { + super(fileName.split('.json')[0], vscode.TreeItemCollapsibleState.None); + this.fileName = fileName; + } + + iconPath = new vscode.ThemeIcon('globe'); + + command = { + command: 'codecharacter-2022.openMapFile', + title: 'Open Map File', + arguments: [this.fileName], + }; + + contextValue = 'map'; +} + +export class MapProvider implements vscode.TreeDataProvider { + panel: vscode.WebviewPanel | undefined; + + latestMapData: Array> | undefined; + + constructor(private readonly context: vscode.ExtensionContext) { + context.subscriptions.push( + vscode.commands.registerCommand('codecharacter-2022.refreshMaps', () => + this.refresh(), + ), + ); + context.subscriptions.push( + vscode.commands.registerCommand( + 'codecharacter-2022.openMapFile', + (mapFile: string) => { + mapDesignerPanel.loadMap(mapFile, context); + }, + ), + ); + + context.subscriptions.push( + vscode.commands.registerCommand( + 'codecharacter-2022.deleteMapFile', + (map: CodeCharacterMap) => { + const mapPath = path.join( + context.globalStorageUri.fsPath, + 'data', + 'maps', + map.fileName, + ); + fs.unlink(mapPath, err => { + if (err) { + vscode.window.showErrorMessage(err.message); + } else { + vscode.commands.executeCommand('codecharacter-2022.refreshMaps'); + mapDesignerPanel.closePanelOnDelete(map.fileName); + vscode.window.showInformationMessage( + `Map file ${map.fileName} deleted successfully`, + ); + } + }); + }, + ), + ); + + context.subscriptions.push( + vscode.commands.registerCommand('codecharacter-2022.addMapFile', () => { + vscode.window + .showInputBox({ + prompt: 'Enter the name of the file', + placeHolder: `map`, + }) + .then((fileName?: string) => { + if (!fileName || !/^[A-Za-z0-9_-]+$/.test(fileName)) { + throw new Error('Invalid file name'); + } + const mapFilePath = path.join( + context.globalStorageUri.fsPath, + 'data', + 'maps', + `${fileName}.json`, + ); + let defaultMapData = []; + for (let i = 0; i < 64; i++) { + let row = []; + for (let j = 0; j < 64; j++) { + row.push(0); + } + defaultMapData.push(row); + } + fs.writeFile(mapFilePath, JSON.stringify(defaultMapData), err => { + if (err) { + vscode.window.showErrorMessage(err.message); + } else { + vscode.commands.executeCommand( + 'codecharacter-2022.refreshMaps', + ); + vscode.commands.executeCommand( + 'codecharacter-2022.openMapFile', + `${fileName}.json`, + ); + vscode.window.showInformationMessage( + 'Map file created successfully', + ); + } + }); + }); + }), + ); + } + + private _onDidChangeTreeData: vscode.EventEmitter< + CodeCharacterMap | undefined + > = new vscode.EventEmitter(); + + readonly onDidChangeTreeData: vscode.Event = + this._onDidChangeTreeData.event; + + refresh(): void { + this._onDidChangeTreeData.fire(undefined); + } + + getTreeItem(element: CodeCharacterMap): vscode.TreeItem { + return element; + } + + getChildren(element?: CodeCharacterMap): Thenable { + const mapsFolderPath = path.join( + this.context.globalStorageUri.fsPath, + 'data', + 'maps', + ); + if (!fs.existsSync(mapsFolderPath)) { + fs.mkdirSync(mapsFolderPath, { recursive: true }); + } + return new Promise((resolve, reject) => { + fs.readdir(mapsFolderPath, (err, files) => { + if (err) { + reject(err); + } else { + const mapFiles = files.filter(file => file.endsWith('.json')); + resolve(mapFiles.map(file => new CodeCharacterMap(file))); + } + }); + }); + } +} diff --git a/packages/extension/src/providers/tree-data/sourceCodeProvider.ts b/packages/extension/src/providers/tree-data/sourceCodeProvider.ts new file mode 100644 index 00000000..48a8e6fa --- /dev/null +++ b/packages/extension/src/providers/tree-data/sourceCodeProvider.ts @@ -0,0 +1,260 @@ +import * as vscode from 'vscode'; +import * as fs from 'fs'; +import path = require('path'); +import { executor } from '../../executors/executor'; +import rimraf = require('rimraf'); + +enum TreeItemType { + file, + folder, +} + +export class SourceTreeItem extends vscode.TreeItem { + children: SourceTreeItem[] = []; + + constructor( + readonly itemType: TreeItemType, + readonly itemPath: string, + readonly language: string, + readonly name?: string, + ) { + super( + name + ? vscode.Uri.file(path.join(itemPath, `${name}.${language}`)) + : vscode.Uri.file(itemPath), + vscode.TreeItemCollapsibleState.None, + ); + if (this.itemType === TreeItemType.folder) { + this.collapsibleState = vscode.TreeItemCollapsibleState.Collapsed; + this.iconPath = vscode.ThemeIcon.Folder; + this.contextValue = 'sourceFolder'; + + fs.readdir(this.itemPath, (err, files) => { + if (err) { + vscode.window.showErrorMessage( + `Error reading directory ${this.itemPath}`, + ); + return; + } else { + files = files.filter(file => + fs.statSync(path.join(this.itemPath, file)).isDirectory(), + ); + this.children = files.map(file => { + const filePath = path.join(this.itemPath, file); + return new SourceTreeItem( + TreeItemType.file, + filePath, + this.language, + file, + ); + }); + } + }); + } else { + this.collapsibleState = vscode.TreeItemCollapsibleState.None; + this.iconPath = new vscode.ThemeIcon('file'); + this.contextValue = 'sourceFile'; + this.command = { + command: 'codecharacter-2022.openCodeFile', + title: 'Open Code', + arguments: [this.name, this.language], + }; + } + } +} + +export class SourceCodeProvider + implements vscode.TreeDataProvider +{ + panel: vscode.WebviewPanel | undefined; + children: SourceTreeItem[] = []; + + constructor(private readonly context: vscode.ExtensionContext) { + this._populateChildren(context); + + context.subscriptions.push( + vscode.commands.registerCommand('codecharacter-2022.refreshCodes', () => + this.refresh(), + ), + ); + + context.subscriptions.push( + vscode.commands.registerCommand( + 'codecharacter-2022.openCodeFile', + (name: string, language: string) => { + const codeFilePath = path.join( + context.globalStorageUri.fsPath, + 'data', + 'codes', + language, + name, + `${name}.${language}`, + ); + const codeFileUri = vscode.Uri.file(codeFilePath); + vscode.workspace.openTextDocument(codeFileUri).then(doc => { + vscode.window.showTextDocument(doc); + }); + }, + ), + ); + + context.subscriptions.push( + vscode.commands.registerCommand( + 'codecharacter-2022.addCodeFile', + (folder: SourceTreeItem) => { + vscode.window + .showInputBox({ + prompt: 'Enter the name of the file (without any extension)', + placeHolder: 'file', + }) + .then((fileName?: string) => { + if (!fileName || !/^[A-Za-z0-9_-]+$/.test(fileName)) { + throw new Error('Invalid file name'); + } + const folderPath = path.join(folder.itemPath, fileName); + fs.mkdir(folderPath, err => { + if (err) { + vscode.window.showErrorMessage( + `Error creating directory ${folderPath}`, + ); + return; + } + const codeFilePath = path.join( + folderPath, + `${fileName}.${folder.language}`, + ); + fs.writeFile(codeFilePath, '', err => { + if (err) { + vscode.window.showErrorMessage( + `Error writing file ${codeFilePath}`, + ); + return; + } else { + vscode.commands.executeCommand( + 'codecharacter-2022.refreshCodes', + ); + vscode.window.showInformationMessage( + `Created file ${codeFilePath}`, + ); + } + }); + }); + }); + }, + ), + ); + + context.subscriptions.push( + vscode.commands.registerCommand( + 'codecharacter-2022.deleteCodeFile', + (codeFile: SourceTreeItem) => { + const folderPath = codeFile.itemPath; + rimraf(folderPath, err => { + if (err) { + vscode.window.showErrorMessage( + `Error deleting directory ${folderPath}`, + ); + return; + } + vscode.window.showInformationMessage( + `Deleted code file ${path.basename(codeFile.itemPath)}`, + ); + vscode.commands.executeCommand('codecharacter-2022.refreshCodes'); + }); + }, + ), + ); + + context.subscriptions.push( + vscode.commands.registerCommand( + 'codecharacter-2022.runCode', + async () => { + if (!vscode.window.activeTextEditor) { + return; + } + let { document } = vscode.window.activeTextEditor; + const maps = fs.readdirSync( + path.join(context.globalStorageUri.fsPath, 'data', 'maps'), + ); + vscode.window.showQuickPick(maps).then(async map => { + if (!map) { + return; + } + const mapPath = path.join( + context.globalStorageUri.fsPath, + 'data', + 'maps', + map, + ); + const mapData = JSON.parse(fs.readFileSync(mapPath, 'utf8')); + executor + .execute(context, mapData, document.uri, document.languageId) + .then(() => vscode.window.showInformationMessage('Code executed')) + .catch(() => + vscode.window.showErrorMessage('Error executing code'), + ); + }); + }, + ), + ); + } + + private async _populateChildren( + context: vscode.ExtensionContext, + ): Promise { + return new Promise((resolve, reject) => { + const codesDirectoryPath = path.join( + context.globalStorageUri.fsPath, + 'data', + 'codes', + ); + for (const language of ['c', 'cpp', 'java', 'py']) { + if (!fs.existsSync(path.join(codesDirectoryPath, language))) { + fs.mkdirSync(path.join(codesDirectoryPath, language), { + recursive: true, + }); + } + } + fs.readdir(codesDirectoryPath, (err, languages) => { + if (err) { + vscode.window.showErrorMessage('Error reading code folders'); + reject(); + } + this.children = languages.map( + language => + new SourceTreeItem( + TreeItemType.folder, + path.join(codesDirectoryPath, language), + language, + ), + ); + resolve(); + }); + }); + } + + private _onDidChangeTreeData: vscode.EventEmitter< + SourceTreeItem | undefined + > = new vscode.EventEmitter(); + + readonly onDidChangeTreeData: vscode.Event = + this._onDidChangeTreeData.event; + + refresh(): void { + this._onDidChangeTreeData.fire(undefined); + } + + getTreeItem(element: SourceTreeItem): vscode.TreeItem { + return element; + } + + getChildren(element?: SourceTreeItem): Thenable { + return new Promise(async resolve => { + await this._populateChildren(this.context); + if (!element) { + resolve(this.children); + } + resolve(element?.children ?? []); + }); + } +} diff --git a/packages/extension/tsconfig.json b/packages/extension/tsconfig.json new file mode 100644 index 00000000..b2002e04 --- /dev/null +++ b/packages/extension/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "module": "commonjs", + "target": "ES2020", + "lib": ["ES2020", "DOM"], + "sourceMap": true, + "rootDir": "src", + "strict": true /* enable all strict type-checking options */ + /* Additional Checks */ + // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ + // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ + // "noUnusedParameters": true, /* Report errors on unused parameters. */ + }, + "exclude": ["node_modules", ".vscode-test"] +} diff --git a/packages/extension/webpack.config.js b/packages/extension/webpack.config.js new file mode 100644 index 00000000..5e4eaf58 --- /dev/null +++ b/packages/extension/webpack.config.js @@ -0,0 +1,110 @@ +//@ts-check + +'use strict'; + +const path = require('path'); + +//@ts-check +/** @typedef {import('webpack').Configuration} WebpackConfig **/ + +/** @type WebpackConfig */ +const extensionConfig = { + target: 'node', // vscode extensions run in a Node.js-context 📖 -> https://webpack.js.org/configuration/node/ + mode: 'none', // this leaves the source code as close as possible to the original (when packaging we set this to 'production') + + entry: './src/extension.ts', // the entry point of this extension, 📖 -> https://webpack.js.org/configuration/entry-context/ + output: { + // the bundle is stored in the 'dist' folder (check package.json), 📖 -> https://webpack.js.org/configuration/output/ + path: path.resolve(__dirname, 'dist'), + filename: 'extension.js', + libraryTarget: 'commonjs2', + }, + externals: { + vscode: 'commonjs vscode', // the vscode-module is created on-the-fly and must be excluded. Add other modules that cannot be webpack'ed, 📖 -> https://webpack.js.org/configuration/externals/ + // modules added here also need to be added in the .vscodeignore file + }, + resolve: { + // support reading TypeScript and JavaScript files, 📖 -> https://github.com/TypeStrong/ts-loader + extensions: ['.ts', '.js'], + }, + module: { + rules: [ + { + test: /\.ts$/, + exclude: /node_modules/, + use: [ + { + loader: 'ts-loader', + }, + ], + }, + ], + }, + devtool: 'nosources-source-map', + infrastructureLogging: { + level: 'log', // enables logging required for problem matchers + }, +}; + +/** @type WebpackConfig */ +const mapDesignerStaticConfig = { + target: 'web', + mode: 'production', + entry: './src/pages/mapDesignerStatic.ts', + output: { + path: path.resolve(__dirname, 'dist'), + filename: 'map-designer-static.js', + libraryTarget: 'umd', + library: 'static', + }, + resolve: { + extensions: ['.ts', '.tsx', '.js', '.jsx'], + }, + module: { + rules: [ + { + test: /\.ts$/, + exclude: /node_modules/, + use: [ + { + loader: 'ts-loader', + }, + ], + }, + ], + }, +}; + +/** @type WebpackConfig */ +const rendererStaticConfig = { + target: 'web', + mode: 'production', + entry: './src/pages/rendererStatic.ts', + output: { + path: path.resolve(__dirname, 'dist'), + filename: 'renderer-static.js', + libraryTarget: 'umd', + library: 'static', + }, + resolve: { + extensions: ['.ts', '.tsx', '.js', '.jsx'], + }, + module: { + rules: [ + { + test: /\.ts$/, + exclude: /node_modules/, + use: [ + { + loader: 'ts-loader', + }, + ], + }, + ], + }, +}; +module.exports = [ + extensionConfig, + mapDesignerStaticConfig, + rendererStaticConfig, +]; diff --git a/packages/map-designer/package.json b/packages/map-designer/package.json index 5af9304a..baddd61e 100644 --- a/packages/map-designer/package.json +++ b/packages/map-designer/package.json @@ -4,7 +4,7 @@ "license": "MIT", "author": "Delta Force", "version": "2022.0.0", - "main": "./dist/codecharacter-map-designer-2022.es.js", + "main": "./dist/codecharacter-map-designer-2022.umd.js", "module": "./dist/codecharacter-map-designer-2022.es.js", "types": "./dist/src/index.d.ts", "files": [ @@ -12,7 +12,8 @@ ], "exports": { ".": { - "import": "./dist/codecharacter-map-designer-2022.es.js" + "import": "./dist/codecharacter-map-designer-2022.es.js", + "require": "./dist/codecharacter-map-designer-2022.umd.js" } }, "scripts": { diff --git a/packages/map-designer/vite.prod.config.ts b/packages/map-designer/vite.prod.config.ts index 672382fd..b3e988ce 100644 --- a/packages/map-designer/vite.prod.config.ts +++ b/packages/map-designer/vite.prod.config.ts @@ -7,7 +7,7 @@ export default defineConfig({ plugins: [dts()], build: { lib: { - formats: ['es'], + formats: ['es', 'umd'], name: 'codecharacter-map-designer-2022', entry: path.resolve(__dirname, 'src/index.ts'), fileName: 'codecharacter-map-designer-2022', @@ -16,12 +16,12 @@ export default defineConfig({ external: ['phaser', 'lit', 'react'], plugins: [ replace({ - 'typeof CANVAS_RENDERER': "'true'", - 'typeof WEBGL_RENDERER': "'true'", - 'typeof EXPERIMENTAL': "'false'", - 'typeof PLUGIN_CAMERA3D': "'false'", - 'typeof PLUGIN_FBINSTANT': "'false'", - 'typeof FEATURE_SOUND': "'false'", + 'typeof CANVAS_RENDERER': 'false', + 'typeof WEBGL_RENDERER': 'false', + 'typeof EXPERIMENTAL': 'false', + 'typeof PLUGIN_CAMERA3D': 'false', + 'typeof PLUGIN_FBINSTANT': 'false', + 'typeof FEATURE_SOUND': 'false', preventAssignment: true, }), ], diff --git a/packages/renderer/package.json b/packages/renderer/package.json index c1cea268..1d0ef3bb 100644 --- a/packages/renderer/package.json +++ b/packages/renderer/package.json @@ -4,7 +4,7 @@ "license": "MIT", "author": "Delta Force", "version": "2022.0.0", - "main": "./dist/codecharacter-renderer-2022.es.js", + "main": "./dist/codecharacter-renderer-2022.umd.js", "module": "./dist/codecharacter-renderer-2022.es.js", "types": "./dist/src/index.d.ts", "files": [ @@ -12,7 +12,8 @@ ], "exports": { ".": { - "import": "./dist/codecharacter-renderer-2022.es.js" + "import": "./dist/codecharacter-renderer-2022.es.js", + "require": "./dist/codecharacter-renderer-2022.umd.js" } }, "scripts": { diff --git a/packages/renderer/vite.prod.config.ts b/packages/renderer/vite.prod.config.ts index f262485f..31e4b5db 100644 --- a/packages/renderer/vite.prod.config.ts +++ b/packages/renderer/vite.prod.config.ts @@ -7,7 +7,7 @@ export default defineConfig({ plugins: [dts()], build: { lib: { - formats: ['es'], + formats: ['es', 'umd'], name: 'codecharacter-renderer-2022', entry: path.resolve(__dirname, 'src/index.ts'), fileName: 'codecharacter-renderer-2022', @@ -16,12 +16,12 @@ export default defineConfig({ external: ['phaser', 'lit', 'react'], plugins: [ replace({ - 'typeof CANVAS_RENDERER': "'true'", - 'typeof WEBGL_RENDERER': "'true'", - 'typeof EXPERIMENTAL': "'false'", - 'typeof PLUGIN_CAMERA3D': "'false'", - 'typeof PLUGIN_FBINSTANT': "'false'", - 'typeof FEATURE_SOUND': "'false'", + 'typeof CANVAS_RENDERER': 'false', + 'typeof WEBGL_RENDERER': 'false', + 'typeof EXPERIMENTAL': 'false', + 'typeof PLUGIN_CAMERA3D': 'false', + 'typeof PLUGIN_FBINSTANT': 'false', + 'typeof FEATURE_SOUND': 'false', preventAssignment: true, }), ], diff --git a/vite.prod.config.ts b/vite.prod.config.ts index b8ba73a6..e3824aeb 100644 --- a/vite.prod.config.ts +++ b/vite.prod.config.ts @@ -20,12 +20,12 @@ export default defineConfig({ rollupOptions: { plugins: [ replace({ - 'typeof CANVAS_RENDERER': "'true'", - 'typeof WEBGL_RENDERER': "'true'", - 'typeof EXPERIMENTAL': "'false'", - 'typeof PLUGIN_CAMERA3D': "'false'", - 'typeof PLUGIN_FBINSTANT': "'false'", - 'typeof FEATURE_SOUND': "'false'", + 'typeof CANVAS_RENDERER': 'false', + 'typeof WEBGL_RENDERER': 'false', + 'typeof EXPERIMENTAL': 'false', + 'typeof PLUGIN_CAMERA3D': 'false', + 'typeof PLUGIN_FBINSTANT': 'false', + 'typeof FEATURE_SOUND': 'false', preventAssignment: true, }), html({ diff --git a/yarn.lock b/yarn.lock index 79504d0b..fc7a3d7f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1614,7 +1614,32 @@ __metadata: languageName: unknown linkType: soft -"@codecharacter-2022/map-designer@workspace:packages/map-designer": +"@codecharacter-2022/extension@workspace:packages/extension": + version: 0.0.0-use.local + resolution: "@codecharacter-2022/extension@workspace:packages/extension" + dependencies: + "@codecharacter-2022/map-designer": "workspace:^" + "@codecharacter-2022/renderer": "workspace:^" + "@types/glob": ^7.2.0 + "@types/mocha": ^9.0.0 + "@types/node": 14.x + "@types/rimraf": ^3.0.2 + "@types/vscode": ^1.63.0 + "@typescript-eslint/eslint-plugin": ^5.9.1 + "@typescript-eslint/parser": ^5.9.1 + "@vscode/test-electron": ^2.0.3 + eslint: ^8.6.0 + glob: ^7.2.0 + mocha: ^9.1.3 + rimraf: ^3.0.2 + ts-loader: ^9.2.6 + typescript: ^4.5.4 + webpack: ^5.66.0 + webpack-cli: ^4.9.1 + languageName: unknown + linkType: soft + +"@codecharacter-2022/map-designer@workspace:^, @codecharacter-2022/map-designer@workspace:packages/map-designer": version: 0.0.0-use.local resolution: "@codecharacter-2022/map-designer@workspace:packages/map-designer" dependencies: @@ -1638,7 +1663,7 @@ __metadata: languageName: unknown linkType: soft -"@codecharacter-2022/renderer@workspace:packages/renderer": +"@codecharacter-2022/renderer@workspace:^, @codecharacter-2022/renderer@workspace:packages/renderer": version: 0.0.0-use.local resolution: "@codecharacter-2022/renderer@workspace:packages/renderer" dependencies: @@ -1670,6 +1695,7 @@ __metadata: dependencies: "@babel/core": ^7.16.5 "@codecharacter-2022/client": "workspace:packages/client" + "@codecharacter-2022/extension": "workspace:packages/extension" "@codecharacter-2022/map-designer": "workspace:packages/map-designer" "@codecharacter-2022/renderer": "workspace:packages/renderer" "@fortawesome/fontawesome-svg-core": ^1.2.36 @@ -1752,7 +1778,7 @@ __metadata: languageName: node linkType: hard -"@discoveryjs/json-ext@npm:^0.5.3": +"@discoveryjs/json-ext@npm:^0.5.0, @discoveryjs/json-ext@npm:^0.5.3": version: 0.5.6 resolution: "@discoveryjs/json-ext@npm:0.5.6" checksum: e97df618511fb202dffa2eb0d23e17dfb02943a70e5bc38f6b9603ad1cb1d6b525aa2b07ff9fb00b041abe425b341146ddd9e487f1e35ddadc8c6b8c56358ae0 @@ -1914,6 +1940,23 @@ __metadata: languageName: node linkType: hard +"@eslint/eslintrc@npm:^1.0.5": + version: 1.0.5 + resolution: "@eslint/eslintrc@npm:1.0.5" + dependencies: + ajv: ^6.12.4 + debug: ^4.3.2 + espree: ^9.2.0 + globals: ^13.9.0 + ignore: ^4.0.6 + import-fresh: ^3.2.1 + js-yaml: ^4.1.0 + minimatch: ^3.0.4 + strip-json-comments: ^3.1.1 + checksum: b35b50d7b65bd8acd92a05b6fb15ac62c0cefa40dfef0324ca5bf8632bf3679bab6e173c53b3ad1e1d837701cecdbd9c144b35f46588cdf4e046a9caa272488d + languageName: node + linkType: hard + "@fortawesome/fontawesome-common-types@npm:^0.2.36": version: 0.2.36 resolution: "@fortawesome/fontawesome-common-types@npm:0.2.36" @@ -1978,7 +2021,18 @@ __metadata: languageName: node linkType: hard -"@humanwhocodes/object-schema@npm:^1.2.0": +"@humanwhocodes/config-array@npm:^0.9.2": + version: 0.9.3 + resolution: "@humanwhocodes/config-array@npm:0.9.3" + dependencies: + "@humanwhocodes/object-schema": ^1.2.1 + debug: ^4.1.1 + minimatch: ^3.0.4 + checksum: 6e5d7d274941c459bab0a14a87e372206d89fad3e4879d982edc942e8cc34da6510ea3644b8535a2a9edaa6527e91dccceabc6837ffa8ee506d66bca5d269ebc + languageName: node + linkType: hard + +"@humanwhocodes/object-schema@npm:^1.2.0, @humanwhocodes/object-schema@npm:^1.2.1": version: 1.2.1 resolution: "@humanwhocodes/object-schema@npm:1.2.1" checksum: a824a1ec31591231e4bad5787641f59e9633827d0a2eaae131a288d33c9ef0290bd16fda8da6f7c0fcb014147865d12118df10db57f27f41e20da92369fcb3f1 @@ -3646,7 +3700,7 @@ __metadata: languageName: node linkType: hard -"@types/glob@npm:*, @types/glob@npm:^7.1.1, @types/glob@npm:^7.1.3": +"@types/glob@npm:*, @types/glob@npm:^7.1.1, @types/glob@npm:^7.1.3, @types/glob@npm:^7.2.0": version: 7.2.0 resolution: "@types/glob@npm:7.2.0" dependencies: @@ -3758,7 +3812,7 @@ __metadata: languageName: node linkType: hard -"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.4, @types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.7, @types/json-schema@npm:^7.0.8": +"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.4, @types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.7, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": version: 7.0.9 resolution: "@types/json-schema@npm:7.0.9" checksum: 259d0e25f11a21ba5c708f7ea47196bd396e379fddb79c76f9f4f62c945879dc21657904914313ec2754e443c5018ea8372362f323f30e0792897fdb2098a705 @@ -3788,6 +3842,13 @@ __metadata: languageName: node linkType: hard +"@types/mocha@npm:^9.0.0": + version: 9.1.0 + resolution: "@types/mocha@npm:9.1.0" + checksum: 21e1000dafcfe387c6812be41c44a47b48c27a74d5a70c3d5ef1bb5c88eadadfc74dba06e93f160e7248c8a57b3977b590f82504c801c9927816ecd4668023c0 + languageName: node + linkType: hard + "@types/node-fetch@npm:^2.5.7": version: 2.5.12 resolution: "@types/node-fetch@npm:2.5.12" @@ -3805,6 +3866,13 @@ __metadata: languageName: node linkType: hard +"@types/node@npm:14.x": + version: 14.18.10 + resolution: "@types/node@npm:14.18.10" + checksum: e722eec37be85dd7dddc4cfd26c501c66f1f2a7e0f603f57ff925348e65a5db603b06363fa27489cbecff44f0ae59812f22509923c4c45ffa5958604cc002401 + languageName: node + linkType: hard + "@types/node@npm:^14.0.10 || ^16.0.0, @types/node@npm:^14.14.20 || ^16.0.0": version: 16.11.22 resolution: "@types/node@npm:16.11.22" @@ -3959,6 +4027,16 @@ __metadata: languageName: node linkType: hard +"@types/rimraf@npm:^3.0.2": + version: 3.0.2 + resolution: "@types/rimraf@npm:3.0.2" + dependencies: + "@types/glob": "*" + "@types/node": "*" + checksum: b47fa302f46434cba704d20465861ad250df79467d3d289f9d6490d3aeeb41e8cb32dd80bd1a8fd833d1e185ac719fbf9be12e05ad9ce9be094d8ee8f1405347 + languageName: node + linkType: hard + "@types/scheduler@npm:*": version: 0.16.2 resolution: "@types/scheduler@npm:0.16.2" @@ -4010,6 +4088,13 @@ __metadata: languageName: node linkType: hard +"@types/vscode@npm:^1.63.0": + version: 1.63.2 + resolution: "@types/vscode@npm:1.63.2" + checksum: 5b13383121af21e4500ed78885a0b0365bbf154da00901467ae8836d73abd8c4d040fdb1794f1d2a6cfe331ea3a7b0ccdf5eeed0da89965905f09e77093111e9 + languageName: node + linkType: hard + "@types/warning@npm:^3.0.0": version: 3.0.0 resolution: "@types/warning@npm:3.0.0" @@ -4087,6 +4172,29 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/eslint-plugin@npm:^5.9.1": + version: 5.10.2 + resolution: "@typescript-eslint/eslint-plugin@npm:5.10.2" + dependencies: + "@typescript-eslint/scope-manager": 5.10.2 + "@typescript-eslint/type-utils": 5.10.2 + "@typescript-eslint/utils": 5.10.2 + debug: ^4.3.2 + functional-red-black-tree: ^1.0.1 + ignore: ^5.1.8 + regexpp: ^3.2.0 + semver: ^7.3.5 + tsutils: ^3.21.0 + peerDependencies: + "@typescript-eslint/parser": ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 460808a3c7d0390a7dcc1b2e717c2c4e303a31f9161fbc8c4ecc7bec076285d636d505d2f1ca9932c7a7989ea0fc3a78023be9f342bd8c4bdfe4a9842d0c053a + languageName: node + linkType: hard + "@typescript-eslint/experimental-utils@npm:4.33.0": version: 4.33.0 resolution: "@typescript-eslint/experimental-utils@npm:4.33.0" @@ -4120,6 +4228,23 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/parser@npm:^5.9.1": + version: 5.10.2 + resolution: "@typescript-eslint/parser@npm:5.10.2" + dependencies: + "@typescript-eslint/scope-manager": 5.10.2 + "@typescript-eslint/types": 5.10.2 + "@typescript-eslint/typescript-estree": 5.10.2 + debug: ^4.3.2 + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: c83e3afee090e9cc830d6c59cd87681a83ae95f2daa848040f2e67ef34f87c5ec707a571b3ccb31b67adc0447b22b62c048a6cb088e661801dacb9c2cf070a9c + languageName: node + linkType: hard + "@typescript-eslint/scope-manager@npm:4.33.0": version: 4.33.0 resolution: "@typescript-eslint/scope-manager@npm:4.33.0" @@ -4130,6 +4255,32 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/scope-manager@npm:5.10.2": + version: 5.10.2 + resolution: "@typescript-eslint/scope-manager@npm:5.10.2" + dependencies: + "@typescript-eslint/types": 5.10.2 + "@typescript-eslint/visitor-keys": 5.10.2 + checksum: 22c8ac9047a1a276e0b911eca0eee30c4f7f7089688dca36314da28143d349c504e542116d3e201d52da50b212f38b2125e3918e6ae2e2b0b57964fb1cdf8fcd + languageName: node + linkType: hard + +"@typescript-eslint/type-utils@npm:5.10.2": + version: 5.10.2 + resolution: "@typescript-eslint/type-utils@npm:5.10.2" + dependencies: + "@typescript-eslint/utils": 5.10.2 + debug: ^4.3.2 + tsutils: ^3.21.0 + peerDependencies: + eslint: "*" + peerDependenciesMeta: + typescript: + optional: true + checksum: 7732c826ef6c798af0f45b85f0389688e614de16c7c2c7e446a664787df360242cf2bc9d68d6ce1993f1bfc289b5d6a75a400fc968b7ded187c30c40f978de52 + languageName: node + linkType: hard + "@typescript-eslint/types@npm:4.33.0": version: 4.33.0 resolution: "@typescript-eslint/types@npm:4.33.0" @@ -4137,6 +4288,13 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/types@npm:5.10.2": + version: 5.10.2 + resolution: "@typescript-eslint/types@npm:5.10.2" + checksum: fa44dbd31d12f16ada6a6e7dba61ff90bf955b400f314f7378d9775cc8e13ef5da3318e89a90c3c3f75d50179e6be104ed8f90d4e77a02d6f7793b346bf25f15 + languageName: node + linkType: hard + "@typescript-eslint/typescript-estree@npm:4.33.0": version: 4.33.0 resolution: "@typescript-eslint/typescript-estree@npm:4.33.0" @@ -4155,6 +4313,40 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/typescript-estree@npm:5.10.2": + version: 5.10.2 + resolution: "@typescript-eslint/typescript-estree@npm:5.10.2" + dependencies: + "@typescript-eslint/types": 5.10.2 + "@typescript-eslint/visitor-keys": 5.10.2 + debug: ^4.3.2 + globby: ^11.0.4 + is-glob: ^4.0.3 + semver: ^7.3.5 + tsutils: ^3.21.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 2fdad1448578ee5c7f5876c998de50e2fa5fd6eed9effbfa9b0cf2579afe195964f0e4ebaa5d94ae228096cddf016500e9c8cc2f60c3dff981f09ebb42e5de53 + languageName: node + linkType: hard + +"@typescript-eslint/utils@npm:5.10.2": + version: 5.10.2 + resolution: "@typescript-eslint/utils@npm:5.10.2" + dependencies: + "@types/json-schema": ^7.0.9 + "@typescript-eslint/scope-manager": 5.10.2 + "@typescript-eslint/types": 5.10.2 + "@typescript-eslint/typescript-estree": 5.10.2 + eslint-scope: ^5.1.1 + eslint-utils: ^3.0.0 + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: d0dde3066f52405dffc2cbccd43d2aa2d9336510f178aa43812d616c951ea45f83693e2f6a88e3abfc94e2cc5f9eb3f2be9221a38848fe70aaffc294794c9d53 + languageName: node + linkType: hard + "@typescript-eslint/visitor-keys@npm:4.33.0": version: 4.33.0 resolution: "@typescript-eslint/visitor-keys@npm:4.33.0" @@ -4165,6 +4357,23 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/visitor-keys@npm:5.10.2": + version: 5.10.2 + resolution: "@typescript-eslint/visitor-keys@npm:5.10.2" + dependencies: + "@typescript-eslint/types": 5.10.2 + eslint-visitor-keys: ^3.0.0 + checksum: f80caa1f0d71da096e9e18728b76046286cad691b178c0d101b71e5b553ee4a427ae2c2f8b9bc789dce266f62b026b7ca88ddafd52fde4f0dbb24e05765629b7 + languageName: node + linkType: hard + +"@ungap/promise-all-settled@npm:1.1.2": + version: 1.1.2 + resolution: "@ungap/promise-all-settled@npm:1.1.2" + checksum: 08d37fdfa23a6fe8139f1305313562ebad973f3fac01bcce2773b2bda5bcb0146dfdcf3cb6a722cf0a5f2ca0bc56a827eac8f1e7b3beddc548f654addf1fc34c + languageName: node + linkType: hard + "@vitejs/plugin-react@npm:^1.0.7, @vitejs/plugin-react@npm:^1.0.8": version: 1.1.4 resolution: "@vitejs/plugin-react@npm:1.1.4" @@ -4181,6 +4390,18 @@ __metadata: languageName: node linkType: hard +"@vscode/test-electron@npm:^2.0.3": + version: 2.1.1 + resolution: "@vscode/test-electron@npm:2.1.1" + dependencies: + http-proxy-agent: ^4.0.1 + https-proxy-agent: ^5.0.0 + rimraf: ^3.0.2 + unzipper: ^0.10.11 + checksum: 4465375bc604655a78cea53035cfbe06868a2396e81906f934a90a9ac6a70d824bac2ac73f7b38939f6a8429d6e535b0d0a42887c6f43e072502e407edda1606 + languageName: node + linkType: hard + "@web/config-loader@npm:^0.1.3": version: 0.1.3 resolution: "@web/config-loader@npm:0.1.3" @@ -4544,6 +4765,39 @@ __metadata: languageName: node linkType: hard +"@webpack-cli/configtest@npm:^1.1.1": + version: 1.1.1 + resolution: "@webpack-cli/configtest@npm:1.1.1" + peerDependencies: + webpack: 4.x.x || 5.x.x + webpack-cli: 4.x.x + checksum: c4e7fca21315e487655fbdc7d079092c3f88b274a720d245ca2e13dce7553009fb3f9d82218c33f5c9b208832d72bb4114a9cca97d53b66212eff5da1d3ad44b + languageName: node + linkType: hard + +"@webpack-cli/info@npm:^1.4.1": + version: 1.4.1 + resolution: "@webpack-cli/info@npm:1.4.1" + dependencies: + envinfo: ^7.7.3 + peerDependencies: + webpack-cli: 4.x.x + checksum: 7a7cac2ba4f2528caa329311599da1685b1bc099bfc5b7210932b7c86024c1277fd7857b08557902b187ea01247a8e8f72f7f5719af72b0c8d97f22087aa0c14 + languageName: node + linkType: hard + +"@webpack-cli/serve@npm:^1.6.1": + version: 1.6.1 + resolution: "@webpack-cli/serve@npm:1.6.1" + peerDependencies: + webpack-cli: 4.x.x + peerDependenciesMeta: + webpack-dev-server: + optional: true + checksum: 8b273f906aeffa60c7d5700ae25f98d4b66b7e922cad38acb9575d55ff83872cd20b9894aacfa81c4d54e5b51b16253ae0e70c5e9e0608dc8768276e15c74536 + languageName: node + linkType: hard + "@xtuc/ieee754@npm:^1.2.0": version: 1.2.0 resolution: "@xtuc/ieee754@npm:1.2.0" @@ -4635,7 +4889,7 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.2.4, acorn@npm:^8.4.1": +"acorn@npm:^8.2.4, acorn@npm:^8.4.1, acorn@npm:^8.7.0": version: 8.7.0 resolution: "acorn@npm:8.7.0" bin: @@ -4757,6 +5011,13 @@ __metadata: languageName: node linkType: hard +"ansi-colors@npm:4.1.1, ansi-colors@npm:^4.1.1": + version: 4.1.1 + resolution: "ansi-colors@npm:4.1.1" + checksum: 138d04a51076cb085da0a7e2d000c5c0bb09f6e772ed5c65c53cb118d37f6c5f1637506d7155fb5f330f0abcf6f12fa2e489ac3f8cdab9da393bf1bb4f9a32b0 + languageName: node + linkType: hard + "ansi-colors@npm:^3.0.0": version: 3.2.4 resolution: "ansi-colors@npm:3.2.4" @@ -4764,13 +5025,6 @@ __metadata: languageName: node linkType: hard -"ansi-colors@npm:^4.1.1": - version: 4.1.1 - resolution: "ansi-colors@npm:4.1.1" - checksum: 138d04a51076cb085da0a7e2d000c5c0bb09f6e772ed5c65c53cb118d37f6c5f1637506d7155fb5f330f0abcf6f12fa2e489ac3f8cdab9da393bf1bb4f9a32b0 - languageName: node - linkType: hard - "ansi-escapes@npm:^4.2.1, ansi-escapes@npm:^4.3.0": version: 4.3.2 resolution: "ansi-escapes@npm:4.3.2" @@ -5467,7 +5721,7 @@ __metadata: languageName: node linkType: hard -"big-integer@npm:^1.6.7": +"big-integer@npm:^1.6.17, big-integer@npm:^1.6.7": version: 1.6.51 resolution: "big-integer@npm:1.6.51" checksum: 3d444173d1b2e20747e2c175568bedeebd8315b0637ea95d75fd27830d3b8e8ba36c6af40374f36bdaea7b5de376dcada1b07587cb2a79a928fccdb6e6e3c518 @@ -5495,6 +5749,16 @@ __metadata: languageName: node linkType: hard +"binary@npm:~0.3.0": + version: 0.3.0 + resolution: "binary@npm:0.3.0" + dependencies: + buffers: ~0.1.1 + chainsaw: ~0.1.0 + checksum: b4699fda9e2c2981e74a46b0115cf0d472eda9b68c0e9d229ef494e92f29ce81acf0a834415094cffcc340dfee7c4ef8ce5d048c65c18067a7ed850323f777af + languageName: node + linkType: hard + "bindings@npm:^1.5.0": version: 1.5.0 resolution: "bindings@npm:1.5.0" @@ -5511,6 +5775,13 @@ __metadata: languageName: node linkType: hard +"bluebird@npm:~3.4.1": + version: 3.4.7 + resolution: "bluebird@npm:3.4.7" + checksum: bffa9dee7d3a41ab15c4f3f24687b49959b4e64e55c058a062176feb8ccefc2163414fb4e1a0f3053bf187600936509660c3ebd168fd9f0e48c7eba23b019466 + languageName: node + linkType: hard + "bn.js@npm:^4.0.0, bn.js@npm:^4.1.0, bn.js@npm:^4.11.9": version: 4.12.0 resolution: "bn.js@npm:4.12.0" @@ -5635,6 +5906,13 @@ __metadata: languageName: node linkType: hard +"browser-stdout@npm:1.3.1": + version: 1.3.1 + resolution: "browser-stdout@npm:1.3.1" + checksum: b717b19b25952dd6af483e368f9bcd6b14b87740c3d226c2977a65e84666ffd67000bddea7d911f111a9b6ddc822b234de42d52ab6507bce4119a4cc003ef7b3 + languageName: node + linkType: hard + "browserify-aes@npm:^1.0.0, browserify-aes@npm:^1.0.4": version: 1.2.0 resolution: "browserify-aes@npm:1.2.0" @@ -5748,6 +6026,13 @@ __metadata: languageName: node linkType: hard +"buffer-indexof-polyfill@npm:~1.0.0": + version: 1.0.2 + resolution: "buffer-indexof-polyfill@npm:1.0.2" + checksum: fbfb2d69c6bb2df235683126f9dc140150c08ac3630da149913a9971947b667df816a913b6993bc48f4d611999cb99a1589914d34c02dccd2234afda5cb75bbc + languageName: node + linkType: hard + "buffer-xor@npm:^1.0.3": version: 1.0.3 resolution: "buffer-xor@npm:1.0.3" @@ -5766,6 +6051,13 @@ __metadata: languageName: node linkType: hard +"buffers@npm:~0.1.1": + version: 0.1.1 + resolution: "buffers@npm:0.1.1" + checksum: ad6f8e483efab39cefd92bdc04edbff6805e4211b002f4d1cfb70c6c472a61cc89fb18c37bcdfdd4ee416ca096e9ff606286698a7d41a18b539bac12fd76d4d5 + languageName: node + linkType: hard + "builtin-modules@npm:^3.1.0": version: 3.2.0 resolution: "builtin-modules@npm:3.2.0" @@ -5957,7 +6249,7 @@ __metadata: languageName: node linkType: hard -"camelcase@npm:^6.2.0": +"camelcase@npm:^6.0.0, camelcase@npm:^6.2.0": version: 6.3.0 resolution: "camelcase@npm:6.3.0" checksum: 8c96818a9076434998511251dcb2761a94817ea17dbdc37f47ac080bd088fc62c7369429a19e2178b993497132c8cbcf5cc1f44ba963e76782ba469c0474938d @@ -5985,6 +6277,15 @@ __metadata: languageName: node linkType: hard +"chainsaw@npm:~0.1.0": + version: 0.1.0 + resolution: "chainsaw@npm:0.1.0" + dependencies: + traverse: ">=0.3.0 <0.4" + checksum: 22a96b9fb0cd9fb20813607c0869e61817d1acc81b5d455cc6456b5e460ea1dd52630e0f76b291cf8294bfb6c1fc42e299afb52104af9096242699d6d3aa6d3e + languageName: node + linkType: hard + "chalk@npm:^2.0.0, chalk@npm:^2.4.1, chalk@npm:^2.4.2": version: 2.4.2 resolution: "chalk@npm:2.4.2" @@ -6041,6 +6342,25 @@ __metadata: languageName: node linkType: hard +"chokidar@npm:3.5.3, chokidar@npm:^3.4.1, chokidar@npm:^3.4.2, chokidar@npm:^3.5.2": + version: 3.5.3 + resolution: "chokidar@npm:3.5.3" + dependencies: + anymatch: ~3.1.2 + braces: ~3.0.2 + fsevents: ~2.3.2 + glob-parent: ~5.1.2 + is-binary-path: ~2.1.0 + is-glob: ~4.0.1 + normalize-path: ~3.0.0 + readdirp: ~3.6.0 + dependenciesMeta: + fsevents: + optional: true + checksum: b49fcde40176ba007ff361b198a2d35df60d9bb2a5aab228279eb810feae9294a6b4649ab15981304447afe1e6ffbf4788ad5db77235dc770ab777c6e771980c + languageName: node + linkType: hard + "chokidar@npm:^2.0.4, chokidar@npm:^2.1.8": version: 2.1.8 resolution: "chokidar@npm:2.1.8" @@ -6064,25 +6384,6 @@ __metadata: languageName: node linkType: hard -"chokidar@npm:^3.4.1, chokidar@npm:^3.4.2, chokidar@npm:^3.5.2": - version: 3.5.3 - resolution: "chokidar@npm:3.5.3" - dependencies: - anymatch: ~3.1.2 - braces: ~3.0.2 - fsevents: ~2.3.2 - glob-parent: ~5.1.2 - is-binary-path: ~2.1.0 - is-glob: ~4.0.1 - normalize-path: ~3.0.0 - readdirp: ~3.6.0 - dependenciesMeta: - fsevents: - optional: true - checksum: b49fcde40176ba007ff361b198a2d35df60d9bb2a5aab228279eb810feae9294a6b4649ab15981304447afe1e6ffbf4788ad5db77235dc770ab777c6e771980c - languageName: node - linkType: hard - "chownr@npm:^1.1.1": version: 1.1.4 resolution: "chownr@npm:1.1.4" @@ -6325,7 +6626,7 @@ __metadata: languageName: node linkType: hard -"colorette@npm:^2.0.16": +"colorette@npm:^2.0.14, colorette@npm:^2.0.16": version: 2.0.16 resolution: "colorette@npm:2.0.16" checksum: cd55596a3a2d1071c1a28eee7fd8a5387593ff1bd10a3e8d0a6221499311fe34a9f2b9272d77c391e0e003dcdc8934fb2f8d106e7ef1f7516f8060c901d41a27 @@ -6388,6 +6689,13 @@ __metadata: languageName: node linkType: hard +"commander@npm:^7.0.0": + version: 7.2.0 + resolution: "commander@npm:7.2.0" + checksum: 53501cbeee61d5157546c0bef0fedb6cdfc763a882136284bed9a07225f09a14b82d2a84e7637edfd1a679fb35ed9502fd58ef1d091e6287f60d790147f68ddc + languageName: node + linkType: hard + "commander@npm:^8.3.0": version: 8.3.0 resolution: "commander@npm:8.3.0" @@ -6910,7 +7218,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:^4.0.1, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.2.0, debug@npm:^4.3.1": +"debug@npm:4, debug@npm:4.3.3, debug@npm:^4.0.1, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.2.0, debug@npm:^4.3.1, debug@npm:^4.3.2": version: 4.3.3 resolution: "debug@npm:4.3.3" dependencies: @@ -6938,6 +7246,13 @@ __metadata: languageName: node linkType: hard +"decamelize@npm:^4.0.0": + version: 4.0.0 + resolution: "decamelize@npm:4.0.0" + checksum: b7d09b82652c39eead4d6678bb578e3bebd848add894b76d0f6b395bc45b2d692fb88d977e7cfb93c4ed6c119b05a1347cef261174916c2e75c0a8ca57da1809 + languageName: node + linkType: hard + "decimal.js@npm:^10.2.1": version: 10.3.1 resolution: "decimal.js@npm:10.3.1" @@ -7125,6 +7440,13 @@ __metadata: languageName: node linkType: hard +"diff@npm:5.0.0": + version: 5.0.0 + resolution: "diff@npm:5.0.0" + checksum: f19fe29284b633afdb2725c2a8bb7d25761ea54d321d8e67987ac851c5294be4afeab532bd84531e02583a3fe7f4014aa314a3eda84f5590e7a9e6b371ef3b46 + languageName: node + linkType: hard + "diffie-hellman@npm:^5.0.0": version: 5.0.3 resolution: "diffie-hellman@npm:5.0.3" @@ -7285,6 +7607,15 @@ __metadata: languageName: node linkType: hard +"duplexer2@npm:~0.1.4": + version: 0.1.4 + resolution: "duplexer2@npm:0.1.4" + dependencies: + readable-stream: ^2.0.2 + checksum: 744961f03c7f54313f90555ac20284a3fb7bf22fdff6538f041a86c22499560eb6eac9d30ab5768054137cb40e6b18b40f621094e0261d7d8c35a37b7a5ad241 + languageName: node + linkType: hard + "duplexer@npm:~0.1.1": version: 0.1.2 resolution: "duplexer@npm:0.1.2" @@ -7433,7 +7764,7 @@ __metadata: languageName: node linkType: hard -"enhanced-resolve@npm:^5.8.3": +"enhanced-resolve@npm:^5.0.0, enhanced-resolve@npm:^5.8.3": version: 5.8.3 resolution: "enhanced-resolve@npm:5.8.3" dependencies: @@ -7466,6 +7797,15 @@ __metadata: languageName: node linkType: hard +"envinfo@npm:^7.7.3": + version: 7.8.1 + resolution: "envinfo@npm:7.8.1" + bin: + envinfo: dist/cli.js + checksum: de736c98d6311c78523628ff127af138451b162e57af5293c1b984ca821d0aeb9c849537d2fde0434011bed33f6bca5310ca2aab8a51a3f28fc719e89045d648 + languageName: node + linkType: hard + "err-code@npm:^2.0.2": version: 2.0.3 resolution: "err-code@npm:2.0.3" @@ -7961,6 +8301,13 @@ __metadata: languageName: node linkType: hard +"escape-string-regexp@npm:4.0.0, escape-string-regexp@npm:^4.0.0": + version: 4.0.0 + resolution: "escape-string-regexp@npm:4.0.0" + checksum: 98b48897d93060f2322108bf29db0feba7dd774be96cd069458d1453347b25ce8682ecc39859d4bca2203cc0ab19c237bcc71755eff49a0f8d90beadeeba5cc5 + languageName: node + linkType: hard + "escape-string-regexp@npm:^1.0.5": version: 1.0.5 resolution: "escape-string-regexp@npm:1.0.5" @@ -7975,13 +8322,6 @@ __metadata: languageName: node linkType: hard -"escape-string-regexp@npm:^4.0.0": - version: 4.0.0 - resolution: "escape-string-regexp@npm:4.0.0" - checksum: 98b48897d93060f2322108bf29db0feba7dd774be96cd069458d1453347b25ce8682ecc39859d4bca2203cc0ab19c237bcc71755eff49a0f8d90beadeeba5cc5 - languageName: node - linkType: hard - "escodegen@npm:^2.0.0": version: 2.0.0 resolution: "escodegen@npm:2.0.0" @@ -8114,6 +8454,16 @@ __metadata: languageName: node linkType: hard +"eslint-scope@npm:^7.1.0": + version: 7.1.0 + resolution: "eslint-scope@npm:7.1.0" + dependencies: + esrecurse: ^4.3.0 + estraverse: ^5.2.0 + checksum: 2070470a0725438ed47075b2574a4c03cf59aa32648da8cff9e3548c84f6b0079cfdb9ee1dd7ab0bfe97011f64b2af5bfd4b69cf14a1292130dec661eec7914a + languageName: node + linkType: hard + "eslint-utils@npm:^2.1.0": version: 2.1.0 resolution: "eslint-utils@npm:2.1.0" @@ -8148,6 +8498,13 @@ __metadata: languageName: node linkType: hard +"eslint-visitor-keys@npm:^3.0.0, eslint-visitor-keys@npm:^3.1.0, eslint-visitor-keys@npm:^3.2.0": + version: 3.2.0 + resolution: "eslint-visitor-keys@npm:3.2.0" + checksum: fdadbb26f9e6417d3db7ad4f00bb0d573b6031c32fa72e8cdae32d038223faaeddff2ee443c90cb489bf774e75bff765c00912b8f9106d65e4f202ccd78c1b18 + languageName: node + linkType: hard + "eslint@npm:^7.32.0": version: 7.32.0 resolution: "eslint@npm:7.32.0" @@ -8198,6 +8555,51 @@ __metadata: languageName: node linkType: hard +"eslint@npm:^8.6.0": + version: 8.8.0 + resolution: "eslint@npm:8.8.0" + dependencies: + "@eslint/eslintrc": ^1.0.5 + "@humanwhocodes/config-array": ^0.9.2 + ajv: ^6.10.0 + chalk: ^4.0.0 + cross-spawn: ^7.0.2 + debug: ^4.3.2 + doctrine: ^3.0.0 + escape-string-regexp: ^4.0.0 + eslint-scope: ^7.1.0 + eslint-utils: ^3.0.0 + eslint-visitor-keys: ^3.2.0 + espree: ^9.3.0 + esquery: ^1.4.0 + esutils: ^2.0.2 + fast-deep-equal: ^3.1.3 + file-entry-cache: ^6.0.1 + functional-red-black-tree: ^1.0.1 + glob-parent: ^6.0.1 + globals: ^13.6.0 + ignore: ^5.2.0 + import-fresh: ^3.0.0 + imurmurhash: ^0.1.4 + is-glob: ^4.0.0 + js-yaml: ^4.1.0 + json-stable-stringify-without-jsonify: ^1.0.1 + levn: ^0.4.1 + lodash.merge: ^4.6.2 + minimatch: ^3.0.4 + natural-compare: ^1.4.0 + optionator: ^0.9.1 + regexpp: ^3.2.0 + strip-ansi: ^6.0.1 + strip-json-comments: ^3.1.0 + text-table: ^0.2.0 + v8-compile-cache: ^2.0.3 + bin: + eslint: bin/eslint.js + checksum: 41a7e85bf84cf9f2d758ef3e8d08020a39a2836703728b59535684681349bd021c2c6e24174462b844a914870d707d2151e0371198899d957b444de91adaa435 + languageName: node + linkType: hard + "espree@npm:^7.3.0, espree@npm:^7.3.1": version: 7.3.1 resolution: "espree@npm:7.3.1" @@ -8209,6 +8611,17 @@ __metadata: languageName: node linkType: hard +"espree@npm:^9.2.0, espree@npm:^9.3.0": + version: 9.3.0 + resolution: "espree@npm:9.3.0" + dependencies: + acorn: ^8.7.0 + acorn-jsx: ^5.3.1 + eslint-visitor-keys: ^3.1.0 + checksum: c0f1885c4eab652f9be08eb9228cea0df046b559b29d4aed8d6590ea9bd60177d4cb245d204a6f737a79a096861bb4ab8e480aeb8c1dbafef5beec1157353ce4 + languageName: node + linkType: hard + "esprima@npm:^4.0.0, esprima@npm:^4.0.1": version: 4.0.1 resolution: "esprima@npm:4.0.1" @@ -8554,6 +8967,13 @@ __metadata: languageName: node linkType: hard +"fastest-levenshtein@npm:^1.0.12": + version: 1.0.12 + resolution: "fastest-levenshtein@npm:1.0.12" + checksum: e1a013698dd1d302c7a78150130c7d50bb678c2c2f8839842a796d66cc7cdf50ea6b3d7ca930b0c8e7e8c2cd84fea8ab831023b382f7aab6922c318c1451beab + languageName: node + linkType: hard + "fastq@npm:^1.6.0": version: 1.13.0 resolution: "fastq@npm:1.13.0" @@ -8710,6 +9130,16 @@ __metadata: languageName: node linkType: hard +"find-up@npm:5.0.0, find-up@npm:^5.0.0": + version: 5.0.0 + resolution: "find-up@npm:5.0.0" + dependencies: + locate-path: ^6.0.0 + path-exists: ^4.0.0 + checksum: 07955e357348f34660bde7920783204ff5a26ac2cafcaa28bace494027158a97b9f56faaf2d89a6106211a8174db650dd9f503f9c0d526b1202d5554a00b9095 + languageName: node + linkType: hard + "find-up@npm:^1.0.0": version: 1.1.2 resolution: "find-up@npm:1.1.2" @@ -8748,16 +9178,6 @@ __metadata: languageName: node linkType: hard -"find-up@npm:^5.0.0": - version: 5.0.0 - resolution: "find-up@npm:5.0.0" - dependencies: - locate-path: ^6.0.0 - path-exists: ^4.0.0 - checksum: 07955e357348f34660bde7920783204ff5a26ac2cafcaa28bace494027158a97b9f56faaf2d89a6106211a8174db650dd9f503f9c0d526b1202d5554a00b9095 - languageName: node - linkType: hard - "flat-cache@npm:^3.0.4": version: 3.0.4 resolution: "flat-cache@npm:3.0.4" @@ -8768,6 +9188,15 @@ __metadata: languageName: node linkType: hard +"flat@npm:^5.0.2": + version: 5.0.2 + resolution: "flat@npm:5.0.2" + bin: + flat: cli.js + checksum: 12a1536ac746db74881316a181499a78ef953632ddd28050b7a3a43c62ef5462e3357c8c29d76072bb635f147f7a9a1f0c02efef6b4be28f8db62ceb3d5c7f5d + languageName: node + linkType: hard + "flatted@npm:^3.1.0": version: 3.2.5 resolution: "flatted@npm:3.2.5" @@ -9010,6 +9439,18 @@ __metadata: languageName: node linkType: hard +"fstream@npm:^1.0.12": + version: 1.0.12 + resolution: "fstream@npm:1.0.12" + dependencies: + graceful-fs: ^4.1.2 + inherits: ~2.0.0 + mkdirp: ">=0.5 0" + rimraf: 2 + checksum: e6998651aeb85fd0f0a8a68cec4d05a3ada685ecc4e3f56e0d063d0564a4fc39ad11a856f9020f926daf869fc67f7a90e891def5d48e4cadab875dc313094536 + languageName: node + linkType: hard + "function-bind@npm:^1.1.1": version: 1.1.1 resolution: "function-bind@npm:1.1.1" @@ -9175,6 +9616,15 @@ __metadata: languageName: node linkType: hard +"glob-parent@npm:^6.0.1": + version: 6.0.2 + resolution: "glob-parent@npm:6.0.2" + dependencies: + is-glob: ^4.0.3 + checksum: c13ee97978bef4f55106b71e66428eb1512e71a7466ba49025fc2aec59a5bfb0954d5abd58fc5ee6c9b076eef4e1f6d3375c2e964b88466ca390da4419a786a8 + languageName: node + linkType: hard + "glob-promise@npm:^3.4.0": version: 3.4.0 resolution: "glob-promise@npm:3.4.0" @@ -9211,7 +9661,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^7.1.1, glob@npm:^7.1.2, glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.6, glob@npm:^7.2.0": +"glob@npm:7.2.0, glob@npm:^7.1.1, glob@npm:^7.1.2, glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.6, glob@npm:^7.2.0": version: 7.2.0 resolution: "glob@npm:7.2.0" dependencies: @@ -9299,13 +9749,20 @@ __metadata: languageName: node linkType: hard -"graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.1.9, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": +"graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.1.9, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.2, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": version: 4.2.9 resolution: "graceful-fs@npm:4.2.9" checksum: 68ea4e07ff2c041ada184f9278b830375f8e0b75154e3f080af6b70f66172fabb4108d19b3863a96b53fc068a310b9b6493d86d1291acc5f3861eb4b79d26ad6 languageName: node linkType: hard +"growl@npm:1.10.5": + version: 1.10.5 + resolution: "growl@npm:1.10.5" + checksum: 4b86685de6831cebcbb19f93870bea624afee61124b0a20c49017013987cd129e73a8c4baeca295728f41d21265e1f859d25ef36731b142ca59c655fea94bb1a + languageName: node + linkType: hard + "handlebars@npm:^4.7.7": version: 4.7.7 resolution: "handlebars@npm:4.7.7" @@ -9526,7 +9983,7 @@ __metadata: languageName: node linkType: hard -"he@npm:^1.2.0": +"he@npm:1.2.0, he@npm:^1.2.0": version: 1.2.0 resolution: "he@npm:1.2.0" bin: @@ -9934,7 +10391,7 @@ __metadata: languageName: node linkType: hard -"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.0, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.1, inherits@npm:~2.0.3": +"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.0, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.0, inherits@npm:~2.0.1, inherits@npm:~2.0.3": version: 2.0.4 resolution: "inherits@npm:2.0.4" checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 @@ -10330,7 +10787,7 @@ __metadata: languageName: node linkType: hard -"is-plain-obj@npm:^2.0.0": +"is-plain-obj@npm:^2.0.0, is-plain-obj@npm:^2.1.0": version: 2.1.0 resolution: "is-plain-obj@npm:2.1.0" checksum: cec9100678b0a9fe0248a81743041ed990c2d4c99f893d935545cfbc42876cbe86d207f3b895700c690ad2fa520e568c44afc1605044b535a7820c1d40e38daa @@ -11115,26 +11572,26 @@ __metadata: languageName: node linkType: hard -"js-yaml@npm:^3.13.1": - version: 3.14.1 - resolution: "js-yaml@npm:3.14.1" +"js-yaml@npm:4.1.0, js-yaml@npm:^4.1.0": + version: 4.1.0 + resolution: "js-yaml@npm:4.1.0" dependencies: - argparse: ^1.0.7 - esprima: ^4.0.0 + argparse: ^2.0.1 bin: js-yaml: bin/js-yaml.js - checksum: bef146085f472d44dee30ec34e5cf36bf89164f5d585435a3d3da89e52622dff0b188a580e4ad091c3341889e14cb88cac6e4deb16dc5b1e9623bb0601fc255c + checksum: c7830dfd456c3ef2c6e355cc5a92e6700ceafa1d14bba54497b34a99f0376cecbb3e9ac14d3e5849b426d5a5140709a66237a8c991c675431271c4ce5504151a languageName: node linkType: hard -"js-yaml@npm:^4.1.0": - version: 4.1.0 - resolution: "js-yaml@npm:4.1.0" +"js-yaml@npm:^3.13.1": + version: 3.14.1 + resolution: "js-yaml@npm:3.14.1" dependencies: - argparse: ^2.0.1 + argparse: ^1.0.7 + esprima: ^4.0.0 bin: js-yaml: bin/js-yaml.js - checksum: c7830dfd456c3ef2c6e355cc5a92e6700ceafa1d14bba54497b34a99f0376cecbb3e9ac14d3e5849b426d5a5140709a66237a8c991c675431271c4ce5504151a + checksum: bef146085f472d44dee30ec34e5cf36bf89164f5d585435a3d3da89e52622dff0b188a580e4ad091c3341889e14cb88cac6e4deb16dc5b1e9623bb0601fc255c languageName: node linkType: hard @@ -11439,6 +11896,13 @@ __metadata: languageName: node linkType: hard +"listenercount@npm:~1.0.1": + version: 1.0.1 + resolution: "listenercount@npm:1.0.1" + checksum: 0f1c9077cdaf2ebc16473c7d72eb7de6d983898ca42500f03da63c3914b6b312dd5f7a90d2657691ea25adf3fe0ac5a43226e8b2c673fd73415ed038041f4757 + languageName: node + linkType: hard + "listr2@npm:^3.2.2": version: 3.14.0 resolution: "listr2@npm:3.14.0" @@ -11656,7 +12120,7 @@ __metadata: languageName: node linkType: hard -"log-symbols@npm:^4.0.0": +"log-symbols@npm:4.1.0, log-symbols@npm:^4.0.0": version: 4.1.0 resolution: "log-symbols@npm:4.1.0" dependencies: @@ -12023,7 +12487,7 @@ __metadata: languageName: node linkType: hard -"micromatch@npm:^4.0.2, micromatch@npm:^4.0.4": +"micromatch@npm:^4.0.0, micromatch@npm:^4.0.2, micromatch@npm:^4.0.4": version: 4.0.4 resolution: "micromatch@npm:4.0.4" dependencies: @@ -12129,6 +12593,15 @@ __metadata: languageName: node linkType: hard +"minimatch@npm:3.0.4": + version: 3.0.4 + resolution: "minimatch@npm:3.0.4" + dependencies: + brace-expansion: ^1.1.7 + checksum: 66ac295f8a7b59788000ea3749938b0970344c841750abd96694f80269b926ebcafad3deeb3f1da2522978b119e6ae3a5869b63b13a7859a456b3408bd18a078 + languageName: node + linkType: hard + "minimatch@npm:^3.0.2, minimatch@npm:^3.0.4": version: 3.0.5 resolution: "minimatch@npm:3.0.5" @@ -12243,7 +12716,7 @@ __metadata: languageName: node linkType: hard -"mkdirp@npm:^0.5.1, mkdirp@npm:^0.5.3": +"mkdirp@npm:>=0.5 0, mkdirp@npm:^0.5.1, mkdirp@npm:^0.5.3": version: 0.5.5 resolution: "mkdirp@npm:0.5.5" dependencies: @@ -12263,6 +12736,41 @@ __metadata: languageName: node linkType: hard +"mocha@npm:^9.1.3": + version: 9.2.0 + resolution: "mocha@npm:9.2.0" + dependencies: + "@ungap/promise-all-settled": 1.1.2 + ansi-colors: 4.1.1 + browser-stdout: 1.3.1 + chokidar: 3.5.3 + debug: 4.3.3 + diff: 5.0.0 + escape-string-regexp: 4.0.0 + find-up: 5.0.0 + glob: 7.2.0 + growl: 1.10.5 + he: 1.2.0 + js-yaml: 4.1.0 + log-symbols: 4.1.0 + minimatch: 3.0.4 + ms: 2.1.3 + nanoid: 3.2.0 + serialize-javascript: 6.0.0 + strip-json-comments: 3.1.1 + supports-color: 8.1.1 + which: 2.0.2 + workerpool: 6.2.0 + yargs: 16.2.0 + yargs-parser: 20.2.4 + yargs-unparser: 2.0.0 + bin: + _mocha: bin/_mocha + mocha: bin/mocha + checksum: 49efc4724cf17087c7e107bc8f6890db24525e6dcc153b801da58de3c2a2f940e22f7600ef195b8ac62a0dfd7baee5cf289fc4641a6b1fdf8bc9c819efc1a8ba + languageName: node + linkType: hard + "morgan@npm:^1.9.1": version: 1.10.0 resolution: "morgan@npm:1.10.0" @@ -12327,7 +12835,7 @@ __metadata: languageName: node linkType: hard -"nanoid@npm:^3.2.0": +"nanoid@npm:3.2.0, nanoid@npm:^3.2.0": version: 3.2.0 resolution: "nanoid@npm:3.2.0" bin: @@ -14326,6 +14834,15 @@ __metadata: languageName: node linkType: hard +"rechoir@npm:^0.7.0": + version: 0.7.1 + resolution: "rechoir@npm:0.7.1" + dependencies: + resolve: ^1.9.0 + checksum: 2a04aab4e28c05fcd6ee6768446bc8b859d8f108e71fc7f5bcbc5ef25e53330ce2c11d10f82a24591a2df4c49c4f61feabe1fd11f844c66feedd4cd7bb61146a + languageName: node + linkType: hard + "redent@npm:^1.0.0": version: 1.0.0 resolution: "redent@npm:1.0.0" @@ -14406,7 +14923,7 @@ __metadata: languageName: node linkType: hard -"regexpp@npm:^3.1.0": +"regexpp@npm:^3.1.0, regexpp@npm:^3.2.0": version: 3.2.0 resolution: "regexpp@npm:3.2.0" checksum: a78dc5c7158ad9ddcfe01aa9144f46e192ddbfa7b263895a70a5c6c73edd9ce85faf7c0430e59ac38839e1734e275b9c3de5c57ee3ab6edc0e0b1bdebefccef8 @@ -14616,7 +15133,7 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.10.0, resolve@npm:^1.12.0, resolve@npm:^1.14.2, resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:^1.3.2": +"resolve@npm:^1.10.0, resolve@npm:^1.12.0, resolve@npm:^1.14.2, resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:^1.3.2, resolve@npm:^1.9.0": version: 1.22.0 resolution: "resolve@npm:1.22.0" dependencies: @@ -14639,7 +15156,7 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.12.0#~builtin, resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.19.0#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.3.2#~builtin": +"resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.12.0#~builtin, resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.19.0#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.3.2#~builtin, resolve@patch:resolve@^1.9.0#~builtin": version: 1.22.0 resolution: "resolve@patch:resolve@npm%3A1.22.0#~builtin::version=1.22.0&hash=07638b" dependencies: @@ -14700,7 +15217,7 @@ __metadata: languageName: node linkType: hard -"rimraf@npm:^2.2.8, rimraf@npm:^2.5.4, rimraf@npm:^2.6.3": +"rimraf@npm:2, rimraf@npm:^2.2.8, rimraf@npm:^2.5.4, rimraf@npm:^2.6.3": version: 2.7.1 resolution: "rimraf@npm:2.7.1" dependencies: @@ -15003,6 +15520,15 @@ __metadata: languageName: node linkType: hard +"serialize-javascript@npm:6.0.0, serialize-javascript@npm:^6.0.0": + version: 6.0.0 + resolution: "serialize-javascript@npm:6.0.0" + dependencies: + randombytes: ^2.1.0 + checksum: 56f90b562a1bdc92e55afb3e657c6397c01a902c588c0fe3d4c490efdcc97dcd2a3074ba12df9e94630f33a5ce5b76a74784a7041294628a6f4306e0ec84bf93 + languageName: node + linkType: hard + "serialize-javascript@npm:^4.0.0": version: 4.0.0 resolution: "serialize-javascript@npm:4.0.0" @@ -15021,15 +15547,6 @@ __metadata: languageName: node linkType: hard -"serialize-javascript@npm:^6.0.0": - version: 6.0.0 - resolution: "serialize-javascript@npm:6.0.0" - dependencies: - randombytes: ^2.1.0 - checksum: 56f90b562a1bdc92e55afb3e657c6397c01a902c588c0fe3d4c490efdcc97dcd2a3074ba12df9e94630f33a5ce5b76a74784a7041294628a6f4306e0ec84bf93 - languageName: node - linkType: hard - "serve-favicon@npm:^2.5.0": version: 2.5.0 resolution: "serve-favicon@npm:2.5.0" @@ -15089,7 +15606,7 @@ __metadata: languageName: node linkType: hard -"setimmediate@npm:^1.0.4": +"setimmediate@npm:^1.0.4, setimmediate@npm:~1.0.4": version: 1.0.5 resolution: "setimmediate@npm:1.0.5" checksum: c9a6f2c5b51a2dabdc0247db9c46460152ffc62ee139f3157440bd48e7c59425093f42719ac1d7931f054f153e2d26cf37dfeb8da17a794a58198a2705e527fd @@ -15778,7 +16295,7 @@ __metadata: languageName: node linkType: hard -"strip-json-comments@npm:^3.1.0, strip-json-comments@npm:^3.1.1": +"strip-json-comments@npm:3.1.1, strip-json-comments@npm:^3.1.0, strip-json-comments@npm:^3.1.1": version: 3.1.1 resolution: "strip-json-comments@npm:3.1.1" checksum: 492f73e27268f9b1c122733f28ecb0e7e8d8a531a6662efbd08e22cccb3f9475e90a1b82cab06a392f6afae6d2de636f977e231296400d0ec5304ba70f166443 @@ -15806,6 +16323,15 @@ __metadata: languageName: node linkType: hard +"supports-color@npm:8.1.1, supports-color@npm:^8.0.0": + version: 8.1.1 + resolution: "supports-color@npm:8.1.1" + dependencies: + has-flag: ^4.0.0 + checksum: c052193a7e43c6cdc741eb7f378df605636e01ad434badf7324f17fb60c69a880d8d8fcdcb562cf94c2350e57b937d7425ab5b8326c67c2adc48f7c87c1db406 + languageName: node + linkType: hard + "supports-color@npm:^5.3.0": version: 5.5.0 resolution: "supports-color@npm:5.5.0" @@ -15833,15 +16359,6 @@ __metadata: languageName: node linkType: hard -"supports-color@npm:^8.0.0": - version: 8.1.1 - resolution: "supports-color@npm:8.1.1" - dependencies: - has-flag: ^4.0.0 - checksum: c052193a7e43c6cdc741eb7f378df605636e01ad434badf7324f17fb60c69a880d8d8fcdcb562cf94c2350e57b937d7425ab5b8326c67c2adc48f7c87c1db406 - languageName: node - linkType: hard - "supports-hyperlinks@npm:^2.0.0": version: 2.2.0 resolution: "supports-hyperlinks@npm:2.2.0" @@ -16224,6 +16741,13 @@ __metadata: languageName: node linkType: hard +"traverse@npm:>=0.3.0 <0.4": + version: 0.3.9 + resolution: "traverse@npm:0.3.9" + checksum: 982982e4e249e9bbf063732a41fe5595939892758524bbef5d547c67cdf371b13af72b5434c6a61d88d4bb4351d6dabc6e22d832e0d16bc1bc684ef97a1cc59e + languageName: node + linkType: hard + "tree-kill@npm:^1.2.2": version: 1.2.2 resolution: "tree-kill@npm:1.2.2" @@ -16302,6 +16826,21 @@ __metadata: languageName: node linkType: hard +"ts-loader@npm:^9.2.6": + version: 9.2.6 + resolution: "ts-loader@npm:9.2.6" + dependencies: + chalk: ^4.1.0 + enhanced-resolve: ^5.0.0 + micromatch: ^4.0.0 + semver: ^7.3.4 + peerDependencies: + typescript: "*" + webpack: ^5.0.0 + checksum: 309d8fb6348c0c3a7166d42c1238c585ede00f816155b24217dbca489406a72409395d7954bc5801ddb9ca71c71e7e0b2375dbc342337e0ab1a461944598a7fe + languageName: node + linkType: hard + "ts-morph@npm:^13.0.0": version: 13.0.3 resolution: "ts-morph@npm:13.0.3" @@ -16452,7 +16991,7 @@ __metadata: languageName: node linkType: hard -"typescript@npm:*, typescript@npm:^2.9.2 || ^3.0.0 || ^4.0.0, typescript@npm:^4.3.2, typescript@npm:^4.5.2": +"typescript@npm:*, typescript@npm:^2.9.2 || ^3.0.0 || ^4.0.0, typescript@npm:^4.3.2, typescript@npm:^4.5.2, typescript@npm:^4.5.4": version: 4.5.5 resolution: "typescript@npm:4.5.5" bin: @@ -16462,7 +17001,7 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@*#~builtin, typescript@patch:typescript@^2.9.2 || ^3.0.0 || ^4.0.0#~builtin, typescript@patch:typescript@^4.3.2#~builtin, typescript@patch:typescript@^4.5.2#~builtin": +"typescript@patch:typescript@*#~builtin, typescript@patch:typescript@^2.9.2 || ^3.0.0 || ^4.0.0#~builtin, typescript@patch:typescript@^4.3.2#~builtin, typescript@patch:typescript@^4.5.2#~builtin, typescript@patch:typescript@^4.5.4#~builtin": version: 4.5.5 resolution: "typescript@patch:typescript@npm%3A4.5.5#~builtin::version=4.5.5&hash=493e53" bin: @@ -16752,6 +17291,24 @@ __metadata: languageName: node linkType: hard +"unzipper@npm:^0.10.11": + version: 0.10.11 + resolution: "unzipper@npm:0.10.11" + dependencies: + big-integer: ^1.6.17 + binary: ~0.3.0 + bluebird: ~3.4.1 + buffer-indexof-polyfill: ~1.0.0 + duplexer2: ~0.1.4 + fstream: ^1.0.12 + graceful-fs: ^4.2.2 + listenercount: ~1.0.1 + readable-stream: ~2.3.6 + setimmediate: ~1.0.4 + checksum: 006cd43ec4d6df47d86aa6b15044a606f50cdcd6a3d6f96f64f54ca0b663c09abb221f76edca0e9592511036d37ea094b1d76ce92c5bf10d7c6eb56f0be678f8 + languageName: node + linkType: hard + "upath@npm:^1.1.1, upath@npm:^1.2.0": version: 1.2.0 resolution: "upath@npm:1.2.0" @@ -17125,6 +17682,39 @@ __metadata: languageName: node linkType: hard +"webpack-cli@npm:^4.9.1": + version: 4.9.2 + resolution: "webpack-cli@npm:4.9.2" + dependencies: + "@discoveryjs/json-ext": ^0.5.0 + "@webpack-cli/configtest": ^1.1.1 + "@webpack-cli/info": ^1.4.1 + "@webpack-cli/serve": ^1.6.1 + colorette: ^2.0.14 + commander: ^7.0.0 + execa: ^5.0.0 + fastest-levenshtein: ^1.0.12 + import-local: ^3.0.2 + interpret: ^2.2.0 + rechoir: ^0.7.0 + webpack-merge: ^5.7.3 + peerDependencies: + webpack: 4.x.x || 5.x.x + peerDependenciesMeta: + "@webpack-cli/generators": + optional: true + "@webpack-cli/migrate": + optional: true + webpack-bundle-analyzer: + optional: true + webpack-dev-server: + optional: true + bin: + webpack-cli: bin/cli.js + checksum: ffb4c5d53ab65ce9f1e8efd34fca4cb858ec6afc91ece0d9375094edff2e7615708c8a586991057fd9cc8d37aab0eb0511913b178daac534e51bcf7d3583e61c + languageName: node + linkType: hard + "webpack-dev-middleware@npm:^3.7.3": version: 3.7.3 resolution: "webpack-dev-middleware@npm:3.7.3" @@ -17171,6 +17761,16 @@ __metadata: languageName: node linkType: hard +"webpack-merge@npm:^5.7.3": + version: 5.8.0 + resolution: "webpack-merge@npm:5.8.0" + dependencies: + clone-deep: ^4.0.1 + wildcard: ^2.0.0 + checksum: 88786ab91013f1bd2a683834ff381be81c245a4b0f63304a5103e90f6653f44dab496a0768287f8531761f8ad957d1f9f3ccb2cb55df0de1bd9ee343e079da26 + languageName: node + linkType: hard + "webpack-sources@npm:^1.4.0, webpack-sources@npm:^1.4.1, webpack-sources@npm:^1.4.3": version: 1.4.3 resolution: "webpack-sources@npm:1.4.3" @@ -17235,7 +17835,7 @@ __metadata: languageName: node linkType: hard -"webpack@npm:>=4.43.0 <6.0.0": +"webpack@npm:>=4.43.0 <6.0.0, webpack@npm:^5.66.0": version: 5.68.0 resolution: "webpack@npm:5.68.0" dependencies: @@ -17358,7 +17958,7 @@ __metadata: languageName: node linkType: hard -"which@npm:^2.0.1, which@npm:^2.0.2": +"which@npm:2.0.2, which@npm:^2.0.1, which@npm:^2.0.2": version: 2.0.2 resolution: "which@npm:2.0.2" dependencies: @@ -17387,6 +17987,13 @@ __metadata: languageName: node linkType: hard +"wildcard@npm:^2.0.0": + version: 2.0.0 + resolution: "wildcard@npm:2.0.0" + checksum: 1f4fe4c03dfc492777c60f795bbba597ac78794f1b650d68f398fbee9adb765367c516ebd4220889b6a81e9626e7228bbe0d66237abb311573c2ee1f4902a5ad + languageName: node + linkType: hard + "word-wrap@npm:^1.2.3, word-wrap@npm:~1.2.3": version: 1.2.3 resolution: "word-wrap@npm:1.2.3" @@ -17610,6 +18217,13 @@ __metadata: languageName: node linkType: hard +"workerpool@npm:6.2.0": + version: 6.2.0 + resolution: "workerpool@npm:6.2.0" + checksum: 3493b4f0ef979a23d2c1583d7ef85f62fc9463cc02f82829d3e7e663b517f8ae9707da0249b382e46ac58986deb0ca2232ee1081713741211bda9254b429c9bb + languageName: node + linkType: hard + "wrap-ansi@npm:^5.1.0": version: 5.1.0 resolution: "wrap-ansi@npm:5.1.0" @@ -17762,6 +18376,13 @@ __metadata: languageName: node linkType: hard +"yargs-parser@npm:20.2.4": + version: 20.2.4 + resolution: "yargs-parser@npm:20.2.4" + checksum: d251998a374b2743a20271c2fd752b9fbef24eb881d53a3b99a7caa5e8227fcafd9abf1f345ac5de46435821be25ec12189a11030c12ee6481fef6863ed8b924 + languageName: node + linkType: hard + "yargs-parser@npm:20.x, yargs-parser@npm:^20.2.2, yargs-parser@npm:^20.2.7": version: 20.2.9 resolution: "yargs-parser@npm:20.2.9" @@ -17779,25 +18400,19 @@ __metadata: languageName: node linkType: hard -"yargs@npm:^13.3.0": - version: 13.3.2 - resolution: "yargs@npm:13.3.2" +"yargs-unparser@npm:2.0.0": + version: 2.0.0 + resolution: "yargs-unparser@npm:2.0.0" dependencies: - cliui: ^5.0.0 - find-up: ^3.0.0 - get-caller-file: ^2.0.1 - require-directory: ^2.1.1 - require-main-filename: ^2.0.0 - set-blocking: ^2.0.0 - string-width: ^3.0.0 - which-module: ^2.0.0 - y18n: ^4.0.0 - yargs-parser: ^13.1.2 - checksum: 75c13e837eb2bb25717957ba58d277e864efc0cca7f945c98bdf6477e6ec2f9be6afa9ed8a876b251a21423500c148d7b91e88dee7adea6029bdec97af1ef3e8 + camelcase: ^6.0.0 + decamelize: ^4.0.0 + flat: ^5.0.2 + is-plain-obj: ^2.1.0 + checksum: 68f9a542c6927c3768c2f16c28f71b19008710abd6b8f8efbac6dcce26bbb68ab6503bed1d5994bdbc2df9a5c87c161110c1dfe04c6a3fe5c6ad1b0e15d9a8a3 languageName: node linkType: hard -"yargs@npm:^16.2.0": +"yargs@npm:16.2.0, yargs@npm:^16.2.0": version: 16.2.0 resolution: "yargs@npm:16.2.0" dependencies: @@ -17812,6 +18427,24 @@ __metadata: languageName: node linkType: hard +"yargs@npm:^13.3.0": + version: 13.3.2 + resolution: "yargs@npm:13.3.2" + dependencies: + cliui: ^5.0.0 + find-up: ^3.0.0 + get-caller-file: ^2.0.1 + require-directory: ^2.1.1 + require-main-filename: ^2.0.0 + set-blocking: ^2.0.0 + string-width: ^3.0.0 + which-module: ^2.0.0 + y18n: ^4.0.0 + yargs-parser: ^13.1.2 + checksum: 75c13e837eb2bb25717957ba58d277e864efc0cca7f945c98bdf6477e6ec2f9be6afa9ed8a876b251a21423500c148d7b91e88dee7adea6029bdec97af1ef3e8 + languageName: node + linkType: hard + "yocto-queue@npm:^0.1.0": version: 0.1.0 resolution: "yocto-queue@npm:0.1.0" From 75baf8c01cae7e11018a71d5644b0c8ef8176d14 Mon Sep 17 00:00:00 2001 From: CaptainIRS <36656347+CaptainIRS@users.noreply.github.com> Date: Sat, 12 Feb 2022 16:21:17 +0530 Subject: [PATCH 2/6] fix: Update to latest simulator output format --- packages/extension/src/executors/cExecutor.ts | 8 ++++++++ packages/extension/src/executors/cppExecutor.ts | 2 +- packages/extension/src/executors/pythonExecutor.ts | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/extension/src/executors/cExecutor.ts b/packages/extension/src/executors/cExecutor.ts index f2577b2d..5e7af1d6 100644 --- a/packages/extension/src/executors/cExecutor.ts +++ b/packages/extension/src/executors/cExecutor.ts @@ -28,8 +28,16 @@ export class CCodeExecutor { simulatorExecutable.stdout.on('data', data => { userExecutable.stdin.write(data); outputChannel?.append(data.toString()); + }); + + userExecutable.stderr.on('data', data => { + outputChannel?.append(`[E] ${data.toString()}`); + }); + simulatorExecutable.stderr.on('data', data => { simulatorLog += data.toString(); + outputChannel?.append(`[E] ${data.toString()}`); }); + userExecutable.on('close', () => { simulatorExecutable.kill(); setTimeout(() => resolve(getLogFromSimulatorLog(simulatorLog)), 1000); diff --git a/packages/extension/src/executors/cppExecutor.ts b/packages/extension/src/executors/cppExecutor.ts index 5d1863b5..1860f4f0 100644 --- a/packages/extension/src/executors/cppExecutor.ts +++ b/packages/extension/src/executors/cppExecutor.ts @@ -28,13 +28,13 @@ export class CppCodeExecutor { simulatorExecutable.stdout.on('data', data => { userExecutable.stdin.write(data); outputChannel?.append(`<<< ${data.toString()}`); - simulatorLog += data.toString(); }); userExecutable.stderr.on('data', data => { outputChannel?.append(`[E] ${data.toString()}`); }); simulatorExecutable.stderr.on('data', data => { + simulatorLog += data.toString(); outputChannel?.append(`[E] ${data.toString()}`); }); diff --git a/packages/extension/src/executors/pythonExecutor.ts b/packages/extension/src/executors/pythonExecutor.ts index e1d26ec6..c8a3bcdd 100644 --- a/packages/extension/src/executors/pythonExecutor.ts +++ b/packages/extension/src/executors/pythonExecutor.ts @@ -24,13 +24,13 @@ export class PythonCodeExecutor { simulatorExecutable.stdout.on('data', data => { userExecutable.stdin.write(data); outputChannel?.append(`<<< ${data.toString()}`); - simulatorLog += data.toString(); }); userExecutable.stderr.on('data', data => { outputChannel?.append(`[E] ${data.toString()}`); }); simulatorExecutable.stderr.on('data', data => { + simulatorLog += data.toString(); outputChannel?.append(`[E] ${data.toString()}`); }); From cb75b680f1525044571b4b2f0a38820215f66bb3 Mon Sep 17 00:00:00 2001 From: CaptainIRS <36656347+CaptainIRS@users.noreply.github.com> Date: Sat, 12 Feb 2022 16:47:54 +0530 Subject: [PATCH 3/6] add readme for testing extension locally --- packages/extension/README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/packages/extension/README.md b/packages/extension/README.md index afdbcd93..d4a438b6 100644 --- a/packages/extension/README.md +++ b/packages/extension/README.md @@ -1,3 +1,13 @@ # CodeCharacter 2022 VSCode Extension An extension for VSCode that allows players to play CodeCharacter from the comfort of their IDE. + +## Testing the extension locally + +1. Open just the `packages/extension` folder in VSCode. +2. Copy `src/config/config.example.ts` to `src/config/config.ts`. +3. Download the simulator binary from [here](https://github.com/delta/codecharacter-simulator-2022/releases/download/v2022.1.0/main) and save it locally +4. Change the SIMULATOR_PATH in `config.ts` to point to the simulator binary. +5. Run `yarn install` +6. Open the run panel from the left sidebar or do `Ctrl + Shift + D` +7. Click the run button or press `F5` to start the extension. (Wait for the webpack compilation to get over - might take a couple of minutes and refresh it) From 12573098146bd70b168e49ac78e37d886f916649 Mon Sep 17 00:00:00 2001 From: CaptainIRS <36656347+CaptainIRS@users.noreply.github.com> Date: Sat, 12 Feb 2022 16:56:33 +0530 Subject: [PATCH 4/6] add more testing instructions --- packages/extension/README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/extension/README.md b/packages/extension/README.md index d4a438b6..fc682211 100644 --- a/packages/extension/README.md +++ b/packages/extension/README.md @@ -11,3 +11,9 @@ An extension for VSCode that allows players to play CodeCharacter from the comfo 5. Run `yarn install` 6. Open the run panel from the left sidebar or do `Ctrl + Shift + D` 7. Click the run button or press `F5` to start the extension. (Wait for the webpack compilation to get over - might take a couple of minutes and refresh it) + +In the extension: + +1. The extension will be available in the last entry of the left sidebar. +2. Create and save some maps/source files. +3. Use files from [here](https://gist.github.com/CaptainIRS/9d8d162e2a7b7b62ae1ffa13b23a18fa) for testing renderer. From 6dac7f640c700c53c023a36205a4237b518afe91 Mon Sep 17 00:00:00 2001 From: CaptainIRS <36656347+CaptainIRS@users.noreply.github.com> Date: Sun, 13 Feb 2022 23:45:30 +0530 Subject: [PATCH 5/6] add: Java executor --- packages/extension/src/executors/executor.ts | 17 +++++- .../extension/src/executors/javaExecutor.ts | 59 +++++++++++++++++++ 2 files changed, 74 insertions(+), 2 deletions(-) create mode 100644 packages/extension/src/executors/javaExecutor.ts diff --git a/packages/extension/src/executors/executor.ts b/packages/extension/src/executors/executor.ts index 00460aeb..4e81e452 100644 --- a/packages/extension/src/executors/executor.ts +++ b/packages/extension/src/executors/executor.ts @@ -4,6 +4,7 @@ import { rendererPanel } from '../panels/rendererPanel'; import { CCodeExecutor } from './cExecutor'; import { CppCodeExecutor } from './cppExecutor'; import { PythonCodeExecutor } from './pythonExecutor'; +import { JavaCodeExecutor } from './javaExecutor'; export const outputChannel = vscode.window.createOutputChannel( 'Code Character Executor', @@ -41,11 +42,13 @@ export const getLogFromSimulatorLog = (log: string): string => { class Executor { cExecutor: CCodeExecutor; cppExecutor: CppCodeExecutor; + javaExecutor: JavaCodeExecutor; pythonExecutor: PythonCodeExecutor; constructor() { this.cExecutor = new CCodeExecutor(); this.cppExecutor = new CppCodeExecutor(); + this.javaExecutor = new JavaCodeExecutor(); this.pythonExecutor = new PythonCodeExecutor(); } @@ -80,7 +83,18 @@ class Executor { }) .catch(err => { reject(err); - vscode.window.showErrorMessage(`Execution failed: ${err}`); + }); + break; + case 'java': + this.javaExecutor + .execute(mapData, uri) + .then(log => { + rendererPanel.renderLog(log, context); + vscode.window.showInformationMessage('Execution succeeded'); + resolve(); + }) + .catch(err => { + reject(err); }); break; case 'python': @@ -93,7 +107,6 @@ class Executor { }) .catch(err => { reject(err); - vscode.window.showErrorMessage(`Execution failed: ${err}`); }); break; default: diff --git a/packages/extension/src/executors/javaExecutor.ts b/packages/extension/src/executors/javaExecutor.ts new file mode 100644 index 00000000..5ad53649 --- /dev/null +++ b/packages/extension/src/executors/javaExecutor.ts @@ -0,0 +1,59 @@ +import * as vscode from 'vscode'; +import { spawn } from 'child_process'; +import { + getLogFromSimulatorLog, + outputChannel, + provideInitialInput, +} from './executor'; +import { SIMULATOR_PATH } from '../config/config'; + +export class JavaCodeExecutor { + async execute( + mapData: Array>, + uri: vscode.Uri, + ): Promise { + const userExecutable = spawn('java', [uri.fsPath]); + const simulatorExecutable = spawn(SIMULATOR_PATH); + return new Promise((resolve, reject) => { + let simulatorLog = ''; + outputChannel?.show(); + userExecutable.stdout.on('data', data => { + simulatorExecutable.stdin.write(data); + outputChannel?.append(`>>> ${data.toString()}`); + }); + simulatorExecutable.stdout.on('data', data => { + userExecutable.stdin.write(data); + outputChannel?.append(`<<< ${data.toString()}`); + }); + + userExecutable.stderr.on('data', data => { + outputChannel?.append(`[E] ${data.toString()}`); + }); + simulatorExecutable.stderr.on('data', data => { + simulatorLog += data.toString(); + outputChannel?.append(`[E] ${data.toString()}`); + }); + + userExecutable.on('close', () => { + simulatorExecutable.kill(); + setTimeout(() => resolve(getLogFromSimulatorLog(simulatorLog)), 1000); + }); + simulatorExecutable.on('close', () => { + userExecutable.kill(); + setTimeout(() => resolve(getLogFromSimulatorLog(simulatorLog)), 1000); + }); + userExecutable.on('error', err => { + reject(err); + }); + simulatorExecutable.on('error', err => { + reject(err); + }); + + provideInitialInput( + mapData, + userExecutable.stdin, + simulatorExecutable.stdin, + ); + }); + } +} From 341fd4c270c9f0950557b3e793a47b33901ea4d0 Mon Sep 17 00:00:00 2001 From: CaptainIRS <36656347+CaptainIRS@users.noreply.github.com> Date: Tue, 15 Feb 2022 13:05:11 +0530 Subject: [PATCH 6/6] feat: Download latest simulator binary automatically --- packages/extension/README.md | 9 ++-- .../extension/src/config/config.example.ts | 1 - packages/extension/src/executors/cExecutor.ts | 6 ++- .../extension/src/executors/cppExecutor.ts | 6 ++- packages/extension/src/executors/executor.ts | 8 ++-- .../extension/src/executors/javaExecutor.ts | 7 ++- .../extension/src/executors/pythonExecutor.ts | 7 ++- packages/extension/src/extension.ts | 47 +++++++++++++++++-- 8 files changed, 67 insertions(+), 24 deletions(-) delete mode 100644 packages/extension/src/config/config.example.ts diff --git a/packages/extension/README.md b/packages/extension/README.md index fc682211..1a5727fb 100644 --- a/packages/extension/README.md +++ b/packages/extension/README.md @@ -5,12 +5,9 @@ An extension for VSCode that allows players to play CodeCharacter from the comfo ## Testing the extension locally 1. Open just the `packages/extension` folder in VSCode. -2. Copy `src/config/config.example.ts` to `src/config/config.ts`. -3. Download the simulator binary from [here](https://github.com/delta/codecharacter-simulator-2022/releases/download/v2022.1.0/main) and save it locally -4. Change the SIMULATOR_PATH in `config.ts` to point to the simulator binary. -5. Run `yarn install` -6. Open the run panel from the left sidebar or do `Ctrl + Shift + D` -7. Click the run button or press `F5` to start the extension. (Wait for the webpack compilation to get over - might take a couple of minutes and refresh it) +2. Run `yarn install` +3. Open the run panel from the left sidebar or do Ctrl + Shift + D +4. Click the run button or press F5 to start the extension. (Wait for the webpack compilation to get over - might take a couple of minutes and refresh it) In the extension: diff --git a/packages/extension/src/config/config.example.ts b/packages/extension/src/config/config.example.ts deleted file mode 100644 index 0df2ba67..00000000 --- a/packages/extension/src/config/config.example.ts +++ /dev/null @@ -1 +0,0 @@ -export const SIMULATOR_PATH = '/path'; diff --git a/packages/extension/src/executors/cExecutor.ts b/packages/extension/src/executors/cExecutor.ts index 5e7af1d6..cc906826 100644 --- a/packages/extension/src/executors/cExecutor.ts +++ b/packages/extension/src/executors/cExecutor.ts @@ -8,16 +8,18 @@ import { outputChannel, provideInitialInput, } from './executor'; -import { SIMULATOR_PATH } from '../config/config'; export class CCodeExecutor { async execute( mapData: Array>, uri: vscode.Uri, + context: vscode.ExtensionContext, ): Promise { const executablePath = this._compile(uri); const userExecutable = spawn(executablePath); - const simulatorExecutable = spawn(SIMULATOR_PATH); + const simulatorExecutable = spawn( + path.join(context.globalStorageUri.fsPath, 'simulator'), + ); return new Promise((resolve, reject) => { let simulatorLog = ''; outputChannel?.show(); diff --git a/packages/extension/src/executors/cppExecutor.ts b/packages/extension/src/executors/cppExecutor.ts index 1860f4f0..c6878c63 100644 --- a/packages/extension/src/executors/cppExecutor.ts +++ b/packages/extension/src/executors/cppExecutor.ts @@ -8,16 +8,18 @@ import { outputChannel, provideInitialInput, } from './executor'; -import { SIMULATOR_PATH } from '../config/config'; export class CppCodeExecutor { async execute( mapData: Array>, uri: vscode.Uri, + context: vscode.ExtensionContext, ): Promise { const executablePath = this._compile(uri); const userExecutable = spawn(executablePath); - const simulatorExecutable = spawn(SIMULATOR_PATH); + const simulatorExecutable = spawn( + path.join(context.globalStorageUri.fsPath, 'simulator'), + ); return new Promise((resolve, reject) => { let simulatorLog = ''; outputChannel?.show(); diff --git a/packages/extension/src/executors/executor.ts b/packages/extension/src/executors/executor.ts index 4e81e452..efa5e417 100644 --- a/packages/extension/src/executors/executor.ts +++ b/packages/extension/src/executors/executor.ts @@ -62,7 +62,7 @@ class Executor { switch (languageId) { case 'c': this.cExecutor - .execute(mapData, uri) + .execute(mapData, uri, context) .then(log => { rendererPanel.renderLog(log, context); vscode.window.showInformationMessage('Execution succeeded'); @@ -75,7 +75,7 @@ class Executor { break; case 'cpp': this.cppExecutor - .execute(mapData, uri) + .execute(mapData, uri, context) .then(log => { rendererPanel.renderLog(log, context); vscode.window.showInformationMessage('Execution succeeded'); @@ -87,7 +87,7 @@ class Executor { break; case 'java': this.javaExecutor - .execute(mapData, uri) + .execute(mapData, uri, context) .then(log => { rendererPanel.renderLog(log, context); vscode.window.showInformationMessage('Execution succeeded'); @@ -99,7 +99,7 @@ class Executor { break; case 'python': this.pythonExecutor - .execute(mapData, uri) + .execute(mapData, uri, context) .then(log => { rendererPanel.renderLog(log, context); vscode.window.showInformationMessage('Execution succeeded'); diff --git a/packages/extension/src/executors/javaExecutor.ts b/packages/extension/src/executors/javaExecutor.ts index 5ad53649..074e02a9 100644 --- a/packages/extension/src/executors/javaExecutor.ts +++ b/packages/extension/src/executors/javaExecutor.ts @@ -1,19 +1,22 @@ import * as vscode from 'vscode'; +import * as path from 'path'; import { spawn } from 'child_process'; import { getLogFromSimulatorLog, outputChannel, provideInitialInput, } from './executor'; -import { SIMULATOR_PATH } from '../config/config'; export class JavaCodeExecutor { async execute( mapData: Array>, uri: vscode.Uri, + context: vscode.ExtensionContext, ): Promise { const userExecutable = spawn('java', [uri.fsPath]); - const simulatorExecutable = spawn(SIMULATOR_PATH); + const simulatorExecutable = spawn( + path.join(context.globalStorageUri.fsPath, 'simulator'), + ); return new Promise((resolve, reject) => { let simulatorLog = ''; outputChannel?.show(); diff --git a/packages/extension/src/executors/pythonExecutor.ts b/packages/extension/src/executors/pythonExecutor.ts index c8a3bcdd..3d433637 100644 --- a/packages/extension/src/executors/pythonExecutor.ts +++ b/packages/extension/src/executors/pythonExecutor.ts @@ -1,19 +1,22 @@ import * as vscode from 'vscode'; +import * as path from 'path'; import { spawn } from 'child_process'; import { getLogFromSimulatorLog, outputChannel, provideInitialInput, } from './executor'; -import { SIMULATOR_PATH } from '../config/config'; export class PythonCodeExecutor { async execute( mapData: Array>, uri: vscode.Uri, + context: vscode.ExtensionContext, ): Promise { const userExecutable = spawn('python3', ['-u', uri.fsPath]); - const simulatorExecutable = spawn(SIMULATOR_PATH); + const simulatorExecutable = spawn( + path.join(context.globalStorageUri.fsPath, 'simulator'), + ); return new Promise((resolve, reject) => { let simulatorLog = ''; outputChannel?.show(); diff --git a/packages/extension/src/extension.ts b/packages/extension/src/extension.ts index 46324297..b0898728 100644 --- a/packages/extension/src/extension.ts +++ b/packages/extension/src/extension.ts @@ -1,16 +1,53 @@ import { MapProvider } from './providers/tree-data/mapProvider'; import { SourceCodeProvider } from './providers/tree-data/sourceCodeProvider'; import * as path from 'path'; +import * as fs from 'fs'; import * as vscode from 'vscode'; +import fetch from 'node-fetch'; export function activate(context: vscode.ExtensionContext) { console.log('CodeCharacter 2022 extension is now active'); - // vscode.commands.executeCommand( - // 'vscode.openFolder', - // vscode.Uri.file(path.join(context.globalStorageUri.fsPath, 'data')), - // false, - // ); + fetch( + 'https://api.github.com/repos/delta/codecharacter-simulator-2022/releases/latest', + ) + .then(res => res.json()) + .then(async res => { + const createdAt = new Date(res.created_at); + const existingSimulatorReleaseTimestamp = context.globalState.get( + 'simulatorReleaseTimestamp', + ); + if ( + existingSimulatorReleaseTimestamp === undefined || + existingSimulatorReleaseTimestamp < createdAt || + fs.existsSync( + path.join(context.globalStorageUri.fsPath, 'simulator'), + ) === false + ) { + vscode.window.showInformationMessage( + `CodeCharacter 2022 simulator is out of date. Updating to version ${res.tag_name}...`, + ); + const simulatorBinary = await fetch(res.assets[0].browser_download_url); + const fileStream = fs.createWriteStream( + path.join(context.globalStorageUri.fsPath, 'simulator'), + ); + await new Promise((resolve, reject) => { + simulatorBinary?.body?.pipe(fileStream); + simulatorBinary?.body?.on('error', reject); + fileStream.on('finish', resolve); + }); + fs.chmodSync( + path.join(context.globalStorageUri.fsPath, 'simulator'), + '755', + ); + context.globalState.update('simulatorReleaseTimestamp', createdAt); + vscode.window.showInformationMessage( + `Simulator updated to version ${res.tag_name}`, + ); + } else { + vscode.window.showInformationMessage('Simulator binary is up to date'); + } + }); vscode.commands.executeCommand('codecharacter-2022-codes.focus'); const mapProvider = new MapProvider(context);