From c2780113b4c992f0417fb5a4c0c9bde85c6ffca6 Mon Sep 17 00:00:00 2001 From: Matt Godbolt Date: Wed, 28 Dec 2022 11:42:14 -0600 Subject: [PATCH] Slightly more controversial bumpings (#4503) - latest sentry, tar-stream, which, some yamljs versions - latest eslint-* stuff - latest webpack manifest - Applies all the automatic fixes for newer lint rules - Bump the webpack version applies new tslint stuff --- app.js | 8 +- lib/assert.ts | 2 +- lib/base-compiler.ts | 105 ++- lib/buildenvsetup/base.ts | 2 +- lib/buildenvsetup/ceconan.ts | 4 +- lib/cache/from-config.ts | 12 +- lib/cfg.js | 17 +- lib/clientstate-normalizer.js | 28 +- lib/clientstate.js | 73 +- lib/compiler-finder.ts | 3 +- lib/compilers/ada.ts | 6 +- lib/compilers/clang.ts | 8 +- lib/compilers/clean.js | 10 +- lib/compilers/dotnet.ts | 2 +- lib/compilers/flang.ts | 6 +- lib/compilers/java.js | 14 +- lib/compilers/ldc.js | 2 +- lib/compilers/nvcc.js | 12 +- lib/compilers/pascal-win.js | 6 +- lib/compilers/pascal.js | 12 +- lib/compilers/ptxas.js | 6 +- lib/compilers/python.ts | 6 +- lib/compilers/rga.ts | 6 +- lib/compilers/ruby.ts | 8 +- lib/compilers/wsl-vc.js | 6 +- lib/compilers/z88dk.ts | 26 +- lib/compilers/zig.ts | 6 +- lib/demangler/pascal.js | 13 +- lib/demangler/win32-llvm.js | 2 +- lib/demangler/win32.js | 6 +- lib/exec.ts | 7 +- lib/handlers/assembly-documentation.ts | 9 +- lib/handlers/compile.ts | 18 +- lib/handlers/formatting.js | 4 +- lib/handlers/noscript.js | 2 +- lib/handlers/route-api.js | 8 +- lib/handlers/site-templates.ts | 2 +- lib/keyed-type.ts | 8 +- lib/llvm-ast.js | 15 +- lib/llvm-ir.ts | 2 +- lib/llvm-opt-transformer.ts | 6 +- lib/mapfiles/map-file.ts | 10 +- lib/options-handler.ts | 4 +- lib/parsers/asm-parser-ewavr.js | 44 +- lib/parsers/asm-parser-vc.js | 40 +- lib/parsers/asm-parser-vc6.js | 40 +- lib/parsers/asm-parser.ts | 14 +- lib/parsers/asm-raw.js | 4 +- lib/pe32-support.js | 16 +- lib/properties.ts | 14 +- lib/storage/base.ts | 6 +- lib/symbol-store.ts | 6 +- lib/tooling/base-tool.ts | 2 +- lib/tooling/bbcdiskify-tool.js | 6 +- lib/tooling/compiler-dropin-tool.ts | 5 +- lib/tooling/microsoft-analysis-tool.js | 2 +- lib/utils.ts | 8 +- package-lock.json | 1116 ++++++++++++++++-------- package.json | 24 +- test/cache-tests.js | 6 +- test/cfg-tests.js | 2 +- test/checks.js | 2 +- test/exec-tests.js | 118 +-- test/filter-tests.js | 2 +- test/handlers/api-tests.js | 15 +- test/lang-tests.js | 2 +- webpack.config.esm.js | 2 +- 67 files changed, 1218 insertions(+), 790 deletions(-) diff --git a/app.js b/app.js index 04462b6cced..e944db73836 100755 --- a/app.js +++ b/app.js @@ -388,7 +388,7 @@ function startListening(server) { if (ss) { // ms (5 min default) const idleTimeout = process.env.IDLE_TIMEOUT; - const timeout = (typeof idleTimeout !== 'undefined' ? idleTimeout : 300) * 1000; + const timeout = (idleTimeout === undefined ? 300 : idleTimeout) * 1000; if (idleTimeout) { const exit = () => { logger.info('Inactivity timeout reached, exiting.'); @@ -598,7 +598,7 @@ async function main() { } }); - const sponsorConfig = loadSponsorsFromString(fs.readFileSync(configDir + '/sponsors.yaml', 'utf-8')); + const sponsorConfig = loadSponsorsFromString(fs.readFileSync(configDir + '/sponsors.yaml', 'utf8')); loadSiteTemplates(configDir); @@ -646,7 +646,7 @@ async function main() { mobileViewer: isMobileViewer(req), config: config, metadata: metadata, - storedStateId: req.params.id ? req.params.id : false, + storedStateId: req.params.id || false, }, req.query, ), @@ -833,6 +833,8 @@ function terminationHandler(name, code) { }; } +// Once we move to modules, we can remove this and use a top level await. +// eslint-disable-next-line unicorn/prefer-top-level-await main().catch(err => { logger.error('Top-level error (shutting down):', err); process.exit(1); diff --git a/lib/assert.ts b/lib/assert.ts index e07b8d374a6..4c1d02339d6 100644 --- a/lib/assert.ts +++ b/lib/assert.ts @@ -47,7 +47,7 @@ function get_diagnostic() { const relative = check_path(global.ce_base_directory, invoker_frame.fileName); if (relative) { try { - const file = fs.readFileSync(invoker_frame.fileName, 'utf-8'); + const file = fs.readFileSync(invoker_frame.fileName, 'utf8'); const lines = file.split('\n'); return { file: relative, diff --git a/lib/base-compiler.ts b/lib/base-compiler.ts index 006468902d5..8fb7914178d 100644 --- a/lib/base-compiler.ts +++ b/lib/base-compiler.ts @@ -426,12 +426,12 @@ export class BaseCompiler implements ICompiler { }; const objResult = await this.exec(this.compiler.objdumper, args, execOptions); - if (objResult.code !== 0) { - logger.error(`Error executing objdump ${this.compiler.objdumper}`, objResult); - result.asm = ``; - } else { + if (objResult.code === 0) { result.objdumpTime = objResult.execTime; result.asm = this.postProcessObjdumpOutput(objResult.stdout); + } else { + logger.error(`Error executing objdump ${this.compiler.objdumper}`, objResult); + result.asm = ``; } } @@ -501,7 +501,7 @@ export class BaseCompiler implements ICompiler { ...this.getEmptyExecutionResult(), stdout: err.stdout ? utils.parseOutput(err.stdout) : [], stderr: err.stderr ? utils.parseOutput(err.stderr) : [], - code: err.code !== undefined ? err.code : -1, + code: err.code === undefined ? -1 : err.code, }; } } @@ -616,8 +616,7 @@ export class BaseCompiler implements ICompiler { foundLib.versions, (o: LibraryVersion, versionId: string): boolean => { if (versionId === selectedLib.version) return true; - if (o.alias && o.alias.includes(selectedLib.version)) return true; - return false; + return !!(o.alias && o.alias.includes(selectedLib.version)); }, ); @@ -793,7 +792,7 @@ export class BaseCompiler implements ICompiler { protected getSharedLibraryPathsAsLdLibraryPaths(libraries) { let paths = ''; if (!this.alwaysResetLdPath) { - paths = process.env.LD_LIBRARY_PATH ? process.env.LD_LIBRARY_PATH : ''; + paths = process.env.LD_LIBRARY_PATH || ''; } return _.union( paths.split(path.delimiter).filter(p => !!p), @@ -805,7 +804,7 @@ export class BaseCompiler implements ICompiler { getSharedLibraryPathsAsLdLibraryPathsForExecution(libraries) { let paths = ''; if (!this.alwaysResetLdPath) { - paths = process.env.LD_LIBRARY_PATH ? process.env.LD_LIBRARY_PATH : ''; + paths = process.env.LD_LIBRARY_PATH || ''; } return _.union( paths.split(path.delimiter).filter(p => !!p), @@ -1040,7 +1039,7 @@ export class BaseCompiler implements ICompiler { async processIrOutput(output, filters: ParseFiltersAndOutputOptions) { const irPath = this.getIrOutputFilename(output.inputFilename, filters); if (await fs.pathExists(irPath)) { - const output = await fs.readFile(irPath, 'utf-8'); + const output = await fs.readFile(irPath, 'utf8'); // uses same filters as main compiler return this.llvmIr.process(output, filters); } @@ -1075,7 +1074,7 @@ export class BaseCompiler implements ICompiler { return { error: 'Clang invocation timed out', results: {}, - clangTime: output.execTime ? output.execTime : compileEnd - compileStart, + clangTime: output.execTime || compileEnd - compileStart, }; } @@ -1176,7 +1175,7 @@ export class BaseCompiler implements ICompiler { return [{text: `Failed to run compiler to get Rust ${outputFriendlyName}`}]; } if (await utils.fileExists(outputFilename)) { - const content = await fs.readFile(outputFilename, 'utf-8'); + const content = await fs.readFile(outputFilename, 'utf8'); return content.split('\n').map(line => ({ text: line, })); @@ -1200,7 +1199,7 @@ export class BaseCompiler implements ICompiler { return [{text: 'Failed to run compiler to get Rust MIR'}]; } if (await utils.fileExists(mirPath)) { - const content = await fs.readFile(mirPath, 'utf-8'); + const content = await fs.readFile(mirPath, 'utf8'); return content.split('\n').map(line => ({ text: line, })); @@ -1213,7 +1212,7 @@ export class BaseCompiler implements ICompiler { return [{text: 'Failed to run compiler to get Haskell Core'}]; } if (await utils.fileExists(outpath)) { - const content = await fs.readFile(outpath, 'utf-8'); + const content = await fs.readFile(outpath, 'utf8'); // output file starts with // // ====================
==================== @@ -1302,19 +1301,19 @@ export class BaseCompiler implements ICompiler { // very usefull to debug error message. if (contentDebugExpanded.length === 0) - if (result.code !== 0) { - contentDebugExpanded.push({text: 'GNAT exited with an error and did not create the expanded code'}); - } else { + if (result.code === 0) { contentDebugExpanded.push({ text: 'GNAT exited successfully but the expanded code is missing, something is wrong', }); + } else { + contentDebugExpanded.push({text: 'GNAT exited with an error and did not create the expanded code'}); } if (contentDebugTree.length === 0) - if (result.code !== 0) { - contentDebugTree.push({text: 'GNAT exited with an error and did not create the Tree'}); - } else { + if (result.code === 0) { contentDebugTree.push({text: 'GNAT exited successfully but the Tree is missing, something is wrong'}); + } else { + contentDebugTree.push({text: 'GNAT exited with an error and did not create the Tree'}); } return { @@ -1617,21 +1616,21 @@ export class BaseCompiler implements ICompiler { stdout: [], timedOut: false, }; - } else { - if (!(await utils.fileExists(buildResult.executableFilename))) { - const verboseResult = { - code: -1, - didExecute: false, - buildResult, - stderr: [{text: 'Executable not found'}], - stdout: [], - timedOut: false, - }; + } + + if (!(await utils.fileExists(buildResult.executableFilename))) { + const verboseResult = { + code: -1, + didExecute: false, + buildResult, + stderr: [{text: 'Executable not found'}], + stdout: [], + timedOut: false, + }; - verboseResult.buildResult.stderr.push({text: 'Compiler did not produce an executable'}); + verboseResult.buildResult.stderr.push({text: 'Compiler did not produce an executable'}); - return verboseResult; - } + return verboseResult; } if (!this.compiler.supportsExecute) { @@ -2003,7 +2002,13 @@ export class BaseCompiler implements ICompiler { const outputFilename = this.getExecutableFilename(path.join(dirPath, 'build'), this.outputFilebase, key); let fullResult = await this.loadPackageWithExecutable(cacheKey, dirPath); - if (!fullResult) { + if (fullResult) { + fullResult.fetchedFromCache = true; + + delete fullResult.inputFilename; + delete fullResult.executableFilename; + delete fullResult.dirPath; + } else { let writeSummary; try { writeSummary = await this.writeAllFilesCMake(dirPath, cacheKey.source, files, cacheKey.filters); @@ -2095,12 +2100,6 @@ export class BaseCompiler implements ICompiler { }); await this.storePackageWithExecutable(cacheKey, dirPath, fullResult); - } else { - fullResult.fetchedFromCache = true; - - delete fullResult.inputFilename; - delete fullResult.executableFilename; - delete fullResult.dirPath; } fullResult.result.dirPath = dirPath; @@ -2293,7 +2292,9 @@ export class BaseCompiler implements ICompiler { this.doTempfolderCleanup(result.buildResult); } - if (!backendOptions.skipAsm) { + if (backendOptions.skipAsm) { + result.asm = []; + } else { if (!result.externalParserUsed) { if (result.okToCache) { const res = this.processAsm(result, filters, options); @@ -2312,15 +2313,13 @@ export class BaseCompiler implements ICompiler { // TODO rephrase this so we don't need to reassign result = filters.demangle ? await this.postProcessAsm(result, filters) : result; if (this.compiler.supportsCfg && backendOptions.produceCfg) { - if (!options.includes('-emit-llvm')) { - result.cfg = cfg.generateStructure(this.compiler.compilerType, this.compiler.version, result.asm); - } else { + if (options.includes('-emit-llvm')) { // for now do not generate a cfg for llvm ir result.cfg = {}; + } else { + result.cfg = cfg.generateStructure(this.compiler.compilerType, this.compiler.version, result.asm); } } - } else { - result.asm = []; } if (!backendOptions.skipPopArgs) result.popularArguments = this.possibleArguments.getPopularArguments(options); @@ -2364,7 +2363,7 @@ export class BaseCompiler implements ICompiler { const output: any[] = []; const optStream = fs - .createReadStream(optPath, {encoding: 'utf-8'}) + .createReadStream(optPath, {encoding: 'utf8'}) .pipe(new compilerOptInfo.LLVMOptTransformer()); for await (const opt of optStream) { @@ -2497,7 +2496,7 @@ export class BaseCompiler implements ICompiler { output.currentPassOutput = ''; if (dumpFileName && (await fs.pathExists(dumpFileName))) - output.currentPassOutput = await fs.readFile(dumpFileName, 'utf-8'); + output.currentPassOutput = await fs.readFile(dumpFileName, 'utf8'); // else leave the currentPassOutput empty. Can happen when some // UI options are changed and a now disabled pass is still // requested. @@ -2674,17 +2673,17 @@ but nothing was dumped. Possible causes are: this.initialiseLibraries(clientOptions); - if (!isPrediscovered) { - const initResult = await this.getArgumentParser().parse(this); - logger.info(`${compiler} ${version} is ready`); - return initResult; - } else { + if (isPrediscovered) { logger.info(`${compiler} ${version} is ready`); if (this.compiler.cachedPossibleArguments) { this.possibleArguments.populateOptions(this.compiler.cachedPossibleArguments); delete this.compiler.cachedPossibleArguments; } return this; + } else { + const initResult = await this.getArgumentParser().parse(this); + logger.info(`${compiler} ${version} is ready`); + return initResult; } } diff --git a/lib/buildenvsetup/base.ts b/lib/buildenvsetup/base.ts index 615a8f3b8bc..79c62b4a4ba 100644 --- a/lib/buildenvsetup/base.ts +++ b/lib/buildenvsetup/base.ts @@ -46,7 +46,7 @@ export class BuildEnvSetupBase { this.compilerOptionsArr = utils.splitArguments(this.compiler.options); this.compilerArch = this.getCompilerArch(); - this.compilerTypeOrGCC = compilerInfo.compilerType ? compilerInfo.compilerType : 'gcc'; + this.compilerTypeOrGCC = compilerInfo.compilerType || 'gcc'; if (this.compilerTypeOrGCC === 'clang-intel') this.compilerTypeOrGCC = 'gcc'; this.compilerSupportsX86 = !this.compilerArch; } diff --git a/lib/buildenvsetup/ceconan.ts b/lib/buildenvsetup/ceconan.ts index ad9cf478b17..bf186b383f8 100644 --- a/lib/buildenvsetup/ceconan.ts +++ b/lib/buildenvsetup/ceconan.ts @@ -196,7 +196,7 @@ export class BuildEnvSetupCeConanDirect extends BuildEnvSetupBase { _.each(libraryDetails, (details, libId) => { if (this.hasBinariesToLink(details)) { - const lookupversion = details.lookupversion ? details.lookupversion : details.version; + const lookupversion = details.lookupversion || details.version; allLibraryBuilds.push({ id: libId, version: details.version, @@ -209,7 +209,7 @@ export class BuildEnvSetupCeConanDirect extends BuildEnvSetupBase { const buildProperties = await this.getConanBuildProperties(key); for (const libVerBuilds of allLibraryBuilds) { - const lookupversion = libVerBuilds.lookupversion ? libVerBuilds.lookupversion : libVerBuilds.version; + const lookupversion = libVerBuilds.lookupversion || libVerBuilds.version; const libVer = `${libVerBuilds.id}/${lookupversion}`; const possibleBuilds = await libVerBuilds.possibleBuilds; if (possibleBuilds) { diff --git a/lib/cache/from-config.ts b/lib/cache/from-config.ts index 065d1793982..8e0dbfa36da 100644 --- a/lib/cache/from-config.ts +++ b/lib/cache/from-config.ts @@ -49,20 +49,24 @@ function createInternal(name: string, config: string): Cache { if (!match) throw new Error(`Unable to parse '${config}'`); const params = match[2].split(','); switch (match[1]) { - case 'InMemory': + case 'InMemory': { if (params.length !== 1) throw new Error(`Bad params: ${config}`); return new InMemoryCache(name, paramInt(config, params[0])); + } - case 'OnDisk': + case 'OnDisk': { if (params.length !== 2) throw new Error(`Bad params: ${config}`); return new OnDiskCache(name, params[0], paramInt(config, params[1])); + } - case 'S3': + case 'S3': { if (params.length !== 3) throw new Error(`Bad params: ${config}`); return new S3Cache(name, params[0], params[1], params[2]); + } - default: + default: { throw new Error(`Unrecognised cache type '${match[1]}'`); + } } } diff --git a/lib/cfg.js b/lib/cfg.js index 64d09b26bb5..cfefbc1cb6b 100644 --- a/lib/cfg.js +++ b/lib/cfg.js @@ -83,8 +83,11 @@ const gcc = { getInstructionType: inst => { if (inst.includes('jmp') || inst.includes(' b ')) return InstructionType_jmp; else if (gcc.isJmpInstruction(inst)) return InstructionType_conditionalJmpInst; - else if (!inst.includes(' ret')) return InstructionType_notRetInst; - else return InstructionType_retInst; + else if (inst.includes(' ret')) { + return InstructionType_retInst; + } else { + return InstructionType_notRetInst; + } }, extractNodeName: inst => inst.match(/\.L\d+/) + ':', @@ -114,8 +117,11 @@ const clang = { getInstructionType: function (inst) { if (inst.includes('jmp') || inst.includes(' b ')) return InstructionType_jmp; else if (clang.isJmpInstruction(inst)) return InstructionType_conditionalJmpInst; - else if (!inst.includes(' ret')) return InstructionType_notRetInst; - else return InstructionType_retInst; + else if (inst.includes(' ret')) { + return InstructionType_retInst; + } else { + return InstructionType_notRetInst; + } }, extractNodeName: inst => inst.match(/\.LBB\d+_\d+/) + ':', @@ -294,8 +300,9 @@ function makeEdges(asmArr, arrOfCanonicalBasicBlock, rules) { } break; } - case InstructionType_retInst: + case InstructionType_retInst: { break; + } } }); logger.debug(edges); diff --git a/lib/clientstate-normalizer.js b/lib/clientstate-normalizer.js index 17c8fb4dc6a..a3da0b68095 100644 --- a/lib/clientstate-normalizer.js +++ b/lib/clientstate-normalizer.js @@ -251,7 +251,7 @@ class GoldenLayoutComponents { type: 'component', componentName: 'codeEditor', componentState: { - id: customSessionId ? customSessionId : session.id, + id: customSessionId || session.id, source: session.source, lang: session.language, }, @@ -297,7 +297,7 @@ class GoldenLayoutComponents { componentName: 'ast', componentState: { id: compilerIndex, - editorid: customSessionId ? customSessionId : session ? session.id : undefined, + editorid: customSessionId || (session ? session.id : undefined), }, isClosable: true, reorderEnabled: true, @@ -310,7 +310,7 @@ class GoldenLayoutComponents { componentName: 'opt', componentState: { id: compilerIndex, - editorid: customSessionId ? customSessionId : session ? session.id : undefined, + editorid: customSessionId || (session ? session.id : undefined), }, isClosable: true, reorderEnabled: true, @@ -323,7 +323,7 @@ class GoldenLayoutComponents { componentName: 'opt', componentState: { id: compilerIndex, - editorid: customSessionId ? customSessionId : session ? session.id : undefined, + editorid: customSessionId || (session ? session.id : undefined), options: { navigation: false, physics: false, @@ -340,7 +340,7 @@ class GoldenLayoutComponents { componentName: 'gccdump', componentState: { _compilerid: compilerIndex, - _editorid: customSessionId ? customSessionId : session ? session.id : undefined, + _editorid: customSessionId || (session ? session.id : undefined), }, isClosable: true, reorderEnabled: true, @@ -353,7 +353,7 @@ class GoldenLayoutComponents { componentName: 'output', componentState: { compiler: compilerIndex, - editor: customSessionId ? customSessionId : session ? session.id : undefined, + editor: customSessionId || (session ? session.id : undefined), wrap: false, fontScale: 14, }, @@ -367,7 +367,7 @@ class GoldenLayoutComponents { type: 'component', componentName: 'tool', componentState: { - editor: customSessionId ? customSessionId : session ? session.id : undefined, + editor: customSessionId || (session ? session.id : undefined), compiler: compilerIndex, toolId: toolId, args: args, @@ -383,7 +383,7 @@ class GoldenLayoutComponents { type: 'component', componentName: 'conformance', componentState: { - editorid: customSessionId ? customSessionId : session.id, + editorid: customSessionId || session.id, langId: session.language, compilers: [], libs: conformanceview.libs, @@ -404,7 +404,7 @@ class GoldenLayoutComponents { componentState: { id: idxCompiler, compiler: compiler.id, - source: customSessionId ? customSessionId : session.id, + source: customSessionId || session.id, options: compiler.options, filters: this.copyCompilerFilters(compiler.filters), libs: compiler.libs, @@ -423,7 +423,7 @@ class GoldenLayoutComponents { id: idxCompiler, compiler: compiler.id, source: undefined, - tree: customTreeId ? customTreeId : tree.id, + tree: customTreeId || tree.id, options: compiler.options, filters: this.copyCompilerFilters(compiler.filters), libs: compiler.libs, @@ -440,7 +440,7 @@ class GoldenLayoutComponents { componentName: 'executor', componentState: { compiler: executor.compiler.id, - source: customSessionId ? customSessionId : session.id, + source: customSessionId || session.id, options: executor.compiler.options, execArgs: executor.arguments, execStdin: executor.stdin, @@ -464,7 +464,7 @@ class GoldenLayoutComponents { componentState: { compiler: executor.compiler.id, source: undefined, - tree: customTreeId ? customTreeId : tree.id, + tree: customTreeId || tree.id, options: executor.compiler.options, execArgs: executor.arguments, execStdin: executor.stdin, @@ -534,7 +534,7 @@ class GoldenLayoutComponents { type: 'component', componentName: 'tool', componentState: { - tree: customTreeId ? customTreeId : tree ? tree.id : undefined, + tree: customTreeId || (tree ? tree.id : undefined), compiler: compilerIndex, toolId: toolId, args: args, @@ -790,7 +790,7 @@ export class ClientStateGoldenifier extends GoldenLayoutComponents { createPresentationModeComponents(session, customSessionId, customWidth) { const stack = { type: 'stack', - width: customWidth ? customWidth : 50, + width: customWidth || 50, activeItemIndex: 0, content: [this.createSourceComponent(session, customSessionId)], }; diff --git a/lib/clientstate.js b/lib/clientstate.js index 73e6c41297e..a6c410ec39d 100644 --- a/lib/clientstate.js +++ b/lib/clientstate.js @@ -37,14 +37,14 @@ export class ClientStateCompilerOptions { } fromJsonData(jsondata) { - if (typeof jsondata.binary !== 'undefined') this.binary = jsondata.binary; - if (typeof jsondata.commentOnly !== 'undefined') this.commentOnly = jsondata.commentOnly; - if (typeof jsondata.demangle !== 'undefined') this.demangle = jsondata.demangle; - if (typeof jsondata.directives !== 'undefined') this.directives = jsondata.directives; - if (typeof jsondata.execute !== 'undefined') this.execute = jsondata.execute; - if (typeof jsondata.intel !== 'undefined') this.intel = jsondata.intel; - if (typeof jsondata.labels !== 'undefined') this.labels = jsondata.labels; - if (typeof jsondata.trim !== 'undefined') this.trim = jsondata.trim; + if (jsondata.binary !== undefined) this.binary = jsondata.binary; + if (jsondata.commentOnly !== undefined) this.commentOnly = jsondata.commentOnly; + if (jsondata.demangle !== undefined) this.demangle = jsondata.demangle; + if (jsondata.directives !== undefined) this.directives = jsondata.directives; + if (jsondata.execute !== undefined) this.execute = jsondata.execute; + if (jsondata.intel !== undefined) this.intel = jsondata.intel; + if (jsondata.labels !== undefined) this.labels = jsondata.labels; + if (jsondata.trim !== undefined) this.trim = jsondata.trim; } } @@ -65,35 +65,35 @@ export class ClientStateCompiler { } fromJsonData(jsondata) { - if (typeof jsondata._internalid !== 'undefined') { + if (jsondata._internalid !== undefined) { this._internalid = jsondata._internalid; } - if (typeof jsondata.id !== 'undefined') { + if (jsondata.id !== undefined) { this.id = jsondata.id; - } else if (typeof jsondata.compilerId !== 'undefined') { - this.id = jsondata.compilerId; - } else { + } else if (jsondata.compilerId === undefined) { this.id = ''; + } else { + this.id = jsondata.compilerId; } this.options = jsondata.options; this.filters = new ClientStateCompilerOptions(jsondata.filters); - if (typeof jsondata.libs !== 'undefined') { - this.libs = jsondata.libs; - } else { + if (jsondata.libs === undefined) { this.libs = []; - } - if (typeof jsondata.specialoutputs !== 'undefined') { - this.specialoutputs = jsondata.specialoutputs; } else { + this.libs = jsondata.libs; + } + if (jsondata.specialoutputs === undefined) { this.specialoutputs = []; + } else { + this.specialoutputs = jsondata.specialoutputs; } - if (typeof jsondata.tools !== 'undefined') { - this.tools = jsondata.tools; - } else { + if (jsondata.tools === undefined) { this.tools = []; + } else { + this.tools = jsondata.tools; } } } @@ -118,14 +118,13 @@ export class ClientStateExecutor { } fromJsonData(jsondata) { - if (typeof jsondata.compilerVisible !== 'undefined') this.compilerVisible = jsondata.compilerVisible; - if (typeof jsondata.compilerOutputVisible !== 'undefined') - this.compilerOutputVisible = jsondata.compilerOutputVisible; - if (typeof jsondata.arguments !== 'undefined') this.arguments = jsondata.arguments; - if (typeof jsondata.argumentsVisible !== 'undefined') this.argumentsVisible = jsondata.argumentsVisible; - if (typeof jsondata.stdin !== 'undefined') this.stdin = jsondata.stdin; - if (typeof jsondata.stdinVisible !== 'undefined') this.stdinVisible = jsondata.stdinVisible; - if (typeof jsondata.wrap !== 'undefined') this.wrap = jsondata.wrap; + if (jsondata.compilerVisible !== undefined) this.compilerVisible = jsondata.compilerVisible; + if (jsondata.compilerOutputVisible !== undefined) this.compilerOutputVisible = jsondata.compilerOutputVisible; + if (jsondata.arguments !== undefined) this.arguments = jsondata.arguments; + if (jsondata.argumentsVisible !== undefined) this.argumentsVisible = jsondata.argumentsVisible; + if (jsondata.stdin !== undefined) this.stdin = jsondata.stdin; + if (jsondata.stdinVisible !== undefined) this.stdinVisible = jsondata.stdinVisible; + if (jsondata.wrap !== undefined) this.wrap = jsondata.wrap; this.compiler = new ClientStateCompiler(jsondata.compiler); } @@ -199,7 +198,7 @@ export class ClientStateTree { this.isCMakeProject = jsondata.isCMakeProject; this.compilerLanguageId = jsondata.compilerLanguageId; - let requiresFix = typeof jsondata.newFileId === 'undefined'; + let requiresFix = jsondata.newFileId === undefined; for (const file of jsondata.files) { const newFile = new MultifileFile(file); this.files.push(newFile); @@ -219,7 +218,7 @@ export class ClientStateTree { this.newFileId = jsondata.newFileId; } - if (typeof jsondata.compilers !== 'undefined') { + if (jsondata.compilers !== undefined) { for (const compilerdata of jsondata.compilers) { const compiler = new ClientStateCompiler(compilerdata); if (compiler.id) { @@ -228,7 +227,7 @@ export class ClientStateTree { } } - if (typeof jsondata.executors !== 'undefined') { + if (jsondata.executors !== undefined) { for (const executor of jsondata.executors) { this.executors.push(new ClientStateExecutor(executor)); } @@ -267,10 +266,10 @@ export class ClientStateSession { } fromJsonData(jsondata) { - if (typeof jsondata.id !== 'undefined') this.id = jsondata.id; + if (jsondata.id !== undefined) this.id = jsondata.id; this.language = jsondata.language; this.source = jsondata.source; - if (typeof jsondata.conformanceview !== 'undefined') { + if (jsondata.conformanceview !== undefined) { if (jsondata.conformanceview) { this.conformanceview = new ClientStateConformanceView(jsondata.conformanceview); } else { @@ -285,13 +284,13 @@ export class ClientStateSession { } } - if (typeof jsondata.executors !== 'undefined') { + if (jsondata.executors !== undefined) { for (const executor of jsondata.executors) { this.executors.push(new ClientStateExecutor(executor)); } } - if (typeof jsondata.filename !== 'undefined') { + if (jsondata.filename !== undefined) { this.filename = jsondata.filename; } } diff --git a/lib/compiler-finder.ts b/lib/compiler-finder.ts index 320b80abc6a..ffa6c1c2843 100644 --- a/lib/compiler-finder.ts +++ b/lib/compiler-finder.ts @@ -213,7 +213,8 @@ export class CompilerFinder { // If name set, display that as the name // If not, check if we have a baseName + semver and display that // Else display compilerId as its name - const displayName = name !== undefined ? name : isSemVer && baseName ? `${baseName} ${semverVer}` : compilerId; + const displayName = + name === undefined ? (isSemVer && baseName ? `${baseName} ${semverVer}` : compilerId) : name; const baseOptions = props('baseOptions', ''); const options = props('options', ''); diff --git a/lib/compilers/ada.ts b/lib/compilers/ada.ts index 45a1d107921..89f500f4b0f 100644 --- a/lib/compilers/ada.ts +++ b/lib/compilers/ada.ts @@ -95,7 +95,9 @@ export class AdaCompiler extends BaseCompiler { inputFilename, ); - if (!filters.binary) { + if (filters.binary) { + gnatmake_opts.push('-o', outputFilename); + } else { gnatmake_opts.push( '-S', // Generate ASM '-c', // Compile only @@ -110,8 +112,6 @@ export class AdaCompiler extends BaseCompiler { gnatmake_opts.push(opt); } } - } else { - gnatmake_opts.push('-o', outputFilename); } // Spread the options coming from outside (user, backend or config options) diff --git a/lib/compilers/clang.ts b/lib/compilers/clang.ts index 3343c841918..6a755474952 100644 --- a/lib/compilers/clang.ts +++ b/lib/compilers/clang.ts @@ -160,7 +160,7 @@ export class ClangCompiler extends BaseCompiler { return disassembleResult.stderr; } - return fs.readFileSync(llvmirFile, 'utf-8'); + return fs.readFileSync(llvmirFile, 'utf8'); } else { return ''; } @@ -203,10 +203,10 @@ export class ClangCudaCompiler extends ClangCompiler { const objResult = await this.exec(this.compiler.objdumper, args, execOptions); result.asm = objResult.stdout; - if (objResult.code !== 0) { - result.asm = ``; - } else { + if (objResult.code === 0) { result.objdumpTime = objResult.execTime; + } else { + result.asm = ``; } return result; } diff --git a/lib/compilers/clean.js b/lib/compilers/clean.js index 26dfc28c646..c159ba1d5e5 100644 --- a/lib/compilers/clean.js +++ b/lib/compilers/clean.js @@ -128,7 +128,11 @@ export class CleanCompiler extends BaseCompiler { result.stdout = utils.parseOutput(this.preprocessOutput(result.stdout), inputFilename); result.stderr = utils.parseOutput(this.preprocessOutput(result.stderr), inputFilename); - if (!options.includes('-S')) { + if (options.includes('-S')) { + if (await fs.pathExists(this.getOutputFilename(tmpDir))) { + result.code = 0; + } + } else { const aOut = path.join(tmpDir, 'a.out'); if (await fs.pathExists(aOut)) { await fs.copyFile(aOut, this.getOutputFilename(tmpDir)); @@ -136,10 +140,6 @@ export class CleanCompiler extends BaseCompiler { } else { result.code = 1; } - } else { - if (await fs.pathExists(this.getOutputFilename(tmpDir))) { - result.code = 0; - } } return result; } diff --git a/lib/compilers/dotnet.ts b/lib/compilers/dotnet.ts index 5b1af77fc02..cd77007251f 100644 --- a/lib/compilers/dotnet.ts +++ b/lib/compilers/dotnet.ts @@ -274,7 +274,7 @@ class DotNetCompiler extends BaseCompiler { ...this.getEmptyExecutionResult(), stdout: err.stdout ? utils.parseOutput(err.stdout) : [], stderr: err.stderr ? utils.parseOutput(err.stderr) : [], - code: err.code !== undefined ? err.code : -1, + code: err.code === undefined ? -1 : err.code, }; } } diff --git a/lib/compilers/flang.ts b/lib/compilers/flang.ts index 429dfcce86d..9ff8fc22657 100644 --- a/lib/compilers/flang.ts +++ b/lib/compilers/flang.ts @@ -36,10 +36,10 @@ export class FlangCompiler extends FortranCompiler { if (this.compiler.intelAsm && filters.intel && !filters.binary) { options = options.concat(this.compiler.intelAsm.split(' ')); } - if (!filters.binary) { - options = options.concat('-S'); - } else { + if (filters.binary) { options = options.concat('-g'); + } else { + options = options.concat('-S'); } return options; } diff --git a/lib/compilers/java.js b/lib/compilers/java.js index b321fffe1e8..383f5601308 100644 --- a/lib/compilers/java.js +++ b/lib/compilers/java.js @@ -81,10 +81,10 @@ export class JavaCompiler extends BaseCompiler { asm: objResult.stdout, }; - if (objResult.code !== 0) { - oneResult.asm = ''; - } else { + if (objResult.code === 0) { oneResult.objdumpTime = objResult.execTime; + } else { + oneResult.asm = ''; } return oneResult; }), @@ -328,11 +328,11 @@ export class JavaCompiler extends BaseCompiler { currentInstr < method.instructions.length && method.instructions[currentInstr].instrOffset !== instrOffset ) { - if (currentSourceLine !== -1) { + if (currentSourceLine === -1) { + logger.error('Skipping over instruction even though currentSourceLine == -1'); + } else { // instructions without explicit line number get assigned the last explicit/same line number method.instructions[currentInstr].sourceLine = currentSourceLine; - } else { - logger.error('Skipping over instruction even though currentSourceLine == -1'); } currentInstr++; } @@ -343,7 +343,7 @@ export class JavaCompiler extends BaseCompiler { method.instructions[currentInstr].sourceLine = currentSourceLine; } - if (typeof method.startLine === 'undefined') { + if (method.startLine === undefined) { method.startLine = sourceLine; } // method.instructions.push({sourceLine: instrOffset}); diff --git a/lib/compilers/ldc.js b/lib/compilers/ldc.js index 0583a0284b9..277d2979bac 100644 --- a/lib/compilers/ldc.js +++ b/lib/compilers/ldc.js @@ -102,7 +102,7 @@ export class LDCCompiler extends BaseCompiler { // Demangling is not needed. const astFilename = output.inputFilename.concat('.cg'); try { - return await fs.readFile(astFilename, 'utf-8'); + return await fs.readFile(astFilename, 'utf8'); } catch (e) { if (e instanceof Error && e.code === 'ENOENT') { logger.warn(`LDC AST file ${astFilename} requested but it does not exist`); diff --git a/lib/compilers/nvcc.js b/lib/compilers/nvcc.js index ef527e5ce9a..d87e4a8b4c7 100644 --- a/lib/compilers/nvcc.js +++ b/lib/compilers/nvcc.js @@ -94,11 +94,11 @@ export class NvccCompiler extends BaseCompiler { const {code, execTime, stdout} = await this.exec(nvdisasm, args, {maxOutput, customCwd: result.dirPath}); - if (code !== 0) { - result.asm = ``; - } else { + if (code === 0) { result.objdumpTime = execTime; result.asm = this.postProcessObjdumpOutput(stdout); + } else { + result.asm = ``; } return result; } @@ -113,9 +113,9 @@ export class NvccCompiler extends BaseCompiler { const maxSize = this.env.ceProps('max-asm-size', 64 * 1024 * 1024); const optPromise = result.hasOptOutput ? this.processOptOutput(result.optPath) : Promise.resolve(''); const asmPromise = ( - !filters.binary - ? fs.readFile(outputFilename, {encoding: 'utf8'}) - : this.objdump(outputFilename, {}, maxSize, filters.intel, filters.demangle, filters) + filters.binary + ? this.objdump(outputFilename, {}, maxSize, filters.intel, filters.demangle, filters) + : fs.readFile(outputFilename, {encoding: 'utf8'}) ).then(asm => { result.asm = typeof asm === 'string' ? asm : asm.asm; return result; diff --git a/lib/compilers/pascal-win.js b/lib/compilers/pascal-win.js index 11c4d54dcb1..5c7eafae176 100644 --- a/lib/compilers/pascal-win.js +++ b/lib/compilers/pascal-win.js @@ -94,10 +94,10 @@ export class PascalWinCompiler extends BaseCompiler { let args = ['-d', outputFilename]; if (intelAsm) args = args.concat(['-M', 'intel']); return this.exec(this.compiler.objdumper, args, {maxOutput: 1024 * 1024 * 1024}).then(objResult => { - if (objResult.code !== 0) { - result.asm = ''; - } else { + if (objResult.code === 0) { result.asm = objResult.stdout; + } else { + result.asm = ''; } return result; diff --git a/lib/compilers/pascal.js b/lib/compilers/pascal.js index c1d48098e29..7a8c3cb53be 100644 --- a/lib/compilers/pascal.js +++ b/lib/compilers/pascal.js @@ -111,11 +111,11 @@ export class FPCCompiler extends BaseCompiler { const relevantAsmStartsAt = input.indexOf('...', systemInitOffset); if (relevantAsmStartsAt !== -1) { const lastLinefeedBeforeStart = input.lastIndexOf('\n', relevantAsmStartsAt); - if (lastLinefeedBeforeStart !== -1) { + if (lastLinefeedBeforeStart === -1) { + input = input.substr(0, input.indexOf('00000000004')) + '\n' + input.substr(relevantAsmStartsAt); + } else { input = input.substr(0, input.indexOf('00000000004')) + '\n' + input.substr(lastLinefeedBeforeStart + 1); - } else { - input = input.substr(0, input.indexOf('00000000004')) + '\n' + input.substr(relevantAsmStartsAt); } } return input; @@ -214,10 +214,10 @@ export class FPCCompiler extends BaseCompiler { valueInBrackets = valueInBrackets.substr(1); } - if (!isNaN(valueInBrackets)) { - return ` .loc ${currentFileId} ${valueInBrackets} 0`; - } else { + if (isNaN(valueInBrackets)) { return ` .file ${currentFileId} "${valueInBrackets}"`; + } else { + return ` .loc ${currentFileId} ${valueInBrackets} 0`; } } else if (asm.startsWith('.Le')) { return ' .cfi_endproc'; diff --git a/lib/compilers/ptxas.js b/lib/compilers/ptxas.js index ede18ccb831..26c63e86466 100644 --- a/lib/compilers/ptxas.js +++ b/lib/compilers/ptxas.js @@ -112,10 +112,10 @@ export class PtxAssembler extends BaseCompiler { let args = ['-c', '-g', '-hex', outputFilename]; const objResult = await this.exec(this.compiler.objdumper, args, {maxOutput: maxSize, customCwd: dirPath}); result.asm = objResult.stdout; - if (objResult.code !== 0) { - result.asm = ''; - } else { + if (objResult.code === 0) { result.objdumpTime = objResult.execTime; + } else { + result.asm = ''; } return result; } diff --git a/lib/compilers/python.ts b/lib/compilers/python.ts index 1036f2222c9..eaf1092d715 100644 --- a/lib/compilers/python.ts +++ b/lib/compilers/python.ts @@ -60,11 +60,11 @@ export class PythonCompiler extends BaseCompiler { const lineno = parseInt(match[1]); sourceLoc = {line: lineno, file: null}; lastLineNo = lineno; - } else if (!line) { + } else if (line) { + sourceLoc = {line: lastLineNo, file: null}; + } else { sourceLoc = {line: undefined, file: null}; lastLineNo = undefined; - } else { - sourceLoc = {line: lastLineNo, file: null}; } bytecodeResult.push({text: line, source: sourceLoc}); diff --git a/lib/compilers/rga.ts b/lib/compilers/rga.ts index 71d62a25299..c3f57fbb21e 100644 --- a/lib/compilers/rga.ts +++ b/lib/compilers/rga.ts @@ -200,7 +200,7 @@ Please supply an ASIC from the following options:`, // architecture and appends the shader type (with underscore separators). Here, // we rename the generated file to the output file Compiler Explorer expects. - const files = await readdir(outputDir, {encoding: 'utf-8'}); + const files = await readdir(outputDir, {encoding: 'utf8'}); for (const file of files) { if (file.startsWith((asicSelection.asic as string) + '_output')) { await rename(path.join(outputDir, file), outputFile); @@ -209,9 +209,9 @@ Please supply an ASIC from the following options:`, // The register analysis file contains a legend, and register liveness data // for each line of disassembly. Interleave those lines into the final output // as assembly comments. - const asm = await readFile(outputFile, 'utf-8'); + const asm = await readFile(outputFile, 'utf8'); const asmLines = asm.split(/\r?\n/); - const analysis = await readFile(registerAnalysisFile, 'utf-8'); + const analysis = await readFile(registerAnalysisFile, 'utf8'); const analysisLines = analysis.split(/\r?\n/); // The first few lines of the register analysis are the legend. Emit those lines diff --git a/lib/compilers/ruby.ts b/lib/compilers/ruby.ts index 41ac4f40d16..d84f6025acb 100644 --- a/lib/compilers/ruby.ts +++ b/lib/compilers/ruby.ts @@ -62,15 +62,15 @@ export class RubyCompiler extends BaseCompiler { if (match) { lastLineNo = parseInt(match[1]); - } else if (!line) { - lastFile = null; - lastLineNo = null; - } else { + } else if (line) { const fileMatch = line.match(fileRe); if (fileMatch) { lastFile = fileMatch[1]; lastLineNo = parseInt(fileMatch[2]); } + } else { + lastFile = null; + lastLineNo = null; } const file = lastFile === baseFile ? null : lastFile; diff --git a/lib/compilers/wsl-vc.js b/lib/compilers/wsl-vc.js index edc3b8062a9..5e1f24d8c1b 100644 --- a/lib/compilers/wsl-vc.js +++ b/lib/compilers/wsl-vc.js @@ -69,10 +69,10 @@ export class WslVcCompiler extends Win32VcCompiler { options.env = Object.assign({}, options.env); let old_env = options.env['WSLENV']; - if (!old_env) { - old_env = ''; - } else { + if (old_env) { old_env = ':' + old_env; + } else { + old_env = ''; } options.env['WSLENV'] = 'INCLUDE:LIB' + old_env; diff --git a/lib/compilers/z88dk.ts b/lib/compilers/z88dk.ts index c7b0b7ecffb..b5d73dd1a7a 100644 --- a/lib/compilers/z88dk.ts +++ b/lib/compilers/z88dk.ts @@ -83,10 +83,10 @@ export class z88dkCompiler extends BaseCompiler { } protected override optionsForFilter(filters: ParseFiltersAndOutputOptions, outputFilename: string): string[] { - if (!filters.binary) { - return ['-S']; - } else { + if (filters.binary) { return ['-o', outputFilename + '.s', '-create-app']; + } else { + return ['-S']; } } @@ -121,15 +121,15 @@ export class z88dkCompiler extends BaseCompiler { outputFilename = this.getObjdumpOutputFilename(outputFilename); // sometimes (with +z80 for example) the .bin file is written and the .s file is empty - if (!(await utils.fileExists(outputFilename + '.bin'))) { - if (!(await utils.fileExists(outputFilename + '.s'))) { + if (await utils.fileExists(outputFilename + '.bin')) { + outputFilename += '.bin'; + } else { + if (await utils.fileExists(outputFilename + '.s')) { + outputFilename += '.s'; + } else { result.asm = ''; return result; - } else { - outputFilename += '.s'; } - } else { - outputFilename += '.bin'; } const args = [outputFilename]; @@ -149,12 +149,12 @@ export class z88dkCompiler extends BaseCompiler { }; const objResult = await this.exec(this.compiler.objdumper, args, execOptions); - if (objResult.code !== 0) { - logger.error(`Error executing objdump ${this.compiler.objdumper}`, objResult); - result.asm = ``; - } else { + if (objResult.code === 0) { result.objdumpTime = objResult.execTime; result.asm = this.postProcessObjdumpOutput(objResult.stdout); + } else { + logger.error(`Error executing objdump ${this.compiler.objdumper}`, objResult); + result.asm = ``; } } diff --git a/lib/compilers/zig.ts b/lib/compilers/zig.ts index eed8a4bced2..4862e8c87f4 100644 --- a/lib/compilers/zig.ts +++ b/lib/compilers/zig.ts @@ -120,10 +120,10 @@ export class ZigCompiler extends BaseCompiler { const outputDir = path.dirname(outputFilename); options.push('--cache-dir', outputDir, '--name', name); - if (!filters.binary) { - options.push('-fno-emit-bin', '-femit-asm=' + desiredName); - } else { + if (filters.binary) { options.push('-femit-bin=' + desiredName); + } else { + options.push('-fno-emit-bin', '-femit-asm=' + desiredName); } return options; } diff --git a/lib/demangler/pascal.js b/lib/demangler/pascal.js index 7c6eba4ffc8..b3d039a3959 100644 --- a/lib/demangler/pascal.js +++ b/lib/demangler/pascal.js @@ -149,11 +149,11 @@ export class PascalDemangler extends BaseDemangler { unitname = 'OUTPUT'; idx = text.indexOf('_$__'); - if (idx !== -1) { + if (idx === -1) { + signature = text.substr(6); + } else { classname = text.substr(7, idx - 7); signature = text.substr(idx + 3); - } else { - signature = text.substr(6); } } } @@ -180,8 +180,11 @@ export class PascalDemangler extends BaseDemangler { } if (paramtype !== '') { - if (params !== '') params = params + ',' + paramtype; - else params = paramtype; + if (params === '') { + params = paramtype; + } else { + params = params + ',' + paramtype; + } } } diff --git a/lib/demangler/win32-llvm.js b/lib/demangler/win32-llvm.js index f8a5810c75d..2cc1e4d44c8 100644 --- a/lib/demangler/win32-llvm.js +++ b/lib/demangler/win32-llvm.js @@ -42,7 +42,7 @@ export class LLVMWin32Demangler extends Win32Demangler { execOptions.input = stdin; const output = await this.compiler.exec(this.demanglerExe, args, execOptions); const oArray = utils.splitLines(output.stdout); - const outputArray = oArray.filter(n => n); + const outputArray = oArray.filter(Boolean); // llvm-undname just output: // mangledName diff --git a/lib/demangler/win32.js b/lib/demangler/win32.js index 78004c7d4ab..a753c5e8ae4 100644 --- a/lib/demangler/win32.js +++ b/lib/demangler/win32.js @@ -102,14 +102,14 @@ export class Win32Demangler extends CppDemangler { const decoratedName = tmp[1]; ++i; tmp = outputArray[i].match(/^is :- "(.*)"/); - if (!tmp) { - logger.error(`Broken undname: ${outputArray[i - 1]}, ${outputArray[i]}`); - } else { + if (tmp) { if (this.hasQuotesAroundDecoratedLabels) { translations[`"${decoratedName}"`] = tmp[1]; } else { translations[decoratedName] = tmp[1]; } + } else { + logger.error(`Broken undname: ${outputArray[i - 1]}, ${outputArray[i]}`); } } } diff --git a/lib/exec.ts b/lib/exec.ts index 1f1ad5cf94b..de35af82979 100644 --- a/lib/exec.ts +++ b/lib/exec.ts @@ -76,11 +76,8 @@ export function executeDirect( let okToCache = true; let timedOut = false; - const cwd = options.customCwd - ? options.customCwd - : command.startsWith('/mnt') && process.env.wsl - ? process.env.winTmp - : process.env.tmpDir; + const cwd = + options.customCwd || (command.startsWith('/mnt') && process.env.wsl ? process.env.winTmp : process.env.tmpDir); logger.debug('Execution', {type: 'executing', command: command, args: args, env: env, cwd: cwd}); const startTime = process.hrtime.bigint(); diff --git a/lib/handlers/assembly-documentation.ts b/lib/handlers/assembly-documentation.ts index cc210f106db..1bb980f4863 100644 --- a/lib/handlers/assembly-documentation.ts +++ b/lib/handlers/assembly-documentation.ts @@ -44,15 +44,18 @@ const onDocumentationProviderRequest = ( // Accept either JSON or Plaintext Content-Type const requestedContentType = request.accepts(['text', 'json']); switch (requestedContentType) { - case 'text': + case 'text': { response.send(information.html); break; - case 'json': + } + case 'json': { response.send(information); break; - default: + } + default: { response.status(406).send({error: 'Not Acceptable'}); break; + } } }; diff --git a/lib/handlers/compile.ts b/lib/handlers/compile.ts index 9577f6af15b..35b7ad31783 100644 --- a/lib/handlers/compile.ts +++ b/lib/handlers/compile.ts @@ -187,7 +187,9 @@ export class CompileHandler { // has changed since the last time. try { let modificationTime; - if (!isPrediscovered) { + if (isPrediscovered) { + modificationTime = compiler.mtime; + } else { const res = await fs.stat(compiler.exe); modificationTime = res.mtime; const cached = this.findCompiler(compiler.lang, compiler.id); @@ -195,8 +197,6 @@ export class CompileHandler { logger.debug(`${compiler.id} is unchanged`); return cached; } - } else { - modificationTime = compiler.mtime; } const compilerObj = new compilerClass(compiler, this.compilerEnv); return compilerObj.initialise(modificationTime, this.clientOptions, isPrediscovered); @@ -371,9 +371,9 @@ export class CompileHandler { backendOptions.skipPopArgs = query.skipPopArgs === 'true'; } const executionParameters: ExecutionParams = { - args: !Array.isArray(execReqParams.args) - ? utils.splitArguments(execReqParams.args) - : execReqParams.args || '', + args: Array.isArray(execReqParams.args) + ? execReqParams.args || '' + : utils.splitArguments(execReqParams.args), stdin: execReqParams.stdin || '', }; @@ -553,7 +553,9 @@ export class CompileHandler { } }, error => { - if (typeof error !== 'string') { + if (typeof error === 'string') { + logger.error('Error during compilation: ', {error}); + } else { if (error.stack) { logger.error('Error during compilation: ', error); Sentry.captureException(error); @@ -570,8 +572,6 @@ export class CompileHandler { } error = `Internal Compiler Explorer error: ${error.stack || error}`; - } else { - logger.error('Error during compilation: ', {error}); } res.end(JSON.stringify({code: -1, stdout: [], stderr: [{text: error}]})); }, diff --git a/lib/handlers/formatting.js b/lib/handlers/formatting.js index 5470c10a691..4c0a5fe4555 100644 --- a/lib/handlers/formatting.js +++ b/lib/handlers/formatting.js @@ -97,8 +97,8 @@ export class FormattingHandler { try { // Perform the actual formatting const result = await formatter.format(req.body.source, { - useSpaces: req.body.useSpaces !== undefined ? req.body.useSpaces : true, - tabWidth: req.body.tabWidth !== undefined ? req.body.tabWidth : 4, + useSpaces: req.body.useSpaces === undefined ? true : req.body.useSpaces, + tabWidth: req.body.tabWidth === undefined ? 4 : req.body.tabWidth, baseStyle: req.body.base, }); res.send({ diff --git a/lib/handlers/noscript.js b/lib/handlers/noscript.js index 6daaef7d009..48a95ccb8a0 100644 --- a/lib/handlers/noscript.js +++ b/lib/handlers/noscript.js @@ -160,7 +160,7 @@ export class NoScriptHandler { mobileViewer: isMobileViewer(req), wantedLanguage: wantedLanguage, clientstate: state, - storedStateId: req.params.id ? req.params.id : false, + storedStateId: req.params.id || false, }, req.query, ), diff --git a/lib/handlers/route-api.js b/lib/handlers/route-api.js index 01d3dd74398..71fc3173cb3 100644 --- a/lib/handlers/route-api.js +++ b/lib/handlers/route-api.js @@ -141,7 +141,7 @@ export class RouteAPI { session.source = req.query.code; const compiler = session.findOrCreateCompiler(1); compiler.id = req.query.compiler; - compiler.options = req.query.compiler_flags ? req.query.compiler_flags : ''; + compiler.options = req.query.compiler_flags || ''; this.renderClientState(state, undefined, req, res); } @@ -223,9 +223,9 @@ export class RouteAPI { const tree = clientstate.trees[0]; lang = this.apiHandler.languages[tree.compilerLanguageId]; - if (!tree.isCMakeProject) { + if (tree.isCMakeProject) { const firstSource = tree.files.find(file => { - return file.filename.startsWith('example.'); + return file.filename.startsWith('CMakeLists.txt'); }); if (firstSource) { @@ -233,7 +233,7 @@ export class RouteAPI { } } else { const firstSource = tree.files.find(file => { - return file.filename.startsWith('CMakeLists.txt'); + return file.filename.startsWith('example.'); }); if (firstSource) { diff --git a/lib/handlers/site-templates.ts b/lib/handlers/site-templates.ts index d40f25d8124..50ce6fd0320 100644 --- a/lib/handlers/site-templates.ts +++ b/lib/handlers/site-templates.ts @@ -51,7 +51,7 @@ function partition(array: T[], filter: (value: T) => boolean): [T[], T[]] { export function loadSiteTemplates(configDir: string) { const [meta, templates] = partition( fs - .readFileSync(configDir + '/site-templates.conf', 'utf-8') + .readFileSync(configDir + '/site-templates.conf', 'utf8') .split('\n') .filter(l => l !== '') .map(splitProperty) diff --git a/lib/keyed-type.ts b/lib/keyed-type.ts index c0bf816d9c8..112d6dfaf73 100644 --- a/lib/keyed-type.ts +++ b/lib/keyed-type.ts @@ -40,12 +40,12 @@ function makeKeyMap(typeName: string, objects: Record !!res); this.supportsExecutePerLanguage = this.compilerProps(languages, 'supportsExecute', true, res => !!res); - this.supportsExecute = Object.values(this.supportsExecutePerLanguage).some(value => value); + this.supportsExecute = Object.values(this.supportsExecutePerLanguage).some(Boolean); this.supportsLibraryCodeFilterPerLanguage = this.compilerProps(languages, 'supportsLibraryCodeFilter', false); - this.supportsLibraryCodeFilter = Object.values(this.supportsLibraryCodeFilterPerLanguage).some(value => value); + this.supportsLibraryCodeFilter = Object.values(this.supportsLibraryCodeFilterPerLanguage).some(Boolean); const libs = this.parseLibraries(this.compilerProps(languages, 'libs')); const tools = this.parseTools(this.compilerProps(languages, 'tools')); diff --git a/lib/parsers/asm-parser-ewavr.js b/lib/parsers/asm-parser-ewavr.js index c65ed3408be..8ba2bca4d08 100644 --- a/lib/parsers/asm-parser-ewavr.js +++ b/lib/parsers/asm-parser-ewavr.js @@ -78,19 +78,19 @@ export class AsmEWAVRParser extends AsmParser { // NOTE: EWAVR assembly seems to be closest to visual studio const getFilenameFromComment = line => { const matches = line.match(this.filenameComment); - if (!matches) { - return null; - } else { + if (matches) { return matches[3]; + } else { + return null; } }; const getLineNumberFromComment = line => { const matches = line.match(this.lineNumberComment); - if (!matches) { - return null; - } else { + if (matches) { return parseInt(matches[1]); + } else { + return null; } }; @@ -125,8 +125,8 @@ export class AsmEWAVRParser extends AsmParser { const createsData = line.match(this.dataStatement); if ((hasopc || createsData) && (currentFile || currentLine)) { return { - file: currentFile ? currentFile : null, - line: currentLine ? currentLine : null, + file: currentFile || null, + line: currentLine || null, }; } @@ -150,10 +150,10 @@ export class AsmEWAVRParser extends AsmParser { const checkRequiresStatement = line => { const matches = line.match(this.requireStatement); if (matches && currentLabel != null) { - if (currentLabel.require != null) { - currentLabel.require.push(matches[1]); - } else { + if (currentLabel.require == null) { currentLabel.require = [matches[1]]; + } else { + currentLabel.require.push(matches[1]); } } }; @@ -184,17 +184,7 @@ export class AsmEWAVRParser extends AsmParser { } let tmp = getFilenameFromComment(line); - if (tmp !== null) { - // if the file is the "main file", give it the file `null` - if (stdInLooking.test(tmp)) { - currentFile = null; - } else { - currentFile = tmp; - } - if (currentLabel != null && currentLabel.file === undefined) { - currentLabel.file = currentFile; - } - } else { + if (tmp === null) { tmp = getLineNumberFromComment(line); if (tmp !== null) { if (currentFile === undefined) { @@ -205,6 +195,16 @@ export class AsmEWAVRParser extends AsmParser { } currentLine = tmp; } + } else { + // if the file is the "main file", give it the file `null` + if (stdInLooking.test(tmp)) { + currentFile = null; + } else { + currentFile = tmp; + } + if (currentLabel != null && currentLabel.file === undefined) { + currentLabel.file = currentFile; + } } checkBeginLabel(line); diff --git a/lib/parsers/asm-parser-vc.js b/lib/parsers/asm-parser-vc.js index 874d148869e..0fb04f14c15 100644 --- a/lib/parsers/asm-parser-vc.js +++ b/lib/parsers/asm-parser-vc.js @@ -93,18 +93,18 @@ export class VcAsmParser extends AsmParser { const getFilenameFromComment = line => { const matches = line.match(this.filenameComment); - if (!matches) { - return null; - } else { + if (matches) { return matches[1]; + } else { + return null; } }; const getLineNumberFromComment = line => { const matches = line.match(this.lineNumberComment); - if (!matches) { - return null; - } else { + if (matches) { return parseInt(matches[1]); + } else { + return null; } }; @@ -138,8 +138,8 @@ export class VcAsmParser extends AsmParser { const createSourceFor = (hasopc, currentFile, currentLine) => { if (hasopc && (currentFile || currentLine)) { return { - file: currentFile ? currentFile : null, - line: currentLine ? currentLine : null, + file: currentFile || null, + line: currentLine || null, }; } @@ -201,7 +201,18 @@ export class VcAsmParser extends AsmParser { } let tmp = getFilenameFromComment(line); - if (tmp !== null) { + if (tmp === null) { + tmp = getLineNumberFromComment(line); + if (tmp !== null) { + if (currentFile === undefined) { + logger.error('Somehow, we have a line number comment without a file comment: %s', line); + } + if (currentFunction.initialLine === undefined) { + currentFunction.initialLine = tmp; + } + currentLine = tmp; + } + } else { if (currentFunction === null) { logger.error('We have a file comment outside of a function: %s', line); } @@ -214,17 +225,6 @@ export class VcAsmParser extends AsmParser { if (currentFunction.file === undefined) { currentFunction.file = currentFile; } - } else { - tmp = getLineNumberFromComment(line); - if (tmp !== null) { - if (currentFile === undefined) { - logger.error('Somehow, we have a line number comment without a file comment: %s', line); - } - if (currentFunction.initialLine === undefined) { - currentFunction.initialLine = tmp; - } - currentLine = tmp; - } } checkBeginFunction(line); diff --git a/lib/parsers/asm-parser-vc6.js b/lib/parsers/asm-parser-vc6.js index 01b6883c6bd..0bacf61b221 100644 --- a/lib/parsers/asm-parser-vc6.js +++ b/lib/parsers/asm-parser-vc6.js @@ -95,18 +95,18 @@ export class Vc6AsmParser extends AsmParser { const getFilenameFromComment = line => { const matches = line.match(this.filenameComment); - if (!matches) { - return null; - } else { + if (matches) { return matches[1]; + } else { + return null; } }; const getLineNumberFromComment = line => { const matches = line.match(this.lineNumberComment); - if (!matches) { - return null; - } else { + if (matches) { return parseInt(matches[1]); + } else { + return null; } }; @@ -140,8 +140,8 @@ export class Vc6AsmParser extends AsmParser { const createSourceFor = (hasopc, currentFile, currentLine) => { if (hasopc && (currentFile || currentLine)) { return { - file: currentFile ? currentFile : null, - line: currentLine ? currentLine : null, + file: currentFile || null, + line: currentLine || null, }; } @@ -203,7 +203,18 @@ export class Vc6AsmParser extends AsmParser { } let tmp = getFilenameFromComment(line); - if (tmp !== null) { + if (tmp === null) { + tmp = getLineNumberFromComment(line); + if (tmp !== null) { + if (currentFile === undefined) { + logger.error('Somehow, we have a line number comment without a file comment: %s', line); + } + if (currentFunction.initialLine === undefined) { + currentFunction.initialLine = tmp; + } + currentLine = tmp; + } + } else { if (currentFunction === null) { logger.error('We have a file comment outside of a function: %s', line); } @@ -216,17 +227,6 @@ export class Vc6AsmParser extends AsmParser { if (currentFunction.file === undefined) { currentFunction.file = currentFile; } - } else { - tmp = getLineNumberFromComment(line); - if (tmp !== null) { - if (currentFile === undefined) { - logger.error('Somehow, we have a line number comment without a file comment: %s', line); - } - if (currentFunction.initialLine === undefined) { - currentFunction.initialLine = tmp; - } - currentLine = tmp; - } } checkBeginFunction(line); diff --git a/lib/parsers/asm-parser.ts b/lib/parsers/asm-parser.ts index 73e12e10110..44c1b7af62a 100644 --- a/lib/parsers/asm-parser.ts +++ b/lib/parsers/asm-parser.ts @@ -373,7 +373,7 @@ export class AsmParser extends AsmRegex implements IAsmParser { }; } else { source = { - file: !this.stdInLooking.test(file) ? file : null, + file: this.stdInLooking.test(file) ? null : file, line: sourceLine, }; } @@ -406,7 +406,7 @@ export class AsmParser extends AsmRegex implements IAsmParser { }; } else { source = { - file: !this.stdInLooking.test(file) ? file : null, + file: this.stdInLooking.test(file) ? null : file, line: sourceLine, }; } @@ -424,14 +424,16 @@ export class AsmParser extends AsmRegex implements IAsmParser { if (!match) return; // cf http://www.math.utah.edu/docs/info/stabs_11.html#SEC48 switch (parseInt(match[1])) { - case 68: + case 68: { source = {file: null, line: parseInt(match[2])}; break; + } case 132: - case 100: + case 100: { source = null; prevLabel = ''; break; + } } }; @@ -448,7 +450,7 @@ export class AsmParser extends AsmRegex implements IAsmParser { }; } else { source = { - file: !this.stdInLooking.test(file) ? file : null, + file: this.stdInLooking.test(file) ? null : file, line: sourceLine, }; } @@ -566,7 +568,7 @@ export class AsmParser extends AsmRegex implements IAsmParser { asm.push({ text: text, - source: this.hasOpcode(line, inNvccCode) ? (source ? source : null) : null, + source: this.hasOpcode(line, inNvccCode) ? source || null : null, labels: labelsInLine, }); } diff --git a/lib/parsers/asm-raw.js b/lib/parsers/asm-raw.js index eefd6dc2b10..4b65d2d1d15 100644 --- a/lib/parsers/asm-raw.js +++ b/lib/parsers/asm-raw.js @@ -53,9 +53,7 @@ export class AsmRaw extends AsmRegex { match = line.match(asmOpcodeRe); if (match) { const address = parseInt(match[1], 16); - const opcodes = match[2].split(' ').filter(function (x) { - return x; - }); + const opcodes = match[2].split(' ').filter(Boolean); const disassembly = ' ' + AsmRegex.filterAsmLine(match[4], filters); let links = null; const destMatch = line.match(destRe); diff --git a/lib/pe32-support.js b/lib/pe32-support.js index 47bc5e03c35..f0cec5c7eea 100644 --- a/lib/pe32-support.js +++ b/lib/pe32-support.js @@ -247,26 +247,26 @@ export class PELabelReconstructor { let labelLine = false; const isReferenced = this.addressesToLabel.indexOf(addressStr); - if (isReferenced !== -1) { - labelLine = matches[1] + ' :'; - + if (isReferenced === -1) { + // we might have missed the reference to this address, + // but if it's listed as a symbol, we should still label it. + // todo: the call might be in <.itext>, should we include that part of the assembly? namedAddr = this.mapFileReader.getSymbolAt(false, address); if (namedAddr) { labelLine = matches[1] + ' <' + namedAddr.displayName + '>:'; - } - if (!this.dontLabelUnmappedAddresses || namedAddr) { this.asmLines.splice(lineIdx, 0, labelLine); lineIdx++; } } else { - // we might have missed the reference to this address, - // but if it's listed as a symbol, we should still label it. - // todo: the call might be in <.itext>, should we include that part of the assembly? + labelLine = matches[1] + ' :'; + namedAddr = this.mapFileReader.getSymbolAt(false, address); if (namedAddr) { labelLine = matches[1] + ' <' + namedAddr.displayName + '>:'; + } + if (!this.dontLabelUnmappedAddresses || namedAddr) { this.asmLines.splice(lineIdx, 0, labelLine); lineIdx++; } diff --git a/lib/properties.ts b/lib/properties.ts index 878d979e029..4fce74cda1b 100644 --- a/lib/properties.ts +++ b/lib/properties.ts @@ -105,7 +105,7 @@ export function initialize(directory, hier) { const baseName = file.replace(endsWith, ''); file = path.join(directory, file); debug('Reading config from ' + file); - properties[baseName] = parseProperties(fs.readFileSync(file, 'utf-8'), file); + properties[baseName] = parseProperties(fs.readFileSync(file, 'utf8'), file); } logger.debug('props.properties = ', properties); } @@ -256,18 +256,18 @@ export class CompilerProps { if (_.isEmpty(langs)) { return map_fn(this.ceProps(key, defaultValue)); } - if (!_.isString(langs)) { - return _.chain(langs) - .map(lang => [lang.id, map_fn(this.$getInternal(lang.id, key, defaultValue), lang)]) - .object() - .value(); - } else { + if (_.isString(langs)) { if (this.propsByLangId[langs]) { return map_fn(this.$getInternal(langs, key, defaultValue), this.languages[langs]); } else { logger.error(`Tried to pass ${langs} as a language ID`); return map_fn(defaultValue); } + } else { + return _.chain(langs) + .map(lang => [lang.id, map_fn(this.$getInternal(lang.id, key, defaultValue), lang)]) + .object() + .value(); } } } diff --git a/lib/storage/base.ts b/lib/storage/base.ts index 0eefcc6f44e..8614ed8e86c 100644 --- a/lib/storage/base.ts +++ b/lib/storage/base.ts @@ -106,7 +106,9 @@ export abstract class StorageBase { `Unique subhash '${result.uniqueSubHash}' ` + `(${result.alreadyPresent ? 'was already present' : 'newly-created'})`, ); - if (!result.alreadyPresent) { + if (result.alreadyPresent) { + return result; + } else { const storedObject = { prefix: result.prefix, uniqueSubHash: result.uniqueSubHash, @@ -115,8 +117,6 @@ export abstract class StorageBase { }; return this.storeItem(storedObject, req); - } else { - return result; } }) .then(result => { diff --git a/lib/symbol-store.ts b/lib/symbol-store.ts index 3d3d90c803d..54ac6c5fa68 100644 --- a/lib/symbol-store.ts +++ b/lib/symbol-store.ts @@ -39,10 +39,10 @@ export class SymbolStore { } add(symbol: string, demangled?: string) { - if (demangled !== undefined) { - this.uniqueSymbols[symbol] = demangled; - } else { + if (demangled === undefined) { this.uniqueSymbols[symbol] = symbol; + } else { + this.uniqueSymbols[symbol] = demangled; } this.isSorted = false; diff --git a/lib/tooling/base-tool.ts b/lib/tooling/base-tool.ts index 28c471590e6..c1f7ce5672a 100755 --- a/lib/tooling/base-tool.ts +++ b/lib/tooling/base-tool.ts @@ -150,7 +150,7 @@ export class BaseTool implements ITool { if (inputFilepath) execOptions.customCwd = path.dirname(inputFilepath); execOptions.input = stdin; - args = args ? args : []; + args = args || []; if (this.addOptionsToToolArgs) args = this.tool.options.concat(args); if (inputFilepath) args.push(inputFilepath); diff --git a/lib/tooling/bbcdiskify-tool.js b/lib/tooling/bbcdiskify-tool.js index 7ba9f16b95c..1fe2cbee632 100644 --- a/lib/tooling/bbcdiskify-tool.js +++ b/lib/tooling/bbcdiskify-tool.js @@ -67,13 +67,13 @@ export class BBCDiskifyTool extends BaseTool { } async runTool(compilationInfo, inputFilename) { - if (!compilationInfo.filters.binary) { - await this.assembleCode(compilationInfo); + if (compilationInfo.filters.binary) { await this.createBlankSSD(compilationInfo); + await fs.copyFile(compilationInfo.executableFilename, '$.!Boot'); await this.writeSourceFiles(compilationInfo); } else { + await this.assembleCode(compilationInfo); await this.createBlankSSD(compilationInfo); - await fs.copyFile(compilationInfo.executableFilename, '$.!Boot'); await this.writeSourceFiles(compilationInfo); } diff --git a/lib/tooling/compiler-dropin-tool.ts b/lib/tooling/compiler-dropin-tool.ts index 817c6b620ef..d03c7a44b93 100644 --- a/lib/tooling/compiler-dropin-tool.ts +++ b/lib/tooling/compiler-dropin-tool.ts @@ -81,11 +81,10 @@ export class CompilerDropinTool extends BaseTool { const manualCompileFlags = compilationInfo.options.filter(option => !argsToFilterOut.has(option)); compileFlags = compileFlags.concat(manualCompileFlags); - const toolOptions = this.tool.options ? this.tool.options : []; + const toolOptions = this.tool.options || []; compileFlags = compileFlags.concat(toolOptions); compileFlags = compileFlags.concat(libOptions); - args ? args : []; - compileFlags = compileFlags.concat(args); + compileFlags = compileFlags.concat(args || []); const pathFilteredFlags: (string | false)[] = _.map(compileFlags, option => { if (option && option.length > 1) { diff --git a/lib/tooling/microsoft-analysis-tool.js b/lib/tooling/microsoft-analysis-tool.js index 4aa279bba10..f5b083aa98c 100644 --- a/lib/tooling/microsoft-analysis-tool.js +++ b/lib/tooling/microsoft-analysis-tool.js @@ -45,7 +45,7 @@ export class MicrosoftAnalysisTool extends BaseTool { if (inputFilepath) execOptions.customCwd = path.dirname(inputFilepath); execOptions.input = stdin; - args = args ? args : []; + args = args || []; if (this.addOptionsToToolArgs) args = this.tool.options.concat(args); if (inputFilepath) args.push(inputFilepath); diff --git a/lib/utils.ts b/lib/utils.ts index bb731170065..c91e56bbb46 100644 --- a/lib/utils.ts +++ b/lib/utils.ts @@ -290,7 +290,7 @@ export function squashHorizontalWhitespace(line: string, atStart = true): string const splat = line.split(/\s+/); if (splat[0] === '' && atStart) { // An indented line: preserve a two-space indent (max) - const intent = line[1] !== ' ' ? ' ' : ' '; + const intent = line[1] === ' ' ? ' ' : ' '; return intent + splat.slice(1).join(' '); } return splat.join(' '); @@ -371,10 +371,10 @@ export function base32Encode(buffer: Buffer): string { // Splits a : separated list into its own array, or to default if input is undefined export function splitIntoArray(input?: string, defaultArray: string[] = []): string[] { - if (input !== undefined) { - return input.split(':'); - } else { + if (input === undefined) { return defaultArray; + } else { + return input.split(':'); } } diff --git a/package-lock.json b/package-lock.json index 4535f25936f..80e1ca1c911 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,8 +11,8 @@ "dependencies": { "@flatten-js/interval-tree": "^1.0.18", "@fortawesome/fontawesome-free": "^6.2.1", - "@sentry/browser": "^6.16.1", - "@sentry/node": "^6.16.1", + "@sentry/browser": "^7.28.1", + "@sentry/node": "^7.28.1", "@types/file-saver": "^2.0.5", "@types/request": "^2.48.8", "aws-sdk": "^2.1048.0", @@ -65,7 +65,7 @@ "serve-favicon": "^2.4.5", "shell-quote": "^1.7.3", "systemd-socket": "0.0.0", - "tar-stream": "^2.2.0", + "tar-stream": "^3.0.0", "temp": "^0.9.4", "tom-select": "2.0.3", "tree-kill": "^1.2.2", @@ -75,13 +75,13 @@ "underscore": "^1.13.2", "url-join": "^4.0.1", "whatwg-fetch": "^3.6.2", - "which": "^2.0.2", + "which": "^3.0.0", "winston": "^3.3.3", "winston-loki": "^6.0.3", "winston-papertrail": "^1.0.5", "winston-transport": "^4.4.1", "yaml": "^1.10.2", - "yamljs": "^0.2.9" + "yamljs": "^0.3.0" }, "devDependencies": { "@babel/preset-typescript": "^7.16.5", @@ -108,18 +108,18 @@ "css-loader": "^6.5.1", "css-minimizer-webpack-plugin": "^3.3.1", "cypress": "^9.2.0", - "deep-equal-in-any-order": "^1.1.15", + "deep-equal-in-any-order": "^2.0.1", "eslint": "^8.5.0", "eslint-config-prettier": "^8.3.0", "eslint-formatter-github": "^1.0.11", - "eslint-import-resolver-typescript": "^2.5.0", + "eslint-import-resolver-typescript": "^3.5.2", "eslint-plugin-import": "^2.25.3", - "eslint-plugin-jsdoc": "^37.4.0", + "eslint-plugin-jsdoc": "^39.6.4", "eslint-plugin-node": "^11.1.0", "eslint-plugin-promise": "^6.0.0", "eslint-plugin-requirejs": "^4.0.1", - "eslint-plugin-sonarjs": "^0.11.0", - "eslint-plugin-unicorn": "^40.1.0", + "eslint-plugin-sonarjs": "^0.17.0", + "eslint-plugin-unicorn": "^45.0.2", "eslint-plugin-unused-imports": "^2.0.0", "file-loader": "^6.2.0", "lint-staged": "^13.0.3", @@ -141,9 +141,9 @@ "url-loader": "^4.1.1", "webpack": "^5.75.0", "webpack-cli": "^5.0.1", - "webpack-dev-middleware": "^5.3.0", + "webpack-dev-middleware": "^6.0.1", "webpack-dev-server": "^4.11.1", - "webpack-manifest-plugin": "^4.0.2" + "webpack-manifest-plugin": "^5.0.0" }, "engines": { "node": ">=16" @@ -725,17 +725,32 @@ } }, "node_modules/@es-joy/jsdoccomment": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.20.1.tgz", - "integrity": "sha512-oeJK41dcdqkvdZy/HctKklJNkt/jh+av3PZARrZEl+fs/8HaHeeYoAvEwOV0u5I6bArTF17JEsTZMY359e/nfQ==", + "version": "0.36.1", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.36.1.tgz", + "integrity": "sha512-922xqFsTpHs6D0BUiG4toiyPOMc8/jafnWKxz1KWgS4XzKPy2qXf1Pe6UFuNSCQqt6tOuhAWXBNuuyUhJmw9Vg==", "dev": true, "dependencies": { - "comment-parser": "1.3.0", + "comment-parser": "1.3.1", "esquery": "^1.4.0", - "jsdoc-type-pratt-parser": "~2.2.3" + "jsdoc-type-pratt-parser": "~3.1.0" }, "engines": { - "node": "^12 || ^14 || ^16 || ^17" + "node": "^14 || ^16 || ^17 || ^18 || ^19" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.1.2.tgz", + "integrity": "sha512-7qELuQWWjVDdVsFQ5+beUl+KPczrEDA7S3zM4QUd/bJl7oXgsmpXaEVqrRTnOBqenOV4rWf2kVZk2Ot085zPWA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/@eslint/eslintrc": { @@ -1422,6 +1437,26 @@ "resolved": "https://registry.npmjs.org/@orchidjs/sifter/-/sifter-0.9.3.tgz", "integrity": "sha512-9XGiAJcWvEektxjR9X+dYeG+kg8GdojM6ZCmrnuDaWoVew+GAKxiesvYxyY+RLUgWTv8B1qpLIVYlswxKcW5XQ==" }, + "node_modules/@pkgr/utils": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.3.1.tgz", + "integrity": "sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "is-glob": "^4.0.3", + "open": "^8.4.0", + "picocolors": "^1.0.0", + "tiny-glob": "^0.2.9", + "tslib": "^2.4.0" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, "node_modules/@popperjs/core": { "version": "2.11.6", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz", @@ -1487,17 +1522,18 @@ "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" }, "node_modules/@sentry/browser": { - "version": "6.19.7", - "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-6.19.7.tgz", - "integrity": "sha512-oDbklp4O3MtAM4mtuwyZLrgO1qDVYIujzNJQzXmi9YzymJCuzMLSRDvhY83NNDCRxf0pds4DShgYeZdbSyKraA==", - "dependencies": { - "@sentry/core": "6.19.7", - "@sentry/types": "6.19.7", - "@sentry/utils": "6.19.7", + "version": "7.28.1", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.28.1.tgz", + "integrity": "sha512-N8j93IcrWKWorfJ5D+RSKVAvcR4S5tIcZ/HvFPMrQWnfVa/jtJcrKThdjZYteA0wjmPiy8/D3KA8nB91yulBPA==", + "dependencies": { + "@sentry/core": "7.28.1", + "@sentry/replay": "7.28.1", + "@sentry/types": "7.28.1", + "@sentry/utils": "7.28.1", "tslib": "^1.9.3" }, "engines": { - "node": ">=6" + "node": ">=8" } }, "node_modules/@sentry/browser/node_modules/tslib": { @@ -1506,18 +1542,16 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@sentry/core": { - "version": "6.19.7", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-6.19.7.tgz", - "integrity": "sha512-tOfZ/umqB2AcHPGbIrsFLcvApdTm9ggpi/kQZFkej7kMphjT+SGBiQfYtjyg9jcRW+ilAR4JXC9BGKsdEQ+8Vw==", - "dependencies": { - "@sentry/hub": "6.19.7", - "@sentry/minimal": "6.19.7", - "@sentry/types": "6.19.7", - "@sentry/utils": "6.19.7", + "version": "7.28.1", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.28.1.tgz", + "integrity": "sha512-7wvnuvn/mrAfcugWoCG/3pqDIrUgH5t+HisMJMGw0h9Tc33KqrmqMDCQVvjlrr2pWrw/vuUCFdm8CbUHJ832oQ==", + "dependencies": { + "@sentry/types": "7.28.1", + "@sentry/utils": "7.28.1", "tslib": "^1.9.3" }, "engines": { - "node": ">=6" + "node": ">=8" } }, "node_modules/@sentry/core/node_modules/tslib": { @@ -1525,83 +1559,62 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, - "node_modules/@sentry/hub": { - "version": "6.19.7", - "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-6.19.7.tgz", - "integrity": "sha512-y3OtbYFAqKHCWezF0EGGr5lcyI2KbaXW2Ik7Xp8Mu9TxbSTuwTe4rTntwg8ngPjUQU3SUHzgjqVB8qjiGqFXCA==", + "node_modules/@sentry/node": { + "version": "7.28.1", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-7.28.1.tgz", + "integrity": "sha512-n7AbpJqZJjWPpKNGc55mP7AdQ+XSomS9MZJuZ+Xt2AU52aVwGPI4z9aHUJFSDGaMHHiu/toyPnoUES+XZf6/hw==", "dependencies": { - "@sentry/types": "6.19.7", - "@sentry/utils": "6.19.7", + "@sentry/core": "7.28.1", + "@sentry/types": "7.28.1", + "@sentry/utils": "7.28.1", + "cookie": "^0.4.1", + "https-proxy-agent": "^5.0.0", + "lru_map": "^0.3.3", "tslib": "^1.9.3" }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/@sentry/hub/node_modules/tslib": { + "node_modules/@sentry/node/node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, - "node_modules/@sentry/minimal": { - "version": "6.19.7", - "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-6.19.7.tgz", - "integrity": "sha512-wcYmSJOdvk6VAPx8IcmZgN08XTXRwRtB1aOLZm+MVHjIZIhHoBGZJYTVQS/BWjldsamj2cX3YGbGXNunaCfYJQ==", + "node_modules/@sentry/replay": { + "version": "7.28.1", + "resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-7.28.1.tgz", + "integrity": "sha512-Os0PzMjKlwtHwzTU0kfVzGzsi4Vaj3g2arCl4Qnr3b6kYTb9WOFZo/n/v56ss7Z+nZG3K8W5PisoD4MRsRJRig==", "dependencies": { - "@sentry/hub": "6.19.7", - "@sentry/types": "6.19.7", - "tslib": "^1.9.3" + "@sentry/core": "7.28.1", + "@sentry/types": "7.28.1", + "@sentry/utils": "7.28.1" }, "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/minimal/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@sentry/node": { - "version": "6.19.7", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-6.19.7.tgz", - "integrity": "sha512-gtmRC4dAXKODMpHXKfrkfvyBL3cI8y64vEi3fDD046uqYcrWdgoQsffuBbxMAizc6Ez1ia+f0Flue6p15Qaltg==", - "dependencies": { - "@sentry/core": "6.19.7", - "@sentry/hub": "6.19.7", - "@sentry/types": "6.19.7", - "@sentry/utils": "6.19.7", - "cookie": "^0.4.1", - "https-proxy-agent": "^5.0.0", - "lru_map": "^0.3.3", - "tslib": "^1.9.3" + "node": ">=12" }, - "engines": { - "node": ">=6" + "peerDependencies": { + "@sentry/browser": ">=7.24.0" } }, - "node_modules/@sentry/node/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, "node_modules/@sentry/types": { - "version": "6.19.7", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-6.19.7.tgz", - "integrity": "sha512-jH84pDYE+hHIbVnab3Hr+ZXr1v8QABfhx39KknxqKWr2l0oEItzepV0URvbEhB446lk/S/59230dlUUIBGsXbg==", + "version": "7.28.1", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.28.1.tgz", + "integrity": "sha512-DvSplMVrVEmOzR2M161V5+B8Up3vR71xMqJOpWTzE9TqtFJRGPtqT/5OBsNJJw1+/j2ssMcnKwbEo9Q2EGeS6g==", "engines": { - "node": ">=6" + "node": ">=8" } }, "node_modules/@sentry/utils": { - "version": "6.19.7", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-6.19.7.tgz", - "integrity": "sha512-z95ECmE3i9pbWoXQrD/7PgkBAzJYR+iXtPuTkpBjDKs86O3mT+PXOT3BAn79w2wkn7/i3vOGD2xVr1uiMl26dA==", + "version": "7.28.1", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.28.1.tgz", + "integrity": "sha512-75/jzLUO9HH09iC9TslNimGbxOP3jgn89P+q7uR+rp2fJfRExHVeKJZQdK0Ij4/SmE7TJ3Uh2r154N0INZEx1g==", "dependencies": { - "@sentry/types": "6.19.7", + "@sentry/types": "7.28.1", "tslib": "^1.9.3" }, "engines": { - "node": ">=6" + "node": ">=8" } }, "node_modules/@sentry/utils/node_modules/tslib": { @@ -2405,6 +2418,17 @@ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -2998,6 +3022,11 @@ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" }, + "node_modules/b4a": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.1.tgz", + "integrity": "sha512-AsKjNhz72yxteo/0EtQEiwkMUgk/tGmycXlbG4g3Ard2/ULtNLUykGOkeK0egmN27h0xMAhb76jYccW+XTBExA==" + }, "node_modules/babel-walk": { "version": "3.0.0-canary-5", "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", @@ -3096,19 +3125,19 @@ "integrity": "sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw==" }, "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-6.0.0.tgz", + "integrity": "sha512-Ik9BVIMdcWzSOCpzDv2XpQ4rJ4oZBuk3ck6MgiOv0EopdgtohN2uSCrrLlkH1Jf0KnpZZMBA3D0bUMbCdj/jgA==", "dependencies": { - "buffer": "^5.5.0", + "buffer": "^6.0.3", "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "readable-stream": "^4.2.0" } }, "node_modules/bl/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "funding": [ { "type": "github", @@ -3125,20 +3154,48 @@ ], "dependencies": { "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "ieee754": "^1.2.1" } }, + "node_modules/bl/node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/bl/node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/bl/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.2.0.tgz", + "integrity": "sha512-gJrBHsaI3lgBoGMW/jHZsQ/o/TIWiu5ENCJG1BB7fuCKzpFM8GaS2UoBVt9NO+oI+3FcrBNbUkl3ilDe09aY4A==", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10" }, "engines": { - "node": ">= 6" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/blob-util": { @@ -3954,9 +4011,9 @@ } }, "node_modules/comment-parser": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.0.tgz", - "integrity": "sha512-hRpmWIKgzd81vn0ydoWoyPoALEOnF4wt8yKD35Ib1D6XC2siLiYaiqfGkYrunuKdsXGwpBpHU3+9r+RVw2NZfA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.1.tgz", + "integrity": "sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA==", "dev": true, "engines": { "node": ">= 12.0.0" @@ -4200,6 +4257,20 @@ "node": ">= 8" } }, + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/css-declaration-sorter": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz", @@ -4239,9 +4310,9 @@ } }, "node_modules/css-minimizer-webpack-plugin": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz", - "integrity": "sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.3.1.tgz", + "integrity": "sha512-SHA7Hu/EiF0dOwdmV2+agvqYpG+ljlUa7Dvn1AVOmSH3N8KOERoaM9lGpstz9nGsoTjANGyUXdrxl/EwdMScRg==", "dev": true, "dependencies": { "cssnano": "^5.0.6", @@ -4262,9 +4333,6 @@ "webpack": "^5.0.0" }, "peerDependenciesMeta": { - "@parcel/css": { - "optional": true - }, "clean-css": { "optional": true }, @@ -4678,9 +4746,9 @@ } }, "node_modules/deep-equal-in-any-order": { - "version": "1.1.20", - "resolved": "https://registry.npmjs.org/deep-equal-in-any-order/-/deep-equal-in-any-order-1.1.20.tgz", - "integrity": "sha512-GTpQxcQx28KvV6ChrHb4AcL5z+eFEymtoSUaWe+FEakEpZ/66jTvz52xLUym/sK4Pn1sbYLsCV5rEURDeiFl3w==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/deep-equal-in-any-order/-/deep-equal-in-any-order-2.0.1.tgz", + "integrity": "sha512-jZqLGPTq9ERpaf5T6wrSD7qPWOGyPLc9pLvdQzhcNi/hSvleVveAjikWntiQBycsSXFcwuxlaawvNhdUgju7Zg==", "dev": true, "dependencies": { "lodash.mapvalues": "^4.6.0", @@ -5501,25 +5569,61 @@ } }, "node_modules/eslint-import-resolver-typescript": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz", - "integrity": "sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==", + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.2.tgz", + "integrity": "sha512-zX4ebnnyXiykjhcBvKIf5TNvt8K7yX6bllTRZ14MiurKPjDpCAZujlszTdB8pcNXhZcOf+god4s9SjQa5GnytQ==", "dev": true, "dependencies": { "debug": "^4.3.4", - "glob": "^7.2.0", + "enhanced-resolve": "^5.10.0", + "get-tsconfig": "^4.2.0", + "globby": "^13.1.2", + "is-core-module": "^2.10.0", "is-glob": "^4.0.3", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" + "synckit": "^0.8.4" }, "engines": { - "node": ">=4" + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" }, "peerDependencies": { "eslint": "*", "eslint-plugin-import": "*" } }, + "node_modules/eslint-import-resolver-typescript/node_modules/globby": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.3.tgz", + "integrity": "sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==", + "dev": true, + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-import-resolver-typescript/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/eslint-module-utils": { "version": "2.7.4", "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", @@ -5652,22 +5756,21 @@ "dev": true }, "node_modules/eslint-plugin-jsdoc": { - "version": "37.9.7", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-37.9.7.tgz", - "integrity": "sha512-8alON8yYcStY94o0HycU2zkLKQdcS+qhhOUNQpfONHHwvI99afbmfpYuPqf6PbLz5pLZldG3Te5I0RbAiTN42g==", + "version": "39.6.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-39.6.4.tgz", + "integrity": "sha512-fskvdLCfwmPjHb6e+xNGDtGgbF8X7cDwMtVLAP2WwSf9Htrx68OAx31BESBM1FAwsN2HTQyYQq7m4aW4Q4Nlag==", "dev": true, "dependencies": { - "@es-joy/jsdoccomment": "~0.20.1", - "comment-parser": "1.3.0", - "debug": "^4.3.3", + "@es-joy/jsdoccomment": "~0.36.1", + "comment-parser": "1.3.1", + "debug": "^4.3.4", "escape-string-regexp": "^4.0.0", "esquery": "^1.4.0", - "regextras": "^0.8.0", - "semver": "^7.3.5", + "semver": "^7.3.8", "spdx-expression-parse": "^3.0.1" }, "engines": { - "node": "^12 || ^14 || ^16 || ^17" + "node": "^14 || ^16 || ^17 || ^18 || ^19" }, "peerDependencies": { "eslint": "^7.0.0 || ^8.0.0" @@ -5795,46 +5898,60 @@ } }, "node_modules/eslint-plugin-sonarjs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-sonarjs/-/eslint-plugin-sonarjs-0.11.0.tgz", - "integrity": "sha512-ei/WuZiL0wP+qx2KrxKyZs3+eDbxiGAhFSm3GKCOOAUkg+G2ny6TSXDB2j67tvyqHefi+eoQsAgGQvz+nEtIBw==", + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-sonarjs/-/eslint-plugin-sonarjs-0.17.0.tgz", + "integrity": "sha512-jtGtxI49UbJJeJj7CVRLI3+LLH+y+hkR3GOOwM7vBbci9DEFIRGCWvEd2BJScrzltZ6D6iubukTAfc9cyG7sdw==", "dev": true, "engines": { - "node": ">=12" + "node": ">=14" }, "peerDependencies": { - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0|| ^8.0.0" + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/eslint-plugin-unicorn": { - "version": "40.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-40.1.0.tgz", - "integrity": "sha512-y5doK2DF9Sr5AqKEHbHxjFllJ167nKDRU01HDcWyv4Tnmaoe9iNxMrBnaybZvWZUaE3OC5Unu0lNIevYamloig==", + "version": "45.0.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-45.0.2.tgz", + "integrity": "sha512-Y0WUDXRyGDMcKLiwgL3zSMpHrXI00xmdyixEGIg90gHnj0PcHY4moNv3Ppje/kDivdAy5vUeUr7z211ImPv2gw==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.15.7", - "ci-info": "^3.3.0", + "@babel/helper-validator-identifier": "^7.19.1", + "@eslint-community/eslint-utils": "^4.1.2", + "ci-info": "^3.6.1", "clean-regexp": "^1.0.0", - "eslint-utils": "^3.0.0", "esquery": "^1.4.0", "indent-string": "^4.0.0", - "is-builtin-module": "^3.1.0", + "is-builtin-module": "^3.2.0", + "jsesc": "^3.0.2", "lodash": "^4.17.21", "pluralize": "^8.0.0", "read-pkg-up": "^7.0.1", "regexp-tree": "^0.1.24", + "regjsparser": "^0.9.1", "safe-regex": "^2.1.1", - "semver": "^7.3.5", + "semver": "^7.3.8", "strip-indent": "^3.0.0" }, "engines": { - "node": ">=12" + "node": ">=14.18" }, "funding": { "url": "https://github.com/sindresorhus/eslint-plugin-unicorn?sponsor=1" }, "peerDependencies": { - "eslint": ">=7.32.0" + "eslint": ">=8.28.0" + } + }, + "node_modules/eslint-plugin-unicorn/node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" } }, "node_modules/eslint-plugin-unused-imports": { @@ -6172,6 +6289,14 @@ "through": "^2.3.8" } }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "engines": { + "node": ">=6" + } + }, "node_modules/eventemitter2": { "version": "6.4.9", "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.9.tgz", @@ -6350,6 +6475,11 @@ "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==" }, + "node_modules/fast-fifo": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.1.0.tgz", + "integrity": "sha512-Kl29QoNbNvn4nhDsLYjyIAaIqaJB6rBx5p3sL9VjaefJ+eMFBWVZiaoguaoZfzEKr5RhAti0UgM8703akGPJ6g==" + }, "node_modules/fast-glob": { "version": "3.2.12", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", @@ -6876,6 +7006,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-tsconfig": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.2.0.tgz", + "integrity": "sha512-X8u8fREiYOE6S8hLbq99PeykTDoLVnxvF4DjWKJmz9xy2nNRdUcV8ZN9tniJFeKyTU3qnC9lL8n4Chd6LmVKHg==", + "dev": true, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, "node_modules/getos": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", @@ -6952,6 +7091,12 @@ "node": ">=4" } }, + "node_modules/globalyzer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", + "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", + "dev": true + }, "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -6971,6 +7116,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", + "dev": true + }, "node_modules/glossy": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/glossy/-/glossy-0.1.7.tgz", @@ -8304,9 +8455,9 @@ "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" }, "node_modules/jsdoc-type-pratt-parser": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-2.2.5.tgz", - "integrity": "sha512-2a6eRxSxp1BW040hFvaJxhsCMI9lT8QB8t14t+NY5tC5rckIR0U9cr2tjOeaFirmEOy6MHvmJnY7zTBHq431Lw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-3.1.0.tgz", + "integrity": "sha512-MgtD0ZiCDk9B+eI73BextfRrVQl0oyzRG8B2BjORts6jbunj4ScKPcyXGTbB6eXL4y9TzxCm6hyeLq/2ASzNdw==", "dev": true, "engines": { "node": ">=12.0.0" @@ -9808,6 +9959,21 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/mocha/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/mock-fs": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-5.2.0.tgz", @@ -11510,6 +11676,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "engines": { + "node": ">= 0.6.0" + } + }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -11784,6 +11958,11 @@ } ] }, + "node_modules/queue-tick": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", + "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==" + }, "node_modules/ramda": { "version": "0.23.0", "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.23.0.tgz", @@ -12005,13 +12184,25 @@ "url": "https://github.com/sponsors/mysticatea" } }, - "node_modules/regextras": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/regextras/-/regextras-0.8.0.tgz", - "integrity": "sha512-k519uI04Z3SaY0fLX843MRXnDeG2+vHOFsyhiPZvNLe7r8rD2YNRjq4BQLZZ0oAr2NrtvZlICsXysGNFPGa3CQ==", + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", "dev": true, - "engines": { - "node": ">=0.1.14" + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" } }, "node_modules/relateurl": { @@ -12994,6 +13185,21 @@ "node": ">=8" } }, + "node_modules/spawn-wrap/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/spdx-correct": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", @@ -13153,6 +13359,15 @@ "stubs": "^3.0.0" } }, + "node_modules/streamx": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.13.0.tgz", + "integrity": "sha512-9jD4uoX0juNSIcv4PazT+97FpM4Mww3cp7PM23HRTLANhgb7K7n1mB45guH/kT5F4enl04kApOM3EeoUXSPfvw==", + "dependencies": { + "fast-fifo": "^1.1.0", + "queue-tick": "^1.0.1" + } + }, "node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -13494,6 +13709,22 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/synckit": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.4.tgz", + "integrity": "sha512-Dn2ZkzMdSX827QbowGbU/4yjWuvNaCoScLLoMo/yKbu+P4GBR6cRGKZH27k6a9bRzdqcyd1DE96pQtQ6uNkmyw==", + "dev": true, + "dependencies": { + "@pkgr/utils": "^2.3.1", + "tslib": "^2.4.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, "node_modules/systemd-socket": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/systemd-socket/-/systemd-socket-0.0.0.tgz", @@ -13565,31 +13796,13 @@ } }, "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar-stream/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.0.0.tgz", + "integrity": "sha512-O6OfUKBbQOqAhh6owTWmA730J/yZCYcpmZ1DBj2YX51ZQrt7d7NgzrR+CnO9wP6nt/viWZW2XeXLavX3/ZEbEg==", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" + "b4a": "^1.6.1", + "bl": "^6.0.0", + "streamx": "^2.12.5" } }, "node_modules/tdigest": { @@ -13752,6 +13965,16 @@ "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" }, + "node_modules/tiny-glob": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", + "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", + "dev": true, + "dependencies": { + "globalyzer": "0.1.0", + "globrex": "^0.1.2" + } + }, "node_modules/tmp": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", @@ -14518,26 +14741,26 @@ } }, "node_modules/webpack-dev-middleware": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.0.1.tgz", + "integrity": "sha512-PZPZ6jFinmqVPJZbisfggDiC+2EeGZ1ZByyMP5sOFJcPPWSexalISz+cvm+j+oYPT7FIJyxT76esjnw9DhE5sw==", "dev": true, "dependencies": { "colorette": "^2.0.10", - "memfs": "^3.4.3", + "memfs": "^3.4.12", "mime-types": "^2.1.31", "range-parser": "^1.2.1", "schema-utils": "^4.0.0" }, "engines": { - "node": ">= 12.13.0" + "node": ">= 14.15.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" + "webpack": "^5.0.0" } }, "node_modules/webpack-dev-middleware/node_modules/schema-utils": { @@ -14693,10 +14916,33 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/webpack-dev-server/node_modules/webpack-dev-middleware": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", + "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "dev": true, + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, "node_modules/webpack-manifest-plugin": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-4.1.1.tgz", - "integrity": "sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-5.0.0.tgz", + "integrity": "sha512-8RQfMAdc5Uw3QbCQ/CBV/AXqOR8mt03B6GJmRbhWopE8GzRfEpn+k0ZuWywxW+5QZsffhmFDY1J6ohqJo+eMuw==", "dev": true, "dependencies": { "tapable": "^2.0.0", @@ -14706,7 +14952,7 @@ "node": ">=12.22.0" }, "peerDependencies": { - "webpack": "^4.44.2 || ^5.47.0" + "webpack": "^5.47.0" } }, "node_modules/webpack-manifest-plugin/node_modules/webpack-sources": { @@ -14790,17 +15036,17 @@ } }, "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.0.tgz", + "integrity": "sha512-nla//68K9NU6yRiwDY/Q8aU6siKlSs64aEC7+IV56QoAuyQT2ovsJcgGYGyqMOmI/CGN1BOR6mM5EN0FBO+zyQ==", "dependencies": { "isexe": "^2.0.0" }, "bin": { - "node-which": "bin/node-which" + "node-which": "bin/which.js" }, "engines": { - "node": ">= 8" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/which-boxed-primitive": { @@ -15154,9 +15400,9 @@ } }, "node_modules/yamljs": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/yamljs/-/yamljs-0.2.10.tgz", - "integrity": "sha512-sbkbOosewjeRmJ23Hjee1RgTxn+xa7mt4sew3tfD0SdH0LTcswnZC9dhSNq4PIz15roQMzb84DjECyQo5DWIww==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/yamljs/-/yamljs-0.3.0.tgz", + "integrity": "sha512-C/FsVVhht4iPQYXOInoxUM/1ELSf9EsgKH34FofQOp6hwCPrW4vG4w5++TED3xRUo8gD7l0P1J1dLlDYzODsTQ==", "dependencies": { "argparse": "^1.0.7", "glob": "^7.0.5" @@ -15726,14 +15972,23 @@ "dev": true }, "@es-joy/jsdoccomment": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.20.1.tgz", - "integrity": "sha512-oeJK41dcdqkvdZy/HctKklJNkt/jh+av3PZARrZEl+fs/8HaHeeYoAvEwOV0u5I6bArTF17JEsTZMY359e/nfQ==", + "version": "0.36.1", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.36.1.tgz", + "integrity": "sha512-922xqFsTpHs6D0BUiG4toiyPOMc8/jafnWKxz1KWgS4XzKPy2qXf1Pe6UFuNSCQqt6tOuhAWXBNuuyUhJmw9Vg==", "dev": true, "requires": { - "comment-parser": "1.3.0", + "comment-parser": "1.3.1", "esquery": "^1.4.0", - "jsdoc-type-pratt-parser": "~2.2.3" + "jsdoc-type-pratt-parser": "~3.1.0" + } + }, + "@eslint-community/eslint-utils": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.1.2.tgz", + "integrity": "sha512-7qELuQWWjVDdVsFQ5+beUl+KPczrEDA7S3zM4QUd/bJl7oXgsmpXaEVqrRTnOBqenOV4rWf2kVZk2Ot085zPWA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^3.3.0" } }, "@eslint/eslintrc": { @@ -16215,6 +16470,20 @@ "resolved": "https://registry.npmjs.org/@orchidjs/sifter/-/sifter-0.9.3.tgz", "integrity": "sha512-9XGiAJcWvEektxjR9X+dYeG+kg8GdojM6ZCmrnuDaWoVew+GAKxiesvYxyY+RLUgWTv8B1qpLIVYlswxKcW5XQ==" }, + "@pkgr/utils": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.3.1.tgz", + "integrity": "sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "is-glob": "^4.0.3", + "open": "^8.4.0", + "picocolors": "^1.0.0", + "tiny-glob": "^0.2.9", + "tslib": "^2.4.0" + } + }, "@popperjs/core": { "version": "2.11.6", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz", @@ -16276,13 +16545,14 @@ "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" }, "@sentry/browser": { - "version": "6.19.7", - "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-6.19.7.tgz", - "integrity": "sha512-oDbklp4O3MtAM4mtuwyZLrgO1qDVYIujzNJQzXmi9YzymJCuzMLSRDvhY83NNDCRxf0pds4DShgYeZdbSyKraA==", - "requires": { - "@sentry/core": "6.19.7", - "@sentry/types": "6.19.7", - "@sentry/utils": "6.19.7", + "version": "7.28.1", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.28.1.tgz", + "integrity": "sha512-N8j93IcrWKWorfJ5D+RSKVAvcR4S5tIcZ/HvFPMrQWnfVa/jtJcrKThdjZYteA0wjmPiy8/D3KA8nB91yulBPA==", + "requires": { + "@sentry/core": "7.28.1", + "@sentry/replay": "7.28.1", + "@sentry/types": "7.28.1", + "@sentry/utils": "7.28.1", "tslib": "^1.9.3" }, "dependencies": { @@ -16294,48 +16564,12 @@ } }, "@sentry/core": { - "version": "6.19.7", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-6.19.7.tgz", - "integrity": "sha512-tOfZ/umqB2AcHPGbIrsFLcvApdTm9ggpi/kQZFkej7kMphjT+SGBiQfYtjyg9jcRW+ilAR4JXC9BGKsdEQ+8Vw==", - "requires": { - "@sentry/hub": "6.19.7", - "@sentry/minimal": "6.19.7", - "@sentry/types": "6.19.7", - "@sentry/utils": "6.19.7", - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "@sentry/hub": { - "version": "6.19.7", - "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-6.19.7.tgz", - "integrity": "sha512-y3OtbYFAqKHCWezF0EGGr5lcyI2KbaXW2Ik7Xp8Mu9TxbSTuwTe4rTntwg8ngPjUQU3SUHzgjqVB8qjiGqFXCA==", + "version": "7.28.1", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.28.1.tgz", + "integrity": "sha512-7wvnuvn/mrAfcugWoCG/3pqDIrUgH5t+HisMJMGw0h9Tc33KqrmqMDCQVvjlrr2pWrw/vuUCFdm8CbUHJ832oQ==", "requires": { - "@sentry/types": "6.19.7", - "@sentry/utils": "6.19.7", - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "@sentry/minimal": { - "version": "6.19.7", - "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-6.19.7.tgz", - "integrity": "sha512-wcYmSJOdvk6VAPx8IcmZgN08XTXRwRtB1aOLZm+MVHjIZIhHoBGZJYTVQS/BWjldsamj2cX3YGbGXNunaCfYJQ==", - "requires": { - "@sentry/hub": "6.19.7", - "@sentry/types": "6.19.7", + "@sentry/types": "7.28.1", + "@sentry/utils": "7.28.1", "tslib": "^1.9.3" }, "dependencies": { @@ -16347,14 +16581,13 @@ } }, "@sentry/node": { - "version": "6.19.7", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-6.19.7.tgz", - "integrity": "sha512-gtmRC4dAXKODMpHXKfrkfvyBL3cI8y64vEi3fDD046uqYcrWdgoQsffuBbxMAizc6Ez1ia+f0Flue6p15Qaltg==", - "requires": { - "@sentry/core": "6.19.7", - "@sentry/hub": "6.19.7", - "@sentry/types": "6.19.7", - "@sentry/utils": "6.19.7", + "version": "7.28.1", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-7.28.1.tgz", + "integrity": "sha512-n7AbpJqZJjWPpKNGc55mP7AdQ+XSomS9MZJuZ+Xt2AU52aVwGPI4z9aHUJFSDGaMHHiu/toyPnoUES+XZf6/hw==", + "requires": { + "@sentry/core": "7.28.1", + "@sentry/types": "7.28.1", + "@sentry/utils": "7.28.1", "cookie": "^0.4.1", "https-proxy-agent": "^5.0.0", "lru_map": "^0.3.3", @@ -16368,17 +16601,27 @@ } } }, + "@sentry/replay": { + "version": "7.28.1", + "resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-7.28.1.tgz", + "integrity": "sha512-Os0PzMjKlwtHwzTU0kfVzGzsi4Vaj3g2arCl4Qnr3b6kYTb9WOFZo/n/v56ss7Z+nZG3K8W5PisoD4MRsRJRig==", + "requires": { + "@sentry/core": "7.28.1", + "@sentry/types": "7.28.1", + "@sentry/utils": "7.28.1" + } + }, "@sentry/types": { - "version": "6.19.7", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-6.19.7.tgz", - "integrity": "sha512-jH84pDYE+hHIbVnab3Hr+ZXr1v8QABfhx39KknxqKWr2l0oEItzepV0URvbEhB446lk/S/59230dlUUIBGsXbg==" + "version": "7.28.1", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.28.1.tgz", + "integrity": "sha512-DvSplMVrVEmOzR2M161V5+B8Up3vR71xMqJOpWTzE9TqtFJRGPtqT/5OBsNJJw1+/j2ssMcnKwbEo9Q2EGeS6g==" }, "@sentry/utils": { - "version": "6.19.7", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-6.19.7.tgz", - "integrity": "sha512-z95ECmE3i9pbWoXQrD/7PgkBAzJYR+iXtPuTkpBjDKs86O3mT+PXOT3BAn79w2wkn7/i3vOGD2xVr1uiMl26dA==", + "version": "7.28.1", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.28.1.tgz", + "integrity": "sha512-75/jzLUO9HH09iC9TslNimGbxOP3jgn89P+q7uR+rp2fJfRExHVeKJZQdK0Ij4/SmE7TJ3Uh2r154N0INZEx1g==", "requires": { - "@sentry/types": "6.19.7", + "@sentry/types": "7.28.1", "tslib": "^1.9.3" }, "dependencies": { @@ -17066,6 +17309,14 @@ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, + "abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "requires": { + "event-target-shim": "^5.0.0" + } + }, "accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -17498,6 +17749,11 @@ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" }, + "b4a": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.1.tgz", + "integrity": "sha512-AsKjNhz72yxteo/0EtQEiwkMUgk/tGmycXlbG4g3Ard2/ULtNLUykGOkeK0egmN27h0xMAhb76jYccW+XTBExA==" + }, "babel-walk": { "version": "3.0.0-canary-5", "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", @@ -17567,32 +17823,43 @@ "integrity": "sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw==" }, "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-6.0.0.tgz", + "integrity": "sha512-Ik9BVIMdcWzSOCpzDv2XpQ4rJ4oZBuk3ck6MgiOv0EopdgtohN2uSCrrLlkH1Jf0KnpZZMBA3D0bUMbCdj/jgA==", "requires": { - "buffer": "^5.5.0", + "buffer": "^6.0.3", "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "readable-stream": "^4.2.0" }, "dependencies": { "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "requires": { "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "ieee754": "^1.2.1" } }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.2.0.tgz", + "integrity": "sha512-gJrBHsaI3lgBoGMW/jHZsQ/o/TIWiu5ENCJG1BB7fuCKzpFM8GaS2UoBVt9NO+oI+3FcrBNbUkl3ilDe09aY4A==", "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10" } } } @@ -18233,9 +18500,9 @@ "dev": true }, "comment-parser": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.0.tgz", - "integrity": "sha512-hRpmWIKgzd81vn0ydoWoyPoALEOnF4wt8yKD35Ib1D6XC2siLiYaiqfGkYrunuKdsXGwpBpHU3+9r+RVw2NZfA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.1.tgz", + "integrity": "sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA==", "dev": true }, "common-tags": { @@ -18418,6 +18685,16 @@ "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" + }, + "dependencies": { + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + } } }, "css-declaration-sorter": { @@ -18444,9 +18721,9 @@ } }, "css-minimizer-webpack-plugin": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz", - "integrity": "sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.3.1.tgz", + "integrity": "sha512-SHA7Hu/EiF0dOwdmV2+agvqYpG+ljlUa7Dvn1AVOmSH3N8KOERoaM9lGpstz9nGsoTjANGyUXdrxl/EwdMScRg==", "dev": true, "requires": { "cssnano": "^5.0.6", @@ -18748,9 +19025,9 @@ } }, "deep-equal-in-any-order": { - "version": "1.1.20", - "resolved": "https://registry.npmjs.org/deep-equal-in-any-order/-/deep-equal-in-any-order-1.1.20.tgz", - "integrity": "sha512-GTpQxcQx28KvV6ChrHb4AcL5z+eFEymtoSUaWe+FEakEpZ/66jTvz52xLUym/sK4Pn1sbYLsCV5rEURDeiFl3w==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/deep-equal-in-any-order/-/deep-equal-in-any-order-2.0.1.tgz", + "integrity": "sha512-jZqLGPTq9ERpaf5T6wrSD7qPWOGyPLc9pLvdQzhcNi/hSvleVveAjikWntiQBycsSXFcwuxlaawvNhdUgju7Zg==", "dev": true, "requires": { "lodash.mapvalues": "^4.6.0", @@ -19488,16 +19765,39 @@ } }, "eslint-import-resolver-typescript": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz", - "integrity": "sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==", + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.2.tgz", + "integrity": "sha512-zX4ebnnyXiykjhcBvKIf5TNvt8K7yX6bllTRZ14MiurKPjDpCAZujlszTdB8pcNXhZcOf+god4s9SjQa5GnytQ==", "dev": true, "requires": { "debug": "^4.3.4", - "glob": "^7.2.0", + "enhanced-resolve": "^5.10.0", + "get-tsconfig": "^4.2.0", + "globby": "^13.1.2", + "is-core-module": "^2.10.0", "is-glob": "^4.0.3", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" + "synckit": "^0.8.4" + }, + "dependencies": { + "globby": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.3.tgz", + "integrity": "sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==", + "dev": true, + "requires": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" + } + }, + "slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true + } } }, "eslint-module-utils": { @@ -19601,18 +19901,17 @@ } }, "eslint-plugin-jsdoc": { - "version": "37.9.7", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-37.9.7.tgz", - "integrity": "sha512-8alON8yYcStY94o0HycU2zkLKQdcS+qhhOUNQpfONHHwvI99afbmfpYuPqf6PbLz5pLZldG3Te5I0RbAiTN42g==", + "version": "39.6.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-39.6.4.tgz", + "integrity": "sha512-fskvdLCfwmPjHb6e+xNGDtGgbF8X7cDwMtVLAP2WwSf9Htrx68OAx31BESBM1FAwsN2HTQyYQq7m4aW4Q4Nlag==", "dev": true, "requires": { - "@es-joy/jsdoccomment": "~0.20.1", - "comment-parser": "1.3.0", - "debug": "^4.3.3", + "@es-joy/jsdoccomment": "~0.36.1", + "comment-parser": "1.3.1", + "debug": "^4.3.4", "escape-string-regexp": "^4.0.0", "esquery": "^1.4.0", - "regextras": "^0.8.0", - "semver": "^7.3.5", + "semver": "^7.3.8", "spdx-expression-parse": "^3.0.1" }, "dependencies": { @@ -19694,32 +19993,42 @@ } }, "eslint-plugin-sonarjs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-sonarjs/-/eslint-plugin-sonarjs-0.11.0.tgz", - "integrity": "sha512-ei/WuZiL0wP+qx2KrxKyZs3+eDbxiGAhFSm3GKCOOAUkg+G2ny6TSXDB2j67tvyqHefi+eoQsAgGQvz+nEtIBw==", + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-sonarjs/-/eslint-plugin-sonarjs-0.17.0.tgz", + "integrity": "sha512-jtGtxI49UbJJeJj7CVRLI3+LLH+y+hkR3GOOwM7vBbci9DEFIRGCWvEd2BJScrzltZ6D6iubukTAfc9cyG7sdw==", "dev": true, "requires": {} }, "eslint-plugin-unicorn": { - "version": "40.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-40.1.0.tgz", - "integrity": "sha512-y5doK2DF9Sr5AqKEHbHxjFllJ167nKDRU01HDcWyv4Tnmaoe9iNxMrBnaybZvWZUaE3OC5Unu0lNIevYamloig==", + "version": "45.0.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-45.0.2.tgz", + "integrity": "sha512-Y0WUDXRyGDMcKLiwgL3zSMpHrXI00xmdyixEGIg90gHnj0PcHY4moNv3Ppje/kDivdAy5vUeUr7z211ImPv2gw==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.15.7", - "ci-info": "^3.3.0", + "@babel/helper-validator-identifier": "^7.19.1", + "@eslint-community/eslint-utils": "^4.1.2", + "ci-info": "^3.6.1", "clean-regexp": "^1.0.0", - "eslint-utils": "^3.0.0", "esquery": "^1.4.0", "indent-string": "^4.0.0", - "is-builtin-module": "^3.1.0", + "is-builtin-module": "^3.2.0", + "jsesc": "^3.0.2", "lodash": "^4.17.21", "pluralize": "^8.0.0", "read-pkg-up": "^7.0.1", "regexp-tree": "^0.1.24", + "regjsparser": "^0.9.1", "safe-regex": "^2.1.1", - "semver": "^7.3.5", + "semver": "^7.3.8", "strip-indent": "^3.0.0" + }, + "dependencies": { + "jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "dev": true + } } }, "eslint-plugin-unused-imports": { @@ -19853,6 +20162,11 @@ "through": "^2.3.8" } }, + "event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" + }, "eventemitter2": { "version": "6.4.9", "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.9.tgz", @@ -19990,6 +20304,11 @@ "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==" }, + "fast-fifo": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.1.0.tgz", + "integrity": "sha512-Kl29QoNbNvn4nhDsLYjyIAaIqaJB6rBx5p3sL9VjaefJ+eMFBWVZiaoguaoZfzEKr5RhAti0UgM8703akGPJ6g==" + }, "fast-glob": { "version": "3.2.12", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", @@ -20371,6 +20690,12 @@ "get-intrinsic": "^1.1.1" } }, + "get-tsconfig": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.2.0.tgz", + "integrity": "sha512-X8u8fREiYOE6S8hLbq99PeykTDoLVnxvF4DjWKJmz9xy2nNRdUcV8ZN9tniJFeKyTU3qnC9lL8n4Chd6LmVKHg==", + "dev": true + }, "getos": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", @@ -20429,6 +20754,12 @@ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true }, + "globalyzer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", + "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", + "dev": true + }, "globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -20442,6 +20773,12 @@ "slash": "^3.0.0" } }, + "globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", + "dev": true + }, "glossy": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/glossy/-/glossy-0.1.7.tgz", @@ -21388,9 +21725,9 @@ "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" }, "jsdoc-type-pratt-parser": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-2.2.5.tgz", - "integrity": "sha512-2a6eRxSxp1BW040hFvaJxhsCMI9lT8QB8t14t+NY5tC5rckIR0U9cr2tjOeaFirmEOy6MHvmJnY7zTBHq431Lw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-3.1.0.tgz", + "integrity": "sha512-MgtD0ZiCDk9B+eI73BextfRrVQl0oyzRG8B2BjORts6jbunj4ScKPcyXGTbB6eXL4y9TzxCm6hyeLq/2ASzNdw==", "dev": true }, "jsesc": { @@ -22498,6 +22835,15 @@ "requires": { "has-flag": "^4.0.0" } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } } } }, @@ -23714,6 +24060,11 @@ "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", "dev": true }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" + }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -23940,6 +24291,11 @@ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" }, + "queue-tick": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", + "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==" + }, "ramda": { "version": "0.23.0", "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.23.0.tgz", @@ -24108,11 +24464,22 @@ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==" }, - "regextras": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/regextras/-/regextras-0.8.0.tgz", - "integrity": "sha512-k519uI04Z3SaY0fLX843MRXnDeG2+vHOFsyhiPZvNLe7r8rD2YNRjq4BQLZZ0oAr2NrtvZlICsXysGNFPGa3CQ==", - "dev": true + "regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true + } + } }, "relateurl": { "version": "0.2.7", @@ -24875,6 +25242,17 @@ "rimraf": "^3.0.0", "signal-exit": "^3.0.2", "which": "^2.0.1" + }, + "dependencies": { + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } } }, "spdx-correct": { @@ -25014,6 +25392,15 @@ "stubs": "^3.0.0" } }, + "streamx": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.13.0.tgz", + "integrity": "sha512-9jD4uoX0juNSIcv4PazT+97FpM4Mww3cp7PM23HRTLANhgb7K7n1mB45guH/kT5F4enl04kApOM3EeoUXSPfvw==", + "requires": { + "fast-fifo": "^1.1.0", + "queue-tick": "^1.0.1" + } + }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -25268,6 +25655,16 @@ } } }, + "synckit": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.4.tgz", + "integrity": "sha512-Dn2ZkzMdSX827QbowGbU/4yjWuvNaCoScLLoMo/yKbu+P4GBR6cRGKZH27k6a9bRzdqcyd1DE96pQtQ6uNkmyw==", + "dev": true, + "requires": { + "@pkgr/utils": "^2.3.1", + "tslib": "^2.4.0" + } + }, "systemd-socket": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/systemd-socket/-/systemd-socket-0.0.0.tgz", @@ -25332,27 +25729,13 @@ } }, "tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.0.0.tgz", + "integrity": "sha512-O6OfUKBbQOqAhh6owTWmA730J/yZCYcpmZ1DBj2YX51ZQrt7d7NgzrR+CnO9wP6nt/viWZW2XeXLavX3/ZEbEg==", "requires": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } + "b4a": "^1.6.1", + "bl": "^6.0.0", + "streamx": "^2.12.5" } }, "tdigest": { @@ -25477,6 +25860,16 @@ "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" }, + "tiny-glob": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", + "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", + "dev": true, + "requires": { + "globalyzer": "0.1.0", + "globrex": "^0.1.2" + } + }, "tmp": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", @@ -26036,13 +26429,13 @@ } }, "webpack-dev-middleware": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.0.1.tgz", + "integrity": "sha512-PZPZ6jFinmqVPJZbisfggDiC+2EeGZ1ZByyMP5sOFJcPPWSexalISz+cvm+j+oYPT7FIJyxT76esjnw9DhE5sw==", "dev": true, "requires": { "colorette": "^2.0.10", - "memfs": "^3.4.3", + "memfs": "^3.4.12", "mime-types": "^2.1.31", "range-parser": "^1.2.1", "schema-utils": "^4.0.0" @@ -26150,13 +26543,26 @@ "ajv-formats": "^2.1.1", "ajv-keywords": "^5.0.0" } + }, + "webpack-dev-middleware": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", + "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "dev": true, + "requires": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + } } } }, "webpack-manifest-plugin": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-4.1.1.tgz", - "integrity": "sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-5.0.0.tgz", + "integrity": "sha512-8RQfMAdc5Uw3QbCQ/CBV/AXqOR8mt03B6GJmRbhWopE8GzRfEpn+k0ZuWywxW+5QZsffhmFDY1J6ohqJo+eMuw==", "dev": true, "requires": { "tapable": "^2.0.0", @@ -26223,9 +26629,9 @@ } }, "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.0.tgz", + "integrity": "sha512-nla//68K9NU6yRiwDY/Q8aU6siKlSs64aEC7+IV56QoAuyQT2ovsJcgGYGyqMOmI/CGN1BOR6mM5EN0FBO+zyQ==", "requires": { "isexe": "^2.0.0" } @@ -26501,9 +26907,9 @@ "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" }, "yamljs": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/yamljs/-/yamljs-0.2.10.tgz", - "integrity": "sha512-sbkbOosewjeRmJ23Hjee1RgTxn+xa7mt4sew3tfD0SdH0LTcswnZC9dhSNq4PIz15roQMzb84DjECyQo5DWIww==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/yamljs/-/yamljs-0.3.0.tgz", + "integrity": "sha512-C/FsVVhht4iPQYXOInoxUM/1ELSf9EsgKH34FofQOp6hwCPrW4vG4w5++TED3xRUo8gD7l0P1J1dLlDYzODsTQ==", "requires": { "argparse": "^1.0.7", "glob": "^7.0.5" diff --git a/package.json b/package.json index 7d4ca4cac07..57cf7c212f7 100644 --- a/package.json +++ b/package.json @@ -22,8 +22,8 @@ "dependencies": { "@flatten-js/interval-tree": "^1.0.18", "@fortawesome/fontawesome-free": "^6.2.1", - "@sentry/browser": "^6.16.1", - "@sentry/node": "^6.16.1", + "@sentry/browser": "^7.28.1", + "@sentry/node": "^7.28.1", "@types/file-saver": "^2.0.5", "@types/request": "^2.48.8", "aws-sdk": "^2.1048.0", @@ -76,7 +76,7 @@ "serve-favicon": "^2.4.5", "shell-quote": "^1.7.3", "systemd-socket": "0.0.0", - "tar-stream": "^2.2.0", + "tar-stream": "^3.0.0", "temp": "^0.9.4", "tom-select": "2.0.3", "tree-kill": "^1.2.2", @@ -86,13 +86,13 @@ "underscore": "^1.13.2", "url-join": "^4.0.1", "whatwg-fetch": "^3.6.2", - "which": "^2.0.2", + "which": "^3.0.0", "winston": "^3.3.3", "winston-loki": "^6.0.3", "winston-papertrail": "^1.0.5", "winston-transport": "^4.4.1", "yaml": "^1.10.2", - "yamljs": "^0.2.9" + "yamljs": "^0.3.0" }, "devDependencies": { "@babel/preset-typescript": "^7.16.5", @@ -119,18 +119,18 @@ "css-loader": "^6.5.1", "css-minimizer-webpack-plugin": "^3.3.1", "cypress": "^9.2.0", - "deep-equal-in-any-order": "^1.1.15", + "deep-equal-in-any-order": "^2.0.1", "eslint": "^8.5.0", "eslint-config-prettier": "^8.3.0", "eslint-formatter-github": "^1.0.11", - "eslint-import-resolver-typescript": "^2.5.0", + "eslint-import-resolver-typescript": "^3.5.2", "eslint-plugin-import": "^2.25.3", - "eslint-plugin-jsdoc": "^37.4.0", + "eslint-plugin-jsdoc": "^39.6.4", "eslint-plugin-node": "^11.1.0", "eslint-plugin-promise": "^6.0.0", "eslint-plugin-requirejs": "^4.0.1", - "eslint-plugin-sonarjs": "^0.11.0", - "eslint-plugin-unicorn": "^40.1.0", + "eslint-plugin-sonarjs": "^0.17.0", + "eslint-plugin-unicorn": "^45.0.2", "eslint-plugin-unused-imports": "^2.0.0", "file-loader": "^6.2.0", "lint-staged": "^13.0.3", @@ -152,9 +152,9 @@ "url-loader": "^4.1.1", "webpack": "^5.75.0", "webpack-cli": "^5.0.1", - "webpack-dev-middleware": "^5.3.0", + "webpack-dev-middleware": "^6.0.1", "webpack-dev-server": "^4.11.1", - "webpack-manifest-plugin": "^4.0.2" + "webpack-manifest-plugin": "^5.0.0" }, "mocha": { "require": [ diff --git a/test/cache-tests.js b/test/cache-tests.js index 019eec7511e..781aacf306b 100644 --- a/test/cache-tests.js +++ b/test/cache-tests.js @@ -210,12 +210,12 @@ function setup() { throwS3Error = null; } const result = S3FS[params.Key]; - if (!result) { + if (result) { + callback(null, {Body: result}); + } else { const error = new Error('Not found'); error.code = 'NoSuchKey'; callback(error); - } else { - callback(null, {Body: result}); } }); AWS.mock('S3', 'putObject', (params, callback) => { diff --git a/test/cfg-tests.js b/test/cfg-tests.js index bdacda9ba4a..15366ebbcfd 100644 --- a/test/cfg-tests.js +++ b/test/cfg-tests.js @@ -27,7 +27,7 @@ import * as cfg from '../lib/cfg'; import {fs, path, resolvePathFromTestRoot} from './utils'; async function DoCfgTest(cfgArg, filename) { - const contents = await fs.readJson(filename, 'utf-8'); + const contents = await fs.readJson(filename, 'utf8'); const structure = cfg.generateStructure('', cfgArg, contents.asm); structure.should.deep.equal(contents.cfg); } diff --git a/test/checks.js b/test/checks.js index ab266066dfc..f2d789aad38 100644 --- a/test/checks.js +++ b/test/checks.js @@ -52,7 +52,7 @@ describe('Live site checks', () => { const langLibs = libs.split(':'); const filePath = `etc/config/${lang}.amazon.properties`; - const fileContents = fs.readFileSync(filePath, 'utf-8'); + const fileContents = fs.readFileSync(filePath, 'utf8'); const matches = fileContents.match(/^libs\..*?\.name/gm); let found = []; diff --git a/test/exec-tests.js b/test/exec-tests.js index 5e2245111f1..8e043c1ade9 100644 --- a/test/exec-tests.js +++ b/test/exec-tests.js @@ -40,7 +40,65 @@ function testExecOutput(x) { } describe('Execution tests', () => { - if (process.platform !== 'win32') { + if (process.platform === 'win32') { + // win32 + describe('Executes external commands', () => { + // note: we use powershell, since echo is a builtin, and false doesn't exist + it('supports output', () => { + return exec + .execute('powershell', ['-Command', 'echo "hello world"'], {}) + .then(testExecOutput) + .should.eventually.deep.equals({ + code: 0, + okToCache: true, + stderr: '', + stdout: 'hello world\r\n', + timedOut: false, + }); + }); + it('limits output', () => { + return exec + .execute('powershell', ['-Command', 'echo "A very very very very very long string"'], { + maxOutput: 10, + }) + .then(testExecOutput) + .should.eventually.deep.equals({ + code: 0, + okToCache: true, + stderr: '', + stdout: 'A very ver\n[Truncated]', + timedOut: false, + }); + }); + it('handles failing commands', () => { + return exec + .execute('powershell', ['-Command', 'function Fail { exit 1 }; Fail'], {}) + .then(testExecOutput) + .should.eventually.deep.equals({ + code: 1, + okToCache: true, + stderr: '', + stdout: '', + timedOut: false, + }); + }); + it('handles timouts', () => { + return exec + .execute('powershell', ['-Command', '"sleep 5"'], {timeoutMs: 10}) + .then(testExecOutput) + .should.eventually.deep.equals({ + code: 1, + okToCache: false, + stderr: '\nKilled - processing time exceeded', + stdout: '', + timedOut: false, + }); + }); + it('handles missing executables', () => { + return exec.execute('__not_a_command__', [], {}).should.be.rejectedWith('ENOENT'); + }); + }); + } else { // POSIX describe('Executes external commands', () => { it('supports output', () => { @@ -101,64 +159,6 @@ describe('Execution tests', () => { }); }); }); - } else { - // win32 - describe('Executes external commands', () => { - // note: we use powershell, since echo is a builtin, and false doesn't exist - it('supports output', () => { - return exec - .execute('powershell', ['-Command', 'echo "hello world"'], {}) - .then(testExecOutput) - .should.eventually.deep.equals({ - code: 0, - okToCache: true, - stderr: '', - stdout: 'hello world\r\n', - timedOut: false, - }); - }); - it('limits output', () => { - return exec - .execute('powershell', ['-Command', 'echo "A very very very very very long string"'], { - maxOutput: 10, - }) - .then(testExecOutput) - .should.eventually.deep.equals({ - code: 0, - okToCache: true, - stderr: '', - stdout: 'A very ver\n[Truncated]', - timedOut: false, - }); - }); - it('handles failing commands', () => { - return exec - .execute('powershell', ['-Command', 'function Fail { exit 1 }; Fail'], {}) - .then(testExecOutput) - .should.eventually.deep.equals({ - code: 1, - okToCache: true, - stderr: '', - stdout: '', - timedOut: false, - }); - }); - it('handles timouts', () => { - return exec - .execute('powershell', ['-Command', '"sleep 5"'], {timeoutMs: 10}) - .then(testExecOutput) - .should.eventually.deep.equals({ - code: 1, - okToCache: false, - stderr: '\nKilled - processing time exceeded', - stdout: '', - timedOut: false, - }); - }); - it('handles missing executables', () => { - return exec.execute('__not_a_command__', [], {}).should.be.rejectedWith('ENOENT'); - }); - }); } describe('nsjail unit tests', () => { diff --git a/test/filter-tests.js b/test/filter-tests.js index 25b68509342..533c6fdf710 100644 --- a/test/filter-tests.js +++ b/test/filter-tests.js @@ -36,7 +36,7 @@ import {fs, resolvePathFromTestRoot} from './utils'; approvals.mocha(); function processAsm(filename, filters) { - const file = fs.readFileSync(filename, 'utf-8'); + const file = fs.readFileSync(filename, 'utf8'); let parser; if (file.includes('Microsoft')) parser = new VcAsmParser(); else if (filename.includes('sass-')) parser = new SassAsmParser(); diff --git a/test/handlers/api-tests.js b/test/handlers/api-tests.js index 79c199c7363..cad3a97a9b2 100644 --- a/test/handlers/api-tests.js +++ b/test/handlers/api-tests.js @@ -95,16 +95,21 @@ describe('API handling', () => { }, (key, def) => { switch (key) { - case 'formatters': + case 'formatters': { return 'formatt:badformatt'; - case 'formatter.formatt.exe': + } + case 'formatter.formatt.exe': { return 'echo'; - case 'formatter.formatt.version': + } + case 'formatter.formatt.version': { return 'Release'; - case 'formatter.formatt.name': + } + case 'formatter.formatt.name': { return 'FormatT'; - default: + } + default: { return def; + } } }, new StorageNull('/', {}), diff --git a/test/lang-tests.js b/test/lang-tests.js index 6db425ae204..ebbaa46a04e 100644 --- a/test/lang-tests.js +++ b/test/lang-tests.js @@ -36,7 +36,7 @@ describe('Language definitions tests', () => { it('Has examples & are initialized', () => { for (const languageKey of Object.keys(languages)) { const lang = languages[languageKey]; - const example = fs.readFileSync(path.join('examples', lang.id, 'default' + lang.extensions[0]), 'utf-8'); + const example = fs.readFileSync(path.join('examples', lang.id, 'default' + lang.extensions[0]), 'utf8'); should.equal(example, lang.example); } }); diff --git a/webpack.config.esm.js b/webpack.config.esm.js index 4277390ff39..05566d18197 100644 --- a/webpack.config.esm.js +++ b/webpack.config.esm.js @@ -56,7 +56,7 @@ const hasGit = fs.existsSync(path.resolve(__dirname, '.git')); // Hack alert: due to a variety of issues, sometimes we need to change // the name here. Mostly it's things like webpack changes that affect // how minification is done, even though that's supposed not to matter. -const webjackJsHack = '.v15.'; +const webjackJsHack = '.v16.'; const plugins = [ new MonacoEditorWebpackPlugin({ languages: [