diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..46a71479 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,3 @@ + +# excel add-in, binary +*.xlam binary diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..24528067 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,95 @@ +name: CI + +# What is built here, and what is not +# +# The console and the R-side checks run on every push. Neither native binary +# is built, for different reasons. +# +# The add-in cannot be built at all: XLCALL.H and XLCALL.CPP come from +# Microsoft's Excel XLL SDK and BERT/.gitignore deliberately keeps them out of +# the repository, so BERT64.xll is not buildable from a clean checkout by +# anyone, CI included. +# +# The controller can be built, but not yet here. It was tried, and the attempt +# is worth recording because it found two real faults before it ran out of +# road -- the vcpkg baseline was pinned for the add-in only, so a standalone +# controller build resolved a protobuf incompatible with the checked-in +# generated code; and R_ReadConsole carried R 3.5's signature and compiled +# locally only because a header in the local R tree had been edited by hand. +# Both are fixed. +# +# What the attempt needed, if anyone picks it up again: +# +# r-lib/actions/setup-r@v2 with r-version 4.5.2 (not 'release': R 4.6 +# removed Rf_isFrame and changed the ReadConsole callback signature) +# BertRHome pointed at that R, for its headers; the import libraries are +# checked in, so no .lib generation is needed +# vcpkg integrate install, because hosted runners ship vcpkg unintegrated +# and manifest mode otherwise restores nothing +# /p:PlatformToolset=v143, because the tree targets v145 (VS 2026) and +# hosted runners carry VS 2022 +# +# Where it stops: the link fails with an unresolved __std_rotate out of +# libprotobuf and abseil, which is a C runtime mismatch -- vcpkg resolves +# protobuf:x64-windows (dynamic CRT) on the runner while the project links +# the static CRT. Forcing /p:VcpkgTriplet=x64-windows-static is the obvious +# next thing to try. It was not pursued: with the add-in unbuildable anyway, +# a controller-only build earns less than the time it costs, and the native +# build is exercised locally by Install/build-release.ps1 on every release. + +on: + push: + branches: [master, console-upgrade] + pull_request: + workflow_dispatch: + +jobs: + + console: + name: console (typescript + styles) + runs-on: windows-latest + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-node@v4 + with: + node-version: 22 + cache: npm + cache-dependency-path: Console/package-lock.json + + - name: install + working-directory: Console + run: npm ci + + - name: build + working-directory: Console + run: npm run build + + - name: the build produced something + working-directory: Console + shell: pwsh + run: | + $js = Get-ChildItem build -Recurse -Filter *.js -ErrorAction SilentlyContinue + if (-not $js) { throw "no javascript in Console/build" } + if (-not (Test-Path build/style.css)) { throw "no build/style.css" } + "compiled $($js.Count) files, $([math]::Round((Get-Item build/style.css).Length / 1kb)) kB of css" + + r-checks: + name: startup.R on R ${{ matrix.r }} + runs-on: windows-latest + strategy: + fail-fast: false + matrix: + # the oldest R the controller will start against, the version that + # began warning about length-2 conditions, the one that made it an + # error, and current + r: ['3.6.3', '4.2.3', '4.3.3', 'release'] + steps: + - uses: actions/checkout@v4 + + - uses: r-lib/actions/setup-r@v2 + with: + r-version: ${{ matrix.r }} + + - name: startup.R checks + run: Rscript tests/startup-guard.R diff --git a/.github/workflows/modules.yml b/.github/workflows/modules.yml new file mode 100644 index 00000000..82b0a7f4 --- /dev/null +++ b/.github/workflows/modules.yml @@ -0,0 +1,84 @@ +name: graphics modules + +# BERTModule is compiled against R's graphics engine, and R checks that +# version whenever a graphics device is created -- so a module built for one R +# series cannot draw on another, and the install ships one per series. +# +# Building them locally means an R installation and its matching Rtools for +# every series, which is well over a gigabyte of downloads. Runners can do it +# instead: setup-r installs the right Rtools for each version. Each job +# uploads its module as an artifact, and Install/build-release.ps1 -FetchModules +# collects them into Build/module for packaging. + +on: + workflow_dispatch: + push: + paths: + - 'Module/**' + - '.github/workflows/modules.yml' + +jobs: + + module: + name: BERTModule for R ${{ matrix.r }} + runs-on: windows-latest + strategy: + fail-fast: false + matrix: + # one per series BERT supports. old versions are allowed to fail + # without failing the run: the toolchains for them are ancient and + # may not be installable for ever. + r: ['4.6.1', '4.5.2', '4.4.3', '4.3.3', '4.2.3'] + include: + - r: '3.5.3' + optional: true + continue-on-error: ${{ matrix.optional == true }} + steps: + - uses: actions/checkout@v4 + + - uses: r-lib/actions/setup-r@v2 + with: + r-version: ${{ matrix.r }} + # the matching toolchain; setup-r picks rtools by R version + update-rtools: true + + - name: build the module + shell: pwsh + run: | + # the series comes from the matrix, not from asking R: one less + # thing to go wrong before anything has been built + $series = ("${{ matrix.r }}" -split '\.')[0..1] -join '.' + Write-Host "building BERTModule for R $series" + "SERIES=$series" | Out-File -FilePath $env:GITHUB_ENV -Append + + Write-Host "R on this runner:" + & Rscript --vanilla -e "cat(R.version.string)" + + # a module must never be relinked from objects compiled against + # another R. github runs pwsh with ErrorActionPreference=Stop, so + # guard the case where there is nothing to clean. + if (Test-Path Module/src) { + $stale = Get-ChildItem -Path Module/src/* -Include *.o, *.dll -File -ErrorAction Ignore + if ($stale) { $stale | Remove-Item -Force } + } + + New-Item -ItemType Directory -Force "out/$series" | Out-Null + # R.exe, not R: powershell aliases R to Invoke-History, so "& R CMD" + # silently runs the wrong thing + & R.exe CMD INSTALL --library="out/$series" --no-multiarch Module + if ($LASTEXITCODE) { throw "R CMD INSTALL failed for R $series" } + + - name: check what it was built against + shell: pwsh + run: | + $desc = (Get-Content "out/$env:SERIES/BERTModule/DESCRIPTION" | Select-String "^Built:").ToString() + Write-Host $desc + if ($desc -notmatch "R $([regex]::Escape($env:SERIES))") { + throw "module reports '$desc' but should be built for R $env:SERIES" + } + + - uses: actions/upload-artifact@v4 + with: + name: BERTModule-${{ env.SERIES }} + path: out/${{ env.SERIES }} + if-no-files-found: error diff --git a/.gitignore b/.gitignore index 542d4c51..b024a26c 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,47 @@ BERTModule_*.gz notes.md yarn-error.log + +# --------------------------------------------------------------------------- +# added on the r4-support branch +# --------------------------------------------------------------------------- + +# vcpkg manifest-mode install trees. these are regenerated from vcpkg.json +# and vcpkg-configuration.json; they run to hundreds of megabytes each. +vcpkg_installed/ + +# R distributions used as build inputs (headers + import libs). these are +# local installs, not part of the source tree. see docs/BUILDING.md. +/R-3.5.0/ +/R-4.5.2/ + +# visual studio per-user and per-machine state +.vs/ +*.vcxproj.user + +# build output directories, all platforms +[Xx]64/ +Win32/ +ARM64/ +ARM64EC/ + +# editor-local settings and scratch notes +.vscode/ + +# local archives and scratch copies +*.7z +Console/generated/variable_pb_new.js +Console/generated/variable_pb_old.js + +# release outputs (Install/build-release.ps1) +Install/BERT-Installer-*.exe +Install/BERT-*.zip +Install/build-log.txt + +# R CMD INSTALL byproducts in the module source +Module/src/*.dll +Module/src/*.o + +# the third-party add-in the optional help feature ships; build-release.ps1 +# downloads and verifies it +Install/ExcelDna.IntelliSense64.xll diff --git a/BERT/.gitignore b/BERT/.gitignore index 866e24b0..40bb80ea 100644 --- a/BERT/.gitignore +++ b/BERT/.gitignore @@ -19,3 +19,6 @@ enc_temp_folder *.exe *.xll +ARM64 +ARM64EC +vcpkg_installed diff --git a/BERT/BERT.sln b/BERT/BERT.sln index 3d2d3556..17c3f899 100644 --- a/BERT/BERT.sln +++ b/BERT/BERT.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.27004.2002 +# Visual Studio Version 18 +VisualStudioVersion = 18.1.11312.151 MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BERT", "BERT\BERT.vcxproj", "{0CA760D0-16BE-4A7E-A1BF-7296BF699485}" ProjectSection(ProjectDependencies) = postProject @@ -21,44 +21,58 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ControlJulia07", "..\Contro EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|ARM64EC = Debug|ARM64EC Debug|x64 = Debug|x64 Debug|x86 = Debug|x86 + Release|ARM64EC = Release|ARM64EC Release|x64 = Release|x64 Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution + {0CA760D0-16BE-4A7E-A1BF-7296BF699485}.Debug|ARM64EC.ActiveCfg = Debug|ARM64EC + {0CA760D0-16BE-4A7E-A1BF-7296BF699485}.Debug|ARM64EC.Build.0 = Debug|ARM64EC {0CA760D0-16BE-4A7E-A1BF-7296BF699485}.Debug|x64.ActiveCfg = Debug|x64 {0CA760D0-16BE-4A7E-A1BF-7296BF699485}.Debug|x64.Build.0 = Debug|x64 {0CA760D0-16BE-4A7E-A1BF-7296BF699485}.Debug|x86.ActiveCfg = Debug|Win32 + {0CA760D0-16BE-4A7E-A1BF-7296BF699485}.Release|ARM64EC.ActiveCfg = Release|ARM64EC + {0CA760D0-16BE-4A7E-A1BF-7296BF699485}.Release|ARM64EC.Build.0 = Release|ARM64EC {0CA760D0-16BE-4A7E-A1BF-7296BF699485}.Release|x64.ActiveCfg = Release|x64 {0CA760D0-16BE-4A7E-A1BF-7296BF699485}.Release|x64.Build.0 = Release|x64 {0CA760D0-16BE-4A7E-A1BF-7296BF699485}.Release|x86.ActiveCfg = Release|Win32 {0CA760D0-16BE-4A7E-A1BF-7296BF699485}.Release|x86.Build.0 = Release|Win32 + {ADE9DA3C-93BF-4469-83B7-FBC015B6497F}.Debug|ARM64EC.ActiveCfg = Debug|ARM64EC + {ADE9DA3C-93BF-4469-83B7-FBC015B6497F}.Debug|ARM64EC.Build.0 = Debug|ARM64EC {ADE9DA3C-93BF-4469-83B7-FBC015B6497F}.Debug|x64.ActiveCfg = Debug|x64 {ADE9DA3C-93BF-4469-83B7-FBC015B6497F}.Debug|x64.Build.0 = Debug|x64 {ADE9DA3C-93BF-4469-83B7-FBC015B6497F}.Debug|x86.ActiveCfg = Debug|Win32 + {ADE9DA3C-93BF-4469-83B7-FBC015B6497F}.Release|ARM64EC.ActiveCfg = Release|ARM64EC + {ADE9DA3C-93BF-4469-83B7-FBC015B6497F}.Release|ARM64EC.Build.0 = Release|ARM64EC {ADE9DA3C-93BF-4469-83B7-FBC015B6497F}.Release|x64.ActiveCfg = Release|x64 {ADE9DA3C-93BF-4469-83B7-FBC015B6497F}.Release|x64.Build.0 = Release|x64 {ADE9DA3C-93BF-4469-83B7-FBC015B6497F}.Release|x86.ActiveCfg = Release|Win32 + {3FAA4E29-8871-445F-9068-BF6518C295B5}.Debug|ARM64EC.ActiveCfg = Debug|ARM64EC + {3FAA4E29-8871-445F-9068-BF6518C295B5}.Debug|ARM64EC.Build.0 = Debug|ARM64EC {3FAA4E29-8871-445F-9068-BF6518C295B5}.Debug|x64.ActiveCfg = Debug|x64 {3FAA4E29-8871-445F-9068-BF6518C295B5}.Debug|x64.Build.0 = Debug|x64 {3FAA4E29-8871-445F-9068-BF6518C295B5}.Debug|x86.ActiveCfg = Debug|Win32 + {3FAA4E29-8871-445F-9068-BF6518C295B5}.Release|ARM64EC.ActiveCfg = Release|ARM64EC + {3FAA4E29-8871-445F-9068-BF6518C295B5}.Release|ARM64EC.Build.0 = Release|ARM64EC {3FAA4E29-8871-445F-9068-BF6518C295B5}.Release|x64.ActiveCfg = Release|x64 {3FAA4E29-8871-445F-9068-BF6518C295B5}.Release|x64.Build.0 = Release|x64 {3FAA4E29-8871-445F-9068-BF6518C295B5}.Release|x86.ActiveCfg = Release|Win32 {3FAA4E29-8871-445F-9068-BF6518C295B5}.Release|x86.Build.0 = Release|Win32 + {3F1862DE-C93C-4980-84E1-D69792BF271F}.Debug|ARM64EC.ActiveCfg = Debug|ARM64EC {3F1862DE-C93C-4980-84E1-D69792BF271F}.Debug|x64.ActiveCfg = Debug|x64 - {3F1862DE-C93C-4980-84E1-D69792BF271F}.Debug|x64.Build.0 = Debug|x64 {3F1862DE-C93C-4980-84E1-D69792BF271F}.Debug|x86.ActiveCfg = Debug|Win32 + {3F1862DE-C93C-4980-84E1-D69792BF271F}.Release|ARM64EC.ActiveCfg = Release|ARM64EC {3F1862DE-C93C-4980-84E1-D69792BF271F}.Release|x64.ActiveCfg = Release|x64 - {3F1862DE-C93C-4980-84E1-D69792BF271F}.Release|x64.Build.0 = Release|x64 {3F1862DE-C93C-4980-84E1-D69792BF271F}.Release|x86.ActiveCfg = Release|Win32 + {E94424C4-D404-42CC-8D18-EF3462C4D7FB}.Debug|ARM64EC.ActiveCfg = Debug|ARM64EC {E94424C4-D404-42CC-8D18-EF3462C4D7FB}.Debug|x64.ActiveCfg = Debug|x64 - {E94424C4-D404-42CC-8D18-EF3462C4D7FB}.Debug|x64.Build.0 = Debug|x64 {E94424C4-D404-42CC-8D18-EF3462C4D7FB}.Debug|x86.ActiveCfg = Debug|Win32 {E94424C4-D404-42CC-8D18-EF3462C4D7FB}.Debug|x86.Build.0 = Debug|Win32 + {E94424C4-D404-42CC-8D18-EF3462C4D7FB}.Release|ARM64EC.ActiveCfg = Release|ARM64EC {E94424C4-D404-42CC-8D18-EF3462C4D7FB}.Release|x64.ActiveCfg = Release|x64 - {E94424C4-D404-42CC-8D18-EF3462C4D7FB}.Release|x64.Build.0 = Release|x64 {E94424C4-D404-42CC-8D18-EF3462C4D7FB}.Release|x86.ActiveCfg = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution diff --git a/BERT/BERT/BERT.vcxproj b/BERT/BERT/BERT.vcxproj index 74166d83..ed92de53 100644 --- a/BERT/BERT/BERT.vcxproj +++ b/BERT/BERT/BERT.vcxproj @@ -1,10 +1,18 @@ + + Debug + ARM64EC + Debug Win32 + + Release + ARM64EC + Release Win32 @@ -75,32 +83,45 @@ {0CA760D0-16BE-4A7E-A1BF-7296BF699485} Win32Proj BERT - 10.0.16299.0 + 10.0 DynamicLibrary true - v141 + v145 Unicode DynamicLibrary false - v141 + v145 true Unicode DynamicLibrary true - v141 + v145 + Unicode + + + DynamicLibrary + true + v145 Unicode DynamicLibrary false - v141 + v145 + true + Unicode + + + DynamicLibrary + false + v145 true Unicode @@ -118,9 +139,15 @@ + + + + + + true @@ -133,6 +160,12 @@ $(ProjectName)64D $(Platform)\$(Configuration)\$(ProjectName)\ + + $(ProjectName)64D + $(Platform)\$(Configuration)\$(ProjectName)\ + true + .xll + false .xll @@ -147,6 +180,18 @@ $(SolutionDir)..\Build\ $(Platform)\$(Configuration)\$(ProjectName)\ + + $(Platform)\$(Configuration)\$(ProjectName)\ + false + .xll + $(ProjectName)64 + + + true + + x64-windows-static + NotUsing @@ -174,7 +219,29 @@ _DEBUG;BERT_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) ..\..\..\protobuf-3.5.0\src;ExcelLib;..\..\PB;..\..\common;include;PB;%(AdditionalIncludeDirectories) true - 4146 + 4146;4251;4267;4018;4244;4141;4996 + stdcpp17 + + + Windows + true + src/BERT.def + libprotobufd.lib;Ws2_32.lib;psapi.lib;Userenv.lib;Iphlpapi.lib;Kernel32.lib;%(AdditionalDependencies) + $(OutDir)$(TargetName)$(TargetExt) + ..\..\..\protobuf-3.5.0\cmake\build\solution\DebugDLL;%(AdditionalLibraryDirectories) + + + + + NotUsing + Level3 + Disabled + true + _DEBUG;BERT_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + ..\..\..\protobuf-3.5.0\src;ExcelLib;..\..\PB;..\..\common;include;PB;%(AdditionalIncludeDirectories) + true + 4146;4251;4267;4018;4244;4141;4996 + stdcpp17 Windows @@ -218,9 +285,35 @@ true true NDEBUG;BERT_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) - ..\..\..\protobuf-3.5.0\src;ExcelLib;..\..\PB;..\..\common;include;PB;%(AdditionalIncludeDirectories) - 4146 + ExcelLib;..\..\PB;..\..\common;include;PB;%(AdditionalIncludeDirectories) + 4146;4251;4267;4018;4244;4141;4996 + MultiThreaded + stdcpp17 + + + Windows + true + true + true + src/BERT.def + libprotobuf.lib;Ws2_32.lib;psapi.lib;Userenv.lib;Iphlpapi.lib;Kernel32.lib;%(AdditionalDependencies) + $(OutDir)$(TargetName)$(TargetExt) + ..\..\..\protobuf-3.5.0\cmake\build\solution\Release\x64 + + + + + NotUsing + Level3 + MaxSpeed + true + true + true + NDEBUG;BERT_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + ExcelLib;..\..\PB;..\..\common;include;PB;%(AdditionalIncludeDirectories) + 4146;4251;4267;4018;4244;4141;4996 MultiThreaded + stdcpp17 Windows diff --git a/BERT/BERT/include/bert.h b/BERT/BERT/include/bert.h index baa328e2..ec7a3593 100644 --- a/BERT/BERT/include/bert.h +++ b/BERT/BERT/include/bert.h @@ -38,6 +38,14 @@ #define CONFIG_FILE_NAME "bert-config.json" #define LANGUAGE_CONFIG_FILE_NAME "bert-languages.json" +/** + * function descriptions, in the format the Excel-DNA IntelliSense add-in + * reads. the name pairs with the carrier add-in BERT-IntelliSense.xlam: + * that add-in does nothing except give the IntelliSense add-in something + * to find this file beside. see docs/FUNCTION-HELP.md. + */ +#define INTELLISENSE_FILE_NAME "BERT-IntelliSense.intellisense.xml" + class BERT { private: @@ -176,6 +184,11 @@ class BERT { /** handles callback functions from R */ void HandleCallback(const std::string &language); +public: + + /** the directory this dll is in, which is also where the config lives */ + const std::string& home_directory() const { return home_directory_; } + public: /** single static instance of this class */ @@ -201,6 +214,9 @@ class BERT { */ void ShowConsole(); + /** true if the console process we started is still running */ + bool ConsoleProcessRunning(); + /** * hides the console, without actually closing the process */ diff --git a/BERT/BERT/include/bert_version.h b/BERT/BERT/include/bert_version.h index f3b9e8f1..fbf91e45 100644 --- a/BERT/BERT/include/bert_version.h +++ b/BERT/BERT/include/bert_version.h @@ -16,8 +16,21 @@ * You should have received a copy of the GNU General Public License * along with BERT. If not, see . */ - #pragma once -#define BERT_VERSION L"2.4.3" +// the release number. Install/build-installer.ps1 reads this line to name +// the installer, so keep the define on one line in this form. +#define BERT_VERSION_NUMBER L"2.4.3" + +// a tag for builds from this branch, and the time the add-in was compiled, +// so a locally built add-in can be told from a release in the console's +// Help menu. the stamp is the compile time of bert.cc, the one file that +// includes this header, so it only moves when that file recompiles. +#define BERT_VERSION_TAG L"-r13" + +#define BERT_WIDEN_(s) L ## s +#define BERT_WIDEN(s) BERT_WIDEN_(s) +#define BERT_VERSION \ + BERT_VERSION_NUMBER BERT_VERSION_TAG \ + L" (built " BERT_WIDEN(__DATE__) L" " BERT_WIDEN(__TIME__) L")" diff --git a/BERT/BERT/include/callback_info.h b/BERT/BERT/include/callback_info.h index 47018785..0fe62f8b 100644 --- a/BERT/BERT/include/callback_info.h +++ b/BERT/BERT/include/callback_info.h @@ -29,10 +29,25 @@ class CallbackInfo { BERTBuffers::CallResponse callback_call_; BERTBuffers::CallResponse callback_response_; + /** + * the thread Excel calls spreadsheet functions on, recorded when the add-in + * opens. a call made on this thread has Excel blocked waiting for it, so a + * callback arriving during that call has to be handled here rather than + * through a COM context switch (which Excel will not service while it is + * calculating). + */ + DWORD main_thread_id_; + public: CallbackInfo() { default_signaled_event_ = CreateEvent(0, TRUE, TRUE, 0); default_unsignaled_event_ = CreateEvent(0, TRUE, FALSE, 0); + main_thread_id_ = 0; + } + + /** are we on the thread Excel calls spreadsheet functions on? */ + bool OnMainThread() const { + return main_thread_id_ && (GetCurrentThreadId() == main_thread_id_); } ~CallbackInfo() { diff --git a/BERT/BERT/include/debug_functions.h b/BERT/BERT/include/debug_functions.h index 3f520966..b889424d 100644 --- a/BERT/BERT/include/debug_functions.h +++ b/BERT/BERT/include/debug_functions.h @@ -22,7 +22,11 @@ #include #include -#ifdef _DEBUG +// BERT_TRACE builds the DebugOut calls into a release binary, so a stall in +// the field can be traced with a debug-output viewer. define it in the build +// (or here, temporarily) when you need the trace; it is off by default. + +#if defined(_DEBUG) || defined(BERT_TRACE) int DebugOut(const char *fmt, ...); diff --git a/BERT/BERT/include/type_conversions.h b/BERT/BERT/include/type_conversions.h index 78509645..71642198 100644 --- a/BERT/BERT/include/type_conversions.h +++ b/BERT/BERT/include/type_conversions.h @@ -410,8 +410,16 @@ class Convert { case BERTBuffers::Variable::ValueCase::kCpx: { + // Excel has no complex type, so this crosses as text in the a+bi form + // its own engineering functions use -- IMREAL, IMABS and the rest read + // it directly. Default stream formatting would give six significant + // digits, though, so 314159.2653589793+2.718281828459045i arrived as + // 314159+2.71828i and the rest was gone with no error. 15 digits is + // what Excel itself keeps, and what R prints. + std::stringstream ss; auto complex = var.cpx(); + ss << std::setprecision(15); ss << complex.r(); if (complex.i() >= 0) ss << "+"; ss << complex.i(); diff --git a/BERT/BERT/src/bert.cc b/BERT/BERT/src/bert.cc index 93999ab7..6cff784f 100644 --- a/BERT/BERT/src/bert.cc +++ b/BERT/BERT/src/bert.cc @@ -171,36 +171,22 @@ BOOL CALLBACK BERT::ShowConsoleWindowCallback(HWND hwnd, LPARAM lParam) GetWindowTextA(hwnd, buffer, 256); DebugOut("WINDOW %X: %s\n", pid, buffer); - long style = GetWindowLong(hwnd, GWL_STYLE); - long exstyle = GetWindowLong(hwnd, GWL_EXSTYLE); - DebugOut("PRE: 0x%X, 0x%X\n", style, exstyle); + // show or hide the window, and nothing else. this used to rewrite the + // window styles as well, moving the console between an application + // window and a tool window and setting the visible bit by hand. that + // leaves the window out of step with what chromium believes about it, + // and the console came back from a hide with a blank client area that + // took no input. a hidden window has no taskbar button anyway, which + // is what the style changes were for. if (show) { - style |= WS_VISIBLE; - exstyle |= WS_EX_APPWINDOW; - exstyle &= ~(WS_EX_TOOLWINDOW); + ShowWindow(hwnd, IsIconic(hwnd) ? SW_RESTORE : SW_SHOW); + SetForegroundWindow(hwnd); } else { - style &= ~(WS_VISIBLE); - exstyle |= WS_EX_TOOLWINDOW; - exstyle &= ~(WS_EX_APPWINDOW); - } - - ShowWindow(hwnd, SW_HIDE); - - SetWindowLong(hwnd, GWL_EXSTYLE, exstyle); - SetWindowLong(hwnd, GWL_STYLE, style); - - if (show) { - if (IsIconic(hwnd)) ShowWindow(hwnd, SW_RESTORE); - ShowWindow(hwnd, SW_SHOW); - SetForegroundWindow(hwnd); + ShowWindow(hwnd, SW_HIDE); } - style = GetWindowLong(hwnd, GWL_STYLE); - exstyle = GetWindowLong(hwnd, GWL_EXSTYLE); - DebugOut("POST: 0x%X, 0x%X\n", style, exstyle); - } } return TRUE; @@ -242,11 +228,31 @@ void BERT::HideConsole() { EnumWindows(BERT::FocusExcelWindowCallback, (LPARAM)pid); } +/** true if the console we started is still running */ +bool BERT::ConsoleProcessRunning() { + + if (!console_process_id_) return false; + + HANDLE handle = OpenProcess(SYNCHRONIZE, FALSE, console_process_id_); + if (!handle) return false; + + bool running = (WAIT_TIMEOUT == WaitForSingleObject(handle, 0)); + CloseHandle(handle); + + return running; +} + void BERT::ShowConsole() { - if (console_process_id_) { + + // the console hides itself rather than closing, so normally it is still + // there and only needs showing. if it has gone, start it again: the id + // was never cleared, so this used to do nothing at all. + + if (ConsoleProcessRunning()) { EnumWindows(BERT::ShowConsoleWindowCallback, true); } else { + console_process_id_ = 0; StartConsoleProcess(); } } @@ -560,8 +566,11 @@ void BERT::HandleCallback(const std::string &language) { // function or we're being called from a shell function. the semantics are different // because the main thread may or may not be blocked. + DebugOut("HandleCallback: entry (%s)\n", language.c_str()); + DWORD wait_result = WaitForSingleObject(callback_info_.default_signaled_event_, 0); if (wait_result == WAIT_OBJECT_0) { + DebugOut("HandleCallback: shell function branch (COM context switch)\n"); // DebugOut("event 2 is already signaled; this is a shell function\n"); BERTBuffers::CallResponse &call = callback_info_.callback_call_; @@ -591,13 +600,12 @@ void BERT::HandleCallback(const std::string &language) { } else { - DebugOut("event 2 is not signaled; this is a spreadsheet function\n"); - DebugOut("callback waiting for signal\n"); + DebugOut("HandleCallback: spreadsheet branch; waking the main thread\n"); // let main thread handle SetEvent(callback_info_.default_unsignaled_event_); WaitForSingleObject(callback_info_.default_signaled_event_, INFINITE); - DebugOut("callback signaled\n"); + DebugOut("HandleCallback: main thread finished, returning to R\n"); } } @@ -861,6 +869,10 @@ int BERT::ExcelCallback(const BERTBuffers::CallResponse &call, BERTBuffers::Call void BERT::Init() { + // Excel calls xlAutoOpen, and spreadsheet functions, on its main thread + + callback_info_.main_thread_id_ = GetCurrentThreadId(); + // ReadConfigFile(); std::string config_file_path; diff --git a/BERT/BERT/src/debug_functions.cc b/BERT/BERT/src/debug_functions.cc index c57502a7..c435e73b 100644 --- a/BERT/BERT/src/debug_functions.cc +++ b/BERT/BERT/src/debug_functions.cc @@ -19,7 +19,7 @@ #include "stdafx.h" -#ifdef _DEBUG +#if defined(_DEBUG) || defined(BERT_TRACE) int DebugOut(const char *fmt, ...) { diff --git a/BERT/BERT/src/excel_api_functions.cc b/BERT/BERT/src/excel_api_functions.cc index e0df2a42..478b73ee 100644 --- a/BERT/BERT/src/excel_api_functions.cc +++ b/BERT/BERT/src/excel_api_functions.cc @@ -28,6 +28,8 @@ #include "excel_api_functions.h" +#include + void resetXlOper(LPXLOPER12 x) { if (x->xltype == (xltypeStr | xlbitDLLFree) && x->val.str) @@ -82,6 +84,82 @@ void UnregisterFunctions(const std::string &language) { } } +/** escapes the five characters xml reserves, for use in an attribute */ +std::string XMLEscape(const std::string &text) { + std::string escaped; + for (auto c : text) { + switch (c) { + case '&': escaped.append("&"); break; + case '<': escaped.append("<"); break; + case '>': escaped.append(">"); break; + case '"': escaped.append("""); break; + case '\'': escaped.append("'"); break; + default: escaped.push_back(c); + } + } + return escaped; +} + +/** + * writes the registered functions, with their descriptions, in the format + * the Excel-DNA IntelliSense add-in reads. that add-in shows the argument + * tooltip Excel itself only provides for its own functions; excel gives an + * add-in no way to do it. this file is what BERT contributes; see + * docs/FUNCTION-HELP.md for how the two are connected. + * + * this costs nothing when the IntelliSense add-in is not installed, so it + * is written whenever functions are registered. + */ +void WriteIntelliSenseFile() { + + BERT *bert = BERT::Instance(); + std::string path = bert->home_directory(); + path.append(INTELLISENSE_FILE_NAME); + + std::ofstream file(path, std::ios::binary | std::ios::trunc); + if (!file.good()) { + DebugOut("could not write %s\n", path.c_str()); + return; + } + + file << "\r\n"; + file << "\r\n"; + file << "\r\n"; + file << " \r\n"; + + for (auto entry : bert->function_list_) { + + auto language_service = bert->GetLanguageService(entry->language_key_); + if (!language_service) continue; + + // the name excel knows the function by, which is what the tooltip has + // to match: the language prefix, then the alias if there is one + + std::string name = language_service->prefix(); + name.append("."); + name.append(entry->alias_.length() ? entry->alias_ : entry->name_); + + file << " description_) << "\">\r\n"; + + for (auto argument : entry->arguments_) { + std::string description = argument->description_; + if (!description.length() && argument->default_value_.length()) { + description = "Default "; + description.append(argument->default_value_); + } + file << " name_) + << "\" Description=\"" << XMLEscape(description) << "\" />\r\n"; + } + + file << " \r\n"; + } + + file << " \r\n"; + file << "\r\n"; + +} + void RegisterFunctions() { LPXLOPER12 xlParm[32]; @@ -181,6 +259,9 @@ void RegisterFunctions() { Excel12(xlFree, 0, 1, xlParm[0]); for (int i = 0; i < 32; i++) delete xlParm[i]; + + WriteIntelliSenseFile(); + } bool ExcelRegisterLanguageCalls(const char *language_name, uint32_t language_key, bool generic) { diff --git a/BERT/BERT/src/language_service.cc b/BERT/BERT/src/language_service.cc index 34f2d347..5350155c 100644 --- a/BERT/BERT/src/language_service.cc +++ b/BERT/BERT/src/language_service.cc @@ -265,11 +265,11 @@ void LanguageService::RunCallbackThread() { HANDLE callback_pipe_handle = CreateFileA(ss.str().c_str(), GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, 0); if (!callback_pipe_handle || callback_pipe_handle == INVALID_HANDLE_VALUE) { DWORD err = GetLastError(); - DebugOut("err opening pipe [1]: %d\n", err); + DebugOut("CB: FAILED to open callback pipe %s: error %d\n", ss.str().c_str(), err); } else { - DebugOut("Connected to callback pipe\n"); + DebugOut("CB: connected to callback pipe %s\n", ss.str().c_str()); DWORD mode = PIPE_READMODE_MESSAGE; BOOL state = SetNamedPipeHandleState(callback_pipe_handle, &mode, 0, 0); @@ -305,14 +305,19 @@ void LanguageService::RunCallbackThread() { MessageUtilities::Unframe(call, buffer, bytes); } + DebugOut("CB: message from R (%d bytes), wait=%d\n", (int)bytes, (int)call.wait()); + bert->HandleCallback(language_descriptor_.name_); //DumpJSON(response); + DebugOut("CB: HandleCallback returned\n"); + if (call.wait()) { std::string str_response = MessageUtilities::Frame(response); WriteFile(callback_pipe_handle, str_response.c_str(), (int32_t)str_response.size(), &bytes, &io); //result = GetOverlappedResultEx(callback_pipe_handle, &io, &bytes, INFINITE, FALSE); result = GetOverlappedResult(callback_pipe_handle, &io, &bytes, TRUE); + DebugOut("CB: response written to R (result %d, %d bytes)\n", (int)result, (int)bytes); } // restart @@ -537,6 +542,20 @@ void LanguageService::Call(BERTBuffers::CallResponse &response, BERTBuffers::Cal std::string framed_message = MessageUtilities::Frame(call); ResetEvent(io_.hEvent); + // the callback thread decides where to handle a callback from the language + // by looking at this event: signaled means "no spreadsheet call in flight, + // switch context through COM", unsignaled means "the main thread is blocked + // in the call below, hand it over". it has to say the right thing before the + // language can possibly call back, which means before the call goes out -- + // it used to be reset a second later (there was a Sleep(1000) further down), + // by which time R had already called back and been sent through COM into an + // Excel that was busy calculating. that deadlocked both processes, taking + // out anything that calls back into Excel: xlfCaller, and so the graphics + // device, which uses it for cell=TRUE and to size its shape. + + bool blocking_call = call.wait() && callback_info_.OnMainThread(); + if (blocking_call) ResetEvent(callback_info_.default_signaled_event_); + bool write_result = WriteFile(pipe_handle_, framed_message.c_str(), (int32_t)framed_message.length(), NULL, &io_); // wait for the write to complete. FIXME: there's no need to wait if we don't need a @@ -555,12 +574,21 @@ void LanguageService::Call(BERTBuffers::CallResponse &response, BERTBuffers::Cal std::string message_buffer; - // ::MessageBoxA(0, "Call wait", "CB", MB_OK); - Sleep(1000); + // (there was a Sleep(1000) here, left over from debugging this by hand) + + DebugOut("CALL: waiting for a reply from %s\n", language_descriptor_.name_.c_str()); while (true) { - ResetEvent(callback_info_.default_signaled_event_); // set unsignaled + + // only a call that is blocking Excel's main thread claims the callback + // for that thread; a call from the console leaves the event signaled so + // its callbacks go through the COM context switch, which is what that + // branch is for. this used to depend on the timing of the Sleep above: + // whichever branch the clock landed on is the one the callback took. + + if (blocking_call) ResetEvent(callback_info_.default_signaled_event_); // set unsignaled DWORD signaled = WaitForMultipleObjectsEx(2, handles, FALSE, INFINITE, FALSE); + DebugOut("CALL: woken, signaled=%d (0=pipe, 1=callback event)\n", (int)signaled); if (signaled == WAIT_OBJECT_0) { // ::MessageBoxA(0, "Call signaled", "CB", MB_OK); @@ -632,8 +660,9 @@ void LanguageService::Call(BERTBuffers::CallResponse &response, BERTBuffers::Cal } else if( signaled != WAIT_TIMEOUT) { ResetEvent(callback_info_.default_unsignaled_event_); - DebugOut("other handle signaled, do something\n"); + DebugOut("CALL: servicing callback on the main thread\n"); bert->HandleCallbackOnThread(language_descriptor_.name_); + DebugOut("CALL: callback serviced, releasing the callback thread\n"); SetEvent(callback_info_.default_signaled_event_); // signal callback thread } } diff --git a/BERT/vcpkg-configuration.json b/BERT/vcpkg-configuration.json new file mode 100644 index 00000000..abbe5e39 --- /dev/null +++ b/BERT/vcpkg-configuration.json @@ -0,0 +1,14 @@ +{ + "default-registry": { + "kind": "git", + "baseline": "a48bbf436be0867d0eadc42077f280f3123e3698", + "repository": "https://github.com/microsoft/vcpkg" + }, + "registries": [ + { + "kind": "artifact", + "location": "https://github.com/microsoft/vcpkg-ce-catalog/archive/refs/heads/main.zip", + "name": "microsoft" + } + ] +} diff --git a/BERT/vcpkg.json b/BERT/vcpkg.json new file mode 100644 index 00000000..4b3fb5d3 --- /dev/null +++ b/BERT/vcpkg.json @@ -0,0 +1,5 @@ +{ + "dependencies": [ + "protobuf" + ] +} diff --git a/Build/.gitignore b/Build/.gitignore index e00a4bbe..91bc21b6 100644 --- a/Build/.gitignore +++ b/Build/.gitignore @@ -18,3 +18,6 @@ bert-config.json user-stylesheet.less + +# copied from Install by build-release.ps1 +bert2.ico diff --git a/Build/CHANGELOG.md b/Build/CHANGELOG.md new file mode 100644 index 00000000..25705a03 --- /dev/null +++ b/Build/CHANGELOG.md @@ -0,0 +1,377 @@ +# BERT changelog + +Releases of this fork ([SamLovick/Basic-Excel-R-Toolkit](https://github.com/SamLovick/Basic-Excel-R-Toolkit/releases)), +which carries BERT 2.4.3 forward to current R, a current toolchain and a +current console. Upstream (sdllc) has not released since 2018; the whole set +of changes is offered back as pull request +[sdllc#220](https://github.com/sdllc/Basic-Excel-R-Toolkit/pull/220). + +Newest first. The console shows this file under Help ▸ Release Notes, and +opens it by itself the first time you run a new version. + +## Which R versions this works with + +**R 3.5 through 4.6, all of it.** Cell functions, the console, Excel +references, graphics and function help work on every version the controller +runs on. + +| Your R | Functions in cells | Console | Excel references | Graphics | Function help | +| --- | --- | --- | --- | --- | --- | +| 4.6.x | yes | yes | yes | yes | yes | +| 4.5.x | yes | yes | yes | yes | yes | +| 4.4.x | yes | yes | yes | yes* | yes | +| 4.3.x | yes | yes | yes | yes* | yes | +| 4.2.x | yes | yes | yes | yes | yes | +| 3.5.x | yes | yes | yes | yes | yes | + +Tested in Excel on 4.6.1, 4.5.2, 4.2.2 and 3.5.0. \* 4.3 and 4.4 ship modules +built and checked on CI but are not tested in Excel here, for want of those R +versions on the build machine; they work by the same mechanism as the four +that are tested. + +### How it works, and what to watch for + +One `ControlR.exe` hosts every version of R from 3.5 up. The part that does +not travel between versions is `BERTModule`, a compiled R package providing +the graphics devices, the `xlReference` class used for Excel references, and +a few helpers. R checks a module's **graphics engine version** whenever a +graphics device is created, and that version changes between R series -- 4.2 +is `R_GE_group`, 4.5 is `R_GE_glyphs`, 4.6 is `R_GE_fontVar` -- so a module +built for one series cannot draw on another. + +The install therefore ships one module per series in +`module/.`, and `startup.R` loads the one matching the R it is +hosted in. All six are about 3 MB together, so there is nothing to choose at +install time and no reason to ship separate downloads per R version: upgrade +your R and BERT picks up the matching module by itself. + +If you run an R with no module -- a future series, say -- BERT falls back to +another module, which still loads and still provides references and the +helpers; only drawing is lost, and the console says so at startup. + +## 2.4.3-r13 + +### The release notes read better + +Presentation only, in the console's rendered markdown -- these notes and the +welcome page. Subheadings were indented further than the text beneath them, +so they now share the paragraph indent. A table has no left padding of its +own, so its first column started to the left of the surrounding text: it now +lines up, with cell padding and a rule under the header row. List items ran +together, and now sit a paragraph's space apart. + +### The R shell has a left margin + +Text in the shell started hard against the left edge of the pane. It's now +inset by a few pixels. The inset is on the scrolling container rather than +the terminal itself, so the fit logic still sizes columns to the space the +terminal actually has and wide output doesn't pick up a stray horizontal +scrollbar. + +## 2.4.3-r12 + +### Complex numbers lost all but six digits on the way to Excel + +Excel has no complex type, so a complex value crosses as text in the `a+bi` +form Excel's own engineering functions use -- `IMREAL`, `IMABS` and the rest +read it directly, and it is byte-identical to what Excel's `COMPLEX()` +produces. But the conversion used default stream formatting, which is six +significant figures, so + + 314159.2653589793 + 2.718281828459045i + +arrived in the cell as `314159+2.71828i`. Everything past six digits was gone, +silently. Ordinary doubles were never affected: they cross as binary doubles. + +Now formatted with 15 significant digits, which is what Excel itself keeps and +what R prints. `IMREAL` of a value returned from R, minus the same number +computed in the sheet, is now exactly zero. + +## 2.4.3-r11 + +### Graphics and Excel references now work on every supported R + +r10 shipped modules for 4.5 and 4.6 only, so on 4.2 to 4.4 you lost drawing, +and on 3.5 you lost Excel references as well. Modules now ship for **3.5, +4.2, 4.3, 4.4, 4.5 and 4.6** -- the whole range the controller runs on. All +six are 3 MB together. + +The obstacle was never the code: it was that building a module for a series +needs that R and its matching Rtools on the build machine, well over a +gigabyte of downloads per series. A workflow now builds them on runners +instead, one job per series, each checking that the module it produced really +was built for the R it claims. `build-release.ps1 -FetchModules` takes the +modules from the last successful run of that workflow, verifying the same +thing again before packaging. + +Verified in Excel: drawing and Excel references both work on R 3.5.0 and +4.2.2, which is what r10 could not do, and 4.5.2 and 4.6.1 are unchanged. + +## 2.4.3-r10 + +### R 4.6 works + +`Rf_isFrame` was removed in R 4.6; the one place that used it now calls +`Rf_inherits(sexp, "data.frame")`, which does the same job and has been +stable API since long before 3.5. That was the only source change 4.6 needed: +the controller compiles against 4.6's headers, links against the existing +import libraries, and runs. + +### Graphics now works on more than one R series + +`BERTModule` carries the graphics devices, and R checks its graphics engine +version whenever a device is created. That version changes between R series +-- 4.2 is `R_GE_group`, 4.5 is `R_GE_glyphs`, 4.6 is `R_GE_fontVar` -- so a +module built for one series cannot draw on another. It fails with "Graphics +API version mismatch". + +Until now one module was built and shipped, so **graphics only ever worked on +the series it happened to be built against**: r9 shipped a 4.5 module, and +plotting from a cell failed on R 4.2 exactly as it did on 4.6. That was not +noticed because the build machine runs 4.5. + +The install now ships one module per series in `module/.` and +loads the one matching your R, falling back to any other module when there is +no match -- a module from another series still provides the `xlReference` +class and the helpers, so everything except drawing keeps working. Modules +ship for R 4.5 and 4.6. The console says at startup when graphics will not be +available and why. + +### Elsewhere + +- The version gate accepts 4.6 without complaint, and warns above it. +- `build-release.ps1 -ModuleRHomes` takes the R installations to build + modules against. It cleans `Module/src` between them: `R CMD INSTALL` will + otherwise relink from object files compiled against another R, producing a + module that claims to be built for one series and behaves as another. + +## 2.4.3-r9 + +Two build-correctness fixes and a clearer refusal. Nothing in how BERT behaves +day to day changes; if r8 works for you, this is not urgent. + +### The controller only built against a hand-edited R header + +`R_ReadConsole` was declared with R 3.5's signature, `char *buf`. R 4.2 +changed that callback's buffer to `unsigned char *`, so against a stock R 4.2 +or later the assignment to `Rp->ReadConsole` does not compile. It built here +only because the R tree this repository is built against had `RStartup.h` +edited by hand to say `char *` -- which means every binary up to r8 was +compiled against a modified R header, and nobody could build the controller +from a clean checkout with an R from CRAN. + +The callback now follows whichever headers it is compiled against. Verified +against stock R 4.5.2 and stock R 4.2.2. + +### R 4.6 is refused clearly rather than attempted quietly + +The runtime version gate only compared the major version, so R 4.6 passed it +without comment and the first sign of trouble would have come later and less +clearly. It now compares the minor version too and says the version is not +supported yet. **R 4.6 is not supported**: it removed `Rf_isFrame` and changed +the ReadConsole callback signature. + +### The vcpkg baseline is pinned for every project + +`vcpkg-configuration.json`, which pins the registry baseline, sat only beside +the add-in's manifest. Building the controller or the ribbon on its own took +whatever baseline the local vcpkg defaulted to, which could resolve a protobuf +incompatible with the checked-in generated code. All three manifests now pin +the same baseline. + +### Elsewhere + +- `AddUserButton` tested `id == 0` without establishing that `id` is one + value, the same shape that stopped completion working on R 4.3. +- There is a build on GitHub Actions now: the console, and `startup.R` against + four R versions. It is what found the first two items above. + +## 2.4.3-r8 + +Found by measuring the paths that run most often: a cell function being +recalculated, and a keystroke in the console. + +### The console stopped answering when a reply was large + +Node hands the console at most 64k per read, and the reader assumed every read +held whole messages -- there was a `FIXME` saying as much. A larger reply +arrived in pieces, the first piece failed to parse, was dropped, and the rest +was read as garbage; the request it belonged to never completed, so the shell +waited for an answer that was never coming. + +It showed up as completion: a token matching 3,000 symbols answered in 26 ms, +while 4,000 hung indefinitely. The reader now keeps the remainder of a split +frame and waits for the rest. Replies of 340 kB, five reads and more, now +arrive intact in about half a second. + +### Completion offers at most 500 matches + +A list of several thousand is no use to read and made every keystroke carry a +large reply. Long lists are trimmed. + +### Completions are asked for once typing pauses + +The console asked R for completions on every keystroke, and the answer costs R +around 10 ms on an empty workspace and 28 ms on one holding 5,000 objects. A +fast typist queued one request per character. It now waits 90 ms for a pause +and asks once. + +### Release notes showed the previous version's text + +Open tabs are restored from a cache rather than re-read, which is right for a +file you are editing and wrong for the release notes: after an upgrade they +showed the notes you had already read. Rendered documents -- the notes and the +welcome page, neither of them editable here -- are now read from the file when +a tab is restored or reopened. + +### Monaco no longer loads through node's vm module + +The editor's loader took its node path in the renderer, pulling in node's `vm` +module, and Electron warned on every start that vm is unsupported there, that +crashes are likely, and that it may be removed. The loader has a switch for +this case: `preferScriptTags` keeps it on script tags. The warning is gone, +and the editor -- 92 languages, syntax colouring, undo, find -- is unchanged. + +### For the record, what the measurements showed + +A cell function costs **0.3 ms** end to end -- about 3,000 recalculations a +second; 60 cells recalculate in 24 ms. A 1,000-cell range argument costs +0.5 ms, a 20,000-cell range 3.7 ms, a 400-cell array result 0.5 ms. Console +evaluation round trips take 0.2-0.5 ms, and printing costs about 0.25 ms a +line with no slowdown as the scrollback fills. Functions are registered +non-volatile, so Excel recalculates them only when their inputs change. + +Before r7 every cell function took **1,012 ms**, all of it a stray `Sleep`. + +## 2.4.3-r7 + +### Excel froze whenever R called back into it + +Any spreadsheet function that called back into Excel deadlocked: Excel showed +"Calculating" and stopped responding, R sat idle, and neither recovered. That +took out **R graphics entirely**, since the graphics device asks Excel which +cell it was called from and how big its shape is. + +The add-in decides where to handle a callback by testing an event: signaled +means "a console call, switch context through COM", unsignaled means "the main +thread is blocked in a spreadsheet call, hand it over". The event was only +cleared a second after the call was sent (there was a leftover `Sleep(1000)`), +but R answers in about a millisecond, so callbacks were pushed through COM into +an Excel that was mid-calculation and could never service them. + +The add-in now records Excel's main thread when it loads, clears the event +before the call goes out rather than after, and drops the sleep. Which branch a +callback takes is decided by the thread that made the call instead of by +timing. Verified with the worked example from +[bert-toolkit.com/r-graphics-in-excel](https://bert-toolkit.com/r-graphics-in-excel): +cell-linked and named devices, rotated text, transparency, rasters and UTF-8 +labels all draw, and console callbacks still round-trip. + +This is upstream code, untouched by the R 4.x work; it would have affected +anyone using `xlfCaller` or graphics from a cell. + +### Console autocomplete broke on R 4.3 and later + +`startup.R` compared a whole vector in `if (n == "" || ...)`. R has rejected a +length-2 condition since 4.3, so asking for a function's arguments printed +`'length = 2' in coercion to 'logical(1)'` into the shell. Now compares `n[1]`, +which is what the surrounding code already assumes and what R before 4.2 did +implicitly — same results on 3.5.0, 4.2.2 and 4.5.2. + +### Closing a modified file asks first + +Closing an edited file discarded the changes without a word; the source had +carried a `FIXME: warn if dirty` since 2018. It now offers Save, Don't Save or +Cancel, from the File menu and from the tab's close button alike. Saving can +fail (an unnamed file opens Save As, which you can cancel), and the file stays +open when it does. Close All and Close Others ask one file at a time and stop +at the first file you keep. + +### Console completion degrades instead of erroring + +The completion code borrows R's internal machinery — `utils:::.CompletionEnv`, +`.win32consoleCompletion` and a dozen more — which is not public API and +carries no promise between versions. Both entry points now sit behind a single +`tryCatch`, so a future R that renames or reshapes one of those costs you the +argument hints rather than printing an error into the shell on every keystroke. +One wrapper each, not one per candidate: measured at about five microseconds +against the eight milliseconds the completion search itself takes. + +### Other fixes + +- The console came back blank when you opened it a second time from the ribbon + in the same session. It is now shown and restored rather than recreated, and + restarted if the process has gone. +- Install Packages stalled on "loading packages" after you picked a mirror: the + package list URL was built wrongly for repositories given as a list, and the + failure was silent. The list also now reads as two fixed columns, name and + description. +- The package list kept scrolling after the mouse wheel stopped, to the end of + the list, because Chromium's scroll anchoring fought the virtual list. +- An alert that opened while another was fading out was hidden by the fade, + leaving a dialog nobody could answer. Alert buttons are also spaced now, so + three answers no longer read as one run of words. +- Release notes (this file) are shipped and shown in the console, which + previously offered only the generic welcome page. +- `DebugOut` can be compiled into a release build with `BERT_TRACE`, and the + callback handshake has named trace points, so a stall in the field can be + traced with a debug-output viewer instead of guesswork. + +## 2.4.3-r6 + +- **Function help in the formula bar.** Typing `=R.YourFunction(` shows the + function's arguments, a description of the function and of the argument you + are on, taken from `attr(f, "description")` in your R code. Excel gives + add-ins no way to draw that tooltip itself, so the add-in writes an + Excel-DNA IntelliSense file and the installer offers the IntelliSense add-in + as an optional component, off by default. See `docs/FUNCTION-HELP.md`. +- Single-string `description` attributes were dropped when registering + functions; only the vector form was read. Both work now, and feed Excel's + Insert Function and Function Arguments dialogs. +- The installer registers and unregisters the help add-ins itself, filling the + first free slot in Excel's add-in list and closing the gap on removal. +- R detection widened: per-user and per-machine registry entries, per-version + subkeys, then Program Files, keeping the newest. It only warns when it finds + no R, or nothing newer than 4.2. +- Cut, copy and paste work again in the editor, from the keyboard, the context + menu and the Edit menu. Monaco 0.56 registers no clipboard actions of its + own, and Electron 44 has no renderer clipboard module. + +## 2.4.3-r5 + +- Protobuf and its dependencies are linked statically. The r4 binaries needed + the Visual C++ redistributable, so on a machine without it the add-in failed + to load: every function gave `#NAME?` and the console never appeared. The + shipped binaries now import only system DLLs. + +**2.4.3-r4 was withdrawn** for the fault above. + +## 2.4.3-r4 + +First release of this fork. + +- **Works with current R.** One `ControlR.exe` built against R 4.5.2, with a + runtime version gate (floor 3.5) instead of a hard-coded 3.5 test. R is no + longer bundled; the installer finds the R you have. +- **Unicode end to end.** The controller runs with the UTF-8 code page, picks + its console encoding at runtime from the hosted R version (R 4.2 changed + what R hands over), converts strings explicitly rather than assuming the + native code page, and sends console text by length instead of relying on a + terminator. `x <- "café"; nchar(x)` gives 4, and text survives the round trip + between a cell, R and the console. +- **Current toolchain.** v145 toolset, protobuf 5.29 (C++) and 3.21 + (JavaScript), vcpkg manifest mode, ARM64EC configurations that link. +- **Current console.** Electron 44, TypeScript 7, Monaco 0.56, xterm 6, rxjs 7, + chokidar 4, built with npm. +- **64-bit installer** that installs over an existing BERT 2 without touching + `bert-config.json`, `user-stylesheet.less` or `Documents\BERT2`. +- The update check no longer points development builds at upstream's 2.4.4 + download page. +- Package names from CRAN no longer carry markup into the console. +- `docs/BUILDING.md` and `docs/MODERNISATION.md` describe the build, the R + version policy and what is still outstanding. + +## 2.4.4 and earlier + +See the [upstream project](https://github.com/sdllc/Basic-Excel-R-Toolkit) and +[bert-toolkit.com](https://bert-toolkit.com). diff --git a/Build/Welcome.md b/Build/Welcome.md index df0be4a5..edf02fbf 100644 --- a/Build/Welcome.md +++ b/Build/Welcome.md @@ -11,6 +11,11 @@ When it starts, BERT loads functions from the functions directory, Documents\BERT2. You should see some example functions installed in Excel called `R.TestAdd` and `R.EigenValues`. +Functions you export can describe themselves to Excel, so the Insert +Function dialog says what they do and what each argument is for. Add a +`description` attribute in R; there is an example in `functions.R`, in +your functions directory. + You can also use BERT with the statistics language Julia. See [this page][3] for more information. diff --git a/Build/startup/startup.R b/Build/startup/startup.R index 074011f5..34126724 100644 --- a/Build/startup/startup.R +++ b/Build/startup/startup.R @@ -21,9 +21,68 @@ # # load module. moved from code. # +# BERTModule carries compiled code that registers the graphics devices, and R +# checks its graphics engine version whenever a device is created. That +# version changes between R series -- 4.2 is R_GE_group, 4.5 is R_GE_glyphs, +# 4.6 is R_GE_fontVar -- so a module built against one series cannot draw on +# another: it fails with "Graphics API version mismatch". The install ships +# one module per series in module/.; load the one that matches +# the R we are hosted in. The flat module/ directory is the older layout and +# is kept as a fallback. +# +# If there is no module for this R, say so and carry on: functions and the +# console work without it, only graphics does not. +# #=============================================================================== -library(BERTModule, lib.loc=paste0(Sys.getenv("BERT_HOME"), "module")); +local({ + + home <- Sys.getenv("BERT_HOME"); + series <- paste0(R.version$major, ".", strsplit(R.version$minor, ".", fixed=TRUE)[[1]][1]); + + # the matching module first, then the older flat layout, then any other + # series we happen to ship, newest first. a module built for a different + # series still loads and still provides the xlReference class and the + # helpers -- only drawing fails, and it fails with R's own "Graphics API + # version mismatch" when a device is created. that is worth having. + + others <- character(0); + module.root <- paste0(home, "module"); + if (dir.exists(module.root)) { + dirs <- list.dirs(module.root, full.names=FALSE, recursive=FALSE); + dirs <- dirs[grepl("^[0-9]+[.][0-9]+$", dirs)]; + if (length(dirs)) { + dirs <- dirs[order(numeric_version(dirs), decreasing=TRUE)]; + others <- file.path(module.root, dirs); + } + } + + loaded <- FALSE; + matched <- FALSE; + + for (lib in unique(c(file.path(module.root, series), module.root, others))) { + if (!loaded && dir.exists(file.path(lib, "BERTModule"))) { + loaded <- tryCatch({ + library(BERTModule, lib.loc=lib); + matched <- identical(basename(lib), series); + TRUE; + }, error = function(e) { + cat("BERT: BERTModule in", lib, "would not load:", conditionMessage(e), "\n"); + FALSE; + }); + } + } + + if (!loaded) { + cat("BERT: no BERTModule could be loaded. R functions and the console will", + "work; graphics and Excel references will not.\n"); + } + else if (!matched) { + cat("BERT: no BERTModule built for R ", series, + "; graphics will not work on this version of R, though everything else will.\n", sep=""); + } + +}) #=============================================================================== # @@ -65,7 +124,7 @@ library(BERTModule, lib.loc=paste0(Sys.getenv("BERT_HOME"), "module")); AddUserButton <- function(label, FUN, image.mso = "R", tip=""){ id <- .Call("BERT.Callback", "add-user-button", list(label, image.mso, tip), PACKAGE="(embedding)"); - if(!is.numeric(id) || id == 0){ + if(!is.numeric(id) || length(id) != 1 || id[1] == 0){ stop("add button failed"); } .user.button.env[[toString(id)]] = list(label=label, FUN=FUN, image.mso=image.mso, id=id, tip=tip); @@ -175,7 +234,7 @@ library(BERTModule, lib.loc=paste0(Sys.getenv("BERT_HOME"), "module")); # FIXME: are we using this one or the one in the module? and why are there # two? # - .Autocomplete <- function(...){ + .AutocompleteImpl <- function(...){ ac <- utils:::.win32consoleCompletion(...); if( length( utils:::.CompletionEnv$comps) > 0 ){ @@ -193,6 +252,21 @@ library(BERTModule, lib.loc=paste0(Sys.getenv("BERT_HOME"), "module")); ac; } + # + # the completion code borrows R's internals (utils:::.CompletionEnv, + # .win32consoleCompletion and friends), which are not public API and carry + # no promise between versions. if a future R renames or reshapes one, give + # up the hints rather than printing an error into the shell on every + # keystroke. one wrapper here, not one per candidate: it costs a few + # microseconds against the milliseconds the search itself takes. + # + .Autocomplete <- function(...){ + tryCatch(.AutocompleteImpl(...), error = function(e){ + list( comps="", function.signature="", token="", fguess="", + start=0, end=0, in.quotes=FALSE ); + }); + } + # # lists functions in the global environment (or specified environment) # for loading into Excel. using custom environments is not enabled in @@ -294,7 +368,10 @@ library(BERTModule, lib.loc=paste0(Sys.getenv("BERT_HOME"), "module")); version.string <- Sys.getenv('BERT_VERSION'); version <- list(); version['build.date'] <- Sys.getenv('BERT_BUILD_DATE'); - parts <- as.numeric(unlist(strsplit(version.string, '\\.'))); + # a development build carries a tag after the release number, e.g. + # "2.4.3-r4 (built ...)"; only the leading numeric part is the version + numeric.part <- regmatches(version.string, regexpr('^[0-9]+(\\.[0-9]+)*', version.string)); + parts <- as.numeric(unlist(strsplit(numeric.part, '\\.'))); version['major'] <- parts[1]; version['minor'] <- parts[2]; version['patch'] <- parts[3]; @@ -333,7 +410,10 @@ library(BERTModule, lib.loc=paste0(Sys.getenv("BERT_HOME"), "module")); # # update: now delegating file completion to C (probably more to come). # - .CustomCompleter <- function(.CompletionEnv){ + # the most completions to offer at once; see where this is applied below + .completion.limit <- 500; + + .CustomCompleterImpl <- function(.CompletionEnv){ .fqFunc <- function (line, cursor=-1) { @@ -391,11 +471,11 @@ library(BERTModule, lib.loc=paste0(Sys.getenv("BERT_HOME"), "module")); p <- environment(); n <- unlist( strsplit( name, "[^\\w\\.,]", F, T )); while( length( n ) > 1 ){ - if( n == "" || !exists( n[1], where=p )) return( NULL ); + if( n[1] == "" || !exists( n[1], where=p )) return( NULL ); p <- get( n[1], envir=p ); n <- n[-1]; } - if( n == "" || !exists( n[1], where=p )) return( NULL ); + if( n[1] == "" || !exists( n[1], where=p )) return( NULL ); list( name=n[1], fun=get( n[1], envir=p )); } @@ -479,10 +559,31 @@ library(BERTModule, lib.loc=paste0(Sys.getenv("BERT_HOME"), "module")); comps <- paste0(prefix, comps) } comps <- c(fargComps, comps) + + # a token that matches thousands of symbols is no use as a list, and the + # answer has to cross a pipe: keep it to something a person can read, + # and the shell responsive + + if (length(comps) > .completion.limit) { + comps <- comps[seq_len(.completion.limit)]; + } + .CompletionEnv[["comps"]] <- comps } }; + # + # as above: a completer that breaks on a future R should cost the + # completions, not fill the shell with errors + # + .CustomCompleter <- function(.CompletionEnv){ + tryCatch(.CustomCompleterImpl(.CompletionEnv), error = function(e){ + .CompletionEnv[["comps"]] <- character(); + .CompletionEnv[["function.signature"]] <- ""; + invisible(NULL); + }); + } + rc.options( custom.completer=.CustomCompleter ); # diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..25705a03 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,377 @@ +# BERT changelog + +Releases of this fork ([SamLovick/Basic-Excel-R-Toolkit](https://github.com/SamLovick/Basic-Excel-R-Toolkit/releases)), +which carries BERT 2.4.3 forward to current R, a current toolchain and a +current console. Upstream (sdllc) has not released since 2018; the whole set +of changes is offered back as pull request +[sdllc#220](https://github.com/sdllc/Basic-Excel-R-Toolkit/pull/220). + +Newest first. The console shows this file under Help ▸ Release Notes, and +opens it by itself the first time you run a new version. + +## Which R versions this works with + +**R 3.5 through 4.6, all of it.** Cell functions, the console, Excel +references, graphics and function help work on every version the controller +runs on. + +| Your R | Functions in cells | Console | Excel references | Graphics | Function help | +| --- | --- | --- | --- | --- | --- | +| 4.6.x | yes | yes | yes | yes | yes | +| 4.5.x | yes | yes | yes | yes | yes | +| 4.4.x | yes | yes | yes | yes* | yes | +| 4.3.x | yes | yes | yes | yes* | yes | +| 4.2.x | yes | yes | yes | yes | yes | +| 3.5.x | yes | yes | yes | yes | yes | + +Tested in Excel on 4.6.1, 4.5.2, 4.2.2 and 3.5.0. \* 4.3 and 4.4 ship modules +built and checked on CI but are not tested in Excel here, for want of those R +versions on the build machine; they work by the same mechanism as the four +that are tested. + +### How it works, and what to watch for + +One `ControlR.exe` hosts every version of R from 3.5 up. The part that does +not travel between versions is `BERTModule`, a compiled R package providing +the graphics devices, the `xlReference` class used for Excel references, and +a few helpers. R checks a module's **graphics engine version** whenever a +graphics device is created, and that version changes between R series -- 4.2 +is `R_GE_group`, 4.5 is `R_GE_glyphs`, 4.6 is `R_GE_fontVar` -- so a module +built for one series cannot draw on another. + +The install therefore ships one module per series in +`module/.`, and `startup.R` loads the one matching the R it is +hosted in. All six are about 3 MB together, so there is nothing to choose at +install time and no reason to ship separate downloads per R version: upgrade +your R and BERT picks up the matching module by itself. + +If you run an R with no module -- a future series, say -- BERT falls back to +another module, which still loads and still provides references and the +helpers; only drawing is lost, and the console says so at startup. + +## 2.4.3-r13 + +### The release notes read better + +Presentation only, in the console's rendered markdown -- these notes and the +welcome page. Subheadings were indented further than the text beneath them, +so they now share the paragraph indent. A table has no left padding of its +own, so its first column started to the left of the surrounding text: it now +lines up, with cell padding and a rule under the header row. List items ran +together, and now sit a paragraph's space apart. + +### The R shell has a left margin + +Text in the shell started hard against the left edge of the pane. It's now +inset by a few pixels. The inset is on the scrolling container rather than +the terminal itself, so the fit logic still sizes columns to the space the +terminal actually has and wide output doesn't pick up a stray horizontal +scrollbar. + +## 2.4.3-r12 + +### Complex numbers lost all but six digits on the way to Excel + +Excel has no complex type, so a complex value crosses as text in the `a+bi` +form Excel's own engineering functions use -- `IMREAL`, `IMABS` and the rest +read it directly, and it is byte-identical to what Excel's `COMPLEX()` +produces. But the conversion used default stream formatting, which is six +significant figures, so + + 314159.2653589793 + 2.718281828459045i + +arrived in the cell as `314159+2.71828i`. Everything past six digits was gone, +silently. Ordinary doubles were never affected: they cross as binary doubles. + +Now formatted with 15 significant digits, which is what Excel itself keeps and +what R prints. `IMREAL` of a value returned from R, minus the same number +computed in the sheet, is now exactly zero. + +## 2.4.3-r11 + +### Graphics and Excel references now work on every supported R + +r10 shipped modules for 4.5 and 4.6 only, so on 4.2 to 4.4 you lost drawing, +and on 3.5 you lost Excel references as well. Modules now ship for **3.5, +4.2, 4.3, 4.4, 4.5 and 4.6** -- the whole range the controller runs on. All +six are 3 MB together. + +The obstacle was never the code: it was that building a module for a series +needs that R and its matching Rtools on the build machine, well over a +gigabyte of downloads per series. A workflow now builds them on runners +instead, one job per series, each checking that the module it produced really +was built for the R it claims. `build-release.ps1 -FetchModules` takes the +modules from the last successful run of that workflow, verifying the same +thing again before packaging. + +Verified in Excel: drawing and Excel references both work on R 3.5.0 and +4.2.2, which is what r10 could not do, and 4.5.2 and 4.6.1 are unchanged. + +## 2.4.3-r10 + +### R 4.6 works + +`Rf_isFrame` was removed in R 4.6; the one place that used it now calls +`Rf_inherits(sexp, "data.frame")`, which does the same job and has been +stable API since long before 3.5. That was the only source change 4.6 needed: +the controller compiles against 4.6's headers, links against the existing +import libraries, and runs. + +### Graphics now works on more than one R series + +`BERTModule` carries the graphics devices, and R checks its graphics engine +version whenever a device is created. That version changes between R series +-- 4.2 is `R_GE_group`, 4.5 is `R_GE_glyphs`, 4.6 is `R_GE_fontVar` -- so a +module built for one series cannot draw on another. It fails with "Graphics +API version mismatch". + +Until now one module was built and shipped, so **graphics only ever worked on +the series it happened to be built against**: r9 shipped a 4.5 module, and +plotting from a cell failed on R 4.2 exactly as it did on 4.6. That was not +noticed because the build machine runs 4.5. + +The install now ships one module per series in `module/.` and +loads the one matching your R, falling back to any other module when there is +no match -- a module from another series still provides the `xlReference` +class and the helpers, so everything except drawing keeps working. Modules +ship for R 4.5 and 4.6. The console says at startup when graphics will not be +available and why. + +### Elsewhere + +- The version gate accepts 4.6 without complaint, and warns above it. +- `build-release.ps1 -ModuleRHomes` takes the R installations to build + modules against. It cleans `Module/src` between them: `R CMD INSTALL` will + otherwise relink from object files compiled against another R, producing a + module that claims to be built for one series and behaves as another. + +## 2.4.3-r9 + +Two build-correctness fixes and a clearer refusal. Nothing in how BERT behaves +day to day changes; if r8 works for you, this is not urgent. + +### The controller only built against a hand-edited R header + +`R_ReadConsole` was declared with R 3.5's signature, `char *buf`. R 4.2 +changed that callback's buffer to `unsigned char *`, so against a stock R 4.2 +or later the assignment to `Rp->ReadConsole` does not compile. It built here +only because the R tree this repository is built against had `RStartup.h` +edited by hand to say `char *` -- which means every binary up to r8 was +compiled against a modified R header, and nobody could build the controller +from a clean checkout with an R from CRAN. + +The callback now follows whichever headers it is compiled against. Verified +against stock R 4.5.2 and stock R 4.2.2. + +### R 4.6 is refused clearly rather than attempted quietly + +The runtime version gate only compared the major version, so R 4.6 passed it +without comment and the first sign of trouble would have come later and less +clearly. It now compares the minor version too and says the version is not +supported yet. **R 4.6 is not supported**: it removed `Rf_isFrame` and changed +the ReadConsole callback signature. + +### The vcpkg baseline is pinned for every project + +`vcpkg-configuration.json`, which pins the registry baseline, sat only beside +the add-in's manifest. Building the controller or the ribbon on its own took +whatever baseline the local vcpkg defaulted to, which could resolve a protobuf +incompatible with the checked-in generated code. All three manifests now pin +the same baseline. + +### Elsewhere + +- `AddUserButton` tested `id == 0` without establishing that `id` is one + value, the same shape that stopped completion working on R 4.3. +- There is a build on GitHub Actions now: the console, and `startup.R` against + four R versions. It is what found the first two items above. + +## 2.4.3-r8 + +Found by measuring the paths that run most often: a cell function being +recalculated, and a keystroke in the console. + +### The console stopped answering when a reply was large + +Node hands the console at most 64k per read, and the reader assumed every read +held whole messages -- there was a `FIXME` saying as much. A larger reply +arrived in pieces, the first piece failed to parse, was dropped, and the rest +was read as garbage; the request it belonged to never completed, so the shell +waited for an answer that was never coming. + +It showed up as completion: a token matching 3,000 symbols answered in 26 ms, +while 4,000 hung indefinitely. The reader now keeps the remainder of a split +frame and waits for the rest. Replies of 340 kB, five reads and more, now +arrive intact in about half a second. + +### Completion offers at most 500 matches + +A list of several thousand is no use to read and made every keystroke carry a +large reply. Long lists are trimmed. + +### Completions are asked for once typing pauses + +The console asked R for completions on every keystroke, and the answer costs R +around 10 ms on an empty workspace and 28 ms on one holding 5,000 objects. A +fast typist queued one request per character. It now waits 90 ms for a pause +and asks once. + +### Release notes showed the previous version's text + +Open tabs are restored from a cache rather than re-read, which is right for a +file you are editing and wrong for the release notes: after an upgrade they +showed the notes you had already read. Rendered documents -- the notes and the +welcome page, neither of them editable here -- are now read from the file when +a tab is restored or reopened. + +### Monaco no longer loads through node's vm module + +The editor's loader took its node path in the renderer, pulling in node's `vm` +module, and Electron warned on every start that vm is unsupported there, that +crashes are likely, and that it may be removed. The loader has a switch for +this case: `preferScriptTags` keeps it on script tags. The warning is gone, +and the editor -- 92 languages, syntax colouring, undo, find -- is unchanged. + +### For the record, what the measurements showed + +A cell function costs **0.3 ms** end to end -- about 3,000 recalculations a +second; 60 cells recalculate in 24 ms. A 1,000-cell range argument costs +0.5 ms, a 20,000-cell range 3.7 ms, a 400-cell array result 0.5 ms. Console +evaluation round trips take 0.2-0.5 ms, and printing costs about 0.25 ms a +line with no slowdown as the scrollback fills. Functions are registered +non-volatile, so Excel recalculates them only when their inputs change. + +Before r7 every cell function took **1,012 ms**, all of it a stray `Sleep`. + +## 2.4.3-r7 + +### Excel froze whenever R called back into it + +Any spreadsheet function that called back into Excel deadlocked: Excel showed +"Calculating" and stopped responding, R sat idle, and neither recovered. That +took out **R graphics entirely**, since the graphics device asks Excel which +cell it was called from and how big its shape is. + +The add-in decides where to handle a callback by testing an event: signaled +means "a console call, switch context through COM", unsignaled means "the main +thread is blocked in a spreadsheet call, hand it over". The event was only +cleared a second after the call was sent (there was a leftover `Sleep(1000)`), +but R answers in about a millisecond, so callbacks were pushed through COM into +an Excel that was mid-calculation and could never service them. + +The add-in now records Excel's main thread when it loads, clears the event +before the call goes out rather than after, and drops the sleep. Which branch a +callback takes is decided by the thread that made the call instead of by +timing. Verified with the worked example from +[bert-toolkit.com/r-graphics-in-excel](https://bert-toolkit.com/r-graphics-in-excel): +cell-linked and named devices, rotated text, transparency, rasters and UTF-8 +labels all draw, and console callbacks still round-trip. + +This is upstream code, untouched by the R 4.x work; it would have affected +anyone using `xlfCaller` or graphics from a cell. + +### Console autocomplete broke on R 4.3 and later + +`startup.R` compared a whole vector in `if (n == "" || ...)`. R has rejected a +length-2 condition since 4.3, so asking for a function's arguments printed +`'length = 2' in coercion to 'logical(1)'` into the shell. Now compares `n[1]`, +which is what the surrounding code already assumes and what R before 4.2 did +implicitly — same results on 3.5.0, 4.2.2 and 4.5.2. + +### Closing a modified file asks first + +Closing an edited file discarded the changes without a word; the source had +carried a `FIXME: warn if dirty` since 2018. It now offers Save, Don't Save or +Cancel, from the File menu and from the tab's close button alike. Saving can +fail (an unnamed file opens Save As, which you can cancel), and the file stays +open when it does. Close All and Close Others ask one file at a time and stop +at the first file you keep. + +### Console completion degrades instead of erroring + +The completion code borrows R's internal machinery — `utils:::.CompletionEnv`, +`.win32consoleCompletion` and a dozen more — which is not public API and +carries no promise between versions. Both entry points now sit behind a single +`tryCatch`, so a future R that renames or reshapes one of those costs you the +argument hints rather than printing an error into the shell on every keystroke. +One wrapper each, not one per candidate: measured at about five microseconds +against the eight milliseconds the completion search itself takes. + +### Other fixes + +- The console came back blank when you opened it a second time from the ribbon + in the same session. It is now shown and restored rather than recreated, and + restarted if the process has gone. +- Install Packages stalled on "loading packages" after you picked a mirror: the + package list URL was built wrongly for repositories given as a list, and the + failure was silent. The list also now reads as two fixed columns, name and + description. +- The package list kept scrolling after the mouse wheel stopped, to the end of + the list, because Chromium's scroll anchoring fought the virtual list. +- An alert that opened while another was fading out was hidden by the fade, + leaving a dialog nobody could answer. Alert buttons are also spaced now, so + three answers no longer read as one run of words. +- Release notes (this file) are shipped and shown in the console, which + previously offered only the generic welcome page. +- `DebugOut` can be compiled into a release build with `BERT_TRACE`, and the + callback handshake has named trace points, so a stall in the field can be + traced with a debug-output viewer instead of guesswork. + +## 2.4.3-r6 + +- **Function help in the formula bar.** Typing `=R.YourFunction(` shows the + function's arguments, a description of the function and of the argument you + are on, taken from `attr(f, "description")` in your R code. Excel gives + add-ins no way to draw that tooltip itself, so the add-in writes an + Excel-DNA IntelliSense file and the installer offers the IntelliSense add-in + as an optional component, off by default. See `docs/FUNCTION-HELP.md`. +- Single-string `description` attributes were dropped when registering + functions; only the vector form was read. Both work now, and feed Excel's + Insert Function and Function Arguments dialogs. +- The installer registers and unregisters the help add-ins itself, filling the + first free slot in Excel's add-in list and closing the gap on removal. +- R detection widened: per-user and per-machine registry entries, per-version + subkeys, then Program Files, keeping the newest. It only warns when it finds + no R, or nothing newer than 4.2. +- Cut, copy and paste work again in the editor, from the keyboard, the context + menu and the Edit menu. Monaco 0.56 registers no clipboard actions of its + own, and Electron 44 has no renderer clipboard module. + +## 2.4.3-r5 + +- Protobuf and its dependencies are linked statically. The r4 binaries needed + the Visual C++ redistributable, so on a machine without it the add-in failed + to load: every function gave `#NAME?` and the console never appeared. The + shipped binaries now import only system DLLs. + +**2.4.3-r4 was withdrawn** for the fault above. + +## 2.4.3-r4 + +First release of this fork. + +- **Works with current R.** One `ControlR.exe` built against R 4.5.2, with a + runtime version gate (floor 3.5) instead of a hard-coded 3.5 test. R is no + longer bundled; the installer finds the R you have. +- **Unicode end to end.** The controller runs with the UTF-8 code page, picks + its console encoding at runtime from the hosted R version (R 4.2 changed + what R hands over), converts strings explicitly rather than assuming the + native code page, and sends console text by length instead of relying on a + terminator. `x <- "café"; nchar(x)` gives 4, and text survives the round trip + between a cell, R and the console. +- **Current toolchain.** v145 toolset, protobuf 5.29 (C++) and 3.21 + (JavaScript), vcpkg manifest mode, ARM64EC configurations that link. +- **Current console.** Electron 44, TypeScript 7, Monaco 0.56, xterm 6, rxjs 7, + chokidar 4, built with npm. +- **64-bit installer** that installs over an existing BERT 2 without touching + `bert-config.json`, `user-stylesheet.less` or `Documents\BERT2`. +- The update check no longer points development builds at upstream's 2.4.4 + download page. +- Package names from CRAN no longer carry markup into the console. +- `docs/BUILDING.md` and `docs/MODERNISATION.md` describe the build, the R + version policy and what is still outstanding. + +## 2.4.4 and earlier + +See the [upstream project](https://github.com/sdllc/Basic-Excel-R-Toolkit) and +[bert-toolkit.com](https://bert-toolkit.com). diff --git a/Console/.gitignore b/Console/.gitignore index 0f3ebe29..61e2c59e 100644 --- a/Console/.gitignore +++ b/Console/.gitignore @@ -2,3 +2,4 @@ node_modules build dist test + diff --git a/Console/data/constants.json b/Console/data/constants.json index dc4a4402..de69864e 100644 --- a/Console/data/constants.json +++ b/Console/data/constants.json @@ -16,12 +16,17 @@ "untitled": "Untitled", "preferences": "Preferences", "userStylesheet": "User Stylesheet", - "welcome": "Welcome" + "welcome": "Welcome", + "releaseNotes": "Release Notes" }, "editorCommands": { "executeBuffer": "Execute Entire Buffer", - "executeSelection": "Execute Selection" + "executeSelection": "Execute Selection", + "cut": "Cut", + "copy": "Copy", + "paste": "Paste", + "selectAll": "Select All" }, "shell": { @@ -39,10 +44,19 @@ "pleaseWait": "Loading mirror list, please wait...", "setRepo": "Set CRAN repo to #" }, + "closeUnsaved": { + "title": "Unsaved changes", + "message": "$FILE has changes you have not saved.", + "save": "Save", + "discard": "Don't Save", + "cancel": "Cancel" + }, + "selectPackages": { "selectPackagesTitle": "Select Packages", "selectPackages": "Select Packages:", - "pleaseWait": "Loading package list, please wait...", + "pleaseWait": "Loading package list, please wait...", + "loadFailed": "Could not load the package list. Check your connection, or choose a different mirror.", "pleaseWaitInstalled": "Checking installed packages, please wait...", "installed": "installed", "filter": "Filter", diff --git a/Console/generated/variable_pb.js b/Console/generated/variable_pb.js index afeefd76..8aa822a0 100644 --- a/Console/generated/variable_pb.js +++ b/Console/generated/variable_pb.js @@ -1,18 +1,29 @@ +// source: variable.proto /** * @fileoverview * @enhanceable + * @suppress {missingRequire} reports error on implicit type usages. * @suppress {messageConventions} JS Compiler reports an error if a variable or * field starts with 'MSG_' and isn't a translatable message. * @public */ // GENERATED CODE -- DO NOT EDIT! +/* eslint-disable */ +// @ts-nocheck var jspb = require('google-protobuf'); var goog = jspb; -var global = Function('return this')(); +var global = + (typeof globalThis !== 'undefined' && globalThis) || + (typeof window !== 'undefined' && window) || + (typeof global !== 'undefined' && global) || + (typeof self !== 'undefined' && self) || + (function () { return this; }).call(null) || + Function('return this')(); goog.exportSymbol('proto.BERTBuffers.Array', null, global); goog.exportSymbol('proto.BERTBuffers.CallResponse', null, global); +goog.exportSymbol('proto.BERTBuffers.CallResponse.OperationCase', null, global); goog.exportSymbol('proto.BERTBuffers.CallTarget', null, global); goog.exportSymbol('proto.BERTBuffers.CallType', null, global); goog.exportSymbol('proto.BERTBuffers.Code', null, global); @@ -20,6 +31,7 @@ goog.exportSymbol('proto.BERTBuffers.Color', null, global); goog.exportSymbol('proto.BERTBuffers.Complex', null, global); goog.exportSymbol('proto.BERTBuffers.CompositeFunctionCall', null, global); goog.exportSymbol('proto.BERTBuffers.Console', null, global); +goog.exportSymbol('proto.BERTBuffers.Console.MessageCase', null, global); goog.exportSymbol('proto.BERTBuffers.EnumType', null, global); goog.exportSymbol('proto.BERTBuffers.EnumValue', null, global); goog.exportSymbol('proto.BERTBuffers.Error', null, global); @@ -35,7 +47,7 @@ goog.exportSymbol('proto.BERTBuffers.GraphicsUpdateCommand', null, global); goog.exportSymbol('proto.BERTBuffers.MIMEData', null, global); goog.exportSymbol('proto.BERTBuffers.SheetReference', null, global); goog.exportSymbol('proto.BERTBuffers.Variable', null, global); - +goog.exportSymbol('proto.BERTBuffers.Variable.ValueCase', null, global); /** * Generated by JsPbCodeGenerator. * @param {Array=} opt_data Optional initial data array, typically from a @@ -51,19 +63,425 @@ proto.BERTBuffers.Complex = function(opt_data) { }; goog.inherits(proto.BERTBuffers.Complex, jspb.Message); if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ proto.BERTBuffers.Complex.displayName = 'proto.BERTBuffers.Complex'; } +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.BERTBuffers.Array = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.BERTBuffers.Array.repeatedFields_, null); +}; +goog.inherits(proto.BERTBuffers.Array, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.BERTBuffers.Array.displayName = 'proto.BERTBuffers.Array'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.BERTBuffers.Error = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.BERTBuffers.Error, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.BERTBuffers.Error.displayName = 'proto.BERTBuffers.Error'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.BERTBuffers.SheetReference = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.BERTBuffers.SheetReference, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.BERTBuffers.SheetReference.displayName = 'proto.BERTBuffers.SheetReference'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.BERTBuffers.Variable = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, proto.BERTBuffers.Variable.oneofGroups_); +}; +goog.inherits(proto.BERTBuffers.Variable, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.BERTBuffers.Variable.displayName = 'proto.BERTBuffers.Variable'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.BERTBuffers.Code = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.BERTBuffers.Code.repeatedFields_, null); +}; +goog.inherits(proto.BERTBuffers.Code, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.BERTBuffers.Code.displayName = 'proto.BERTBuffers.Code'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.BERTBuffers.CompositeFunctionCall = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.BERTBuffers.CompositeFunctionCall.repeatedFields_, null); +}; +goog.inherits(proto.BERTBuffers.CompositeFunctionCall, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.BERTBuffers.CompositeFunctionCall.displayName = 'proto.BERTBuffers.CompositeFunctionCall'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.BERTBuffers.GraphicsUpdate = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.BERTBuffers.GraphicsUpdate, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.BERTBuffers.GraphicsUpdate.displayName = 'proto.BERTBuffers.GraphicsUpdate'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.BERTBuffers.GraphicsCommand = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.BERTBuffers.GraphicsCommand.repeatedFields_, null); +}; +goog.inherits(proto.BERTBuffers.GraphicsCommand, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.BERTBuffers.GraphicsCommand.displayName = 'proto.BERTBuffers.GraphicsCommand'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.BERTBuffers.Color = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.BERTBuffers.Color, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.BERTBuffers.Color.displayName = 'proto.BERTBuffers.Color'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.BERTBuffers.GraphicsContext = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.BERTBuffers.GraphicsContext, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.BERTBuffers.GraphicsContext.displayName = 'proto.BERTBuffers.GraphicsContext'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.BERTBuffers.MIMEData = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.BERTBuffers.MIMEData, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.BERTBuffers.MIMEData.displayName = 'proto.BERTBuffers.MIMEData'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.BERTBuffers.Console = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, proto.BERTBuffers.Console.oneofGroups_); +}; +goog.inherits(proto.BERTBuffers.Console, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.BERTBuffers.Console.displayName = 'proto.BERTBuffers.Console'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.BERTBuffers.FunctionElement = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.BERTBuffers.FunctionElement, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.BERTBuffers.FunctionElement.displayName = 'proto.BERTBuffers.FunctionElement'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.BERTBuffers.FunctionDescriptor = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.BERTBuffers.FunctionDescriptor.repeatedFields_, null); +}; +goog.inherits(proto.BERTBuffers.FunctionDescriptor, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.BERTBuffers.FunctionDescriptor.displayName = 'proto.BERTBuffers.FunctionDescriptor'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.BERTBuffers.FunctionList = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.BERTBuffers.FunctionList.repeatedFields_, null); +}; +goog.inherits(proto.BERTBuffers.FunctionList, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.BERTBuffers.FunctionList.displayName = 'proto.BERTBuffers.FunctionList'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.BERTBuffers.EnumValue = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.BERTBuffers.EnumValue, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.BERTBuffers.EnumValue.displayName = 'proto.BERTBuffers.EnumValue'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.BERTBuffers.EnumType = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.BERTBuffers.EnumType.repeatedFields_, null); +}; +goog.inherits(proto.BERTBuffers.EnumType, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.BERTBuffers.EnumType.displayName = 'proto.BERTBuffers.EnumType'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.BERTBuffers.ExternalPointer = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.BERTBuffers.ExternalPointer.repeatedFields_, null); +}; +goog.inherits(proto.BERTBuffers.ExternalPointer, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.BERTBuffers.ExternalPointer.displayName = 'proto.BERTBuffers.ExternalPointer'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.BERTBuffers.CallResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, proto.BERTBuffers.CallResponse.oneofGroups_); +}; +goog.inherits(proto.BERTBuffers.CallResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.BERTBuffers.CallResponse.displayName = 'proto.BERTBuffers.CallResponse'; +} + if (jspb.Message.GENERATE_TO_OBJECT) { /** - * Creates an object representation of this proto suitable for use in Soy templates. + * Creates an object representation of this proto. * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. * To access a reserved field use, foo.pb_, eg, foo.pb_default. * For the list of reserved names please see: - * com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS. - * @param {boolean=} opt_includeInstance Whether to include the JSPB instance - * for transitional soy proto support: http://goto/soy-param-migration + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration * @return {!Object} */ proto.BERTBuffers.Complex.prototype.toObject = function(opt_includeInstance) { @@ -73,8 +491,8 @@ proto.BERTBuffers.Complex.prototype.toObject = function(opt_includeInstance) { /** * Static version of the {@see toObject} method. - * @param {boolean|undefined} includeInstance Whether to include the JSPB - * instance for transitional soy proto support: + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: * http://goto/soy-param-migration * @param {!proto.BERTBuffers.Complex} msg The msg instance to transform. * @return {!Object} @@ -82,8 +500,8 @@ proto.BERTBuffers.Complex.prototype.toObject = function(opt_includeInstance) { */ proto.BERTBuffers.Complex.toObject = function(includeInstance, msg) { var f, obj = { - r: +jspb.Message.getFieldWithDefault(msg, 1, 0.0), - i: +jspb.Message.getFieldWithDefault(msg, 2, 0.0) +r: jspb.Message.getFloatingPointFieldWithDefault(msg, 1, 0.0), +i: jspb.Message.getFloatingPointFieldWithDefault(msg, 2, 0.0) }; if (includeInstance) { @@ -179,13 +597,16 @@ proto.BERTBuffers.Complex.serializeBinaryToWriter = function(message, writer) { * @return {number} */ proto.BERTBuffers.Complex.prototype.getR = function() { - return /** @type {number} */ (+jspb.Message.getFieldWithDefault(this, 1, 0.0)); + return /** @type {number} */ (jspb.Message.getFloatingPointFieldWithDefault(this, 1, 0.0)); }; -/** @param {number} value */ +/** + * @param {number} value + * @return {!proto.BERTBuffers.Complex} returns this + */ proto.BERTBuffers.Complex.prototype.setR = function(value) { - jspb.Message.setProto3FloatField(this, 1, value); + return jspb.Message.setProto3FloatField(this, 1, value); }; @@ -194,34 +615,20 @@ proto.BERTBuffers.Complex.prototype.setR = function(value) { * @return {number} */ proto.BERTBuffers.Complex.prototype.getI = function() { - return /** @type {number} */ (+jspb.Message.getFieldWithDefault(this, 2, 0.0)); + return /** @type {number} */ (jspb.Message.getFloatingPointFieldWithDefault(this, 2, 0.0)); }; -/** @param {number} value */ +/** + * @param {number} value + * @return {!proto.BERTBuffers.Complex} returns this + */ proto.BERTBuffers.Complex.prototype.setI = function(value) { - jspb.Message.setProto3FloatField(this, 2, value); + return jspb.Message.setProto3FloatField(this, 2, value); }; -/** - * Generated by JsPbCodeGenerator. - * @param {Array=} opt_data Optional initial data array, typically from a - * server response, or constructed directly in Javascript. The array is used - * in place and becomes part of the constructed object. It is not cloned. - * If no data is provided, the constructed object will be empty, but still - * valid. - * @extends {jspb.Message} - * @constructor - */ -proto.BERTBuffers.Array = function(opt_data) { - jspb.Message.initialize(this, opt_data, 0, -1, proto.BERTBuffers.Array.repeatedFields_, null); -}; -goog.inherits(proto.BERTBuffers.Array, jspb.Message); -if (goog.DEBUG && !COMPILED) { - proto.BERTBuffers.Array.displayName = 'proto.BERTBuffers.Array'; -} /** * List of repeated fields within this message type. * @private {!Array} @@ -233,13 +640,15 @@ proto.BERTBuffers.Array.repeatedFields_ = [3,4,5]; if (jspb.Message.GENERATE_TO_OBJECT) { /** - * Creates an object representation of this proto suitable for use in Soy templates. + * Creates an object representation of this proto. * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. * To access a reserved field use, foo.pb_, eg, foo.pb_default. * For the list of reserved names please see: - * com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS. - * @param {boolean=} opt_includeInstance Whether to include the JSPB instance - * for transitional soy proto support: http://goto/soy-param-migration + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration * @return {!Object} */ proto.BERTBuffers.Array.prototype.toObject = function(opt_includeInstance) { @@ -249,8 +658,8 @@ proto.BERTBuffers.Array.prototype.toObject = function(opt_includeInstance) { /** * Static version of the {@see toObject} method. - * @param {boolean|undefined} includeInstance Whether to include the JSPB - * instance for transitional soy proto support: + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: * http://goto/soy-param-migration * @param {!proto.BERTBuffers.Array} msg The msg instance to transform. * @return {!Object} @@ -258,12 +667,12 @@ proto.BERTBuffers.Array.prototype.toObject = function(opt_includeInstance) { */ proto.BERTBuffers.Array.toObject = function(includeInstance, msg) { var f, obj = { - rows: jspb.Message.getFieldWithDefault(msg, 1, 0), - cols: jspb.Message.getFieldWithDefault(msg, 2, 0), - dataList: jspb.Message.toObjectList(msg.getDataList(), +rows: jspb.Message.getFieldWithDefault(msg, 1, 0), +cols: jspb.Message.getFieldWithDefault(msg, 2, 0), +dataList: jspb.Message.toObjectList(msg.getDataList(), proto.BERTBuffers.Variable.toObject, includeInstance), - rownamesList: jspb.Message.getRepeatedField(msg, 4), - colnamesList: jspb.Message.getRepeatedField(msg, 5) +rownamesList: (f = jspb.Message.getRepeatedField(msg, 4)) == null ? undefined : f, +colnamesList: (f = jspb.Message.getRepeatedField(msg, 5)) == null ? undefined : f }; if (includeInstance) { @@ -398,9 +807,12 @@ proto.BERTBuffers.Array.prototype.getRows = function() { }; -/** @param {number} value */ +/** + * @param {number} value + * @return {!proto.BERTBuffers.Array} returns this + */ proto.BERTBuffers.Array.prototype.setRows = function(value) { - jspb.Message.setProto3IntField(this, 1, value); + return jspb.Message.setProto3IntField(this, 1, value); }; @@ -413,25 +825,31 @@ proto.BERTBuffers.Array.prototype.getCols = function() { }; -/** @param {number} value */ +/** + * @param {number} value + * @return {!proto.BERTBuffers.Array} returns this + */ proto.BERTBuffers.Array.prototype.setCols = function(value) { - jspb.Message.setProto3IntField(this, 2, value); + return jspb.Message.setProto3IntField(this, 2, value); }; /** * repeated Variable data = 3; - * @return {!Array.} + * @return {!Array} */ proto.BERTBuffers.Array.prototype.getDataList = function() { - return /** @type{!Array.} */ ( + return /** @type{!Array} */ ( jspb.Message.getRepeatedWrapperField(this, proto.BERTBuffers.Variable, 3)); }; -/** @param {!Array.} value */ +/** + * @param {!Array} value + * @return {!proto.BERTBuffers.Array} returns this +*/ proto.BERTBuffers.Array.prototype.setDataList = function(value) { - jspb.Message.setRepeatedWrapperField(this, 3, value); + return jspb.Message.setRepeatedWrapperField(this, 3, value); }; @@ -445,98 +863,103 @@ proto.BERTBuffers.Array.prototype.addData = function(opt_value, opt_index) { }; +/** + * Clears the list making it empty but non-null. + * @return {!proto.BERTBuffers.Array} returns this + */ proto.BERTBuffers.Array.prototype.clearDataList = function() { - this.setDataList([]); + return this.setDataList([]); }; /** * repeated string rownames = 4; - * @return {!Array.} + * @return {!Array} */ proto.BERTBuffers.Array.prototype.getRownamesList = function() { - return /** @type {!Array.} */ (jspb.Message.getRepeatedField(this, 4)); + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 4)); }; -/** @param {!Array.} value */ +/** + * @param {!Array} value + * @return {!proto.BERTBuffers.Array} returns this + */ proto.BERTBuffers.Array.prototype.setRownamesList = function(value) { - jspb.Message.setField(this, 4, value || []); + return jspb.Message.setField(this, 4, value || []); }; /** - * @param {!string} value + * @param {string} value * @param {number=} opt_index + * @return {!proto.BERTBuffers.Array} returns this */ proto.BERTBuffers.Array.prototype.addRownames = function(value, opt_index) { - jspb.Message.addToRepeatedField(this, 4, value, opt_index); + return jspb.Message.addToRepeatedField(this, 4, value, opt_index); }; +/** + * Clears the list making it empty but non-null. + * @return {!proto.BERTBuffers.Array} returns this + */ proto.BERTBuffers.Array.prototype.clearRownamesList = function() { - this.setRownamesList([]); + return this.setRownamesList([]); }; /** * repeated string colnames = 5; - * @return {!Array.} + * @return {!Array} */ proto.BERTBuffers.Array.prototype.getColnamesList = function() { - return /** @type {!Array.} */ (jspb.Message.getRepeatedField(this, 5)); + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 5)); }; -/** @param {!Array.} value */ +/** + * @param {!Array} value + * @return {!proto.BERTBuffers.Array} returns this + */ proto.BERTBuffers.Array.prototype.setColnamesList = function(value) { - jspb.Message.setField(this, 5, value || []); + return jspb.Message.setField(this, 5, value || []); }; /** - * @param {!string} value + * @param {string} value * @param {number=} opt_index + * @return {!proto.BERTBuffers.Array} returns this */ proto.BERTBuffers.Array.prototype.addColnames = function(value, opt_index) { - jspb.Message.addToRepeatedField(this, 5, value, opt_index); + return jspb.Message.addToRepeatedField(this, 5, value, opt_index); }; +/** + * Clears the list making it empty but non-null. + * @return {!proto.BERTBuffers.Array} returns this + */ proto.BERTBuffers.Array.prototype.clearColnamesList = function() { - this.setColnamesList([]); + return this.setColnamesList([]); }; -/** - * Generated by JsPbCodeGenerator. - * @param {Array=} opt_data Optional initial data array, typically from a - * server response, or constructed directly in Javascript. The array is used - * in place and becomes part of the constructed object. It is not cloned. - * If no data is provided, the constructed object will be empty, but still - * valid. - * @extends {jspb.Message} - * @constructor - */ -proto.BERTBuffers.Error = function(opt_data) { - jspb.Message.initialize(this, opt_data, 0, -1, null, null); -}; -goog.inherits(proto.BERTBuffers.Error, jspb.Message); -if (goog.DEBUG && !COMPILED) { - proto.BERTBuffers.Error.displayName = 'proto.BERTBuffers.Error'; -} if (jspb.Message.GENERATE_TO_OBJECT) { /** - * Creates an object representation of this proto suitable for use in Soy templates. + * Creates an object representation of this proto. * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. * To access a reserved field use, foo.pb_, eg, foo.pb_default. * For the list of reserved names please see: - * com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS. - * @param {boolean=} opt_includeInstance Whether to include the JSPB instance - * for transitional soy proto support: http://goto/soy-param-migration + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration * @return {!Object} */ proto.BERTBuffers.Error.prototype.toObject = function(opt_includeInstance) { @@ -546,8 +969,8 @@ proto.BERTBuffers.Error.prototype.toObject = function(opt_includeInstance) { /** * Static version of the {@see toObject} method. - * @param {boolean|undefined} includeInstance Whether to include the JSPB - * instance for transitional soy proto support: + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: * http://goto/soy-param-migration * @param {!proto.BERTBuffers.Error} msg The msg instance to transform. * @return {!Object} @@ -555,8 +978,8 @@ proto.BERTBuffers.Error.prototype.toObject = function(opt_includeInstance) { */ proto.BERTBuffers.Error.toObject = function(includeInstance, msg) { var f, obj = { - type: jspb.Message.getFieldWithDefault(msg, 1, 0), - message: jspb.Message.getFieldWithDefault(msg, 2, "") +type: jspb.Message.getFieldWithDefault(msg, 1, 0), +message: jspb.Message.getFieldWithDefault(msg, 2, "") }; if (includeInstance) { @@ -656,9 +1079,12 @@ proto.BERTBuffers.Error.prototype.getType = function() { }; -/** @param {!proto.BERTBuffers.ErrorType} value */ +/** + * @param {!proto.BERTBuffers.ErrorType} value + * @return {!proto.BERTBuffers.Error} returns this + */ proto.BERTBuffers.Error.prototype.setType = function(value) { - jspb.Message.setProto3EnumField(this, 1, value); + return jspb.Message.setProto3EnumField(this, 1, value); }; @@ -671,41 +1097,29 @@ proto.BERTBuffers.Error.prototype.getMessage = function() { }; -/** @param {string} value */ +/** + * @param {string} value + * @return {!proto.BERTBuffers.Error} returns this + */ proto.BERTBuffers.Error.prototype.setMessage = function(value) { - jspb.Message.setProto3StringField(this, 2, value); + return jspb.Message.setProto3StringField(this, 2, value); }; -/** - * Generated by JsPbCodeGenerator. - * @param {Array=} opt_data Optional initial data array, typically from a - * server response, or constructed directly in Javascript. The array is used - * in place and becomes part of the constructed object. It is not cloned. - * If no data is provided, the constructed object will be empty, but still - * valid. - * @extends {jspb.Message} - * @constructor - */ -proto.BERTBuffers.SheetReference = function(opt_data) { - jspb.Message.initialize(this, opt_data, 0, -1, null, null); -}; -goog.inherits(proto.BERTBuffers.SheetReference, jspb.Message); -if (goog.DEBUG && !COMPILED) { - proto.BERTBuffers.SheetReference.displayName = 'proto.BERTBuffers.SheetReference'; -} if (jspb.Message.GENERATE_TO_OBJECT) { /** - * Creates an object representation of this proto suitable for use in Soy templates. + * Creates an object representation of this proto. * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. * To access a reserved field use, foo.pb_, eg, foo.pb_default. * For the list of reserved names please see: - * com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS. - * @param {boolean=} opt_includeInstance Whether to include the JSPB instance - * for transitional soy proto support: http://goto/soy-param-migration + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration * @return {!Object} */ proto.BERTBuffers.SheetReference.prototype.toObject = function(opt_includeInstance) { @@ -715,8 +1129,8 @@ proto.BERTBuffers.SheetReference.prototype.toObject = function(opt_includeInstan /** * Static version of the {@see toObject} method. - * @param {boolean|undefined} includeInstance Whether to include the JSPB - * instance for transitional soy proto support: + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: * http://goto/soy-param-migration * @param {!proto.BERTBuffers.SheetReference} msg The msg instance to transform. * @return {!Object} @@ -724,11 +1138,11 @@ proto.BERTBuffers.SheetReference.prototype.toObject = function(opt_includeInstan */ proto.BERTBuffers.SheetReference.toObject = function(includeInstance, msg) { var f, obj = { - startRow: jspb.Message.getFieldWithDefault(msg, 1, 0), - startColumn: jspb.Message.getFieldWithDefault(msg, 2, 0), - endRow: jspb.Message.getFieldWithDefault(msg, 3, 0), - endColumn: jspb.Message.getFieldWithDefault(msg, 4, 0), - sheetId: jspb.Message.getFieldWithDefault(msg, 5, 0) +startRow: jspb.Message.getFieldWithDefault(msg, 1, 0), +startColumn: jspb.Message.getFieldWithDefault(msg, 2, 0), +endRow: jspb.Message.getFieldWithDefault(msg, 3, 0), +endColumn: jspb.Message.getFieldWithDefault(msg, 4, 0), +sheetId: jspb.Message.getFieldWithDefault(msg, 5, 0) }; if (includeInstance) { @@ -861,9 +1275,12 @@ proto.BERTBuffers.SheetReference.prototype.getStartRow = function() { }; -/** @param {number} value */ +/** + * @param {number} value + * @return {!proto.BERTBuffers.SheetReference} returns this + */ proto.BERTBuffers.SheetReference.prototype.setStartRow = function(value) { - jspb.Message.setProto3IntField(this, 1, value); + return jspb.Message.setProto3IntField(this, 1, value); }; @@ -876,9 +1293,12 @@ proto.BERTBuffers.SheetReference.prototype.getStartColumn = function() { }; -/** @param {number} value */ +/** + * @param {number} value + * @return {!proto.BERTBuffers.SheetReference} returns this + */ proto.BERTBuffers.SheetReference.prototype.setStartColumn = function(value) { - jspb.Message.setProto3IntField(this, 2, value); + return jspb.Message.setProto3IntField(this, 2, value); }; @@ -891,9 +1311,12 @@ proto.BERTBuffers.SheetReference.prototype.getEndRow = function() { }; -/** @param {number} value */ +/** + * @param {number} value + * @return {!proto.BERTBuffers.SheetReference} returns this + */ proto.BERTBuffers.SheetReference.prototype.setEndRow = function(value) { - jspb.Message.setProto3IntField(this, 3, value); + return jspb.Message.setProto3IntField(this, 3, value); }; @@ -906,9 +1329,12 @@ proto.BERTBuffers.SheetReference.prototype.getEndColumn = function() { }; -/** @param {number} value */ +/** + * @param {number} value + * @return {!proto.BERTBuffers.SheetReference} returns this + */ proto.BERTBuffers.SheetReference.prototype.setEndColumn = function(value) { - jspb.Message.setProto3IntField(this, 4, value); + return jspb.Message.setProto3IntField(this, 4, value); }; @@ -921,30 +1347,16 @@ proto.BERTBuffers.SheetReference.prototype.getSheetId = function() { }; -/** @param {number} value */ +/** + * @param {number} value + * @return {!proto.BERTBuffers.SheetReference} returns this + */ proto.BERTBuffers.SheetReference.prototype.setSheetId = function(value) { - jspb.Message.setProto3IntField(this, 5, value); + return jspb.Message.setProto3IntField(this, 5, value); }; -/** - * Generated by JsPbCodeGenerator. - * @param {Array=} opt_data Optional initial data array, typically from a - * server response, or constructed directly in Javascript. The array is used - * in place and becomes part of the constructed object. It is not cloned. - * If no data is provided, the constructed object will be empty, but still - * valid. - * @extends {jspb.Message} - * @constructor - */ -proto.BERTBuffers.Variable = function(opt_data) { - jspb.Message.initialize(this, opt_data, 0, -1, null, proto.BERTBuffers.Variable.oneofGroups_); -}; -goog.inherits(proto.BERTBuffers.Variable, jspb.Message); -if (goog.DEBUG && !COMPILED) { - proto.BERTBuffers.Variable.displayName = 'proto.BERTBuffers.Variable'; -} /** * Oneof group definitions for this message. Each group defines the field * numbers belonging to that group. When of these fields' value is set, all @@ -986,13 +1398,15 @@ proto.BERTBuffers.Variable.prototype.getValueCase = function() { if (jspb.Message.GENERATE_TO_OBJECT) { /** - * Creates an object representation of this proto suitable for use in Soy templates. + * Creates an object representation of this proto. * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. * To access a reserved field use, foo.pb_, eg, foo.pb_default. * For the list of reserved names please see: - * com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS. - * @param {boolean=} opt_includeInstance Whether to include the JSPB instance - * for transitional soy proto support: http://goto/soy-param-migration + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration * @return {!Object} */ proto.BERTBuffers.Variable.prototype.toObject = function(opt_includeInstance) { @@ -1002,8 +1416,8 @@ proto.BERTBuffers.Variable.prototype.toObject = function(opt_includeInstance) { /** * Static version of the {@see toObject} method. - * @param {boolean|undefined} includeInstance Whether to include the JSPB - * instance for transitional soy proto support: + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: * http://goto/soy-param-migration * @param {!proto.BERTBuffers.Variable} msg The msg instance to transform. * @return {!Object} @@ -1011,20 +1425,20 @@ proto.BERTBuffers.Variable.prototype.toObject = function(opt_includeInstance) { */ proto.BERTBuffers.Variable.toObject = function(includeInstance, msg) { var f, obj = { - nil: jspb.Message.getFieldWithDefault(msg, 1, false), - missing: jspb.Message.getFieldWithDefault(msg, 2, false), - err: (f = msg.getErr()) && proto.BERTBuffers.Error.toObject(includeInstance, f), - integer: jspb.Message.getFieldWithDefault(msg, 5, 0), - real: +jspb.Message.getFieldWithDefault(msg, 6, 0.0), - str: jspb.Message.getFieldWithDefault(msg, 7, ""), - pb_boolean: jspb.Message.getFieldWithDefault(msg, 8, false), - cpx: (f = msg.getCpx()) && proto.BERTBuffers.Complex.toObject(includeInstance, f), - arr: (f = msg.getArr()) && proto.BERTBuffers.Array.toObject(includeInstance, f), - ref: (f = msg.getRef()) && proto.BERTBuffers.SheetReference.toObject(includeInstance, f), - comPointer: (f = msg.getComPointer()) && proto.BERTBuffers.ExternalPointer.toObject(includeInstance, f), - graphics: (f = msg.getGraphics()) && proto.BERTBuffers.GraphicsUpdate.toObject(includeInstance, f), - cacheReference: jspb.Message.getFieldWithDefault(msg, 14, 0), - name: jspb.Message.getFieldWithDefault(msg, 15, "") +nil: (f = jspb.Message.getBooleanField(msg, 1)) == null ? undefined : f, +missing: (f = jspb.Message.getBooleanField(msg, 2)) == null ? undefined : f, +err: (f = msg.getErr()) && proto.BERTBuffers.Error.toObject(includeInstance, f), +integer: (f = jspb.Message.getField(msg, 5)) == null ? undefined : f, +real: (f = jspb.Message.getOptionalFloatingPointField(msg, 6)) == null ? undefined : f, +str: (f = jspb.Message.getField(msg, 7)) == null ? undefined : f, +pb_boolean: (f = jspb.Message.getBooleanField(msg, 8)) == null ? undefined : f, +cpx: (f = msg.getCpx()) && proto.BERTBuffers.Complex.toObject(includeInstance, f), +arr: (f = msg.getArr()) && proto.BERTBuffers.Array.toObject(includeInstance, f), +ref: (f = msg.getRef()) && proto.BERTBuffers.SheetReference.toObject(includeInstance, f), +comPointer: (f = msg.getComPointer()) && proto.BERTBuffers.ExternalPointer.toObject(includeInstance, f), +graphics: (f = msg.getGraphics()) && proto.BERTBuffers.GraphicsUpdate.toObject(includeInstance, f), +cacheReference: (f = jspb.Message.getField(msg, 14)) == null ? undefined : f, +name: jspb.Message.getFieldWithDefault(msg, 15, "") }; if (includeInstance) { @@ -1261,29 +1675,34 @@ proto.BERTBuffers.Variable.serializeBinaryToWriter = function(message, writer) { /** * optional bool nil = 1; - * Note that Boolean fields may be set to 0/1 when serialized from a Java server. - * You should avoid comparisons like {@code val === true/false} in those cases. * @return {boolean} */ proto.BERTBuffers.Variable.prototype.getNil = function() { - return /** @type {boolean} */ (jspb.Message.getFieldWithDefault(this, 1, false)); + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 1, false)); }; -/** @param {boolean} value */ +/** + * @param {boolean} value + * @return {!proto.BERTBuffers.Variable} returns this + */ proto.BERTBuffers.Variable.prototype.setNil = function(value) { - jspb.Message.setOneofField(this, 1, proto.BERTBuffers.Variable.oneofGroups_[0], value); + return jspb.Message.setOneofField(this, 1, proto.BERTBuffers.Variable.oneofGroups_[0], value); }; +/** + * Clears the field making it undefined. + * @return {!proto.BERTBuffers.Variable} returns this + */ proto.BERTBuffers.Variable.prototype.clearNil = function() { - jspb.Message.setOneofField(this, 1, proto.BERTBuffers.Variable.oneofGroups_[0], undefined); + return jspb.Message.setOneofField(this, 1, proto.BERTBuffers.Variable.oneofGroups_[0], undefined); }; /** * Returns whether this field is set. - * @return {!boolean} + * @return {boolean} */ proto.BERTBuffers.Variable.prototype.hasNil = function() { return jspb.Message.getField(this, 1) != null; @@ -1292,29 +1711,34 @@ proto.BERTBuffers.Variable.prototype.hasNil = function() { /** * optional bool missing = 2; - * Note that Boolean fields may be set to 0/1 when serialized from a Java server. - * You should avoid comparisons like {@code val === true/false} in those cases. * @return {boolean} */ proto.BERTBuffers.Variable.prototype.getMissing = function() { - return /** @type {boolean} */ (jspb.Message.getFieldWithDefault(this, 2, false)); + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 2, false)); }; -/** @param {boolean} value */ +/** + * @param {boolean} value + * @return {!proto.BERTBuffers.Variable} returns this + */ proto.BERTBuffers.Variable.prototype.setMissing = function(value) { - jspb.Message.setOneofField(this, 2, proto.BERTBuffers.Variable.oneofGroups_[0], value); + return jspb.Message.setOneofField(this, 2, proto.BERTBuffers.Variable.oneofGroups_[0], value); }; +/** + * Clears the field making it undefined. + * @return {!proto.BERTBuffers.Variable} returns this + */ proto.BERTBuffers.Variable.prototype.clearMissing = function() { - jspb.Message.setOneofField(this, 2, proto.BERTBuffers.Variable.oneofGroups_[0], undefined); + return jspb.Message.setOneofField(this, 2, proto.BERTBuffers.Variable.oneofGroups_[0], undefined); }; /** * Returns whether this field is set. - * @return {!boolean} + * @return {boolean} */ proto.BERTBuffers.Variable.prototype.hasMissing = function() { return jspb.Message.getField(this, 2) != null; @@ -1331,20 +1755,27 @@ proto.BERTBuffers.Variable.prototype.getErr = function() { }; -/** @param {?proto.BERTBuffers.Error|undefined} value */ +/** + * @param {?proto.BERTBuffers.Error|undefined} value + * @return {!proto.BERTBuffers.Variable} returns this +*/ proto.BERTBuffers.Variable.prototype.setErr = function(value) { - jspb.Message.setOneofWrapperField(this, 3, proto.BERTBuffers.Variable.oneofGroups_[0], value); + return jspb.Message.setOneofWrapperField(this, 3, proto.BERTBuffers.Variable.oneofGroups_[0], value); }; +/** + * Clears the message field making it undefined. + * @return {!proto.BERTBuffers.Variable} returns this + */ proto.BERTBuffers.Variable.prototype.clearErr = function() { - this.setErr(undefined); + return this.setErr(undefined); }; /** * Returns whether this field is set. - * @return {!boolean} + * @return {boolean} */ proto.BERTBuffers.Variable.prototype.hasErr = function() { return jspb.Message.getField(this, 3) != null; @@ -1360,20 +1791,27 @@ proto.BERTBuffers.Variable.prototype.getInteger = function() { }; -/** @param {number} value */ +/** + * @param {number} value + * @return {!proto.BERTBuffers.Variable} returns this + */ proto.BERTBuffers.Variable.prototype.setInteger = function(value) { - jspb.Message.setOneofField(this, 5, proto.BERTBuffers.Variable.oneofGroups_[0], value); + return jspb.Message.setOneofField(this, 5, proto.BERTBuffers.Variable.oneofGroups_[0], value); }; +/** + * Clears the field making it undefined. + * @return {!proto.BERTBuffers.Variable} returns this + */ proto.BERTBuffers.Variable.prototype.clearInteger = function() { - jspb.Message.setOneofField(this, 5, proto.BERTBuffers.Variable.oneofGroups_[0], undefined); + return jspb.Message.setOneofField(this, 5, proto.BERTBuffers.Variable.oneofGroups_[0], undefined); }; /** * Returns whether this field is set. - * @return {!boolean} + * @return {boolean} */ proto.BERTBuffers.Variable.prototype.hasInteger = function() { return jspb.Message.getField(this, 5) != null; @@ -1385,24 +1823,31 @@ proto.BERTBuffers.Variable.prototype.hasInteger = function() { * @return {number} */ proto.BERTBuffers.Variable.prototype.getReal = function() { - return /** @type {number} */ (+jspb.Message.getFieldWithDefault(this, 6, 0.0)); + return /** @type {number} */ (jspb.Message.getFloatingPointFieldWithDefault(this, 6, 0.0)); }; -/** @param {number} value */ +/** + * @param {number} value + * @return {!proto.BERTBuffers.Variable} returns this + */ proto.BERTBuffers.Variable.prototype.setReal = function(value) { - jspb.Message.setOneofField(this, 6, proto.BERTBuffers.Variable.oneofGroups_[0], value); + return jspb.Message.setOneofField(this, 6, proto.BERTBuffers.Variable.oneofGroups_[0], value); }; +/** + * Clears the field making it undefined. + * @return {!proto.BERTBuffers.Variable} returns this + */ proto.BERTBuffers.Variable.prototype.clearReal = function() { - jspb.Message.setOneofField(this, 6, proto.BERTBuffers.Variable.oneofGroups_[0], undefined); + return jspb.Message.setOneofField(this, 6, proto.BERTBuffers.Variable.oneofGroups_[0], undefined); }; /** * Returns whether this field is set. - * @return {!boolean} + * @return {boolean} */ proto.BERTBuffers.Variable.prototype.hasReal = function() { return jspb.Message.getField(this, 6) != null; @@ -1418,20 +1863,27 @@ proto.BERTBuffers.Variable.prototype.getStr = function() { }; -/** @param {string} value */ +/** + * @param {string} value + * @return {!proto.BERTBuffers.Variable} returns this + */ proto.BERTBuffers.Variable.prototype.setStr = function(value) { - jspb.Message.setOneofField(this, 7, proto.BERTBuffers.Variable.oneofGroups_[0], value); + return jspb.Message.setOneofField(this, 7, proto.BERTBuffers.Variable.oneofGroups_[0], value); }; +/** + * Clears the field making it undefined. + * @return {!proto.BERTBuffers.Variable} returns this + */ proto.BERTBuffers.Variable.prototype.clearStr = function() { - jspb.Message.setOneofField(this, 7, proto.BERTBuffers.Variable.oneofGroups_[0], undefined); + return jspb.Message.setOneofField(this, 7, proto.BERTBuffers.Variable.oneofGroups_[0], undefined); }; /** * Returns whether this field is set. - * @return {!boolean} + * @return {boolean} */ proto.BERTBuffers.Variable.prototype.hasStr = function() { return jspb.Message.getField(this, 7) != null; @@ -1440,29 +1892,34 @@ proto.BERTBuffers.Variable.prototype.hasStr = function() { /** * optional bool boolean = 8; - * Note that Boolean fields may be set to 0/1 when serialized from a Java server. - * You should avoid comparisons like {@code val === true/false} in those cases. * @return {boolean} */ proto.BERTBuffers.Variable.prototype.getBoolean = function() { - return /** @type {boolean} */ (jspb.Message.getFieldWithDefault(this, 8, false)); + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 8, false)); }; -/** @param {boolean} value */ +/** + * @param {boolean} value + * @return {!proto.BERTBuffers.Variable} returns this + */ proto.BERTBuffers.Variable.prototype.setBoolean = function(value) { - jspb.Message.setOneofField(this, 8, proto.BERTBuffers.Variable.oneofGroups_[0], value); + return jspb.Message.setOneofField(this, 8, proto.BERTBuffers.Variable.oneofGroups_[0], value); }; +/** + * Clears the field making it undefined. + * @return {!proto.BERTBuffers.Variable} returns this + */ proto.BERTBuffers.Variable.prototype.clearBoolean = function() { - jspb.Message.setOneofField(this, 8, proto.BERTBuffers.Variable.oneofGroups_[0], undefined); + return jspb.Message.setOneofField(this, 8, proto.BERTBuffers.Variable.oneofGroups_[0], undefined); }; /** * Returns whether this field is set. - * @return {!boolean} + * @return {boolean} */ proto.BERTBuffers.Variable.prototype.hasBoolean = function() { return jspb.Message.getField(this, 8) != null; @@ -1479,20 +1936,27 @@ proto.BERTBuffers.Variable.prototype.getCpx = function() { }; -/** @param {?proto.BERTBuffers.Complex|undefined} value */ +/** + * @param {?proto.BERTBuffers.Complex|undefined} value + * @return {!proto.BERTBuffers.Variable} returns this +*/ proto.BERTBuffers.Variable.prototype.setCpx = function(value) { - jspb.Message.setOneofWrapperField(this, 9, proto.BERTBuffers.Variable.oneofGroups_[0], value); + return jspb.Message.setOneofWrapperField(this, 9, proto.BERTBuffers.Variable.oneofGroups_[0], value); }; +/** + * Clears the message field making it undefined. + * @return {!proto.BERTBuffers.Variable} returns this + */ proto.BERTBuffers.Variable.prototype.clearCpx = function() { - this.setCpx(undefined); + return this.setCpx(undefined); }; /** * Returns whether this field is set. - * @return {!boolean} + * @return {boolean} */ proto.BERTBuffers.Variable.prototype.hasCpx = function() { return jspb.Message.getField(this, 9) != null; @@ -1509,20 +1973,27 @@ proto.BERTBuffers.Variable.prototype.getArr = function() { }; -/** @param {?proto.BERTBuffers.Array|undefined} value */ +/** + * @param {?proto.BERTBuffers.Array|undefined} value + * @return {!proto.BERTBuffers.Variable} returns this +*/ proto.BERTBuffers.Variable.prototype.setArr = function(value) { - jspb.Message.setOneofWrapperField(this, 10, proto.BERTBuffers.Variable.oneofGroups_[0], value); + return jspb.Message.setOneofWrapperField(this, 10, proto.BERTBuffers.Variable.oneofGroups_[0], value); }; +/** + * Clears the message field making it undefined. + * @return {!proto.BERTBuffers.Variable} returns this + */ proto.BERTBuffers.Variable.prototype.clearArr = function() { - this.setArr(undefined); + return this.setArr(undefined); }; /** * Returns whether this field is set. - * @return {!boolean} + * @return {boolean} */ proto.BERTBuffers.Variable.prototype.hasArr = function() { return jspb.Message.getField(this, 10) != null; @@ -1539,20 +2010,27 @@ proto.BERTBuffers.Variable.prototype.getRef = function() { }; -/** @param {?proto.BERTBuffers.SheetReference|undefined} value */ +/** + * @param {?proto.BERTBuffers.SheetReference|undefined} value + * @return {!proto.BERTBuffers.Variable} returns this +*/ proto.BERTBuffers.Variable.prototype.setRef = function(value) { - jspb.Message.setOneofWrapperField(this, 11, proto.BERTBuffers.Variable.oneofGroups_[0], value); + return jspb.Message.setOneofWrapperField(this, 11, proto.BERTBuffers.Variable.oneofGroups_[0], value); }; +/** + * Clears the message field making it undefined. + * @return {!proto.BERTBuffers.Variable} returns this + */ proto.BERTBuffers.Variable.prototype.clearRef = function() { - this.setRef(undefined); + return this.setRef(undefined); }; /** * Returns whether this field is set. - * @return {!boolean} + * @return {boolean} */ proto.BERTBuffers.Variable.prototype.hasRef = function() { return jspb.Message.getField(this, 11) != null; @@ -1569,20 +2047,27 @@ proto.BERTBuffers.Variable.prototype.getComPointer = function() { }; -/** @param {?proto.BERTBuffers.ExternalPointer|undefined} value */ +/** + * @param {?proto.BERTBuffers.ExternalPointer|undefined} value + * @return {!proto.BERTBuffers.Variable} returns this +*/ proto.BERTBuffers.Variable.prototype.setComPointer = function(value) { - jspb.Message.setOneofWrapperField(this, 12, proto.BERTBuffers.Variable.oneofGroups_[0], value); + return jspb.Message.setOneofWrapperField(this, 12, proto.BERTBuffers.Variable.oneofGroups_[0], value); }; +/** + * Clears the message field making it undefined. + * @return {!proto.BERTBuffers.Variable} returns this + */ proto.BERTBuffers.Variable.prototype.clearComPointer = function() { - this.setComPointer(undefined); + return this.setComPointer(undefined); }; /** * Returns whether this field is set. - * @return {!boolean} + * @return {boolean} */ proto.BERTBuffers.Variable.prototype.hasComPointer = function() { return jspb.Message.getField(this, 12) != null; @@ -1599,20 +2084,27 @@ proto.BERTBuffers.Variable.prototype.getGraphics = function() { }; -/** @param {?proto.BERTBuffers.GraphicsUpdate|undefined} value */ +/** + * @param {?proto.BERTBuffers.GraphicsUpdate|undefined} value + * @return {!proto.BERTBuffers.Variable} returns this +*/ proto.BERTBuffers.Variable.prototype.setGraphics = function(value) { - jspb.Message.setOneofWrapperField(this, 13, proto.BERTBuffers.Variable.oneofGroups_[0], value); + return jspb.Message.setOneofWrapperField(this, 13, proto.BERTBuffers.Variable.oneofGroups_[0], value); }; +/** + * Clears the message field making it undefined. + * @return {!proto.BERTBuffers.Variable} returns this + */ proto.BERTBuffers.Variable.prototype.clearGraphics = function() { - this.setGraphics(undefined); + return this.setGraphics(undefined); }; /** * Returns whether this field is set. - * @return {!boolean} + * @return {boolean} */ proto.BERTBuffers.Variable.prototype.hasGraphics = function() { return jspb.Message.getField(this, 13) != null; @@ -1628,20 +2120,27 @@ proto.BERTBuffers.Variable.prototype.getCacheReference = function() { }; -/** @param {number} value */ +/** + * @param {number} value + * @return {!proto.BERTBuffers.Variable} returns this + */ proto.BERTBuffers.Variable.prototype.setCacheReference = function(value) { - jspb.Message.setOneofField(this, 14, proto.BERTBuffers.Variable.oneofGroups_[0], value); + return jspb.Message.setOneofField(this, 14, proto.BERTBuffers.Variable.oneofGroups_[0], value); }; +/** + * Clears the field making it undefined. + * @return {!proto.BERTBuffers.Variable} returns this + */ proto.BERTBuffers.Variable.prototype.clearCacheReference = function() { - jspb.Message.setOneofField(this, 14, proto.BERTBuffers.Variable.oneofGroups_[0], undefined); + return jspb.Message.setOneofField(this, 14, proto.BERTBuffers.Variable.oneofGroups_[0], undefined); }; /** * Returns whether this field is set. - * @return {!boolean} + * @return {boolean} */ proto.BERTBuffers.Variable.prototype.hasCacheReference = function() { return jspb.Message.getField(this, 14) != null; @@ -1657,30 +2156,16 @@ proto.BERTBuffers.Variable.prototype.getName = function() { }; -/** @param {string} value */ +/** + * @param {string} value + * @return {!proto.BERTBuffers.Variable} returns this + */ proto.BERTBuffers.Variable.prototype.setName = function(value) { - jspb.Message.setProto3StringField(this, 15, value); + return jspb.Message.setProto3StringField(this, 15, value); }; -/** - * Generated by JsPbCodeGenerator. - * @param {Array=} opt_data Optional initial data array, typically from a - * server response, or constructed directly in Javascript. The array is used - * in place and becomes part of the constructed object. It is not cloned. - * If no data is provided, the constructed object will be empty, but still - * valid. - * @extends {jspb.Message} - * @constructor - */ -proto.BERTBuffers.Code = function(opt_data) { - jspb.Message.initialize(this, opt_data, 0, -1, proto.BERTBuffers.Code.repeatedFields_, null); -}; -goog.inherits(proto.BERTBuffers.Code, jspb.Message); -if (goog.DEBUG && !COMPILED) { - proto.BERTBuffers.Code.displayName = 'proto.BERTBuffers.Code'; -} /** * List of repeated fields within this message type. * @private {!Array} @@ -1692,13 +2177,15 @@ proto.BERTBuffers.Code.repeatedFields_ = [1]; if (jspb.Message.GENERATE_TO_OBJECT) { /** - * Creates an object representation of this proto suitable for use in Soy templates. + * Creates an object representation of this proto. * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. * To access a reserved field use, foo.pb_, eg, foo.pb_default. * For the list of reserved names please see: - * com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS. - * @param {boolean=} opt_includeInstance Whether to include the JSPB instance - * for transitional soy proto support: http://goto/soy-param-migration + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration * @return {!Object} */ proto.BERTBuffers.Code.prototype.toObject = function(opt_includeInstance) { @@ -1708,8 +2195,8 @@ proto.BERTBuffers.Code.prototype.toObject = function(opt_includeInstance) { /** * Static version of the {@see toObject} method. - * @param {boolean|undefined} includeInstance Whether to include the JSPB - * instance for transitional soy proto support: + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: * http://goto/soy-param-migration * @param {!proto.BERTBuffers.Code} msg The msg instance to transform. * @return {!Object} @@ -1717,8 +2204,8 @@ proto.BERTBuffers.Code.prototype.toObject = function(opt_includeInstance) { */ proto.BERTBuffers.Code.toObject = function(includeInstance, msg) { var f, obj = { - lineList: jspb.Message.getRepeatedField(msg, 1), - startup: jspb.Message.getFieldWithDefault(msg, 2, false) +lineList: (f = jspb.Message.getRepeatedField(msg, 1)) == null ? undefined : f, +startup: jspb.Message.getBooleanFieldWithDefault(msg, 2, false) }; if (includeInstance) { @@ -1811,68 +2298,60 @@ proto.BERTBuffers.Code.serializeBinaryToWriter = function(message, writer) { /** * repeated string line = 1; - * @return {!Array.} + * @return {!Array} */ proto.BERTBuffers.Code.prototype.getLineList = function() { - return /** @type {!Array.} */ (jspb.Message.getRepeatedField(this, 1)); + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 1)); }; -/** @param {!Array.} value */ +/** + * @param {!Array} value + * @return {!proto.BERTBuffers.Code} returns this + */ proto.BERTBuffers.Code.prototype.setLineList = function(value) { - jspb.Message.setField(this, 1, value || []); + return jspb.Message.setField(this, 1, value || []); }; /** - * @param {!string} value + * @param {string} value * @param {number=} opt_index + * @return {!proto.BERTBuffers.Code} returns this */ proto.BERTBuffers.Code.prototype.addLine = function(value, opt_index) { - jspb.Message.addToRepeatedField(this, 1, value, opt_index); + return jspb.Message.addToRepeatedField(this, 1, value, opt_index); }; +/** + * Clears the list making it empty but non-null. + * @return {!proto.BERTBuffers.Code} returns this + */ proto.BERTBuffers.Code.prototype.clearLineList = function() { - this.setLineList([]); + return this.setLineList([]); }; /** * optional bool startup = 2; - * Note that Boolean fields may be set to 0/1 when serialized from a Java server. - * You should avoid comparisons like {@code val === true/false} in those cases. * @return {boolean} */ proto.BERTBuffers.Code.prototype.getStartup = function() { - return /** @type {boolean} */ (jspb.Message.getFieldWithDefault(this, 2, false)); + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 2, false)); }; -/** @param {boolean} value */ +/** + * @param {boolean} value + * @return {!proto.BERTBuffers.Code} returns this + */ proto.BERTBuffers.Code.prototype.setStartup = function(value) { - jspb.Message.setProto3BooleanField(this, 2, value); + return jspb.Message.setProto3BooleanField(this, 2, value); }; -/** - * Generated by JsPbCodeGenerator. - * @param {Array=} opt_data Optional initial data array, typically from a - * server response, or constructed directly in Javascript. The array is used - * in place and becomes part of the constructed object. It is not cloned. - * If no data is provided, the constructed object will be empty, but still - * valid. - * @extends {jspb.Message} - * @constructor - */ -proto.BERTBuffers.CompositeFunctionCall = function(opt_data) { - jspb.Message.initialize(this, opt_data, 0, -1, proto.BERTBuffers.CompositeFunctionCall.repeatedFields_, null); -}; -goog.inherits(proto.BERTBuffers.CompositeFunctionCall, jspb.Message); -if (goog.DEBUG && !COMPILED) { - proto.BERTBuffers.CompositeFunctionCall.displayName = 'proto.BERTBuffers.CompositeFunctionCall'; -} /** * List of repeated fields within this message type. * @private {!Array} @@ -1884,13 +2363,15 @@ proto.BERTBuffers.CompositeFunctionCall.repeatedFields_ = [2]; if (jspb.Message.GENERATE_TO_OBJECT) { /** - * Creates an object representation of this proto suitable for use in Soy templates. + * Creates an object representation of this proto. * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. * To access a reserved field use, foo.pb_, eg, foo.pb_default. * For the list of reserved names please see: - * com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS. - * @param {boolean=} opt_includeInstance Whether to include the JSPB instance - * for transitional soy proto support: http://goto/soy-param-migration + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration * @return {!Object} */ proto.BERTBuffers.CompositeFunctionCall.prototype.toObject = function(opt_includeInstance) { @@ -1900,8 +2381,8 @@ proto.BERTBuffers.CompositeFunctionCall.prototype.toObject = function(opt_includ /** * Static version of the {@see toObject} method. - * @param {boolean|undefined} includeInstance Whether to include the JSPB - * instance for transitional soy proto support: + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: * http://goto/soy-param-migration * @param {!proto.BERTBuffers.CompositeFunctionCall} msg The msg instance to transform. * @return {!Object} @@ -1909,14 +2390,14 @@ proto.BERTBuffers.CompositeFunctionCall.prototype.toObject = function(opt_includ */ proto.BERTBuffers.CompositeFunctionCall.toObject = function(includeInstance, msg) { var f, obj = { - pb_function: jspb.Message.getFieldWithDefault(msg, 1, ""), - argumentsList: jspb.Message.toObjectList(msg.getArgumentsList(), +pb_function: jspb.Message.getFieldWithDefault(msg, 1, ""), +argumentsList: jspb.Message.toObjectList(msg.getArgumentsList(), proto.BERTBuffers.Variable.toObject, includeInstance), - pointer: jspb.Message.getFieldWithDefault(msg, 3, 0), - index: jspb.Message.getFieldWithDefault(msg, 4, 0), - type: jspb.Message.getFieldWithDefault(msg, 5, 0), - target: jspb.Message.getFieldWithDefault(msg, 6, 0), - flags: jspb.Message.getFieldWithDefault(msg, 7, 0) +pointer: jspb.Message.getFieldWithDefault(msg, 3, 0), +index: jspb.Message.getFieldWithDefault(msg, 4, 0), +type: jspb.Message.getFieldWithDefault(msg, 5, 0), +target: jspb.Message.getFieldWithDefault(msg, 6, 0), +flags: jspb.Message.getFieldWithDefault(msg, 7, 0) }; if (includeInstance) { @@ -2073,25 +2554,31 @@ proto.BERTBuffers.CompositeFunctionCall.prototype.getFunction = function() { }; -/** @param {string} value */ +/** + * @param {string} value + * @return {!proto.BERTBuffers.CompositeFunctionCall} returns this + */ proto.BERTBuffers.CompositeFunctionCall.prototype.setFunction = function(value) { - jspb.Message.setProto3StringField(this, 1, value); + return jspb.Message.setProto3StringField(this, 1, value); }; /** * repeated Variable arguments = 2; - * @return {!Array.} + * @return {!Array} */ proto.BERTBuffers.CompositeFunctionCall.prototype.getArgumentsList = function() { - return /** @type{!Array.} */ ( + return /** @type{!Array} */ ( jspb.Message.getRepeatedWrapperField(this, proto.BERTBuffers.Variable, 2)); }; -/** @param {!Array.} value */ +/** + * @param {!Array} value + * @return {!proto.BERTBuffers.CompositeFunctionCall} returns this +*/ proto.BERTBuffers.CompositeFunctionCall.prototype.setArgumentsList = function(value) { - jspb.Message.setRepeatedWrapperField(this, 2, value); + return jspb.Message.setRepeatedWrapperField(this, 2, value); }; @@ -2105,8 +2592,12 @@ proto.BERTBuffers.CompositeFunctionCall.prototype.addArguments = function(opt_va }; +/** + * Clears the list making it empty but non-null. + * @return {!proto.BERTBuffers.CompositeFunctionCall} returns this + */ proto.BERTBuffers.CompositeFunctionCall.prototype.clearArgumentsList = function() { - this.setArgumentsList([]); + return this.setArgumentsList([]); }; @@ -2119,9 +2610,12 @@ proto.BERTBuffers.CompositeFunctionCall.prototype.getPointer = function() { }; -/** @param {number} value */ +/** + * @param {number} value + * @return {!proto.BERTBuffers.CompositeFunctionCall} returns this + */ proto.BERTBuffers.CompositeFunctionCall.prototype.setPointer = function(value) { - jspb.Message.setProto3IntField(this, 3, value); + return jspb.Message.setProto3IntField(this, 3, value); }; @@ -2134,9 +2628,12 @@ proto.BERTBuffers.CompositeFunctionCall.prototype.getIndex = function() { }; -/** @param {number} value */ +/** + * @param {number} value + * @return {!proto.BERTBuffers.CompositeFunctionCall} returns this + */ proto.BERTBuffers.CompositeFunctionCall.prototype.setIndex = function(value) { - jspb.Message.setProto3IntField(this, 4, value); + return jspb.Message.setProto3IntField(this, 4, value); }; @@ -2149,9 +2646,12 @@ proto.BERTBuffers.CompositeFunctionCall.prototype.getType = function() { }; -/** @param {!proto.BERTBuffers.CallType} value */ +/** + * @param {!proto.BERTBuffers.CallType} value + * @return {!proto.BERTBuffers.CompositeFunctionCall} returns this + */ proto.BERTBuffers.CompositeFunctionCall.prototype.setType = function(value) { - jspb.Message.setProto3EnumField(this, 5, value); + return jspb.Message.setProto3EnumField(this, 5, value); }; @@ -2164,9 +2664,12 @@ proto.BERTBuffers.CompositeFunctionCall.prototype.getTarget = function() { }; -/** @param {!proto.BERTBuffers.CallTarget} value */ +/** + * @param {!proto.BERTBuffers.CallTarget} value + * @return {!proto.BERTBuffers.CompositeFunctionCall} returns this + */ proto.BERTBuffers.CompositeFunctionCall.prototype.setTarget = function(value) { - jspb.Message.setProto3EnumField(this, 6, value); + return jspb.Message.setProto3EnumField(this, 6, value); }; @@ -2179,41 +2682,29 @@ proto.BERTBuffers.CompositeFunctionCall.prototype.getFlags = function() { }; -/** @param {number} value */ +/** + * @param {number} value + * @return {!proto.BERTBuffers.CompositeFunctionCall} returns this + */ proto.BERTBuffers.CompositeFunctionCall.prototype.setFlags = function(value) { - jspb.Message.setProto3IntField(this, 7, value); + return jspb.Message.setProto3IntField(this, 7, value); }; -/** - * Generated by JsPbCodeGenerator. - * @param {Array=} opt_data Optional initial data array, typically from a - * server response, or constructed directly in Javascript. The array is used - * in place and becomes part of the constructed object. It is not cloned. - * If no data is provided, the constructed object will be empty, but still - * valid. - * @extends {jspb.Message} - * @constructor - */ -proto.BERTBuffers.GraphicsUpdate = function(opt_data) { - jspb.Message.initialize(this, opt_data, 0, -1, null, null); -}; -goog.inherits(proto.BERTBuffers.GraphicsUpdate, jspb.Message); -if (goog.DEBUG && !COMPILED) { - proto.BERTBuffers.GraphicsUpdate.displayName = 'proto.BERTBuffers.GraphicsUpdate'; -} if (jspb.Message.GENERATE_TO_OBJECT) { /** - * Creates an object representation of this proto suitable for use in Soy templates. + * Creates an object representation of this proto. * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. * To access a reserved field use, foo.pb_, eg, foo.pb_default. * For the list of reserved names please see: - * com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS. - * @param {boolean=} opt_includeInstance Whether to include the JSPB instance - * for transitional soy proto support: http://goto/soy-param-migration + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration * @return {!Object} */ proto.BERTBuffers.GraphicsUpdate.prototype.toObject = function(opt_includeInstance) { @@ -2223,8 +2714,8 @@ proto.BERTBuffers.GraphicsUpdate.prototype.toObject = function(opt_includeInstan /** * Static version of the {@see toObject} method. - * @param {boolean|undefined} includeInstance Whether to include the JSPB - * instance for transitional soy proto support: + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: * http://goto/soy-param-migration * @param {!proto.BERTBuffers.GraphicsUpdate} msg The msg instance to transform. * @return {!Object} @@ -2232,11 +2723,11 @@ proto.BERTBuffers.GraphicsUpdate.prototype.toObject = function(opt_includeInstan */ proto.BERTBuffers.GraphicsUpdate.toObject = function(includeInstance, msg) { var f, obj = { - command: jspb.Message.getFieldWithDefault(msg, 1, 0), - name: jspb.Message.getFieldWithDefault(msg, 2, ""), - path: jspb.Message.getFieldWithDefault(msg, 3, ""), - width: jspb.Message.getFieldWithDefault(msg, 4, 0), - height: jspb.Message.getFieldWithDefault(msg, 5, 0) +command: jspb.Message.getFieldWithDefault(msg, 1, 0), +name: jspb.Message.getFieldWithDefault(msg, 2, ""), +path: jspb.Message.getFieldWithDefault(msg, 3, ""), +width: jspb.Message.getFieldWithDefault(msg, 4, 0), +height: jspb.Message.getFieldWithDefault(msg, 5, 0) }; if (includeInstance) { @@ -2369,9 +2860,12 @@ proto.BERTBuffers.GraphicsUpdate.prototype.getCommand = function() { }; -/** @param {!proto.BERTBuffers.GraphicsUpdateCommand} value */ +/** + * @param {!proto.BERTBuffers.GraphicsUpdateCommand} value + * @return {!proto.BERTBuffers.GraphicsUpdate} returns this + */ proto.BERTBuffers.GraphicsUpdate.prototype.setCommand = function(value) { - jspb.Message.setProto3EnumField(this, 1, value); + return jspb.Message.setProto3EnumField(this, 1, value); }; @@ -2384,9 +2878,12 @@ proto.BERTBuffers.GraphicsUpdate.prototype.getName = function() { }; -/** @param {string} value */ +/** + * @param {string} value + * @return {!proto.BERTBuffers.GraphicsUpdate} returns this + */ proto.BERTBuffers.GraphicsUpdate.prototype.setName = function(value) { - jspb.Message.setProto3StringField(this, 2, value); + return jspb.Message.setProto3StringField(this, 2, value); }; @@ -2399,9 +2896,12 @@ proto.BERTBuffers.GraphicsUpdate.prototype.getPath = function() { }; -/** @param {string} value */ +/** + * @param {string} value + * @return {!proto.BERTBuffers.GraphicsUpdate} returns this + */ proto.BERTBuffers.GraphicsUpdate.prototype.setPath = function(value) { - jspb.Message.setProto3StringField(this, 3, value); + return jspb.Message.setProto3StringField(this, 3, value); }; @@ -2414,9 +2914,12 @@ proto.BERTBuffers.GraphicsUpdate.prototype.getWidth = function() { }; -/** @param {number} value */ +/** + * @param {number} value + * @return {!proto.BERTBuffers.GraphicsUpdate} returns this + */ proto.BERTBuffers.GraphicsUpdate.prototype.setWidth = function(value) { - jspb.Message.setProto3IntField(this, 4, value); + return jspb.Message.setProto3IntField(this, 4, value); }; @@ -2429,30 +2932,16 @@ proto.BERTBuffers.GraphicsUpdate.prototype.getHeight = function() { }; -/** @param {number} value */ +/** + * @param {number} value + * @return {!proto.BERTBuffers.GraphicsUpdate} returns this + */ proto.BERTBuffers.GraphicsUpdate.prototype.setHeight = function(value) { - jspb.Message.setProto3IntField(this, 5, value); + return jspb.Message.setProto3IntField(this, 5, value); }; -/** - * Generated by JsPbCodeGenerator. - * @param {Array=} opt_data Optional initial data array, typically from a - * server response, or constructed directly in Javascript. The array is used - * in place and becomes part of the constructed object. It is not cloned. - * If no data is provided, the constructed object will be empty, but still - * valid. - * @extends {jspb.Message} - * @constructor - */ -proto.BERTBuffers.GraphicsCommand = function(opt_data) { - jspb.Message.initialize(this, opt_data, 0, -1, proto.BERTBuffers.GraphicsCommand.repeatedFields_, null); -}; -goog.inherits(proto.BERTBuffers.GraphicsCommand, jspb.Message); -if (goog.DEBUG && !COMPILED) { - proto.BERTBuffers.GraphicsCommand.displayName = 'proto.BERTBuffers.GraphicsCommand'; -} /** * List of repeated fields within this message type. * @private {!Array} @@ -2464,13 +2953,15 @@ proto.BERTBuffers.GraphicsCommand.repeatedFields_ = [2,3]; if (jspb.Message.GENERATE_TO_OBJECT) { /** - * Creates an object representation of this proto suitable for use in Soy templates. + * Creates an object representation of this proto. * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. * To access a reserved field use, foo.pb_, eg, foo.pb_default. * For the list of reserved names please see: - * com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS. - * @param {boolean=} opt_includeInstance Whether to include the JSPB instance - * for transitional soy proto support: http://goto/soy-param-migration + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration * @return {!Object} */ proto.BERTBuffers.GraphicsCommand.prototype.toObject = function(opt_includeInstance) { @@ -2480,8 +2971,8 @@ proto.BERTBuffers.GraphicsCommand.prototype.toObject = function(opt_includeInsta /** * Static version of the {@see toObject} method. - * @param {boolean|undefined} includeInstance Whether to include the JSPB - * instance for transitional soy proto support: + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: * http://goto/soy-param-migration * @param {!proto.BERTBuffers.GraphicsCommand} msg The msg instance to transform. * @return {!Object} @@ -2489,18 +2980,18 @@ proto.BERTBuffers.GraphicsCommand.prototype.toObject = function(opt_includeInsta */ proto.BERTBuffers.GraphicsCommand.toObject = function(includeInstance, msg) { var f, obj = { - command: jspb.Message.getFieldWithDefault(msg, 1, ""), - xList: jspb.Message.getRepeatedFloatingPointField(msg, 2), - yList: jspb.Message.getRepeatedFloatingPointField(msg, 3), - r: +jspb.Message.getFieldWithDefault(msg, 4, 0.0), - rot: +jspb.Message.getFieldWithDefault(msg, 5, 0.0), - text: jspb.Message.getFieldWithDefault(msg, 6, ""), - filled: jspb.Message.getFieldWithDefault(msg, 7, false), - hadj: +jspb.Message.getFieldWithDefault(msg, 8, 0.0), - raster: msg.getRaster_asB64(), - interpolate: jspb.Message.getFieldWithDefault(msg, 10, false), - deviceType: jspb.Message.getFieldWithDefault(msg, 14, ""), - context: (f = msg.getContext()) && proto.BERTBuffers.GraphicsContext.toObject(includeInstance, f) +command: jspb.Message.getFieldWithDefault(msg, 1, ""), +xList: (f = jspb.Message.getRepeatedFloatingPointField(msg, 2)) == null ? undefined : f, +yList: (f = jspb.Message.getRepeatedFloatingPointField(msg, 3)) == null ? undefined : f, +r: jspb.Message.getFloatingPointFieldWithDefault(msg, 4, 0.0), +rot: jspb.Message.getFloatingPointFieldWithDefault(msg, 5, 0.0), +text: jspb.Message.getFieldWithDefault(msg, 6, ""), +filled: jspb.Message.getBooleanFieldWithDefault(msg, 7, false), +hadj: jspb.Message.getFloatingPointFieldWithDefault(msg, 8, 0.0), +raster: msg.getRaster_asB64(), +interpolate: jspb.Message.getBooleanFieldWithDefault(msg, 10, false), +deviceType: jspb.Message.getFieldWithDefault(msg, 14, ""), +context: (f = msg.getContext()) && proto.BERTBuffers.GraphicsContext.toObject(includeInstance, f) }; if (includeInstance) { @@ -2542,12 +3033,16 @@ proto.BERTBuffers.GraphicsCommand.deserializeBinaryFromReader = function(msg, re msg.setCommand(value); break; case 2: - var value = /** @type {!Array.} */ (reader.readPackedDouble()); - msg.setXList(value); + var values = /** @type {!Array} */ (reader.isDelimited() ? reader.readPackedDouble() : [reader.readDouble()]); + for (var i = 0; i < values.length; i++) { + msg.addX(values[i]); + } break; case 3: - var value = /** @type {!Array.} */ (reader.readPackedDouble()); - msg.setYList(value); + var values = /** @type {!Array} */ (reader.isDelimited() ? reader.readPackedDouble() : [reader.readDouble()]); + for (var i = 0; i < values.length; i++) { + msg.addY(values[i]); + } break; case 4: var value = /** @type {number} */ (reader.readDouble()); @@ -2712,67 +3207,86 @@ proto.BERTBuffers.GraphicsCommand.prototype.getCommand = function() { }; -/** @param {string} value */ +/** + * @param {string} value + * @return {!proto.BERTBuffers.GraphicsCommand} returns this + */ proto.BERTBuffers.GraphicsCommand.prototype.setCommand = function(value) { - jspb.Message.setProto3StringField(this, 1, value); + return jspb.Message.setProto3StringField(this, 1, value); }; /** * repeated double x = 2; - * @return {!Array.} + * @return {!Array} */ proto.BERTBuffers.GraphicsCommand.prototype.getXList = function() { - return /** @type {!Array.} */ (jspb.Message.getRepeatedFloatingPointField(this, 2)); + return /** @type {!Array} */ (jspb.Message.getRepeatedFloatingPointField(this, 2)); }; -/** @param {!Array.} value */ +/** + * @param {!Array} value + * @return {!proto.BERTBuffers.GraphicsCommand} returns this + */ proto.BERTBuffers.GraphicsCommand.prototype.setXList = function(value) { - jspb.Message.setField(this, 2, value || []); + return jspb.Message.setField(this, 2, value || []); }; /** - * @param {!number} value + * @param {number} value * @param {number=} opt_index + * @return {!proto.BERTBuffers.GraphicsCommand} returns this */ proto.BERTBuffers.GraphicsCommand.prototype.addX = function(value, opt_index) { - jspb.Message.addToRepeatedField(this, 2, value, opt_index); + return jspb.Message.addToRepeatedField(this, 2, value, opt_index); }; +/** + * Clears the list making it empty but non-null. + * @return {!proto.BERTBuffers.GraphicsCommand} returns this + */ proto.BERTBuffers.GraphicsCommand.prototype.clearXList = function() { - this.setXList([]); + return this.setXList([]); }; /** * repeated double y = 3; - * @return {!Array.} + * @return {!Array} */ proto.BERTBuffers.GraphicsCommand.prototype.getYList = function() { - return /** @type {!Array.} */ (jspb.Message.getRepeatedFloatingPointField(this, 3)); + return /** @type {!Array} */ (jspb.Message.getRepeatedFloatingPointField(this, 3)); }; -/** @param {!Array.} value */ +/** + * @param {!Array} value + * @return {!proto.BERTBuffers.GraphicsCommand} returns this + */ proto.BERTBuffers.GraphicsCommand.prototype.setYList = function(value) { - jspb.Message.setField(this, 3, value || []); + return jspb.Message.setField(this, 3, value || []); }; /** - * @param {!number} value + * @param {number} value * @param {number=} opt_index + * @return {!proto.BERTBuffers.GraphicsCommand} returns this */ proto.BERTBuffers.GraphicsCommand.prototype.addY = function(value, opt_index) { - jspb.Message.addToRepeatedField(this, 3, value, opt_index); + return jspb.Message.addToRepeatedField(this, 3, value, opt_index); }; +/** + * Clears the list making it empty but non-null. + * @return {!proto.BERTBuffers.GraphicsCommand} returns this + */ proto.BERTBuffers.GraphicsCommand.prototype.clearYList = function() { - this.setYList([]); + return this.setYList([]); }; @@ -2781,13 +3295,16 @@ proto.BERTBuffers.GraphicsCommand.prototype.clearYList = function() { * @return {number} */ proto.BERTBuffers.GraphicsCommand.prototype.getR = function() { - return /** @type {number} */ (+jspb.Message.getFieldWithDefault(this, 4, 0.0)); + return /** @type {number} */ (jspb.Message.getFloatingPointFieldWithDefault(this, 4, 0.0)); }; -/** @param {number} value */ +/** + * @param {number} value + * @return {!proto.BERTBuffers.GraphicsCommand} returns this + */ proto.BERTBuffers.GraphicsCommand.prototype.setR = function(value) { - jspb.Message.setProto3FloatField(this, 4, value); + return jspb.Message.setProto3FloatField(this, 4, value); }; @@ -2796,13 +3313,16 @@ proto.BERTBuffers.GraphicsCommand.prototype.setR = function(value) { * @return {number} */ proto.BERTBuffers.GraphicsCommand.prototype.getRot = function() { - return /** @type {number} */ (+jspb.Message.getFieldWithDefault(this, 5, 0.0)); + return /** @type {number} */ (jspb.Message.getFloatingPointFieldWithDefault(this, 5, 0.0)); }; -/** @param {number} value */ +/** + * @param {number} value + * @return {!proto.BERTBuffers.GraphicsCommand} returns this + */ proto.BERTBuffers.GraphicsCommand.prototype.setRot = function(value) { - jspb.Message.setProto3FloatField(this, 5, value); + return jspb.Message.setProto3FloatField(this, 5, value); }; @@ -2815,26 +3335,30 @@ proto.BERTBuffers.GraphicsCommand.prototype.getText = function() { }; -/** @param {string} value */ +/** + * @param {string} value + * @return {!proto.BERTBuffers.GraphicsCommand} returns this + */ proto.BERTBuffers.GraphicsCommand.prototype.setText = function(value) { - jspb.Message.setProto3StringField(this, 6, value); + return jspb.Message.setProto3StringField(this, 6, value); }; /** * optional bool filled = 7; - * Note that Boolean fields may be set to 0/1 when serialized from a Java server. - * You should avoid comparisons like {@code val === true/false} in those cases. * @return {boolean} */ proto.BERTBuffers.GraphicsCommand.prototype.getFilled = function() { - return /** @type {boolean} */ (jspb.Message.getFieldWithDefault(this, 7, false)); + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 7, false)); }; -/** @param {boolean} value */ +/** + * @param {boolean} value + * @return {!proto.BERTBuffers.GraphicsCommand} returns this + */ proto.BERTBuffers.GraphicsCommand.prototype.setFilled = function(value) { - jspb.Message.setProto3BooleanField(this, 7, value); + return jspb.Message.setProto3BooleanField(this, 7, value); }; @@ -2843,13 +3367,16 @@ proto.BERTBuffers.GraphicsCommand.prototype.setFilled = function(value) { * @return {number} */ proto.BERTBuffers.GraphicsCommand.prototype.getHadj = function() { - return /** @type {number} */ (+jspb.Message.getFieldWithDefault(this, 8, 0.0)); + return /** @type {number} */ (jspb.Message.getFloatingPointFieldWithDefault(this, 8, 0.0)); }; -/** @param {number} value */ +/** + * @param {number} value + * @return {!proto.BERTBuffers.GraphicsCommand} returns this + */ proto.BERTBuffers.GraphicsCommand.prototype.setHadj = function(value) { - jspb.Message.setProto3FloatField(this, 8, value); + return jspb.Message.setProto3FloatField(this, 8, value); }; @@ -2886,26 +3413,30 @@ proto.BERTBuffers.GraphicsCommand.prototype.getRaster_asU8 = function() { }; -/** @param {!(string|Uint8Array)} value */ +/** + * @param {!(string|Uint8Array)} value + * @return {!proto.BERTBuffers.GraphicsCommand} returns this + */ proto.BERTBuffers.GraphicsCommand.prototype.setRaster = function(value) { - jspb.Message.setProto3BytesField(this, 9, value); + return jspb.Message.setProto3BytesField(this, 9, value); }; /** * optional bool interpolate = 10; - * Note that Boolean fields may be set to 0/1 when serialized from a Java server. - * You should avoid comparisons like {@code val === true/false} in those cases. * @return {boolean} */ proto.BERTBuffers.GraphicsCommand.prototype.getInterpolate = function() { - return /** @type {boolean} */ (jspb.Message.getFieldWithDefault(this, 10, false)); + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 10, false)); }; -/** @param {boolean} value */ +/** + * @param {boolean} value + * @return {!proto.BERTBuffers.GraphicsCommand} returns this + */ proto.BERTBuffers.GraphicsCommand.prototype.setInterpolate = function(value) { - jspb.Message.setProto3BooleanField(this, 10, value); + return jspb.Message.setProto3BooleanField(this, 10, value); }; @@ -2918,9 +3449,12 @@ proto.BERTBuffers.GraphicsCommand.prototype.getDeviceType = function() { }; -/** @param {string} value */ +/** + * @param {string} value + * @return {!proto.BERTBuffers.GraphicsCommand} returns this + */ proto.BERTBuffers.GraphicsCommand.prototype.setDeviceType = function(value) { - jspb.Message.setProto3StringField(this, 14, value); + return jspb.Message.setProto3StringField(this, 14, value); }; @@ -2934,20 +3468,27 @@ proto.BERTBuffers.GraphicsCommand.prototype.getContext = function() { }; -/** @param {?proto.BERTBuffers.GraphicsContext|undefined} value */ +/** + * @param {?proto.BERTBuffers.GraphicsContext|undefined} value + * @return {!proto.BERTBuffers.GraphicsCommand} returns this +*/ proto.BERTBuffers.GraphicsCommand.prototype.setContext = function(value) { - jspb.Message.setWrapperField(this, 15, value); + return jspb.Message.setWrapperField(this, 15, value); }; +/** + * Clears the message field making it undefined. + * @return {!proto.BERTBuffers.GraphicsCommand} returns this + */ proto.BERTBuffers.GraphicsCommand.prototype.clearContext = function() { - this.setContext(undefined); + return this.setContext(undefined); }; /** * Returns whether this field is set. - * @return {!boolean} + * @return {boolean} */ proto.BERTBuffers.GraphicsCommand.prototype.hasContext = function() { return jspb.Message.getField(this, 15) != null; @@ -2955,34 +3496,19 @@ proto.BERTBuffers.GraphicsCommand.prototype.hasContext = function() { -/** - * Generated by JsPbCodeGenerator. - * @param {Array=} opt_data Optional initial data array, typically from a - * server response, or constructed directly in Javascript. The array is used - * in place and becomes part of the constructed object. It is not cloned. - * If no data is provided, the constructed object will be empty, but still - * valid. - * @extends {jspb.Message} - * @constructor - */ -proto.BERTBuffers.Color = function(opt_data) { - jspb.Message.initialize(this, opt_data, 0, -1, null, null); -}; -goog.inherits(proto.BERTBuffers.Color, jspb.Message); -if (goog.DEBUG && !COMPILED) { - proto.BERTBuffers.Color.displayName = 'proto.BERTBuffers.Color'; -} if (jspb.Message.GENERATE_TO_OBJECT) { /** - * Creates an object representation of this proto suitable for use in Soy templates. + * Creates an object representation of this proto. * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. * To access a reserved field use, foo.pb_, eg, foo.pb_default. * For the list of reserved names please see: - * com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS. - * @param {boolean=} opt_includeInstance Whether to include the JSPB instance - * for transitional soy proto support: http://goto/soy-param-migration + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration * @return {!Object} */ proto.BERTBuffers.Color.prototype.toObject = function(opt_includeInstance) { @@ -2992,8 +3518,8 @@ proto.BERTBuffers.Color.prototype.toObject = function(opt_includeInstance) { /** * Static version of the {@see toObject} method. - * @param {boolean|undefined} includeInstance Whether to include the JSPB - * instance for transitional soy proto support: + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: * http://goto/soy-param-migration * @param {!proto.BERTBuffers.Color} msg The msg instance to transform. * @return {!Object} @@ -3001,10 +3527,10 @@ proto.BERTBuffers.Color.prototype.toObject = function(opt_includeInstance) { */ proto.BERTBuffers.Color.toObject = function(includeInstance, msg) { var f, obj = { - a: jspb.Message.getFieldWithDefault(msg, 1, 0), - r: jspb.Message.getFieldWithDefault(msg, 2, 0), - g: jspb.Message.getFieldWithDefault(msg, 3, 0), - b: jspb.Message.getFieldWithDefault(msg, 4, 0) +a: jspb.Message.getFieldWithDefault(msg, 1, 0), +r: jspb.Message.getFieldWithDefault(msg, 2, 0), +g: jspb.Message.getFieldWithDefault(msg, 3, 0), +b: jspb.Message.getFieldWithDefault(msg, 4, 0) }; if (includeInstance) { @@ -3126,9 +3652,12 @@ proto.BERTBuffers.Color.prototype.getA = function() { }; -/** @param {number} value */ +/** + * @param {number} value + * @return {!proto.BERTBuffers.Color} returns this + */ proto.BERTBuffers.Color.prototype.setA = function(value) { - jspb.Message.setProto3IntField(this, 1, value); + return jspb.Message.setProto3IntField(this, 1, value); }; @@ -3141,9 +3670,12 @@ proto.BERTBuffers.Color.prototype.getR = function() { }; -/** @param {number} value */ +/** + * @param {number} value + * @return {!proto.BERTBuffers.Color} returns this + */ proto.BERTBuffers.Color.prototype.setR = function(value) { - jspb.Message.setProto3IntField(this, 2, value); + return jspb.Message.setProto3IntField(this, 2, value); }; @@ -3156,9 +3688,12 @@ proto.BERTBuffers.Color.prototype.getG = function() { }; -/** @param {number} value */ +/** + * @param {number} value + * @return {!proto.BERTBuffers.Color} returns this + */ proto.BERTBuffers.Color.prototype.setG = function(value) { - jspb.Message.setProto3IntField(this, 3, value); + return jspb.Message.setProto3IntField(this, 3, value); }; @@ -3171,41 +3706,29 @@ proto.BERTBuffers.Color.prototype.getB = function() { }; -/** @param {number} value */ +/** + * @param {number} value + * @return {!proto.BERTBuffers.Color} returns this + */ proto.BERTBuffers.Color.prototype.setB = function(value) { - jspb.Message.setProto3IntField(this, 4, value); + return jspb.Message.setProto3IntField(this, 4, value); }; -/** - * Generated by JsPbCodeGenerator. - * @param {Array=} opt_data Optional initial data array, typically from a - * server response, or constructed directly in Javascript. The array is used - * in place and becomes part of the constructed object. It is not cloned. - * If no data is provided, the constructed object will be empty, but still - * valid. - * @extends {jspb.Message} - * @constructor - */ -proto.BERTBuffers.GraphicsContext = function(opt_data) { - jspb.Message.initialize(this, opt_data, 0, -1, null, null); -}; -goog.inherits(proto.BERTBuffers.GraphicsContext, jspb.Message); -if (goog.DEBUG && !COMPILED) { - proto.BERTBuffers.GraphicsContext.displayName = 'proto.BERTBuffers.GraphicsContext'; -} if (jspb.Message.GENERATE_TO_OBJECT) { /** - * Creates an object representation of this proto suitable for use in Soy templates. + * Creates an object representation of this proto. * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. * To access a reserved field use, foo.pb_, eg, foo.pb_default. * For the list of reserved names please see: - * com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS. - * @param {boolean=} opt_includeInstance Whether to include the JSPB instance - * for transitional soy proto support: http://goto/soy-param-migration + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration * @return {!Object} */ proto.BERTBuffers.GraphicsContext.prototype.toObject = function(opt_includeInstance) { @@ -3215,8 +3738,8 @@ proto.BERTBuffers.GraphicsContext.prototype.toObject = function(opt_includeInsta /** * Static version of the {@see toObject} method. - * @param {boolean|undefined} includeInstance Whether to include the JSPB - * instance for transitional soy proto support: + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: * http://goto/soy-param-migration * @param {!proto.BERTBuffers.GraphicsContext} msg The msg instance to transform. * @return {!Object} @@ -3224,19 +3747,19 @@ proto.BERTBuffers.GraphicsContext.prototype.toObject = function(opt_includeInsta */ proto.BERTBuffers.GraphicsContext.toObject = function(includeInstance, msg) { var f, obj = { - col: (f = msg.getCol()) && proto.BERTBuffers.Color.toObject(includeInstance, f), - fill: (f = msg.getFill()) && proto.BERTBuffers.Color.toObject(includeInstance, f), - gamma: +jspb.Message.getFieldWithDefault(msg, 3, 0.0), - lwd: +jspb.Message.getFieldWithDefault(msg, 4, 0.0), - lty: jspb.Message.getFieldWithDefault(msg, 5, 0), - lend: jspb.Message.getFieldWithDefault(msg, 6, 0), - ljoin: jspb.Message.getFieldWithDefault(msg, 7, 0), - lmitre: +jspb.Message.getFieldWithDefault(msg, 8, 0.0), - cex: +jspb.Message.getFieldWithDefault(msg, 9, 0.0), - ps: +jspb.Message.getFieldWithDefault(msg, 10, 0.0), - lineheight: +jspb.Message.getFieldWithDefault(msg, 11, 0.0), - fontface: jspb.Message.getFieldWithDefault(msg, 12, 0), - fontfamily: jspb.Message.getFieldWithDefault(msg, 13, "") +col: (f = msg.getCol()) && proto.BERTBuffers.Color.toObject(includeInstance, f), +fill: (f = msg.getFill()) && proto.BERTBuffers.Color.toObject(includeInstance, f), +gamma: jspb.Message.getFloatingPointFieldWithDefault(msg, 3, 0.0), +lwd: jspb.Message.getFloatingPointFieldWithDefault(msg, 4, 0.0), +lty: jspb.Message.getFieldWithDefault(msg, 5, 0), +lend: jspb.Message.getFieldWithDefault(msg, 6, 0), +ljoin: jspb.Message.getFieldWithDefault(msg, 7, 0), +lmitre: jspb.Message.getFloatingPointFieldWithDefault(msg, 8, 0.0), +cex: jspb.Message.getFloatingPointFieldWithDefault(msg, 9, 0.0), +ps: jspb.Message.getFloatingPointFieldWithDefault(msg, 10, 0.0), +lineheight: jspb.Message.getFloatingPointFieldWithDefault(msg, 11, 0.0), +fontface: jspb.Message.getFieldWithDefault(msg, 12, 0), +fontfamily: jspb.Message.getFieldWithDefault(msg, 13, "") }; if (includeInstance) { @@ -3462,20 +3985,27 @@ proto.BERTBuffers.GraphicsContext.prototype.getCol = function() { }; -/** @param {?proto.BERTBuffers.Color|undefined} value */ +/** + * @param {?proto.BERTBuffers.Color|undefined} value + * @return {!proto.BERTBuffers.GraphicsContext} returns this +*/ proto.BERTBuffers.GraphicsContext.prototype.setCol = function(value) { - jspb.Message.setWrapperField(this, 1, value); + return jspb.Message.setWrapperField(this, 1, value); }; +/** + * Clears the message field making it undefined. + * @return {!proto.BERTBuffers.GraphicsContext} returns this + */ proto.BERTBuffers.GraphicsContext.prototype.clearCol = function() { - this.setCol(undefined); + return this.setCol(undefined); }; /** * Returns whether this field is set. - * @return {!boolean} + * @return {boolean} */ proto.BERTBuffers.GraphicsContext.prototype.hasCol = function() { return jspb.Message.getField(this, 1) != null; @@ -3492,20 +4022,27 @@ proto.BERTBuffers.GraphicsContext.prototype.getFill = function() { }; -/** @param {?proto.BERTBuffers.Color|undefined} value */ +/** + * @param {?proto.BERTBuffers.Color|undefined} value + * @return {!proto.BERTBuffers.GraphicsContext} returns this +*/ proto.BERTBuffers.GraphicsContext.prototype.setFill = function(value) { - jspb.Message.setWrapperField(this, 2, value); + return jspb.Message.setWrapperField(this, 2, value); }; +/** + * Clears the message field making it undefined. + * @return {!proto.BERTBuffers.GraphicsContext} returns this + */ proto.BERTBuffers.GraphicsContext.prototype.clearFill = function() { - this.setFill(undefined); + return this.setFill(undefined); }; /** * Returns whether this field is set. - * @return {!boolean} + * @return {boolean} */ proto.BERTBuffers.GraphicsContext.prototype.hasFill = function() { return jspb.Message.getField(this, 2) != null; @@ -3517,13 +4054,16 @@ proto.BERTBuffers.GraphicsContext.prototype.hasFill = function() { * @return {number} */ proto.BERTBuffers.GraphicsContext.prototype.getGamma = function() { - return /** @type {number} */ (+jspb.Message.getFieldWithDefault(this, 3, 0.0)); + return /** @type {number} */ (jspb.Message.getFloatingPointFieldWithDefault(this, 3, 0.0)); }; -/** @param {number} value */ +/** + * @param {number} value + * @return {!proto.BERTBuffers.GraphicsContext} returns this + */ proto.BERTBuffers.GraphicsContext.prototype.setGamma = function(value) { - jspb.Message.setProto3FloatField(this, 3, value); + return jspb.Message.setProto3FloatField(this, 3, value); }; @@ -3532,13 +4072,16 @@ proto.BERTBuffers.GraphicsContext.prototype.setGamma = function(value) { * @return {number} */ proto.BERTBuffers.GraphicsContext.prototype.getLwd = function() { - return /** @type {number} */ (+jspb.Message.getFieldWithDefault(this, 4, 0.0)); + return /** @type {number} */ (jspb.Message.getFloatingPointFieldWithDefault(this, 4, 0.0)); }; -/** @param {number} value */ +/** + * @param {number} value + * @return {!proto.BERTBuffers.GraphicsContext} returns this + */ proto.BERTBuffers.GraphicsContext.prototype.setLwd = function(value) { - jspb.Message.setProto3FloatField(this, 4, value); + return jspb.Message.setProto3FloatField(this, 4, value); }; @@ -3551,9 +4094,12 @@ proto.BERTBuffers.GraphicsContext.prototype.getLty = function() { }; -/** @param {number} value */ +/** + * @param {number} value + * @return {!proto.BERTBuffers.GraphicsContext} returns this + */ proto.BERTBuffers.GraphicsContext.prototype.setLty = function(value) { - jspb.Message.setProto3IntField(this, 5, value); + return jspb.Message.setProto3IntField(this, 5, value); }; @@ -3566,9 +4112,12 @@ proto.BERTBuffers.GraphicsContext.prototype.getLend = function() { }; -/** @param {number} value */ +/** + * @param {number} value + * @return {!proto.BERTBuffers.GraphicsContext} returns this + */ proto.BERTBuffers.GraphicsContext.prototype.setLend = function(value) { - jspb.Message.setProto3IntField(this, 6, value); + return jspb.Message.setProto3IntField(this, 6, value); }; @@ -3581,9 +4130,12 @@ proto.BERTBuffers.GraphicsContext.prototype.getLjoin = function() { }; -/** @param {number} value */ +/** + * @param {number} value + * @return {!proto.BERTBuffers.GraphicsContext} returns this + */ proto.BERTBuffers.GraphicsContext.prototype.setLjoin = function(value) { - jspb.Message.setProto3IntField(this, 7, value); + return jspb.Message.setProto3IntField(this, 7, value); }; @@ -3592,13 +4144,16 @@ proto.BERTBuffers.GraphicsContext.prototype.setLjoin = function(value) { * @return {number} */ proto.BERTBuffers.GraphicsContext.prototype.getLmitre = function() { - return /** @type {number} */ (+jspb.Message.getFieldWithDefault(this, 8, 0.0)); + return /** @type {number} */ (jspb.Message.getFloatingPointFieldWithDefault(this, 8, 0.0)); }; -/** @param {number} value */ +/** + * @param {number} value + * @return {!proto.BERTBuffers.GraphicsContext} returns this + */ proto.BERTBuffers.GraphicsContext.prototype.setLmitre = function(value) { - jspb.Message.setProto3FloatField(this, 8, value); + return jspb.Message.setProto3FloatField(this, 8, value); }; @@ -3607,13 +4162,16 @@ proto.BERTBuffers.GraphicsContext.prototype.setLmitre = function(value) { * @return {number} */ proto.BERTBuffers.GraphicsContext.prototype.getCex = function() { - return /** @type {number} */ (+jspb.Message.getFieldWithDefault(this, 9, 0.0)); + return /** @type {number} */ (jspb.Message.getFloatingPointFieldWithDefault(this, 9, 0.0)); }; -/** @param {number} value */ +/** + * @param {number} value + * @return {!proto.BERTBuffers.GraphicsContext} returns this + */ proto.BERTBuffers.GraphicsContext.prototype.setCex = function(value) { - jspb.Message.setProto3FloatField(this, 9, value); + return jspb.Message.setProto3FloatField(this, 9, value); }; @@ -3622,13 +4180,16 @@ proto.BERTBuffers.GraphicsContext.prototype.setCex = function(value) { * @return {number} */ proto.BERTBuffers.GraphicsContext.prototype.getPs = function() { - return /** @type {number} */ (+jspb.Message.getFieldWithDefault(this, 10, 0.0)); + return /** @type {number} */ (jspb.Message.getFloatingPointFieldWithDefault(this, 10, 0.0)); }; -/** @param {number} value */ +/** + * @param {number} value + * @return {!proto.BERTBuffers.GraphicsContext} returns this + */ proto.BERTBuffers.GraphicsContext.prototype.setPs = function(value) { - jspb.Message.setProto3FloatField(this, 10, value); + return jspb.Message.setProto3FloatField(this, 10, value); }; @@ -3637,13 +4198,16 @@ proto.BERTBuffers.GraphicsContext.prototype.setPs = function(value) { * @return {number} */ proto.BERTBuffers.GraphicsContext.prototype.getLineheight = function() { - return /** @type {number} */ (+jspb.Message.getFieldWithDefault(this, 11, 0.0)); + return /** @type {number} */ (jspb.Message.getFloatingPointFieldWithDefault(this, 11, 0.0)); }; -/** @param {number} value */ +/** + * @param {number} value + * @return {!proto.BERTBuffers.GraphicsContext} returns this + */ proto.BERTBuffers.GraphicsContext.prototype.setLineheight = function(value) { - jspb.Message.setProto3FloatField(this, 11, value); + return jspb.Message.setProto3FloatField(this, 11, value); }; @@ -3656,9 +4220,12 @@ proto.BERTBuffers.GraphicsContext.prototype.getFontface = function() { }; -/** @param {number} value */ +/** + * @param {number} value + * @return {!proto.BERTBuffers.GraphicsContext} returns this + */ proto.BERTBuffers.GraphicsContext.prototype.setFontface = function(value) { - jspb.Message.setProto3IntField(this, 12, value); + return jspb.Message.setProto3IntField(this, 12, value); }; @@ -3671,41 +4238,29 @@ proto.BERTBuffers.GraphicsContext.prototype.getFontfamily = function() { }; -/** @param {string} value */ +/** + * @param {string} value + * @return {!proto.BERTBuffers.GraphicsContext} returns this + */ proto.BERTBuffers.GraphicsContext.prototype.setFontfamily = function(value) { - jspb.Message.setProto3StringField(this, 13, value); + return jspb.Message.setProto3StringField(this, 13, value); }; -/** - * Generated by JsPbCodeGenerator. - * @param {Array=} opt_data Optional initial data array, typically from a - * server response, or constructed directly in Javascript. The array is used - * in place and becomes part of the constructed object. It is not cloned. - * If no data is provided, the constructed object will be empty, but still - * valid. - * @extends {jspb.Message} - * @constructor - */ -proto.BERTBuffers.MIMEData = function(opt_data) { - jspb.Message.initialize(this, opt_data, 0, -1, null, null); -}; -goog.inherits(proto.BERTBuffers.MIMEData, jspb.Message); -if (goog.DEBUG && !COMPILED) { - proto.BERTBuffers.MIMEData.displayName = 'proto.BERTBuffers.MIMEData'; -} if (jspb.Message.GENERATE_TO_OBJECT) { /** - * Creates an object representation of this proto suitable for use in Soy templates. + * Creates an object representation of this proto. * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. * To access a reserved field use, foo.pb_, eg, foo.pb_default. * For the list of reserved names please see: - * com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS. - * @param {boolean=} opt_includeInstance Whether to include the JSPB instance - * for transitional soy proto support: http://goto/soy-param-migration + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration * @return {!Object} */ proto.BERTBuffers.MIMEData.prototype.toObject = function(opt_includeInstance) { @@ -3715,8 +4270,8 @@ proto.BERTBuffers.MIMEData.prototype.toObject = function(opt_includeInstance) { /** * Static version of the {@see toObject} method. - * @param {boolean|undefined} includeInstance Whether to include the JSPB - * instance for transitional soy proto support: + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: * http://goto/soy-param-migration * @param {!proto.BERTBuffers.MIMEData} msg The msg instance to transform. * @return {!Object} @@ -3724,8 +4279,8 @@ proto.BERTBuffers.MIMEData.prototype.toObject = function(opt_includeInstance) { */ proto.BERTBuffers.MIMEData.toObject = function(includeInstance, msg) { var f, obj = { - mimeType: jspb.Message.getFieldWithDefault(msg, 1, ""), - data: msg.getData_asB64() +mimeType: jspb.Message.getFieldWithDefault(msg, 1, ""), +data: msg.getData_asB64() }; if (includeInstance) { @@ -3825,9 +4380,12 @@ proto.BERTBuffers.MIMEData.prototype.getMimeType = function() { }; -/** @param {string} value */ +/** + * @param {string} value + * @return {!proto.BERTBuffers.MIMEData} returns this + */ proto.BERTBuffers.MIMEData.prototype.setMimeType = function(value) { - jspb.Message.setProto3StringField(this, 1, value); + return jspb.Message.setProto3StringField(this, 1, value); }; @@ -3859,35 +4417,21 @@ proto.BERTBuffers.MIMEData.prototype.getData_asB64 = function() { * @return {!Uint8Array} */ proto.BERTBuffers.MIMEData.prototype.getData_asU8 = function() { - return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8( - this.getData())); -}; - - -/** @param {!(string|Uint8Array)} value */ -proto.BERTBuffers.MIMEData.prototype.setData = function(value) { - jspb.Message.setProto3BytesField(this, 2, value); -}; - - - -/** - * Generated by JsPbCodeGenerator. - * @param {Array=} opt_data Optional initial data array, typically from a - * server response, or constructed directly in Javascript. The array is used - * in place and becomes part of the constructed object. It is not cloned. - * If no data is provided, the constructed object will be empty, but still - * valid. - * @extends {jspb.Message} - * @constructor + return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8( + this.getData())); +}; + + +/** + * @param {!(string|Uint8Array)} value + * @return {!proto.BERTBuffers.MIMEData} returns this */ -proto.BERTBuffers.Console = function(opt_data) { - jspb.Message.initialize(this, opt_data, 0, -1, null, proto.BERTBuffers.Console.oneofGroups_); +proto.BERTBuffers.MIMEData.prototype.setData = function(value) { + return jspb.Message.setProto3BytesField(this, 2, value); }; -goog.inherits(proto.BERTBuffers.Console, jspb.Message); -if (goog.DEBUG && !COMPILED) { - proto.BERTBuffers.Console.displayName = 'proto.BERTBuffers.Console'; -} + + + /** * Oneof group definitions for this message. Each group defines the field * numbers belonging to that group. When of these fields' value is set, all @@ -3922,13 +4466,15 @@ proto.BERTBuffers.Console.prototype.getMessageCase = function() { if (jspb.Message.GENERATE_TO_OBJECT) { /** - * Creates an object representation of this proto suitable for use in Soy templates. + * Creates an object representation of this proto. * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. * To access a reserved field use, foo.pb_, eg, foo.pb_default. * For the list of reserved names please see: - * com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS. - * @param {boolean=} opt_includeInstance Whether to include the JSPB instance - * for transitional soy proto support: http://goto/soy-param-migration + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration * @return {!Object} */ proto.BERTBuffers.Console.prototype.toObject = function(opt_includeInstance) { @@ -3938,8 +4484,8 @@ proto.BERTBuffers.Console.prototype.toObject = function(opt_includeInstance) { /** * Static version of the {@see toObject} method. - * @param {boolean|undefined} includeInstance Whether to include the JSPB - * instance for transitional soy proto support: + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: * http://goto/soy-param-migration * @param {!proto.BERTBuffers.Console} msg The msg instance to transform. * @return {!Object} @@ -3947,12 +4493,12 @@ proto.BERTBuffers.Console.prototype.toObject = function(opt_includeInstance) { */ proto.BERTBuffers.Console.toObject = function(includeInstance, msg) { var f, obj = { - text: jspb.Message.getFieldWithDefault(msg, 1, ""), - err: jspb.Message.getFieldWithDefault(msg, 2, ""), - prompt: jspb.Message.getFieldWithDefault(msg, 3, ""), - graphics: (f = msg.getGraphics()) && proto.BERTBuffers.GraphicsCommand.toObject(includeInstance, f), - mimeData: (f = msg.getMimeData()) && proto.BERTBuffers.MIMEData.toObject(includeInstance, f), - history: (f = msg.getHistory()) && proto.BERTBuffers.Variable.toObject(includeInstance, f) +text: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f, +err: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f, +prompt: (f = jspb.Message.getField(msg, 3)) == null ? undefined : f, +graphics: (f = msg.getGraphics()) && proto.BERTBuffers.GraphicsCommand.toObject(includeInstance, f), +mimeData: (f = msg.getMimeData()) && proto.BERTBuffers.MIMEData.toObject(includeInstance, f), +history: (f = msg.getHistory()) && proto.BERTBuffers.Variable.toObject(includeInstance, f) }; if (includeInstance) { @@ -4102,20 +4648,27 @@ proto.BERTBuffers.Console.prototype.getText = function() { }; -/** @param {string} value */ +/** + * @param {string} value + * @return {!proto.BERTBuffers.Console} returns this + */ proto.BERTBuffers.Console.prototype.setText = function(value) { - jspb.Message.setOneofField(this, 1, proto.BERTBuffers.Console.oneofGroups_[0], value); + return jspb.Message.setOneofField(this, 1, proto.BERTBuffers.Console.oneofGroups_[0], value); }; +/** + * Clears the field making it undefined. + * @return {!proto.BERTBuffers.Console} returns this + */ proto.BERTBuffers.Console.prototype.clearText = function() { - jspb.Message.setOneofField(this, 1, proto.BERTBuffers.Console.oneofGroups_[0], undefined); + return jspb.Message.setOneofField(this, 1, proto.BERTBuffers.Console.oneofGroups_[0], undefined); }; /** * Returns whether this field is set. - * @return {!boolean} + * @return {boolean} */ proto.BERTBuffers.Console.prototype.hasText = function() { return jspb.Message.getField(this, 1) != null; @@ -4131,20 +4684,27 @@ proto.BERTBuffers.Console.prototype.getErr = function() { }; -/** @param {string} value */ +/** + * @param {string} value + * @return {!proto.BERTBuffers.Console} returns this + */ proto.BERTBuffers.Console.prototype.setErr = function(value) { - jspb.Message.setOneofField(this, 2, proto.BERTBuffers.Console.oneofGroups_[0], value); + return jspb.Message.setOneofField(this, 2, proto.BERTBuffers.Console.oneofGroups_[0], value); }; +/** + * Clears the field making it undefined. + * @return {!proto.BERTBuffers.Console} returns this + */ proto.BERTBuffers.Console.prototype.clearErr = function() { - jspb.Message.setOneofField(this, 2, proto.BERTBuffers.Console.oneofGroups_[0], undefined); + return jspb.Message.setOneofField(this, 2, proto.BERTBuffers.Console.oneofGroups_[0], undefined); }; /** * Returns whether this field is set. - * @return {!boolean} + * @return {boolean} */ proto.BERTBuffers.Console.prototype.hasErr = function() { return jspb.Message.getField(this, 2) != null; @@ -4160,20 +4720,27 @@ proto.BERTBuffers.Console.prototype.getPrompt = function() { }; -/** @param {string} value */ +/** + * @param {string} value + * @return {!proto.BERTBuffers.Console} returns this + */ proto.BERTBuffers.Console.prototype.setPrompt = function(value) { - jspb.Message.setOneofField(this, 3, proto.BERTBuffers.Console.oneofGroups_[0], value); + return jspb.Message.setOneofField(this, 3, proto.BERTBuffers.Console.oneofGroups_[0], value); }; +/** + * Clears the field making it undefined. + * @return {!proto.BERTBuffers.Console} returns this + */ proto.BERTBuffers.Console.prototype.clearPrompt = function() { - jspb.Message.setOneofField(this, 3, proto.BERTBuffers.Console.oneofGroups_[0], undefined); + return jspb.Message.setOneofField(this, 3, proto.BERTBuffers.Console.oneofGroups_[0], undefined); }; /** * Returns whether this field is set. - * @return {!boolean} + * @return {boolean} */ proto.BERTBuffers.Console.prototype.hasPrompt = function() { return jspb.Message.getField(this, 3) != null; @@ -4190,20 +4757,27 @@ proto.BERTBuffers.Console.prototype.getGraphics = function() { }; -/** @param {?proto.BERTBuffers.GraphicsCommand|undefined} value */ +/** + * @param {?proto.BERTBuffers.GraphicsCommand|undefined} value + * @return {!proto.BERTBuffers.Console} returns this +*/ proto.BERTBuffers.Console.prototype.setGraphics = function(value) { - jspb.Message.setOneofWrapperField(this, 4, proto.BERTBuffers.Console.oneofGroups_[0], value); + return jspb.Message.setOneofWrapperField(this, 4, proto.BERTBuffers.Console.oneofGroups_[0], value); }; +/** + * Clears the message field making it undefined. + * @return {!proto.BERTBuffers.Console} returns this + */ proto.BERTBuffers.Console.prototype.clearGraphics = function() { - this.setGraphics(undefined); + return this.setGraphics(undefined); }; /** * Returns whether this field is set. - * @return {!boolean} + * @return {boolean} */ proto.BERTBuffers.Console.prototype.hasGraphics = function() { return jspb.Message.getField(this, 4) != null; @@ -4220,20 +4794,27 @@ proto.BERTBuffers.Console.prototype.getMimeData = function() { }; -/** @param {?proto.BERTBuffers.MIMEData|undefined} value */ +/** + * @param {?proto.BERTBuffers.MIMEData|undefined} value + * @return {!proto.BERTBuffers.Console} returns this +*/ proto.BERTBuffers.Console.prototype.setMimeData = function(value) { - jspb.Message.setOneofWrapperField(this, 5, proto.BERTBuffers.Console.oneofGroups_[0], value); + return jspb.Message.setOneofWrapperField(this, 5, proto.BERTBuffers.Console.oneofGroups_[0], value); }; +/** + * Clears the message field making it undefined. + * @return {!proto.BERTBuffers.Console} returns this + */ proto.BERTBuffers.Console.prototype.clearMimeData = function() { - this.setMimeData(undefined); + return this.setMimeData(undefined); }; /** * Returns whether this field is set. - * @return {!boolean} + * @return {boolean} */ proto.BERTBuffers.Console.prototype.hasMimeData = function() { return jspb.Message.getField(this, 5) != null; @@ -4250,20 +4831,27 @@ proto.BERTBuffers.Console.prototype.getHistory = function() { }; -/** @param {?proto.BERTBuffers.Variable|undefined} value */ +/** + * @param {?proto.BERTBuffers.Variable|undefined} value + * @return {!proto.BERTBuffers.Console} returns this +*/ proto.BERTBuffers.Console.prototype.setHistory = function(value) { - jspb.Message.setOneofWrapperField(this, 6, proto.BERTBuffers.Console.oneofGroups_[0], value); + return jspb.Message.setOneofWrapperField(this, 6, proto.BERTBuffers.Console.oneofGroups_[0], value); }; +/** + * Clears the message field making it undefined. + * @return {!proto.BERTBuffers.Console} returns this + */ proto.BERTBuffers.Console.prototype.clearHistory = function() { - this.setHistory(undefined); + return this.setHistory(undefined); }; /** * Returns whether this field is set. - * @return {!boolean} + * @return {boolean} */ proto.BERTBuffers.Console.prototype.hasHistory = function() { return jspb.Message.getField(this, 6) != null; @@ -4271,34 +4859,19 @@ proto.BERTBuffers.Console.prototype.hasHistory = function() { -/** - * Generated by JsPbCodeGenerator. - * @param {Array=} opt_data Optional initial data array, typically from a - * server response, or constructed directly in Javascript. The array is used - * in place and becomes part of the constructed object. It is not cloned. - * If no data is provided, the constructed object will be empty, but still - * valid. - * @extends {jspb.Message} - * @constructor - */ -proto.BERTBuffers.FunctionElement = function(opt_data) { - jspb.Message.initialize(this, opt_data, 0, -1, null, null); -}; -goog.inherits(proto.BERTBuffers.FunctionElement, jspb.Message); -if (goog.DEBUG && !COMPILED) { - proto.BERTBuffers.FunctionElement.displayName = 'proto.BERTBuffers.FunctionElement'; -} if (jspb.Message.GENERATE_TO_OBJECT) { /** - * Creates an object representation of this proto suitable for use in Soy templates. + * Creates an object representation of this proto. * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. * To access a reserved field use, foo.pb_, eg, foo.pb_default. * For the list of reserved names please see: - * com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS. - * @param {boolean=} opt_includeInstance Whether to include the JSPB instance - * for transitional soy proto support: http://goto/soy-param-migration + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration * @return {!Object} */ proto.BERTBuffers.FunctionElement.prototype.toObject = function(opt_includeInstance) { @@ -4308,8 +4881,8 @@ proto.BERTBuffers.FunctionElement.prototype.toObject = function(opt_includeInsta /** * Static version of the {@see toObject} method. - * @param {boolean|undefined} includeInstance Whether to include the JSPB - * instance for transitional soy proto support: + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: * http://goto/soy-param-migration * @param {!proto.BERTBuffers.FunctionElement} msg The msg instance to transform. * @return {!Object} @@ -4317,11 +4890,11 @@ proto.BERTBuffers.FunctionElement.prototype.toObject = function(opt_includeInsta */ proto.BERTBuffers.FunctionElement.toObject = function(includeInstance, msg) { var f, obj = { - name: jspb.Message.getFieldWithDefault(msg, 1, ""), - typeName: jspb.Message.getFieldWithDefault(msg, 2, ""), - defaultValue: (f = msg.getDefaultValue()) && proto.BERTBuffers.Variable.toObject(includeInstance, f), - description: jspb.Message.getFieldWithDefault(msg, 4, ""), - index: jspb.Message.getFieldWithDefault(msg, 5, 0) +name: jspb.Message.getFieldWithDefault(msg, 1, ""), +typeName: jspb.Message.getFieldWithDefault(msg, 2, ""), +defaultValue: (f = msg.getDefaultValue()) && proto.BERTBuffers.Variable.toObject(includeInstance, f), +description: jspb.Message.getFieldWithDefault(msg, 4, ""), +index: jspb.Message.getFieldWithDefault(msg, 5, 0) }; if (includeInstance) { @@ -4456,9 +5029,12 @@ proto.BERTBuffers.FunctionElement.prototype.getName = function() { }; -/** @param {string} value */ +/** + * @param {string} value + * @return {!proto.BERTBuffers.FunctionElement} returns this + */ proto.BERTBuffers.FunctionElement.prototype.setName = function(value) { - jspb.Message.setProto3StringField(this, 1, value); + return jspb.Message.setProto3StringField(this, 1, value); }; @@ -4471,9 +5047,12 @@ proto.BERTBuffers.FunctionElement.prototype.getTypeName = function() { }; -/** @param {string} value */ +/** + * @param {string} value + * @return {!proto.BERTBuffers.FunctionElement} returns this + */ proto.BERTBuffers.FunctionElement.prototype.setTypeName = function(value) { - jspb.Message.setProto3StringField(this, 2, value); + return jspb.Message.setProto3StringField(this, 2, value); }; @@ -4487,20 +5066,27 @@ proto.BERTBuffers.FunctionElement.prototype.getDefaultValue = function() { }; -/** @param {?proto.BERTBuffers.Variable|undefined} value */ +/** + * @param {?proto.BERTBuffers.Variable|undefined} value + * @return {!proto.BERTBuffers.FunctionElement} returns this +*/ proto.BERTBuffers.FunctionElement.prototype.setDefaultValue = function(value) { - jspb.Message.setWrapperField(this, 3, value); + return jspb.Message.setWrapperField(this, 3, value); }; +/** + * Clears the message field making it undefined. + * @return {!proto.BERTBuffers.FunctionElement} returns this + */ proto.BERTBuffers.FunctionElement.prototype.clearDefaultValue = function() { - this.setDefaultValue(undefined); + return this.setDefaultValue(undefined); }; /** * Returns whether this field is set. - * @return {!boolean} + * @return {boolean} */ proto.BERTBuffers.FunctionElement.prototype.hasDefaultValue = function() { return jspb.Message.getField(this, 3) != null; @@ -4516,9 +5102,12 @@ proto.BERTBuffers.FunctionElement.prototype.getDescription = function() { }; -/** @param {string} value */ +/** + * @param {string} value + * @return {!proto.BERTBuffers.FunctionElement} returns this + */ proto.BERTBuffers.FunctionElement.prototype.setDescription = function(value) { - jspb.Message.setProto3StringField(this, 4, value); + return jspb.Message.setProto3StringField(this, 4, value); }; @@ -4531,30 +5120,16 @@ proto.BERTBuffers.FunctionElement.prototype.getIndex = function() { }; -/** @param {number} value */ +/** + * @param {number} value + * @return {!proto.BERTBuffers.FunctionElement} returns this + */ proto.BERTBuffers.FunctionElement.prototype.setIndex = function(value) { - jspb.Message.setProto3IntField(this, 5, value); + return jspb.Message.setProto3IntField(this, 5, value); }; -/** - * Generated by JsPbCodeGenerator. - * @param {Array=} opt_data Optional initial data array, typically from a - * server response, or constructed directly in Javascript. The array is used - * in place and becomes part of the constructed object. It is not cloned. - * If no data is provided, the constructed object will be empty, but still - * valid. - * @extends {jspb.Message} - * @constructor - */ -proto.BERTBuffers.FunctionDescriptor = function(opt_data) { - jspb.Message.initialize(this, opt_data, 0, -1, proto.BERTBuffers.FunctionDescriptor.repeatedFields_, null); -}; -goog.inherits(proto.BERTBuffers.FunctionDescriptor, jspb.Message); -if (goog.DEBUG && !COMPILED) { - proto.BERTBuffers.FunctionDescriptor.displayName = 'proto.BERTBuffers.FunctionDescriptor'; -} /** * List of repeated fields within this message type. * @private {!Array} @@ -4566,13 +5141,15 @@ proto.BERTBuffers.FunctionDescriptor.repeatedFields_ = [5]; if (jspb.Message.GENERATE_TO_OBJECT) { /** - * Creates an object representation of this proto suitable for use in Soy templates. + * Creates an object representation of this proto. * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. * To access a reserved field use, foo.pb_, eg, foo.pb_default. * For the list of reserved names please see: - * com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS. - * @param {boolean=} opt_includeInstance Whether to include the JSPB instance - * for transitional soy proto support: http://goto/soy-param-migration + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration * @return {!Object} */ proto.BERTBuffers.FunctionDescriptor.prototype.toObject = function(opt_includeInstance) { @@ -4582,8 +5159,8 @@ proto.BERTBuffers.FunctionDescriptor.prototype.toObject = function(opt_includeIn /** * Static version of the {@see toObject} method. - * @param {boolean|undefined} includeInstance Whether to include the JSPB - * instance for transitional soy proto support: + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: * http://goto/soy-param-migration * @param {!proto.BERTBuffers.FunctionDescriptor} msg The msg instance to transform. * @return {!Object} @@ -4591,11 +5168,11 @@ proto.BERTBuffers.FunctionDescriptor.prototype.toObject = function(opt_includeIn */ proto.BERTBuffers.FunctionDescriptor.toObject = function(includeInstance, msg) { var f, obj = { - pb_function: (f = msg.getFunction()) && proto.BERTBuffers.FunctionElement.toObject(includeInstance, f), - callType: jspb.Message.getFieldWithDefault(msg, 2, 0), - flags: jspb.Message.getFieldWithDefault(msg, 3, 0), - category: jspb.Message.getFieldWithDefault(msg, 4, ""), - argumentsList: jspb.Message.toObjectList(msg.getArgumentsList(), +pb_function: (f = msg.getFunction()) && proto.BERTBuffers.FunctionElement.toObject(includeInstance, f), +callType: jspb.Message.getFieldWithDefault(msg, 2, 0), +flags: jspb.Message.getFieldWithDefault(msg, 3, 0), +category: jspb.Message.getFieldWithDefault(msg, 4, ""), +argumentsList: jspb.Message.toObjectList(msg.getArgumentsList(), proto.BERTBuffers.FunctionElement.toObject, includeInstance) }; @@ -4734,20 +5311,27 @@ proto.BERTBuffers.FunctionDescriptor.prototype.getFunction = function() { }; -/** @param {?proto.BERTBuffers.FunctionElement|undefined} value */ +/** + * @param {?proto.BERTBuffers.FunctionElement|undefined} value + * @return {!proto.BERTBuffers.FunctionDescriptor} returns this +*/ proto.BERTBuffers.FunctionDescriptor.prototype.setFunction = function(value) { - jspb.Message.setWrapperField(this, 1, value); + return jspb.Message.setWrapperField(this, 1, value); }; +/** + * Clears the message field making it undefined. + * @return {!proto.BERTBuffers.FunctionDescriptor} returns this + */ proto.BERTBuffers.FunctionDescriptor.prototype.clearFunction = function() { - this.setFunction(undefined); + return this.setFunction(undefined); }; /** * Returns whether this field is set. - * @return {!boolean} + * @return {boolean} */ proto.BERTBuffers.FunctionDescriptor.prototype.hasFunction = function() { return jspb.Message.getField(this, 1) != null; @@ -4763,9 +5347,12 @@ proto.BERTBuffers.FunctionDescriptor.prototype.getCallType = function() { }; -/** @param {!proto.BERTBuffers.CallType} value */ +/** + * @param {!proto.BERTBuffers.CallType} value + * @return {!proto.BERTBuffers.FunctionDescriptor} returns this + */ proto.BERTBuffers.FunctionDescriptor.prototype.setCallType = function(value) { - jspb.Message.setProto3EnumField(this, 2, value); + return jspb.Message.setProto3EnumField(this, 2, value); }; @@ -4778,9 +5365,12 @@ proto.BERTBuffers.FunctionDescriptor.prototype.getFlags = function() { }; -/** @param {number} value */ +/** + * @param {number} value + * @return {!proto.BERTBuffers.FunctionDescriptor} returns this + */ proto.BERTBuffers.FunctionDescriptor.prototype.setFlags = function(value) { - jspb.Message.setProto3IntField(this, 3, value); + return jspb.Message.setProto3IntField(this, 3, value); }; @@ -4793,25 +5383,31 @@ proto.BERTBuffers.FunctionDescriptor.prototype.getCategory = function() { }; -/** @param {string} value */ +/** + * @param {string} value + * @return {!proto.BERTBuffers.FunctionDescriptor} returns this + */ proto.BERTBuffers.FunctionDescriptor.prototype.setCategory = function(value) { - jspb.Message.setProto3StringField(this, 4, value); + return jspb.Message.setProto3StringField(this, 4, value); }; /** * repeated FunctionElement arguments = 5; - * @return {!Array.} + * @return {!Array} */ proto.BERTBuffers.FunctionDescriptor.prototype.getArgumentsList = function() { - return /** @type{!Array.} */ ( + return /** @type{!Array} */ ( jspb.Message.getRepeatedWrapperField(this, proto.BERTBuffers.FunctionElement, 5)); }; -/** @param {!Array.} value */ +/** + * @param {!Array} value + * @return {!proto.BERTBuffers.FunctionDescriptor} returns this +*/ proto.BERTBuffers.FunctionDescriptor.prototype.setArgumentsList = function(value) { - jspb.Message.setRepeatedWrapperField(this, 5, value); + return jspb.Message.setRepeatedWrapperField(this, 5, value); }; @@ -4825,29 +5421,16 @@ proto.BERTBuffers.FunctionDescriptor.prototype.addArguments = function(opt_value }; +/** + * Clears the list making it empty but non-null. + * @return {!proto.BERTBuffers.FunctionDescriptor} returns this + */ proto.BERTBuffers.FunctionDescriptor.prototype.clearArgumentsList = function() { - this.setArgumentsList([]); + return this.setArgumentsList([]); }; -/** - * Generated by JsPbCodeGenerator. - * @param {Array=} opt_data Optional initial data array, typically from a - * server response, or constructed directly in Javascript. The array is used - * in place and becomes part of the constructed object. It is not cloned. - * If no data is provided, the constructed object will be empty, but still - * valid. - * @extends {jspb.Message} - * @constructor - */ -proto.BERTBuffers.FunctionList = function(opt_data) { - jspb.Message.initialize(this, opt_data, 0, -1, proto.BERTBuffers.FunctionList.repeatedFields_, null); -}; -goog.inherits(proto.BERTBuffers.FunctionList, jspb.Message); -if (goog.DEBUG && !COMPILED) { - proto.BERTBuffers.FunctionList.displayName = 'proto.BERTBuffers.FunctionList'; -} /** * List of repeated fields within this message type. * @private {!Array} @@ -4859,13 +5442,15 @@ proto.BERTBuffers.FunctionList.repeatedFields_ = [1]; if (jspb.Message.GENERATE_TO_OBJECT) { /** - * Creates an object representation of this proto suitable for use in Soy templates. + * Creates an object representation of this proto. * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. * To access a reserved field use, foo.pb_, eg, foo.pb_default. * For the list of reserved names please see: - * com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS. - * @param {boolean=} opt_includeInstance Whether to include the JSPB instance - * for transitional soy proto support: http://goto/soy-param-migration + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration * @return {!Object} */ proto.BERTBuffers.FunctionList.prototype.toObject = function(opt_includeInstance) { @@ -4875,8 +5460,8 @@ proto.BERTBuffers.FunctionList.prototype.toObject = function(opt_includeInstance /** * Static version of the {@see toObject} method. - * @param {boolean|undefined} includeInstance Whether to include the JSPB - * instance for transitional soy proto support: + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: * http://goto/soy-param-migration * @param {!proto.BERTBuffers.FunctionList} msg The msg instance to transform. * @return {!Object} @@ -4884,7 +5469,7 @@ proto.BERTBuffers.FunctionList.prototype.toObject = function(opt_includeInstance */ proto.BERTBuffers.FunctionList.toObject = function(includeInstance, msg) { var f, obj = { - functionsList: jspb.Message.toObjectList(msg.getFunctionsList(), +functionsList: jspb.Message.toObjectList(msg.getFunctionsList(), proto.BERTBuffers.FunctionDescriptor.toObject, includeInstance) }; @@ -4969,17 +5554,20 @@ proto.BERTBuffers.FunctionList.serializeBinaryToWriter = function(message, write /** * repeated FunctionDescriptor functions = 1; - * @return {!Array.} + * @return {!Array} */ proto.BERTBuffers.FunctionList.prototype.getFunctionsList = function() { - return /** @type{!Array.} */ ( + return /** @type{!Array} */ ( jspb.Message.getRepeatedWrapperField(this, proto.BERTBuffers.FunctionDescriptor, 1)); }; -/** @param {!Array.} value */ +/** + * @param {!Array} value + * @return {!proto.BERTBuffers.FunctionList} returns this +*/ proto.BERTBuffers.FunctionList.prototype.setFunctionsList = function(value) { - jspb.Message.setRepeatedWrapperField(this, 1, value); + return jspb.Message.setRepeatedWrapperField(this, 1, value); }; @@ -4993,40 +5581,29 @@ proto.BERTBuffers.FunctionList.prototype.addFunctions = function(opt_value, opt_ }; +/** + * Clears the list making it empty but non-null. + * @return {!proto.BERTBuffers.FunctionList} returns this + */ proto.BERTBuffers.FunctionList.prototype.clearFunctionsList = function() { - this.setFunctionsList([]); + return this.setFunctionsList([]); }; -/** - * Generated by JsPbCodeGenerator. - * @param {Array=} opt_data Optional initial data array, typically from a - * server response, or constructed directly in Javascript. The array is used - * in place and becomes part of the constructed object. It is not cloned. - * If no data is provided, the constructed object will be empty, but still - * valid. - * @extends {jspb.Message} - * @constructor - */ -proto.BERTBuffers.EnumValue = function(opt_data) { - jspb.Message.initialize(this, opt_data, 0, -1, null, null); -}; -goog.inherits(proto.BERTBuffers.EnumValue, jspb.Message); -if (goog.DEBUG && !COMPILED) { - proto.BERTBuffers.EnumValue.displayName = 'proto.BERTBuffers.EnumValue'; -} if (jspb.Message.GENERATE_TO_OBJECT) { /** - * Creates an object representation of this proto suitable for use in Soy templates. + * Creates an object representation of this proto. * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. * To access a reserved field use, foo.pb_, eg, foo.pb_default. * For the list of reserved names please see: - * com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS. - * @param {boolean=} opt_includeInstance Whether to include the JSPB instance - * for transitional soy proto support: http://goto/soy-param-migration + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration * @return {!Object} */ proto.BERTBuffers.EnumValue.prototype.toObject = function(opt_includeInstance) { @@ -5036,8 +5613,8 @@ proto.BERTBuffers.EnumValue.prototype.toObject = function(opt_includeInstance) { /** * Static version of the {@see toObject} method. - * @param {boolean|undefined} includeInstance Whether to include the JSPB - * instance for transitional soy proto support: + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: * http://goto/soy-param-migration * @param {!proto.BERTBuffers.EnumValue} msg The msg instance to transform. * @return {!Object} @@ -5045,8 +5622,8 @@ proto.BERTBuffers.EnumValue.prototype.toObject = function(opt_includeInstance) { */ proto.BERTBuffers.EnumValue.toObject = function(includeInstance, msg) { var f, obj = { - name: jspb.Message.getFieldWithDefault(msg, 1, ""), - value: jspb.Message.getFieldWithDefault(msg, 2, 0) +name: jspb.Message.getFieldWithDefault(msg, 1, ""), +value: jspb.Message.getFieldWithDefault(msg, 2, 0) }; if (includeInstance) { @@ -5146,9 +5723,12 @@ proto.BERTBuffers.EnumValue.prototype.getName = function() { }; -/** @param {string} value */ +/** + * @param {string} value + * @return {!proto.BERTBuffers.EnumValue} returns this + */ proto.BERTBuffers.EnumValue.prototype.setName = function(value) { - jspb.Message.setProto3StringField(this, 1, value); + return jspb.Message.setProto3StringField(this, 1, value); }; @@ -5161,30 +5741,16 @@ proto.BERTBuffers.EnumValue.prototype.getValue = function() { }; -/** @param {number} value */ +/** + * @param {number} value + * @return {!proto.BERTBuffers.EnumValue} returns this + */ proto.BERTBuffers.EnumValue.prototype.setValue = function(value) { - jspb.Message.setProto3IntField(this, 2, value); + return jspb.Message.setProto3IntField(this, 2, value); }; -/** - * Generated by JsPbCodeGenerator. - * @param {Array=} opt_data Optional initial data array, typically from a - * server response, or constructed directly in Javascript. The array is used - * in place and becomes part of the constructed object. It is not cloned. - * If no data is provided, the constructed object will be empty, but still - * valid. - * @extends {jspb.Message} - * @constructor - */ -proto.BERTBuffers.EnumType = function(opt_data) { - jspb.Message.initialize(this, opt_data, 0, -1, proto.BERTBuffers.EnumType.repeatedFields_, null); -}; -goog.inherits(proto.BERTBuffers.EnumType, jspb.Message); -if (goog.DEBUG && !COMPILED) { - proto.BERTBuffers.EnumType.displayName = 'proto.BERTBuffers.EnumType'; -} /** * List of repeated fields within this message type. * @private {!Array} @@ -5196,13 +5762,15 @@ proto.BERTBuffers.EnumType.repeatedFields_ = [2]; if (jspb.Message.GENERATE_TO_OBJECT) { /** - * Creates an object representation of this proto suitable for use in Soy templates. + * Creates an object representation of this proto. * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. * To access a reserved field use, foo.pb_, eg, foo.pb_default. * For the list of reserved names please see: - * com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS. - * @param {boolean=} opt_includeInstance Whether to include the JSPB instance - * for transitional soy proto support: http://goto/soy-param-migration + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration * @return {!Object} */ proto.BERTBuffers.EnumType.prototype.toObject = function(opt_includeInstance) { @@ -5212,8 +5780,8 @@ proto.BERTBuffers.EnumType.prototype.toObject = function(opt_includeInstance) { /** * Static version of the {@see toObject} method. - * @param {boolean|undefined} includeInstance Whether to include the JSPB - * instance for transitional soy proto support: + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: * http://goto/soy-param-migration * @param {!proto.BERTBuffers.EnumType} msg The msg instance to transform. * @return {!Object} @@ -5221,8 +5789,8 @@ proto.BERTBuffers.EnumType.prototype.toObject = function(opt_includeInstance) { */ proto.BERTBuffers.EnumType.toObject = function(includeInstance, msg) { var f, obj = { - name: jspb.Message.getFieldWithDefault(msg, 1, ""), - valuesList: jspb.Message.toObjectList(msg.getValuesList(), +name: jspb.Message.getFieldWithDefault(msg, 1, ""), +valuesList: jspb.Message.toObjectList(msg.getValuesList(), proto.BERTBuffers.EnumValue.toObject, includeInstance) }; @@ -5325,25 +5893,31 @@ proto.BERTBuffers.EnumType.prototype.getName = function() { }; -/** @param {string} value */ +/** + * @param {string} value + * @return {!proto.BERTBuffers.EnumType} returns this + */ proto.BERTBuffers.EnumType.prototype.setName = function(value) { - jspb.Message.setProto3StringField(this, 1, value); + return jspb.Message.setProto3StringField(this, 1, value); }; /** * repeated EnumValue values = 2; - * @return {!Array.} + * @return {!Array} */ proto.BERTBuffers.EnumType.prototype.getValuesList = function() { - return /** @type{!Array.} */ ( + return /** @type{!Array} */ ( jspb.Message.getRepeatedWrapperField(this, proto.BERTBuffers.EnumValue, 2)); }; -/** @param {!Array.} value */ +/** + * @param {!Array} value + * @return {!proto.BERTBuffers.EnumType} returns this +*/ proto.BERTBuffers.EnumType.prototype.setValuesList = function(value) { - jspb.Message.setRepeatedWrapperField(this, 2, value); + return jspb.Message.setRepeatedWrapperField(this, 2, value); }; @@ -5357,29 +5931,16 @@ proto.BERTBuffers.EnumType.prototype.addValues = function(opt_value, opt_index) }; +/** + * Clears the list making it empty but non-null. + * @return {!proto.BERTBuffers.EnumType} returns this + */ proto.BERTBuffers.EnumType.prototype.clearValuesList = function() { - this.setValuesList([]); + return this.setValuesList([]); }; -/** - * Generated by JsPbCodeGenerator. - * @param {Array=} opt_data Optional initial data array, typically from a - * server response, or constructed directly in Javascript. The array is used - * in place and becomes part of the constructed object. It is not cloned. - * If no data is provided, the constructed object will be empty, but still - * valid. - * @extends {jspb.Message} - * @constructor - */ -proto.BERTBuffers.ExternalPointer = function(opt_data) { - jspb.Message.initialize(this, opt_data, 0, -1, proto.BERTBuffers.ExternalPointer.repeatedFields_, null); -}; -goog.inherits(proto.BERTBuffers.ExternalPointer, jspb.Message); -if (goog.DEBUG && !COMPILED) { - proto.BERTBuffers.ExternalPointer.displayName = 'proto.BERTBuffers.ExternalPointer'; -} /** * List of repeated fields within this message type. * @private {!Array} @@ -5391,13 +5952,15 @@ proto.BERTBuffers.ExternalPointer.repeatedFields_ = [3,4]; if (jspb.Message.GENERATE_TO_OBJECT) { /** - * Creates an object representation of this proto suitable for use in Soy templates. + * Creates an object representation of this proto. * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. * To access a reserved field use, foo.pb_, eg, foo.pb_default. * For the list of reserved names please see: - * com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS. - * @param {boolean=} opt_includeInstance Whether to include the JSPB instance - * for transitional soy proto support: http://goto/soy-param-migration + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration * @return {!Object} */ proto.BERTBuffers.ExternalPointer.prototype.toObject = function(opt_includeInstance) { @@ -5407,8 +5970,8 @@ proto.BERTBuffers.ExternalPointer.prototype.toObject = function(opt_includeInsta /** * Static version of the {@see toObject} method. - * @param {boolean|undefined} includeInstance Whether to include the JSPB - * instance for transitional soy proto support: + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: * http://goto/soy-param-migration * @param {!proto.BERTBuffers.ExternalPointer} msg The msg instance to transform. * @return {!Object} @@ -5416,11 +5979,11 @@ proto.BERTBuffers.ExternalPointer.prototype.toObject = function(opt_includeInsta */ proto.BERTBuffers.ExternalPointer.toObject = function(includeInstance, msg) { var f, obj = { - interfaceName: jspb.Message.getFieldWithDefault(msg, 1, ""), - pointer: jspb.Message.getFieldWithDefault(msg, 2, 0), - functionsList: jspb.Message.toObjectList(msg.getFunctionsList(), +interfaceName: jspb.Message.getFieldWithDefault(msg, 1, ""), +pointer: jspb.Message.getFieldWithDefault(msg, 2, 0), +functionsList: jspb.Message.toObjectList(msg.getFunctionsList(), proto.BERTBuffers.FunctionDescriptor.toObject, includeInstance), - enumsList: jspb.Message.toObjectList(msg.getEnumsList(), +enumsList: jspb.Message.toObjectList(msg.getEnumsList(), proto.BERTBuffers.EnumType.toObject, includeInstance) }; @@ -5547,9 +6110,12 @@ proto.BERTBuffers.ExternalPointer.prototype.getInterfaceName = function() { }; -/** @param {string} value */ +/** + * @param {string} value + * @return {!proto.BERTBuffers.ExternalPointer} returns this + */ proto.BERTBuffers.ExternalPointer.prototype.setInterfaceName = function(value) { - jspb.Message.setProto3StringField(this, 1, value); + return jspb.Message.setProto3StringField(this, 1, value); }; @@ -5562,25 +6128,31 @@ proto.BERTBuffers.ExternalPointer.prototype.getPointer = function() { }; -/** @param {number} value */ +/** + * @param {number} value + * @return {!proto.BERTBuffers.ExternalPointer} returns this + */ proto.BERTBuffers.ExternalPointer.prototype.setPointer = function(value) { - jspb.Message.setProto3IntField(this, 2, value); + return jspb.Message.setProto3IntField(this, 2, value); }; /** * repeated FunctionDescriptor functions = 3; - * @return {!Array.} + * @return {!Array} */ proto.BERTBuffers.ExternalPointer.prototype.getFunctionsList = function() { - return /** @type{!Array.} */ ( + return /** @type{!Array} */ ( jspb.Message.getRepeatedWrapperField(this, proto.BERTBuffers.FunctionDescriptor, 3)); }; -/** @param {!Array.} value */ +/** + * @param {!Array} value + * @return {!proto.BERTBuffers.ExternalPointer} returns this +*/ proto.BERTBuffers.ExternalPointer.prototype.setFunctionsList = function(value) { - jspb.Message.setRepeatedWrapperField(this, 3, value); + return jspb.Message.setRepeatedWrapperField(this, 3, value); }; @@ -5594,24 +6166,31 @@ proto.BERTBuffers.ExternalPointer.prototype.addFunctions = function(opt_value, o }; +/** + * Clears the list making it empty but non-null. + * @return {!proto.BERTBuffers.ExternalPointer} returns this + */ proto.BERTBuffers.ExternalPointer.prototype.clearFunctionsList = function() { - this.setFunctionsList([]); + return this.setFunctionsList([]); }; /** * repeated EnumType enums = 4; - * @return {!Array.} + * @return {!Array} */ proto.BERTBuffers.ExternalPointer.prototype.getEnumsList = function() { - return /** @type{!Array.} */ ( + return /** @type{!Array} */ ( jspb.Message.getRepeatedWrapperField(this, proto.BERTBuffers.EnumType, 4)); }; -/** @param {!Array.} value */ +/** + * @param {!Array} value + * @return {!proto.BERTBuffers.ExternalPointer} returns this +*/ proto.BERTBuffers.ExternalPointer.prototype.setEnumsList = function(value) { - jspb.Message.setRepeatedWrapperField(this, 4, value); + return jspb.Message.setRepeatedWrapperField(this, 4, value); }; @@ -5625,29 +6204,16 @@ proto.BERTBuffers.ExternalPointer.prototype.addEnums = function(opt_value, opt_i }; +/** + * Clears the list making it empty but non-null. + * @return {!proto.BERTBuffers.ExternalPointer} returns this + */ proto.BERTBuffers.ExternalPointer.prototype.clearEnumsList = function() { - this.setEnumsList([]); + return this.setEnumsList([]); }; -/** - * Generated by JsPbCodeGenerator. - * @param {Array=} opt_data Optional initial data array, typically from a - * server response, or constructed directly in Javascript. The array is used - * in place and becomes part of the constructed object. It is not cloned. - * If no data is provided, the constructed object will be empty, but still - * valid. - * @extends {jspb.Message} - * @constructor - */ -proto.BERTBuffers.CallResponse = function(opt_data) { - jspb.Message.initialize(this, opt_data, 0, -1, null, proto.BERTBuffers.CallResponse.oneofGroups_); -}; -goog.inherits(proto.BERTBuffers.CallResponse, jspb.Message); -if (goog.DEBUG && !COMPILED) { - proto.BERTBuffers.CallResponse.displayName = 'proto.BERTBuffers.CallResponse'; -} /** * Oneof group definitions for this message. Each group defines the field * numbers belonging to that group. When of these fields' value is set, all @@ -5684,13 +6250,15 @@ proto.BERTBuffers.CallResponse.prototype.getOperationCase = function() { if (jspb.Message.GENERATE_TO_OBJECT) { /** - * Creates an object representation of this proto suitable for use in Soy templates. + * Creates an object representation of this proto. * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. * To access a reserved field use, foo.pb_, eg, foo.pb_default. * For the list of reserved names please see: - * com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS. - * @param {boolean=} opt_includeInstance Whether to include the JSPB instance - * for transitional soy proto support: http://goto/soy-param-migration + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration * @return {!Object} */ proto.BERTBuffers.CallResponse.prototype.toObject = function(opt_includeInstance) { @@ -5700,8 +6268,8 @@ proto.BERTBuffers.CallResponse.prototype.toObject = function(opt_includeInstance /** * Static version of the {@see toObject} method. - * @param {boolean|undefined} includeInstance Whether to include the JSPB - * instance for transitional soy proto support: + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: * http://goto/soy-param-migration * @param {!proto.BERTBuffers.CallResponse} msg The msg instance to transform. * @return {!Object} @@ -5709,16 +6277,16 @@ proto.BERTBuffers.CallResponse.prototype.toObject = function(opt_includeInstance */ proto.BERTBuffers.CallResponse.toObject = function(includeInstance, msg) { var f, obj = { - id: jspb.Message.getFieldWithDefault(msg, 1, 0), - wait: jspb.Message.getFieldWithDefault(msg, 2, false), - err: jspb.Message.getFieldWithDefault(msg, 3, ""), - result: (f = msg.getResult()) && proto.BERTBuffers.Variable.toObject(includeInstance, f), - console: (f = msg.getConsole()) && proto.BERTBuffers.Console.toObject(includeInstance, f), - code: (f = msg.getCode()) && proto.BERTBuffers.Code.toObject(includeInstance, f), - shellCommand: jspb.Message.getFieldWithDefault(msg, 7, ""), - functionCall: (f = msg.getFunctionCall()) && proto.BERTBuffers.CompositeFunctionCall.toObject(includeInstance, f), - functionList: (f = msg.getFunctionList()) && proto.BERTBuffers.FunctionList.toObject(includeInstance, f), - userCommand: jspb.Message.getFieldWithDefault(msg, 10, 0) +id: jspb.Message.getFieldWithDefault(msg, 1, 0), +wait: jspb.Message.getBooleanFieldWithDefault(msg, 2, false), +err: (f = jspb.Message.getField(msg, 3)) == null ? undefined : f, +result: (f = msg.getResult()) && proto.BERTBuffers.Variable.toObject(includeInstance, f), +console: (f = msg.getConsole()) && proto.BERTBuffers.Console.toObject(includeInstance, f), +code: (f = msg.getCode()) && proto.BERTBuffers.Code.toObject(includeInstance, f), +shellCommand: (f = jspb.Message.getField(msg, 7)) == null ? undefined : f, +functionCall: (f = msg.getFunctionCall()) && proto.BERTBuffers.CompositeFunctionCall.toObject(includeInstance, f), +functionList: (f = msg.getFunctionList()) && proto.BERTBuffers.FunctionList.toObject(includeInstance, f), +userCommand: (f = jspb.Message.getField(msg, 10)) == null ? undefined : f }; if (includeInstance) { @@ -5916,26 +6484,30 @@ proto.BERTBuffers.CallResponse.prototype.getId = function() { }; -/** @param {number} value */ +/** + * @param {number} value + * @return {!proto.BERTBuffers.CallResponse} returns this + */ proto.BERTBuffers.CallResponse.prototype.setId = function(value) { - jspb.Message.setProto3IntField(this, 1, value); + return jspb.Message.setProto3IntField(this, 1, value); }; /** * optional bool wait = 2; - * Note that Boolean fields may be set to 0/1 when serialized from a Java server. - * You should avoid comparisons like {@code val === true/false} in those cases. * @return {boolean} */ proto.BERTBuffers.CallResponse.prototype.getWait = function() { - return /** @type {boolean} */ (jspb.Message.getFieldWithDefault(this, 2, false)); + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 2, false)); }; -/** @param {boolean} value */ +/** + * @param {boolean} value + * @return {!proto.BERTBuffers.CallResponse} returns this + */ proto.BERTBuffers.CallResponse.prototype.setWait = function(value) { - jspb.Message.setProto3BooleanField(this, 2, value); + return jspb.Message.setProto3BooleanField(this, 2, value); }; @@ -5948,20 +6520,27 @@ proto.BERTBuffers.CallResponse.prototype.getErr = function() { }; -/** @param {string} value */ +/** + * @param {string} value + * @return {!proto.BERTBuffers.CallResponse} returns this + */ proto.BERTBuffers.CallResponse.prototype.setErr = function(value) { - jspb.Message.setOneofField(this, 3, proto.BERTBuffers.CallResponse.oneofGroups_[0], value); + return jspb.Message.setOneofField(this, 3, proto.BERTBuffers.CallResponse.oneofGroups_[0], value); }; +/** + * Clears the field making it undefined. + * @return {!proto.BERTBuffers.CallResponse} returns this + */ proto.BERTBuffers.CallResponse.prototype.clearErr = function() { - jspb.Message.setOneofField(this, 3, proto.BERTBuffers.CallResponse.oneofGroups_[0], undefined); + return jspb.Message.setOneofField(this, 3, proto.BERTBuffers.CallResponse.oneofGroups_[0], undefined); }; /** * Returns whether this field is set. - * @return {!boolean} + * @return {boolean} */ proto.BERTBuffers.CallResponse.prototype.hasErr = function() { return jspb.Message.getField(this, 3) != null; @@ -5978,20 +6557,27 @@ proto.BERTBuffers.CallResponse.prototype.getResult = function() { }; -/** @param {?proto.BERTBuffers.Variable|undefined} value */ +/** + * @param {?proto.BERTBuffers.Variable|undefined} value + * @return {!proto.BERTBuffers.CallResponse} returns this +*/ proto.BERTBuffers.CallResponse.prototype.setResult = function(value) { - jspb.Message.setOneofWrapperField(this, 4, proto.BERTBuffers.CallResponse.oneofGroups_[0], value); + return jspb.Message.setOneofWrapperField(this, 4, proto.BERTBuffers.CallResponse.oneofGroups_[0], value); }; +/** + * Clears the message field making it undefined. + * @return {!proto.BERTBuffers.CallResponse} returns this + */ proto.BERTBuffers.CallResponse.prototype.clearResult = function() { - this.setResult(undefined); + return this.setResult(undefined); }; /** * Returns whether this field is set. - * @return {!boolean} + * @return {boolean} */ proto.BERTBuffers.CallResponse.prototype.hasResult = function() { return jspb.Message.getField(this, 4) != null; @@ -6008,20 +6594,27 @@ proto.BERTBuffers.CallResponse.prototype.getConsole = function() { }; -/** @param {?proto.BERTBuffers.Console|undefined} value */ +/** + * @param {?proto.BERTBuffers.Console|undefined} value + * @return {!proto.BERTBuffers.CallResponse} returns this +*/ proto.BERTBuffers.CallResponse.prototype.setConsole = function(value) { - jspb.Message.setOneofWrapperField(this, 5, proto.BERTBuffers.CallResponse.oneofGroups_[0], value); + return jspb.Message.setOneofWrapperField(this, 5, proto.BERTBuffers.CallResponse.oneofGroups_[0], value); }; +/** + * Clears the message field making it undefined. + * @return {!proto.BERTBuffers.CallResponse} returns this + */ proto.BERTBuffers.CallResponse.prototype.clearConsole = function() { - this.setConsole(undefined); + return this.setConsole(undefined); }; /** * Returns whether this field is set. - * @return {!boolean} + * @return {boolean} */ proto.BERTBuffers.CallResponse.prototype.hasConsole = function() { return jspb.Message.getField(this, 5) != null; @@ -6038,20 +6631,27 @@ proto.BERTBuffers.CallResponse.prototype.getCode = function() { }; -/** @param {?proto.BERTBuffers.Code|undefined} value */ +/** + * @param {?proto.BERTBuffers.Code|undefined} value + * @return {!proto.BERTBuffers.CallResponse} returns this +*/ proto.BERTBuffers.CallResponse.prototype.setCode = function(value) { - jspb.Message.setOneofWrapperField(this, 6, proto.BERTBuffers.CallResponse.oneofGroups_[0], value); + return jspb.Message.setOneofWrapperField(this, 6, proto.BERTBuffers.CallResponse.oneofGroups_[0], value); }; +/** + * Clears the message field making it undefined. + * @return {!proto.BERTBuffers.CallResponse} returns this + */ proto.BERTBuffers.CallResponse.prototype.clearCode = function() { - this.setCode(undefined); + return this.setCode(undefined); }; /** * Returns whether this field is set. - * @return {!boolean} + * @return {boolean} */ proto.BERTBuffers.CallResponse.prototype.hasCode = function() { return jspb.Message.getField(this, 6) != null; @@ -6067,20 +6667,27 @@ proto.BERTBuffers.CallResponse.prototype.getShellCommand = function() { }; -/** @param {string} value */ +/** + * @param {string} value + * @return {!proto.BERTBuffers.CallResponse} returns this + */ proto.BERTBuffers.CallResponse.prototype.setShellCommand = function(value) { - jspb.Message.setOneofField(this, 7, proto.BERTBuffers.CallResponse.oneofGroups_[0], value); + return jspb.Message.setOneofField(this, 7, proto.BERTBuffers.CallResponse.oneofGroups_[0], value); }; +/** + * Clears the field making it undefined. + * @return {!proto.BERTBuffers.CallResponse} returns this + */ proto.BERTBuffers.CallResponse.prototype.clearShellCommand = function() { - jspb.Message.setOneofField(this, 7, proto.BERTBuffers.CallResponse.oneofGroups_[0], undefined); + return jspb.Message.setOneofField(this, 7, proto.BERTBuffers.CallResponse.oneofGroups_[0], undefined); }; /** * Returns whether this field is set. - * @return {!boolean} + * @return {boolean} */ proto.BERTBuffers.CallResponse.prototype.hasShellCommand = function() { return jspb.Message.getField(this, 7) != null; @@ -6097,20 +6704,27 @@ proto.BERTBuffers.CallResponse.prototype.getFunctionCall = function() { }; -/** @param {?proto.BERTBuffers.CompositeFunctionCall|undefined} value */ +/** + * @param {?proto.BERTBuffers.CompositeFunctionCall|undefined} value + * @return {!proto.BERTBuffers.CallResponse} returns this +*/ proto.BERTBuffers.CallResponse.prototype.setFunctionCall = function(value) { - jspb.Message.setOneofWrapperField(this, 8, proto.BERTBuffers.CallResponse.oneofGroups_[0], value); + return jspb.Message.setOneofWrapperField(this, 8, proto.BERTBuffers.CallResponse.oneofGroups_[0], value); }; +/** + * Clears the message field making it undefined. + * @return {!proto.BERTBuffers.CallResponse} returns this + */ proto.BERTBuffers.CallResponse.prototype.clearFunctionCall = function() { - this.setFunctionCall(undefined); + return this.setFunctionCall(undefined); }; /** * Returns whether this field is set. - * @return {!boolean} + * @return {boolean} */ proto.BERTBuffers.CallResponse.prototype.hasFunctionCall = function() { return jspb.Message.getField(this, 8) != null; @@ -6127,20 +6741,27 @@ proto.BERTBuffers.CallResponse.prototype.getFunctionList = function() { }; -/** @param {?proto.BERTBuffers.FunctionList|undefined} value */ +/** + * @param {?proto.BERTBuffers.FunctionList|undefined} value + * @return {!proto.BERTBuffers.CallResponse} returns this +*/ proto.BERTBuffers.CallResponse.prototype.setFunctionList = function(value) { - jspb.Message.setOneofWrapperField(this, 9, proto.BERTBuffers.CallResponse.oneofGroups_[0], value); + return jspb.Message.setOneofWrapperField(this, 9, proto.BERTBuffers.CallResponse.oneofGroups_[0], value); }; +/** + * Clears the message field making it undefined. + * @return {!proto.BERTBuffers.CallResponse} returns this + */ proto.BERTBuffers.CallResponse.prototype.clearFunctionList = function() { - this.setFunctionList(undefined); + return this.setFunctionList(undefined); }; /** * Returns whether this field is set. - * @return {!boolean} + * @return {boolean} */ proto.BERTBuffers.CallResponse.prototype.hasFunctionList = function() { return jspb.Message.getField(this, 9) != null; @@ -6156,20 +6777,27 @@ proto.BERTBuffers.CallResponse.prototype.getUserCommand = function() { }; -/** @param {number} value */ +/** + * @param {number} value + * @return {!proto.BERTBuffers.CallResponse} returns this + */ proto.BERTBuffers.CallResponse.prototype.setUserCommand = function(value) { - jspb.Message.setOneofField(this, 10, proto.BERTBuffers.CallResponse.oneofGroups_[0], value); + return jspb.Message.setOneofField(this, 10, proto.BERTBuffers.CallResponse.oneofGroups_[0], value); }; +/** + * Clears the field making it undefined. + * @return {!proto.BERTBuffers.CallResponse} returns this + */ proto.BERTBuffers.CallResponse.prototype.clearUserCommand = function() { - jspb.Message.setOneofField(this, 10, proto.BERTBuffers.CallResponse.oneofGroups_[0], undefined); + return jspb.Message.setOneofField(this, 10, proto.BERTBuffers.CallResponse.oneofGroups_[0], undefined); }; /** * Returns whether this field is set. - * @return {!boolean} + * @return {boolean} */ proto.BERTBuffers.CallResponse.prototype.hasUserCommand = function() { return jspb.Message.getField(this, 10) != null; diff --git a/Console/index.html b/Console/index.html index 7c54c35d..3b773f76 100644 --- a/Console/index.html +++ b/Console/index.html @@ -24,7 +24,7 @@ BERT Console - + @@ -45,7 +45,16 @@ @@ -53,7 +62,6 @@ diff --git a/Console/main.js b/Console/main.js index f894e844..62be527a 100644 --- a/Console/main.js +++ b/Console/main.js @@ -16,18 +16,18 @@ * You should have received a copy of the GNU General Public License * along with BERT. If not, see . */ - -const url = require('url') const path = require('path'); -const electron = require('electron') -// Module to control application life. -const app = electron.app -// Module to create native browser window. -const BrowserWindow = electron.BrowserWindow - +const { app, BrowserWindow } = require('electron'); +const remote = require('@electron/remote/main'); const WindowState = require('electron-window-state'); -require('electron-reload')(path.join(__dirname,"build")); +remote.initialize(); + +// for automated testing: expose the devtools protocol on this port, so a +// test can drive the console and read its state without touching the UI +if (process.env.BERT_CONSOLE_DEBUG_PORT) { + app.commandLine.appendSwitch('remote-debugging-port', process.env.BERT_CONSOLE_DEBUG_PORT); +} let dev_flags = 0; let pipe_list = []; @@ -35,16 +35,11 @@ let management_pipe = ""; process.env['BERT_CONSOLE_ROOT'] = __dirname; -// we might have (in fact we expect to have) multiple pipes, -// and we need to keep track of all of them. they're not -// specifically identified, we ask the pipe what language -// it uses. +// command line: -m , -p (repeated), -d for( let i = 0; i< process.argv.length; i++ ){ - let arg = process.argv[i]; let more = (i < (process.argv.length - 1)); - if( arg === "-p" && more ){ pipe_list.push(process.argv[++i]); } @@ -65,9 +60,7 @@ if(pipe_list.length){ process.env['BERT_PIPE_NAME'] = pipe_list.join(";"); } -// Keep a global reference of the window object, if you don't, the window will -// be closed automatically when the JavaScript object is garbage collected. -let mainWindow +let mainWindow; function createWindow () { @@ -75,50 +68,45 @@ function createWindow () { defaultWidth: 1200, defaultHeight: 800 }); - // Create the browser window. - mainWindow = new BrowserWindow(window_state); + // the renderer talks to the add-in over named pipes and reads and watches + // files itself, so it runs with node available. that is the architecture + // the console has always had; current electron just makes it an explicit + // choice instead of the default. + + mainWindow = new BrowserWindow({ + x: window_state.x, + y: window_state.y, + width: window_state.width, + height: window_state.height, + webPreferences: { + nodeIntegration: true, + contextIsolation: false + } + }); + remote.enable(mainWindow.webContents); window_state.manage(mainWindow); - // and load the index.html of the app. - mainWindow.loadURL(url.format({ - pathname: path.join(__dirname, 'index.html'), - protocol: 'file:', - slashes: true - })) + mainWindow.loadFile(path.join(__dirname, 'index.html')); - if(dev_flags) mainWindow.webContents.openDevTools() + if(dev_flags) mainWindow.webContents.openDevTools(); - // Emitted when the window is closed. mainWindow.on('closed', function () { - // Dereference the window object, usually you would store windows - // in an array if your app supports multi windows, this is the time - // when you should delete the corresponding element. - mainWindow = null - }) + mainWindow = null; + }); + } -// This method will be called when Electron has finished -// initialization and is ready to create browser windows. -// Some APIs can only be used after this event occurs. -app.on('ready', createWindow) +app.whenReady().then(createWindow); -// Quit when all windows are closed. app.on('window-all-closed', function () { - // On OS X it is common for applications and their menu bar - // to stay active until the user quits explicitly with Cmd + Q if (process.platform !== 'darwin') { - app.quit() + app.quit(); } -}) +}); app.on('activate', function () { - // On OS X it's common to re-create a window in the app when the - // dock icon is clicked and there are no other windows open. if (mainWindow === null) { - createWindow() + createWindow(); } -}) - -// In this file you can include the rest of your app's specific main process -// code. You can also put them in separate files and require them here. +}); diff --git a/Console/package-lock.json b/Console/package-lock.json new file mode 100644 index 00000000..a0a5dadd --- /dev/null +++ b/Console/package-lock.json @@ -0,0 +1,4542 @@ +{ + "name": "bert2-console", + "version": "2.4.3", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "bert2-console", + "version": "2.4.3", + "license": "GPL-3.0", + "dependencies": { + "@electron/remote": "^2.1.3", + "@xterm/addon-fit": "^0.11.0", + "@xterm/addon-web-links": "^0.12.0", + "@xterm/xterm": "^6.0.0", + "chokidar": "^4.0.3", + "electron-window-state": "^5.0.3", + "google-protobuf": "^4.0.2", + "js-base64": "^3.9.3", + "less": "^4.9.1", + "markdown-it": "^15.0.1", + "markdown-it-task-lists": "^2.1.1", + "monaco-editor": "^0.56.0", + "rxjs": "^7.8.2", + "wcwidth": "^1.0.1" + }, + "devDependencies": { + "@types/node": "^22.0.0", + "electron": "^44.1.1", + "electron-builder": "^26.15.3", + "typescript": "^7.0.2" + } + }, + "node_modules/@electron-internal/extract-zip": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@electron-internal/extract-zip/-/extract-zip-1.0.5.tgz", + "integrity": "sha512-+bqFCP98pLI0Tt0XQo1TmlXtwjWchISndDOxCkEcIuUgXWpBnLyRI+2DU+mesvnMMX6L1XDqYNA0lXNDHd/yiA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=22.12.0" + } + }, + "node_modules/@electron/asar": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@electron/asar/-/asar-3.4.1.tgz", + "integrity": "sha512-i4/rNPRS84t0vSRa2HorerGRXWyF4vThfHesw0dmcWHp+cspK743UanA0suA5Q5y8kzY2y6YKrvbIUn69BCAiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "commander": "^5.0.0", + "glob": "^7.1.6", + "minimatch": "^3.0.4" + }, + "bin": { + "asar": "bin/asar.js" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/@electron/asar/node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/@electron/asar/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@electron/fuses": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@electron/fuses/-/fuses-1.8.0.tgz", + "integrity": "sha512-zx0EIq78WlY/lBb1uXlziZmDZI4ubcCXIMJ4uGjXzZW0nS19TjSPeXPAjzzTmKQlJUZm0SbmZhPKP7tuQ1SsEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.1", + "fs-extra": "^9.0.1", + "minimist": "^1.2.5" + }, + "bin": { + "electron-fuses": "dist/bin.js" + } + }, + "node_modules/@electron/fuses/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@electron/fuses/node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@electron/get": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@electron/get/-/get-5.1.0.tgz", + "integrity": "sha512-3kSBtG8ObcTVfXanm5vVJ6UnBLEVmVsRk1M+vGqCuMBV+XLCbJYuWQful+yIy0GQDsSlK0kHEriEHn7SPk4EnA==", + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "env-paths": "^3.0.0", + "graceful-fs": "^4.2.11", + "progress": "^2.0.3", + "semver": "^7.6.3", + "sumchecker": "^3.0.1" + }, + "engines": { + "node": ">=22.12.0" + }, + "optionalDependencies": { + "undici": "^7.24.4" + } + }, + "node_modules/@electron/notarize": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@electron/notarize/-/notarize-2.5.0.tgz", + "integrity": "sha512-jNT8nwH1f9X5GEITXaQ8IF/KdskvIkOFfB2CvwumsveVidzpSc+mvhhTMdAGSYF3O+Nq49lJ7y+ssODRXu06+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "fs-extra": "^9.0.1", + "promise-retry": "^2.0.1" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@electron/notarize/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@electron/notarize/node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@electron/osx-sign": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@electron/osx-sign/-/osx-sign-1.3.3.tgz", + "integrity": "sha512-KZ8mhXvWv2rIEgMbWZ4y33bDHyUKMXnx4M0sTyPNK/vcB81ImdeY9Ggdqy0SWbMDgmbqyQ+phgejh6V3R2QuSg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "compare-version": "^0.1.2", + "debug": "^4.3.4", + "fs-extra": "^10.0.0", + "isbinaryfile": "^4.0.8", + "minimist": "^1.2.6", + "plist": "^3.0.5" + }, + "bin": { + "electron-osx-flat": "bin/electron-osx-flat.js", + "electron-osx-sign": "bin/electron-osx-sign.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@electron/osx-sign/node_modules/isbinaryfile": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", + "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "node_modules/@electron/rebuild": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@electron/rebuild/-/rebuild-4.2.0.tgz", + "integrity": "sha512-RKL/O+jGoXJMxrx/5771y1n0xTKmFuOYGO3gMmwypBM6rsH0kou0mswwdXA2JrhIkE4xyC7v9vGk0n6NPzgOxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@malept/cross-spawn-promise": "^2.0.0", + "debug": "^4.1.1", + "node-abi": "^4.2.0", + "node-api-version": "^0.2.1", + "node-gyp": "^12.2.0", + "read-binary-file-arch": "^1.0.6" + }, + "bin": { + "electron-rebuild": "lib/cli.js" + }, + "engines": { + "node": ">=22.12.0" + } + }, + "node_modules/@electron/remote": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@electron/remote/-/remote-2.1.3.tgz", + "integrity": "sha512-XlpxC8S4ttj/v2d+PKp9na/3Ev8bV7YWNL7Cw5b9MAWgTphEml7iYgbc7V0r9D6yDOfOkj06bchZgOZdlWJGNA==", + "license": "MIT", + "peerDependencies": { + "electron": ">= 13.0.0" + } + }, + "node_modules/@electron/universal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@electron/universal/-/universal-2.0.3.tgz", + "integrity": "sha512-Wn9sPYIVFRFl5HmwMJkARCCf7rqK/EurkfQ/rJZ14mHP3iYTjZSIOSVonEAnhWeAXwtw7zOekGRlc6yTtZ0t+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@electron/asar": "^3.3.1", + "@malept/cross-spawn-promise": "^2.0.0", + "debug": "^4.3.1", + "dir-compare": "^4.2.0", + "fs-extra": "^11.1.1", + "minimatch": "^9.0.3", + "plist": "^3.1.0" + }, + "engines": { + "node": ">=16.4" + } + }, + "node_modules/@electron/universal/node_modules/brace-expansion": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.4.tgz", + "integrity": "sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@electron/universal/node_modules/fs-extra": { + "version": "11.4.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.4.0.tgz", + "integrity": "sha512-EQsFzMUJkCKGr1ePqlYADkIUmHW1s3ZXr5Yqy6wbGrfUCphpl2maM/kyOIRA2HpP3AaFQTZXD4ldjek+nccddA==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@electron/universal/node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@electron/universal/node_modules/minimatch": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@electron/windows-sign": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@electron/windows-sign/-/windows-sign-1.2.2.tgz", + "integrity": "sha512-dfZeox66AvdPtb2lD8OsIIQh12Tp0GNCRUDfBHIKGpbmopZto2/A8nSpYYLoedPIHpqkeblZ/k8OV0Gy7PYuyQ==", + "dev": true, + "license": "BSD-2-Clause", + "optional": true, + "peer": true, + "dependencies": { + "cross-dirname": "^0.1.0", + "debug": "^4.3.4", + "fs-extra": "^11.1.1", + "minimist": "^1.2.8", + "postject": "^1.0.0-alpha.6" + }, + "bin": { + "electron-windows-sign": "bin/electron-windows-sign.js" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@electron/windows-sign/node_modules/fs-extra": { + "version": "11.4.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.4.0.tgz", + "integrity": "sha512-EQsFzMUJkCKGr1ePqlYADkIUmHW1s3ZXr5Yqy6wbGrfUCphpl2maM/kyOIRA2HpP3AaFQTZXD4ldjek+nccddA==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@electron/windows-sign/node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@malept/cross-spawn-promise": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-2.0.0.tgz", + "integrity": "sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/malept" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/subscription/pkg/npm-.malept-cross-spawn-promise?utm_medium=referral&utm_source=npm_fund" + } + ], + "license": "Apache-2.0", + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/@malept/flatpak-bundler": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@malept/flatpak-bundler/-/flatpak-bundler-0.4.0.tgz", + "integrity": "sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "fs-extra": "^9.0.0", + "lodash": "^4.17.15", + "tmp-promise": "^3.0.2" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@malept/flatpak-bundler/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@malept/flatpak-bundler/node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@malept/flatpak-bundler/node_modules/lodash": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@noble/hashes": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-2.4.0.tgz", + "integrity": "sha512-X5XaVWZIBCT7HHZGm5I7ZQXDwLG+bGXuSrMQAW+7Zvl87h1kmc1ZB1VSRJcpUfoUrGQp4Fkoxm5kZ+Ms+aW+eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@peculiar/asn1-schema": { + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.9.4.tgz", + "integrity": "sha512-GjzePcT9Iw8NzeOPf73iNS9xM+TBhd/FilAfP+RQGkTMQJTVWtytN3JHJACCjf/ABNau5S7mS3g+DcuxmRgYEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/utils": "^2.0.2", + "asn1js": "^3.0.10", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@peculiar/json-schema": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/@peculiar/json-schema/-/json-schema-1.1.12.tgz", + "integrity": "sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@peculiar/utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@peculiar/utils/-/utils-2.0.3.tgz", + "integrity": "sha512-+oL3HPFRIZ1St2K50lWCXiioIgSoxzz7R1J3uF6neO2yl1sgmpgY6XXJH4BdpoDkMWznQTeYF6oWNDZLCdQ4eQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/webcrypto": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@peculiar/webcrypto/-/webcrypto-1.7.1.tgz", + "integrity": "sha512-ODOov0sGMJMf3jPonOkgGqPknTsu+DdQ7kD++gz8aI+aFMOMHFbWAA2taqXXVTdP+OTOQR/znGvSpmkeI0WTYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.7.0", + "@peculiar/json-schema": "^1.1.12", + "@peculiar/utils": "^2.0.2", + "tslib": "^2.8.1", + "webcrypto-core": "^1.9.2" + }, + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "dev": true, + "license": "MIT", + "dependencies": { + "defer-to-connect": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@types/cacheable-request": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-cache-semantics": "*", + "@types/keyv": "^3.1.4", + "@types/node": "*", + "@types/responselike": "^1.0.0" + } + }, + "node_modules/@types/debug": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.13.tgz", + "integrity": "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/fs-extra": { + "version": "9.0.13", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", + "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/keyv": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.20.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.20.1.tgz", + "integrity": "sha512-EANqOCF9QFyra+4pfxUcX9STKJpCLjMbObVzljIJomAWSnuSIEAvyzEU53GaajbXJEgdh0iEcPL+DGvpUd4k1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/responselike": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", + "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "license": "MIT", + "optional": true + }, + "node_modules/@typescript/typescript-aix-ppc64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-aix-ppc64/-/typescript-aix-ppc64-7.0.2.tgz", + "integrity": "sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-darwin-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-darwin-arm64/-/typescript-darwin-arm64-7.0.2.tgz", + "integrity": "sha512-gowzar9MwS/aRWp6f3a4KUqzRjAZjOsmGNCM6LcTgXum+dBfgsBVMN+AgvOCCbguXyick6LJhpBszxMebJ8syA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-darwin-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-darwin-x64/-/typescript-darwin-x64-7.0.2.tgz", + "integrity": "sha512-SZ9xZInqApNlNGc9s0W1VSsktYSOe9cFqNOIqmN1Gs8SmkjKZYFt017G4VwPxASInODuAdbTW7sXiFUf893RgA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-freebsd-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-freebsd-arm64/-/typescript-freebsd-arm64-7.0.2.tgz", + "integrity": "sha512-W5NH4y/J0plIIS5b2xvTEkU7JFxyqdMAOgf+Ilhl0vHQXKO5dZoxd+C/jEtq56c4F3wk71RB4BMRQ2XdI+bwYQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-freebsd-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-freebsd-x64/-/typescript-freebsd-x64-7.0.2.tgz", + "integrity": "sha512-UMGDx5sTpzNw3WiPebH7l90IWfJggEd+egHt/q6p7/Cm3zqoV7VxkGXt+3DxPIw8CcmvAB0j3sVVfbhX+M4Tpw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-arm": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-arm/-/typescript-linux-arm-7.0.2.tgz", + "integrity": "sha512-gffT3xPz9sR7j/YJExkyPntrI0P2EP9XbOyWzth2/Gs0RstK+90RBcO0ncXoXy/beYll1SXw846Nf2zdnEz0QQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-arm64/-/typescript-linux-arm64-7.0.2.tgz", + "integrity": "sha512-Qh4eU4/y3yDjnfjjyPYihMj5/ODIlmt+Bzu17OI+fiSRDW57QmU5SiN63exPRNJPKUzcc1INa1NXdrJ+MqHjUQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-loong64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-loong64/-/typescript-linux-loong64-7.0.2.tgz", + "integrity": "sha512-uEHck9i8hoAzXPiYRib1O7miOnz23SxIeVl6F4LXox+qov1K35jHcEW6VHKvZI+pyvl7fZEP4MCU5LYvIq1GuQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-mips64el": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-mips64el/-/typescript-linux-mips64el-7.0.2.tgz", + "integrity": "sha512-R4KvAMnE43W5Qeqb0Ly56O3mWMWIAgsMyz36DCaycd5nbg/9kzm0liw3JocfRqyJY0KPmzFjbswozXyW0DnIYA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-ppc64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-ppc64/-/typescript-linux-ppc64-7.0.2.tgz", + "integrity": "sha512-DORx5b3sd/4S7eayxm4FQv+A7CrkUIGRaHiwI8oiHTAI1fAPWhF4J0vAlkC8biAlHSVVwxMQ3tjZ2/DVbnQiiA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-riscv64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-riscv64/-/typescript-linux-riscv64-7.0.2.tgz", + "integrity": "sha512-wf0jqEDOjrPRnKwYRyyJDRo11KMbvMFrU+q4zqKyChODBzvlkbhNQfKvLxQCcwTpdDaXSHZTVuh0JoCrKCUMHQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-s390x": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-s390x/-/typescript-linux-s390x-7.0.2.tgz", + "integrity": "sha512-IkwJc3L7yhytWd/ewjyxNDfOmswCm9GWMJT/ue/dU4aZNbwZeYAetq42VyLmsmSjvoX7z74X6ZaYCtzAr0EuGw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-x64/-/typescript-linux-x64-7.0.2.tgz", + "integrity": "sha512-EYdf2cNg7rgCWJnxCdJ+F3V39O8ihb37eHAu1LK8oAFizgTQbPOK7zHHXbPt8rX24COqODXeI3sIf0fCXG7H/A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-netbsd-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-netbsd-arm64/-/typescript-netbsd-arm64-7.0.2.tgz", + "integrity": "sha512-+polYF4MF04aPpO5FTkHran9yUQDSXqy5GiSDKpsll5jy3l3+g9QLhpf39T+ePtefhXLOGrLl0QIjkQP6VnelA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-netbsd-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-netbsd-x64/-/typescript-netbsd-x64-7.0.2.tgz", + "integrity": "sha512-8YIT0EHM/3dq10ZOVF/A7pc/YSMtbcecct4rWtexrnSCHOPcpC2KTLXfTCR6vDpnSiY12heNb1GiN/wu+T/FyA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-openbsd-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-openbsd-arm64/-/typescript-openbsd-arm64-7.0.2.tgz", + "integrity": "sha512-APT8+ClYnuYm1u9+kgGXoMj2VzWzcymwh2gNSQVySHfkRDGOTVkoWLjCmOQSaO+PoqQ57B0flRp9SA+7GnnkzQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-openbsd-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-openbsd-x64/-/typescript-openbsd-x64-7.0.2.tgz", + "integrity": "sha512-yX7s+Q0Dln0Dt9tEzZsAjXXR/+ytBM7AlglaqyeMPxQszJ1JhlJdZ6jLA+IzldHtflX81em7lDao1xXu+aRRkg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-sunos-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-sunos-x64/-/typescript-sunos-x64-7.0.2.tgz", + "integrity": "sha512-dLJDGaLZ1D4HPQn62u1n8mBDkJREwMsAkCdkwd4Ieqw+x3TUyTsqY0YiBCtE6H6OzzgGk3iuZ3vFWRS+E8/d1g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-win32-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-win32-arm64/-/typescript-win32-arm64-7.0.2.tgz", + "integrity": "sha512-Gyl1Vy6OsWesLzmq+EP0Fb7b4Nid5232AvcA2SFcdYreldpNtYFFofPjnt62y9hQy7VTaZp65ICJjuAQRaVcIQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-win32-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-win32-x64/-/typescript-win32-x64-7.0.2.tgz", + "integrity": "sha512-0BQ3HkAHHlKLSp1qRvf3SUhGpGsDuhB/jgFw75guyqbxJqEaS0Cw/VFO8i2nHglJUzQCRtMMR/IBAKE3ETMC4g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@xmldom/xmldom": { + "version": "0.8.15", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.15.tgz", + "integrity": "sha512-/5NV/vDALVFDXgLmfsy9TRCBlKwO2LNBFzpzvb9iIj+jR+eSc6DLYYvVOdivT/jm7MtU6TebYuRmzEOI7w40UA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@xterm/addon-fit": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@xterm/addon-fit/-/addon-fit-0.11.0.tgz", + "integrity": "sha512-jYcgT6xtVYhnhgxh3QgYDnnNMYTcf8ElbxxFzX0IZo+vabQqSPAjC3c1wJrKB5E19VwQei89QCiZZP86DCPF7g==", + "license": "MIT" + }, + "node_modules/@xterm/addon-web-links": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@xterm/addon-web-links/-/addon-web-links-0.12.0.tgz", + "integrity": "sha512-4Smom3RPyVp7ZMYOYDoC/9eGJJJqYhnPLGGqJ6wOBfB8VxPViJNSKdgRYb8NpaM6YSelEKbA2SStD7lGyqaobw==", + "license": "MIT" + }, + "node_modules/@xterm/xterm": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@xterm/xterm/-/xterm-6.0.0.tgz", + "integrity": "sha512-TQwDdQGtwwDt+2cgKDLn0IRaSxYu1tSUjgKarSDkUM0ZNiSRXFpjxEsvc/Zgc5kq5omJ+V0a8/kIM2WD3sMOYg==", + "license": "MIT", + "workspaces": [ + "addons/*" + ] + }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/ajv": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/app-builder-lib": { + "version": "26.15.3", + "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-26.15.3.tgz", + "integrity": "sha512-2VnyWkqsP5v5XbBhL3tD5Syx8iNPBYsoU7kY4S2fz7wg8Rj/nztWKCUzGKaFRTv0Xwf3/H058CR1Kvtd/3lRow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@electron/asar": "3.4.1", + "@electron/fuses": "^1.8.0", + "@electron/get": "^3.0.0", + "@electron/notarize": "2.5.0", + "@electron/osx-sign": "1.3.3", + "@electron/rebuild": "^4.0.4", + "@electron/universal": "2.0.3", + "@malept/flatpak-bundler": "^0.4.0", + "@noble/hashes": "^2.2.0", + "@peculiar/webcrypto": "^1.7.1", + "@types/fs-extra": "9.0.13", + "ajv": "^8.18.0", + "asn1js": "^3.0.10", + "async-exit-hook": "^2.0.1", + "builder-util": "26.15.3", + "builder-util-runtime": "9.7.0", + "chromium-pickle-js": "^0.2.0", + "ci-info": "4.3.1", + "debug": "^4.3.4", + "dotenv": "^16.4.5", + "dotenv-expand": "^11.0.6", + "ejs": "^3.1.8", + "electron-publish": "26.15.3", + "fs-extra": "^10.1.0", + "hosted-git-info": "^4.1.0", + "isbinaryfile": "^5.0.0", + "jiti": "^2.4.2", + "js-yaml": "^4.1.0", + "json5": "^2.2.3", + "lazy-val": "^1.0.5", + "minimatch": "^10.2.5", + "pkijs": "^3.4.0", + "plist": "3.1.0", + "proper-lockfile": "^4.1.2", + "resedit": "^1.7.0", + "semver": "~7.7.3", + "tar": "^7.5.7", + "temp-file": "^3.4.0", + "tiny-async-pool": "1.3.0", + "unzipper": "^0.12.3", + "which": "^5.0.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "dmg-builder": "26.15.3", + "electron-builder-squirrel-windows": "26.15.3" + } + }, + "node_modules/app-builder-lib/node_modules/@electron/get": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@electron/get/-/get-3.1.0.tgz", + "integrity": "sha512-F+nKc0xW+kVbBRhFzaMgPy3KwmuNTYX1fx6+FxxoSnNgwYX6LD7AKBTWkU0MQ6IBoe7dz069CNkR673sPAgkCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "env-paths": "^2.2.0", + "fs-extra": "^8.1.0", + "got": "^11.8.5", + "progress": "^2.0.3", + "semver": "^6.2.0", + "sumchecker": "^3.0.1" + }, + "engines": { + "node": ">=14" + }, + "optionalDependencies": { + "global-agent": "^3.0.0" + } + }, + "node_modules/app-builder-lib/node_modules/@electron/get/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/app-builder-lib/node_modules/@electron/get/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/app-builder-lib/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/app-builder-lib/node_modules/brace-expansion": { + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.9.tgz", + "integrity": "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/app-builder-lib/node_modules/ci-info": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.1.tgz", + "integrity": "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/app-builder-lib/node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/app-builder-lib/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/app-builder-lib/node_modules/minimatch": { + "version": "10.2.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz", + "integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.8" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/app-builder-lib/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/app-builder-lib/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/argparse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-3.0.1.tgz", + "integrity": "sha512-nM4mHF/KM1v59ZNKX7zfusQz5wUAxR511YG8Vo6TyiV4aqhu++rbJW4v04xsWhpSsHFj66flT8P7znVpyO20xQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], + "license": "PSF-2.0" + }, + "node_modules/asn1js": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.10.tgz", + "integrity": "sha512-S2s3aOytiKdFRdulw2qPE51MzjzVOisppcVv7jVFR+Kw0kxwvFrDcYA0h7Ndqbmj0HkMIXYWaoj7fli8kgx1eg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "pvtsutils": "^1.3.6", + "pvutils": "^1.1.5", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "dev": true, + "license": "MIT" + }, + "node_modules/async-exit-hook": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", + "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/aws4": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", + "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", + "dev": true, + "license": "MIT" + }, + "node_modules/balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha512-9Y0g0Q8rmSt+H33DfKv7FOc3v+iRI+o1lbzt8jGcIosYW37IIW/2XVYq5NPdmaD5NQ59Nk26Kl/vZbwW9Fr8vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/boolean": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", + "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/brace-expansion": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha512-Dnfc9ROAPrkkeLIUweEbh7LFT9Mc53tO/bbM044rKjhgAEyIGKvKXg97PM/kRizZIfUHaROZIoeEaWao+Unzfw==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/builder-util": { + "version": "26.15.3", + "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-26.15.3.tgz", + "integrity": "sha512-q2hn7Mbo2nFNkVekPiHFx6Nfo3hURmES3tfBn+k5Pqxl2RkmP3QGqZUhH/q9Pch/4G05NRhPjDlVj1O8q4Txvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/debug": "^4.1.6", + "builder-util-runtime": "9.7.0", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.6", + "debug": "^4.3.4", + "fs-extra": "^10.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "js-yaml": "^4.1.0", + "sanitize-filename": "^1.6.3", + "source-map-support": "^0.5.19", + "stat-mode": "^1.0.0", + "temp-file": "^3.4.0", + "tiny-async-pool": "1.3.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/builder-util-runtime": { + "version": "9.7.0", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.7.0.tgz", + "integrity": "sha512-g/kR520giAFYkSXTzcmF3kqQq7wi8F6N6SzeDgZrqTBN+VHdmgWOyTdD1yD7AATDId/yXLvuP34CxW46/BwCdw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4", + "sax": "^1.2.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/bytestreamjs": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bytestreamjs/-/bytestreamjs-2.0.1.tgz", + "integrity": "sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.6.0" + } + }, + "node_modules/cacheable-request": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", + "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/chromium-pickle-js": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz", + "integrity": "sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==", + "dev": true, + "license": "MIT" + }, + "node_modules/ci-info": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", + "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/compare-version": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz", + "integrity": "sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/copy-anything": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz", + "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", + "license": "MIT", + "dependencies": { + "is-what": "^4.1.8" + }, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-dirname": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/cross-dirname/-/cross-dirname-0.1.0.tgz", + "integrity": "sha512-+R08/oI0nl3vfPcqftZRpytksBXDzOUveBq/NBVx0sUp1axwzPQrKinNx5yd5sxPu8j1wIy8AfnVQ+5eFdha6Q==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-spawn/node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "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==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/dir-compare": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-4.2.0.tgz", + "integrity": "sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimatch": "^3.0.5", + "p-limit": "^3.1.0 " + } + }, + "node_modules/dmg-builder": { + "version": "26.15.3", + "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-26.15.3.tgz", + "integrity": "sha512-O3zJUFUYHJKgzPqioHxfxzBzlSC1eXCSr79gMSBKBP5AgjjpmrydMsMLotEg9fAJF36vdUncb+4ndRNxoPdlSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "app-builder-lib": "26.15.3", + "builder-util": "26.15.3", + "fs-extra": "^10.1.0", + "js-yaml": "^4.1.0" + } + }, + "node_modules/dompurify": { + "version": "3.4.8", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.8.tgz", + "integrity": "sha512-yb1cEmaOum7wFvOCSQxyfgVlv5D47Rc30iZWoMpbDIWTnJ6grDDQyu2KFJzB2k7u0pMuJcQ1zphH//fFnw2tjQ==", + "license": "(MPL-2.0 OR Apache-2.0)", + "optionalDependencies": { + "@types/trusted-types": "^2.0.7" + } + }, + "node_modules/dotenv": { + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", + "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dotenv-expand": { + "version": "11.0.7", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz", + "integrity": "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dotenv": "^16.4.5" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron": { + "version": "44.1.1", + "resolved": "https://registry.npmjs.org/electron/-/electron-44.1.1.tgz", + "integrity": "sha512-N2WCq2sbOkqQgvXJYx2lS6UiO8bF+Yr67trDnS6JKa2WxTCRQsAjGl57SUtdW9h6r5PlduBFjIhxhgd3dzv1hg==", + "license": "MIT", + "dependencies": { + "@electron-internal/extract-zip": "^1.0.1", + "@electron/get": "^5.0.0", + "@types/node": "^24.9.0" + }, + "bin": { + "electron": "cli.js", + "install-electron": "install.js" + }, + "engines": { + "node": ">= 22.12.0" + } + }, + "node_modules/electron-builder": { + "version": "26.15.3", + "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-26.15.3.tgz", + "integrity": "sha512-a1KM5heqS3gQCZzizXEI8RjJy3QVogULPdeSknt76uLDpBIW/HDGsMg/XgP0riP6PI9COsRvFITKKGDqA8fJxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "app-builder-lib": "26.15.3", + "builder-util": "26.15.3", + "builder-util-runtime": "9.7.0", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "dmg-builder": "26.15.3", + "fs-extra": "^10.1.0", + "lazy-val": "^1.0.5", + "simple-update-notifier": "2.0.0", + "yargs": "^17.6.2" + }, + "bin": { + "electron-builder": "cli.js", + "install-app-deps": "install-app-deps.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/electron-builder-squirrel-windows": { + "version": "26.15.3", + "resolved": "https://registry.npmjs.org/electron-builder-squirrel-windows/-/electron-builder-squirrel-windows-26.15.3.tgz", + "integrity": "sha512-Jc19XPV9y9+2bAdZPkXuVNGNIEFBq9poHC61l8Kv6FdK7DRG3+Ic0rerC0DXOaeHNz8yW0fg/JnF8GQROOF5MA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "app-builder-lib": "26.15.3", + "builder-util": "26.15.3", + "electron-winstaller": "5.4.0" + } + }, + "node_modules/electron-publish": { + "version": "26.15.3", + "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-26.15.3.tgz", + "integrity": "sha512-g/2bn8YTavY4cuS5F+jOS7zmZbXXBV8KZ8yHKfJjFPoKtzBqrpCdNPxBd3tqdBwP7BVd0lGzf7Bk2s0KesWZ4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/fs-extra": "^9.0.11", + "aws4": "^1.13.2", + "builder-util": "26.15.3", + "builder-util-runtime": "9.7.0", + "chalk": "^4.1.2", + "form-data": "^4.0.5", + "fs-extra": "^10.1.0", + "lazy-val": "^1.0.5", + "mime": "^2.5.2" + } + }, + "node_modules/electron-publish/node_modules/form-data": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz", + "integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.4", + "mime-types": "^2.1.35" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/electron-window-state": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/electron-window-state/-/electron-window-state-5.0.3.tgz", + "integrity": "sha512-1mNTwCfkolXl3kMf50yW3vE2lZj0y92P/HYWFBrb+v2S/pCka5mdwN3cagKm458A7NjndSwijynXgcLWRodsVg==", + "license": "MIT", + "dependencies": { + "jsonfile": "^4.0.0", + "mkdirp": "^0.5.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/electron-window-state/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/electron-winstaller": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/electron-winstaller/-/electron-winstaller-5.4.0.tgz", + "integrity": "sha512-bO3y10YikuUwUuDUQRM4KfwNkKhnpVO7IPdbsrejwN9/AABJzzTQ4GeHwyzNSrVO+tEH3/Np255a3sVZpZDjvg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@electron/asar": "^3.2.1", + "debug": "^4.1.1", + "fs-extra": "^7.0.1", + "lodash": "^4.17.21", + "temp": "^0.9.0" + }, + "engines": { + "node": ">=8.0.0" + }, + "optionalDependencies": { + "@electron/windows-sign": "^1.1.2" + } + }, + "node_modules/electron-winstaller/node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/electron-winstaller/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "license": "MIT", + "peer": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/electron-winstaller/node_modules/lodash": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/electron-winstaller/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/electron/node_modules/@types/node": { + "version": "24.13.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.13.3.tgz", + "integrity": "sha512-Dh8vAsV36ig5wa9OX4pXvMc9D3Veibfw2wix0CUwYODLD8nkj9UsLjASr49nPg+2eKzxhBV+v7L8pXvT4e639Q==", + "license": "MIT", + "dependencies": { + "undici-types": "~7.18.0" + } + }, + "node_modules/electron/node_modules/undici-types": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", + "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/entities": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-8.0.0.tgz", + "integrity": "sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-3.0.0.tgz", + "integrity": "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true, + "license": "MIT" + }, + "node_modules/errno": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.6.tgz", + "integrity": "sha512-IsORQDpaaSwcDP4ZZnHxgE85werpo34VYn1Ud3mq+eUsF593faR8oCZNXrROVkpFu2TsbrNhHin0aUrTsQ9vNw==", + "license": "MIT", + "optional": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/exponential-backoff": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.3.tgz", + "integrity": "sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.7.tgz", + "integrity": "sha512-dOvZVzjdZdz7phd9v6jCbwxrBW3fK6n8Rc0CtdmM4bumzMnxywBYhuph6J819RRw/ku+rLbelwfMunktuzVVHg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/filelist": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.6.tgz", + "integrity": "sha512-5giy2PkLYY1cP39p17Ech+2xlpTRL9HLspOfEgm0L6CwBXBTgsK5ou0JtzYuepxkaQ/tvhCFIJ5uXo0OrM2DxA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.4.tgz", + "integrity": "sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-extra/node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/global-agent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", + "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "boolean": "^3.0.1", + "es6-error": "^4.1.1", + "matcher": "^3.0.0", + "roarr": "^2.15.3", + "semver": "^7.3.2", + "serialize-error": "^7.0.1" + }, + "engines": { + "node": ">=10.0" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/google-protobuf": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-4.0.2.tgz", + "integrity": "sha512-yD2fqbNgvJPuQwdKJiPdbUcXveNRxgqy070gzsBsCyFJA8Qdj9oxa9xtkddb/JEhcDk0RD5SfGUWg+nhINfMxA==", + "license": "(BSD-3-Clause AND Apache-2.0)" + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/got": { + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=10.19.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true, + "license": "ISC" + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-what": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", + "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", + "license": "MIT", + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/isbinaryfile": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-5.0.7.tgz", + "integrity": "sha512-gnWD14Jh3FzS3CPhF0AxNOJ8CxqeblPTADzI38r0wt8ZyQl5edpy75myt08EG2oKvpyiqSqsx+Wkz9vtkbTqYQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "node_modules/isexe": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.5.tgz", + "integrity": "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/jake": { + "version": "10.9.4", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.4.tgz", + "integrity": "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "async": "^3.2.6", + "filelist": "^1.0.4", + "picocolors": "^1.1.1" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jiti": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz", + "integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/js-base64": { + "version": "3.9.3", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.9.3.tgz", + "integrity": "sha512-uwYQp+VJ38FVvtim6qNbit6e9uT6dwWQ4Y1+H9TxhW5hcHjpHwoxlR0nMpqUmIFOmu4VqMxwdJA88gIVuZJQ/g==", + "license": "BSD-3-Clause" + }, + "node_modules/js-yaml": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.2.tgz", + "integrity": "sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/js-yaml/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true, + "license": "ISC", + "optional": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/lazy-val": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.5.tgz", + "integrity": "sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/less": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/less/-/less-4.9.1.tgz", + "integrity": "sha512-orp15PfJvvNDIqJdVWzMI9Sjpjp3VTiw3sfvbB+67LlISTEn8uVT2EdYSuyl02BLvaftv6sdk9Umnxmm5rckmg==", + "license": "Apache-2.0", + "dependencies": { + "copy-anything": "^3.0.5", + "parse-node-version": "^1.0.1" + }, + "bin": { + "lessc": "bin/lessc" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "make-dir": "^5.1.0", + "mime": "^1.4.1", + "needle": "^3.1.0", + "probe-image-size": "^7.2.3", + "source-map": "~0.6.0" + } + }, + "node_modules/less/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "optional": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/linkify-it": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-6.1.0.tgz", + "integrity": "sha512-wJ/TwpSDTLepCrQoYWYIExIKg5Zchex2Nn5yk2mFnB+6PtdkHtyLx742md9csRjjOnGkKIS/RrbY7l8D6gT9Vw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/markdown-it" + } + ], + "license": "MIT", + "dependencies": { + "uc.micro": "^3.0.0" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "license": "MIT", + "optional": true + }, + "node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-dir": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-5.1.0.tgz", + "integrity": "sha512-IfpFq6UM39dUNiphpA6uDezNx/AvWyhwfICWPR3t1VspkgkMZrL+Rk1RbN1bx+aeNYwOrqGJgEgV3yotk+ZUVw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/markdown-it": { + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-15.0.1.tgz", + "integrity": "sha512-9/7gE95FNPkfUWrjJIoHZza2iLmuJlPD0UNMxPi7bxUrbCR525YZY0r+zyfes0dZI5ZZ/uNIXUJca0pJvtw41g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/markdown-it" + } + ], + "license": "MIT", + "dependencies": { + "argparse": "^3.0.0", + "entities": "^8.0.0", + "linkify-it": "^6.0.0", + "mdurl": "^2.1.0", + "punycode.js": "^2.3.1", + "uc.micro": "^3.0.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" + } + }, + "node_modules/markdown-it-task-lists": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/markdown-it-task-lists/-/markdown-it-task-lists-2.1.1.tgz", + "integrity": "sha512-TxFAc76Jnhb2OUu+n3yz9RMu4CwGfaT788br6HhEDlvWfdeJcLUsxk1Hgw2yJio0OXsxv7pyIPmvECY7bMbluA==", + "license": "ISC" + }, + "node_modules/marked": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-14.0.0.tgz", + "integrity": "sha512-uIj4+faQ+MgHgwUW1l2PsPglZLOLOT1uErt06dAPtx2kjteLAkbsd/0FiYg/MGS+i7ZKLb7w2WClxHkzOOuryQ==", + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/matcher": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", + "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "escape-string-regexp": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mdurl": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.1.0.tgz", + "integrity": "sha512-1+HBaOx0zi/dQWht8rNv9MYf9qqpqL/kxI0hXImU6Y547zM6Sni8BQibt7ifgMcYtQg41ao3Ivd6cnSM86inpg==", + "license": "MIT" + }, + "node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minizlib": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha512-SknJC52obPfGQPnjIkXbmA6+5H15E+fR+E4iR2oQ3zzCLbd7/ONua69R/Gw7AgkTLsRG+r5fzksYwWe1AgTyWA==", + "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", + "license": "MIT", + "dependencies": { + "minimist": "0.0.8" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mkdirp/node_modules/minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha512-miQKw5Hv4NS1Psg2517mV4e4dYNaO3++hjAvLOAzKqZ61rH8NS1SK+vbfBWZ5PY/Me/bEWhUwqMghEW5Fb9T7Q==", + "license": "MIT" + }, + "node_modules/monaco-editor": { + "version": "0.56.0", + "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.56.0.tgz", + "integrity": "sha512-sXboRm3BeBeLm938eaiyLMe0OxzfXIlZvbv4ir/jVgQy1zDhWjgmny0WoN45fuDKhCCQsYMbBJrv/A6jd8aCUg==", + "license": "MIT", + "dependencies": { + "dompurify": "3.4.8", + "marked": "14.0.0" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/needle": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-3.5.0.tgz", + "integrity": "sha512-jaQyPKKk2YokHrEg+vFDYxXIHTCBgiZwSHOoVx/8V3GIBS8/VN6NdVRmg8q1ERtPkMvmOvebsgga4sAj5hls/w==", + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.3", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, + "node_modules/node-abi": { + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-4.35.0.tgz", + "integrity": "sha512-ymk4aIzxdPopw2giv8Fs1Ec6vybGkjmyxUwVqhkI4MCy2tVfXdkOGGWieWVjL0THgH+7a8lRdevyupoYj3Js/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.6.3" + }, + "engines": { + "node": ">=22.12.0" + } + }, + "node_modules/node-api-version": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/node-api-version/-/node-api-version-0.2.1.tgz", + "integrity": "sha512-2xP/IGGMmmSQpI1+O/k72jF/ykvZ89JeuKX3TLJAYPDVLUalrshrLHkeVcCCZqG/eEa635cr8IBYzgnDvM2O8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.3.5" + } + }, + "node_modules/node-gyp": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-12.4.0.tgz", + "integrity": "sha512-OMcPNvqTCFUnNaBlmdgq+lfNqY7gTiSmNRDjY3uAXRyudeKZEZxu3CLtjMQrx4zZxCX2b/mpNqTtwuCJgXhHkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "graceful-fs": "^4.2.6", + "nopt": "^9.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.5", + "tar": "^7.5.4", + "tinyglobby": "^0.2.12", + "undici": "^6.25.0", + "which": "^6.0.0" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/node-gyp/node_modules/abbrev": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-4.0.0.tgz", + "integrity": "sha512-a1wflyaL0tHtJSmLSOVybYhy22vRih4eduhhrkcjgrWGnRfrZtovJ2FRjxuTtkkj47O/baf0R86QU5OuYpz8fA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/node-gyp/node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/node-gyp/node_modules/isexe": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-4.0.0.tgz", + "integrity": "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=20" + } + }, + "node_modules/node-gyp/node_modules/nopt": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-9.0.0.tgz", + "integrity": "sha512-Zhq3a+yFKrYwSBluL4H9XP3m3y5uvQkB/09CwDruCiRmR/UJYnn9W4R48ry0uGC70aeTPKLynBtscP9efFFcPw==", + "dev": true, + "license": "ISC", + "dependencies": { + "abbrev": "^4.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/node-gyp/node_modules/undici": { + "version": "6.28.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.28.0.tgz", + "integrity": "sha512-LIY910g9TI13YS95lrMFrs8Rm/u/irgHeTWoKCoteeJ04CUJ92eEfj0rVn+7VKMPBpUPiUoBKfhNyLI23EE/KA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.17" + } + }, + "node_modules/node-gyp/node_modules/which": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-6.0.1.tgz", + "integrity": "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^4.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pe-library": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/pe-library/-/pe-library-0.4.1.tgz", + "integrity": "sha512-eRWB5LBz7PpDu4PUlwT0PhnQfTQJlDDdPa35urV4Osrm0t0AqQFGn+UIkU3klZvwJ8KPO3VbBFsXquA6p6kqZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/jet2jet" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz", + "integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkijs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/pkijs/-/pkijs-3.4.0.tgz", + "integrity": "sha512-emEcLuomt2j03vxD54giVB4SxTjnsqkU692xZOZXHDVoYyypEm+b3jpiTcc+Cf+myooc+/Ly0z01jqeNHVgJGw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@noble/hashes": "1.4.0", + "asn1js": "^3.0.6", + "bytestreamjs": "^2.0.1", + "pvtsutils": "^1.3.6", + "pvutils": "^1.1.3", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/pkijs/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/plist": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.1.0.tgz", + "integrity": "sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@xmldom/xmldom": "^0.8.8", + "base64-js": "^1.5.1", + "xmlbuilder": "^15.1.1" + }, + "engines": { + "node": ">=10.4.0" + } + }, + "node_modules/postject": { + "version": "1.0.0-alpha.6", + "resolved": "https://registry.npmjs.org/postject/-/postject-1.0.0-alpha.6.tgz", + "integrity": "sha512-b9Eb8h2eVqNE8edvKdwqkrY6O7kAwmI8kcnBv1NScolYJbo59XUF0noFq+lxbC1yN20bmC0WBEbDC5H/7ASb0A==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "commander": "^9.4.0" + }, + "bin": { + "postject": "dist/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/postject/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "node_modules/probe-image-size": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/probe-image-size/-/probe-image-size-7.4.0.tgz", + "integrity": "sha512-cdEprVtZxV+awMde9X+4jILBFYh4CARxVrQaMl4wY4YcPWbul9jntXrIW95NInBDyJwcVUP3U0T6yukN8rMBaQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], + "license": "MIT", + "optional": true, + "dependencies": { + "lodash.merge": "^4.6.2", + "needle": "^2.5.2", + "stream-parser": "~0.3.1" + } + }, + "node_modules/probe-image-size/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/probe-image-size/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/probe-image-size/node_modules/needle": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.9.1.tgz", + "integrity": "sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, + "node_modules/proc-log": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", + "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha512-yN0WQmuCX63LP/TMvAg31nvT6m4vDqJEiiv2CAZqWOGNWutc9DfDk1NPYYmKUFmaVM2UwDowH4u5AHWYP/jxKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/proper-lockfile": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", + "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "retry": "^0.12.0", + "signal-exit": "^3.0.2" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "license": "MIT", + "optional": true + }, + "node_modules/pump": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", + "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/pvtsutils": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.6.tgz", + "integrity": "sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.8.1" + } + }, + "node_modules/pvutils": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.2.0.tgz", + "integrity": "sha512-BbubeCEyTuQjVMakvJQ/Sxbc93F2pwmbsxONT/ZRrwU7Ua38d8unYTwXpTVLAKJ4BDuH9IGztCjQcd/N/39Dvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-binary-file-arch": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/read-binary-file-arch/-/read-binary-file-arch-1.0.6.tgz", + "integrity": "sha512-BNg9EN3DD3GsDXX7Aa8O4p92sryjkmzYYgmgTAc6CA4uGLEDzFfxOxugu21akOxpcXHiEgsYkC6nPsQvLLLmEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4" + }, + "bin": { + "read-binary-file-arch": "cli.js" + } + }, + "node_modules/readable-stream": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.0.3", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resedit": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/resedit/-/resedit-1.7.2.tgz", + "integrity": "sha512-vHjcY2MlAITJhC0eRD/Vv8Vlgmu9Sd3LX9zZvtGzU5ZImdTN3+d6e/4mnTyV8vEbyf1sgNIrWxhWlrys52OkEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pe-library": "^0.4.1" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/jet2jet" + } + }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/responselike": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "lowercase-keys": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "glob": "^7.0.5" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/roarr": { + "version": "2.15.4", + "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", + "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "boolean": "^3.0.1", + "detect-node": "^2.0.4", + "globalthis": "^1.0.1", + "json-stringify-safe": "^5.0.1", + "semver-compare": "^1.0.0", + "sprintf-js": "^1.1.2" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/roarr/node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "dev": true, + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT", + "optional": true + }, + "node_modules/sanitize-filename": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.4.tgz", + "integrity": "sha512-9ZyI08PsvdQl2r/bBIGubpVdR3RR9sY6RDiWFPreA21C/EFlQhmgo20UZlNjZMMZNubusLhAQozkA0Od5J21Eg==", + "dev": true, + "license": "WTFPL OR ISC", + "dependencies": { + "truncate-utf8-bytes": "^1.0.0" + } + }, + "node_modules/sax": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.1.tgz", + "integrity": "sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==", + "devOptional": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } + }, + "node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/serialize-error": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", + "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "type-fest": "^0.13.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "devOptional": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/stat-mode": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-1.0.0.tgz", + "integrity": "sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/stream-parser": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz", + "integrity": "sha512-bJ/HgKq41nlKvlhccD5kaCr/P+Hu0wPNKPJOH7en+YrJu/9EgqUF+88w5Jb6KNcjOFMhfX4B2asfeAtIGuHObQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "debug": "2" + } + }, + "node_modules/stream-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "optional": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/stream-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT", + "optional": true + }, + "node_modules/string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sumchecker": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", + "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", + "license": "Apache-2.0", + "dependencies": { + "debug": "^4.1.0" + }, + "engines": { + "node": ">= 8.0" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar": { + "version": "7.5.22", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.22.tgz", + "integrity": "sha512-MFO/QzvtAOmJbkhOaCTvbGcFN9L9b+JunIsDwaKljSOdcLMea3NJ1k9Usz/rjdfSXTq4dfzfeS7W4p4YOAAHeA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/temp": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.9.4.tgz", + "integrity": "sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "mkdirp": "^0.5.1", + "rimraf": "~2.6.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/temp-file": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/temp-file/-/temp-file-3.4.0.tgz", + "integrity": "sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-exit-hook": "^2.0.1", + "fs-extra": "^10.0.0" + } + }, + "node_modules/tiny-async-pool": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/tiny-async-pool/-/tiny-async-pool-1.3.0.tgz", + "integrity": "sha512-01EAw5EDrcVrdgyCLgoSPvqznC0sVxDSVeiOz09FUpjh71G79VCqneOr+xvt7T1r76CF6ZZfPjHorN2+d+3mqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^5.5.0" + } + }, + "node_modules/tiny-async-pool/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tmp-promise": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", + "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tmp": "^0.2.0" + } + }, + "node_modules/tmp-promise/node_modules/tmp": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.7.tgz", + "integrity": "sha512-e0votIpp4Uo2AJYSzVHV6xCcawuiez3DzqDAbrTc3YxBkplN6e+dM13ZeIcZnDg/QpSuU2zfZ3rzwY8ukEnaXw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.14" + } + }, + "node_modules/truncate-utf8-bytes": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", + "dev": true, + "license": "WTFPL", + "dependencies": { + "utf8-byte-length": "^1.0.1" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/type-fest": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-7.0.2.tgz", + "integrity": "sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc" + }, + "engines": { + "node": ">=16.20.0" + }, + "optionalDependencies": { + "@typescript/typescript-aix-ppc64": "7.0.2", + "@typescript/typescript-darwin-arm64": "7.0.2", + "@typescript/typescript-darwin-x64": "7.0.2", + "@typescript/typescript-freebsd-arm64": "7.0.2", + "@typescript/typescript-freebsd-x64": "7.0.2", + "@typescript/typescript-linux-arm": "7.0.2", + "@typescript/typescript-linux-arm64": "7.0.2", + "@typescript/typescript-linux-loong64": "7.0.2", + "@typescript/typescript-linux-mips64el": "7.0.2", + "@typescript/typescript-linux-ppc64": "7.0.2", + "@typescript/typescript-linux-riscv64": "7.0.2", + "@typescript/typescript-linux-s390x": "7.0.2", + "@typescript/typescript-linux-x64": "7.0.2", + "@typescript/typescript-netbsd-arm64": "7.0.2", + "@typescript/typescript-netbsd-x64": "7.0.2", + "@typescript/typescript-openbsd-arm64": "7.0.2", + "@typescript/typescript-openbsd-x64": "7.0.2", + "@typescript/typescript-sunos-x64": "7.0.2", + "@typescript/typescript-win32-arm64": "7.0.2", + "@typescript/typescript-win32-x64": "7.0.2" + } + }, + "node_modules/uc.micro": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-3.0.0.tgz", + "integrity": "sha512-U3PppEkleoTnIfi8BozMx3yju3qc/L6SwqWo2Sw+54PX+PX0q9I+r1Um5HCmqD7n9VDX5/v3vQH/AjA6deDdtw==", + "license": "MIT" + }, + "node_modules/undici": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.29.0.tgz", + "integrity": "sha512-IDxfleLmmbSskfWSUATiN1nfn2rDuvnMOqb5CWR92iIfojA0Ud+ulOAAEQ57LPr9rWmsreUyf5lwyao+7GNNVw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=20.18.1" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unzipper": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.12.5.tgz", + "integrity": "sha512-tXYOi9R57Uj/2Z25SOs5RRSzq886MBQj2gY8dPL+xl/kv6s6SvByoKfAtvfVeEuhntWDgjd2o9p2lb4TVPAz0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "bluebird": "~3.7.2", + "duplexer2": "~0.1.4", + "fs-extra": "11.3.1", + "graceful-fs": "^4.2.2", + "node-int64": "^0.4.0" + } + }, + "node_modules/unzipper/node_modules/fs-extra": { + "version": "11.3.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.1.tgz", + "integrity": "sha512-eXvGGwZ5CL17ZSwHWd3bbgk7UUpF6IFHtP57NYYakPvHOs8GDgDe5KJI36jIJzDkJ6eJjuzRA8eBQb6SkKue0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/unzipper/node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/utf8-byte-length": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz", + "integrity": "sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==", + "dev": true, + "license": "(WTFPL OR MIT)" + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webcrypto-core": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/webcrypto-core/-/webcrypto-core-1.9.2.tgz", + "integrity": "sha512-gsXecm82UQNlTBURJGuqOWy1Ww08S3kZUcr3aOJS02Pk0xLtkfeUAVC0u0xhgdonFme80edSJUIJyuvL/7250Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.7.0", + "@peculiar/json-schema": "^1.1.12", + "@peculiar/utils": "^2.0.2", + "asn1js": "^3.0.10", + "tslib": "^2.8.1" + } + }, + "node_modules/which": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/xmlbuilder": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", + "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/yargs": { + "version": "17.7.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.3.tgz", + "integrity": "sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/Console/package.json b/Console/package.json index f43735ba..517c0fd1 100644 --- a/Console/package.json +++ b/Console/package.json @@ -1,7 +1,10 @@ { + "name": "bert2-console", "version": "2.4.3", + "description": "BERT console: an editor and shell for R in Excel", + "author": "Structured Data, LLC", + "license": "GPL-3.0", "main": "main.js", - "name": "bert2-console", "build": { "directories": { "output": "../Build/Console" @@ -21,32 +24,32 @@ }, "scripts": { "start": "electron .", - "clean": "rm -fr build/*", - "build": "./node_modules/.bin/less-watch-compiler --run-once && ./node_modules/.bin/tsc", - "watch": "./node_modules/.bin/less-watch-compiler & ./node_modules/.bin/tsc --watch &", - "package": "./node_modules/.bin/electron-builder", - "repackage": "./node_modules/.bin/less-watch-compiler --run-once && ./node_modules/.bin/tsc && ./node_modules/.bin/electron-builder" + "clean": "node -e \"require('fs').rmSync('build', {recursive: true, force: true})\"", + "build": "lessc style/style.less build/style.css && tsc", + "watch": "tsc --watch", + "package": "electron-builder", + "repackage": "npm run build && electron-builder" }, "devDependencies": { - "@types/node": "^8.9.1", - "asar": "^0.14.1", - "electron": "^1.8.2", - "electron-builder": "^19.56.0", - "less-watch-compiler": "^1.11.0", - "typescript": "^2.7.2" + "@types/node": "^22.0.0", + "electron": "^44.1.1", + "electron-builder": "^26.15.3", + "typescript": "^7.0.2" }, "dependencies": { - "@types/text-encoding": "^0.0.32", - "chokidar": "^2.0.1", - "electron-reload": "^1.2.2", - "electron-window-state": "^4.1.1", - "google-protobuf": "^3.5.0", - "js-base64": "^2.4.3", - "less": "^3.0.1", - "markdown-it": "^8.4.0", - "markdown-it-task-lists": "^2.1.0", - "monaco-editor": "^0.10.1", - "rxjs": "^5.5.6", - "xterm": "^3.2.0" + "@electron/remote": "^2.1.3", + "@xterm/addon-fit": "^0.11.0", + "@xterm/addon-web-links": "^0.12.0", + "@xterm/xterm": "^6.0.0", + "chokidar": "^4.0.3", + "electron-window-state": "^5.0.3", + "google-protobuf": "^4.0.2", + "js-base64": "^3.9.3", + "less": "^4.9.1", + "markdown-it": "^15.0.1", + "markdown-it-task-lists": "^2.1.1", + "monaco-editor": "^0.56.0", + "rxjs": "^7.8.2", + "wcwidth": "^1.0.1" } } diff --git a/Console/src/common/clipboard.ts b/Console/src/common/clipboard.ts new file mode 100644 index 00000000..c011c111 --- /dev/null +++ b/Console/src/common/clipboard.ts @@ -0,0 +1,54 @@ +/** + * Copyright (c) 2017-2018 Structured Data, LLC + * + * This file is part of BERT. + * + * BERT is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * BERT is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with BERT. If not, see . + */ + +import * as remote from '@electron/remote'; + +/** + * text clipboard for the renderer. + * + * electron no longer offers its clipboard module to renderer processes and + * points at the standard web API instead, which is what this uses. that API + * refuses to work while the document does not have the focus, which can + * happen around native menus, so the main process clipboard (reached + * through @electron/remote) is the fallback: it is the same clipboard, and + * it does not care about focus. + */ +export const clipboard = { + + async writeText(text: string): Promise { + try { + await navigator.clipboard.writeText(text); + } + catch (e) { + console.info("clipboard write via the main process:", e.message || e); + remote.clipboard.writeText(text); + } + }, + + async readText(): Promise { + try { + return await navigator.clipboard.readText(); + } + catch (e) { + console.info("clipboard read via the main process:", e.message || e); + return remote.clipboard.readText(); + } + } + +}; diff --git a/Console/src/common/config_manager.ts b/Console/src/common/config_manager.ts index 855f4b73..66ccc2ce 100644 --- a/Console/src/common/config_manager.ts +++ b/Console/src/common/config_manager.ts @@ -72,7 +72,7 @@ class ConfigManager extends Rx.BehaviorSubject { this.ReadConfig().then(() => { FileWatcher.Watch(this.config_path); - FileWatcher.events.filter( x => (x === this.config_path)).subscribe(x => { + FileWatcher.events.pipe(Rx.filter(x => (x === this.config_path))).subscribe(x => { this.ReadConfig(); }); }); @@ -104,7 +104,7 @@ class ConfigManager extends Rx.BehaviorSubject { * */ private ReadConfig() : Promise { - return new Promise((resolve, reject) => { + return new Promise((resolve, reject) => { fs.readFile(this.config_path, "utf8", (err, json) => { if(!err){ this.raw_config_file_ = json; diff --git a/Console/src/common/message_utilities.ts b/Console/src/common/message_utilities.ts index 0a6f9b9d..aa801f35 100644 --- a/Console/src/common/message_utilities.ts +++ b/Console/src/common/message_utilities.ts @@ -81,7 +81,12 @@ export class MessageUtilities { return object; default: - console.info(`UNTRANSLATED (${x.getValueCase()})\n`, x.toObject()); + // R 4.x sends value types this console does not render, and logging + // every one of them floods the devtools console. keep the diagnostic, + // but behind an opt-in environment variable. + if(process.env.BERT_DEBUG){ + console.info(`UNTRANSLATED (${x.getValueCase()})\n`, x.toObject()); + } return null; } } diff --git a/Console/src/common/update_check.ts b/Console/src/common/update_check.ts index f25069b1..d66bbd8e 100644 --- a/Console/src/common/update_check.ts +++ b/Console/src/common/update_check.ts @@ -27,6 +27,12 @@ export namespace UpdateCheck { }); */ + // a development build carries a tag after the release number (see + // BERT/BERT/include/bert_version.h). it is not a release, so there is + // nothing to compare it against; skip the check rather than offer an + // older release as an upgrade. + if(!/^\d+(\.\d+)*$/.test(process.env.BERT_VERSION || "")) return; + let response = await fetch("https://bert-toolkit.com/version.json", {cache: "no-cache"}); let version_object = await response.json(); diff --git a/Console/src/common/utilities.ts b/Console/src/common/utilities.ts index 5e817c42..f7d966fa 100644 --- a/Console/src/common/utilities.ts +++ b/Console/src/common/utilities.ts @@ -36,8 +36,13 @@ export class Utilities { } + /** + * "2.4.3" -> 2004003. anything after the numeric part, such as the tag a + * development build carries ("2.4.3-r4 (built ...)"), is ignored. + */ static VersionToNumber(version_string){ - return version_string.split(".").reduce((a,x) => a * 1000 + (Number(x)||0)); + let numeric = ((version_string || "").match(/^\d+(\.\d+)*/) || [""])[0]; + return numeric.split(".").reduce((a,x) => a * 1000 + (Number(x)||0), 0); } } diff --git a/Console/src/editor/editor.ts b/Console/src/editor/editor.ts index 78ce7b1d..c0b9904d 100644 --- a/Console/src/editor/editor.ts +++ b/Console/src/editor/editor.ts @@ -24,11 +24,13 @@ import * as fs from 'fs'; import * as Rx from 'rxjs'; import { EEXIST } from 'constants'; -import * as MarkdownIt from 'markdown-it'; -import * as MarkdownItTasks from 'markdown-it-task-lists'; +import MarkdownIt from 'markdown-it'; +import MarkdownItTasks from 'markdown-it-task-lists'; const MD = new MarkdownIt().use(MarkdownItTasks); -import { remote, clipboard, shell as electron_shell } from 'electron'; +import { shell as electron_shell } from 'electron'; +import { clipboard } from '../common/clipboard'; +import * as remote from '@electron/remote'; const { Menu, MenuItem, dialog } = remote; const Constants = require("../../data/constants.json"); @@ -36,6 +38,7 @@ const TabContextMenuData = require("../../data/menus/editor_tab_context_menu.jso const SchemaSchema = require("../../data/schemas/schema.schema.json"); import { MenuUtilities } from '../ui/menu_utilities'; +import { AlertManager } from '../ui/alert'; import { Utilities } from '../common/utilities'; import { UserStylesheet } from '../ui/user_stylesheet'; import { TabPanel, TabJustify, TabEventType, TabSpec } from '../ui/tab_panel'; @@ -110,6 +113,9 @@ interface OpenFileOptions { */ export class Editor { + /** asks about unsaved changes when a file is closing */ + private alerts_ = new AlertManager(); + /** flag for loading, in case we have multiple instances */ static loaded_ = false; @@ -129,17 +135,37 @@ export class Editor { if (this.loaded_) return Promise.resolve(); - return new Promise((resolve, reject) => { + return new Promise(async (resolve, reject) => { this.loaded_ = true; - // see monaco electron sample for this + // index.html loads the AMD loader in a script tag after the console's + // own code, so it is not there yet if we got here from a promise that + // resolved during startup. wait for the page to finish parsing. + + if (typeof amd_require === "undefined") { + if (document.readyState !== "loading") { + return reject(new Error("monaco loader not found")); + } + await new Promise(r => document.addEventListener("DOMContentLoaded", () => r(), { once: true })); + } + + // see the monaco electron-amd sample for this. hiding node's module + // global is the sample's workaround for language contributions that + // otherwise mistake the environment. + + // preferScriptTags keeps the loader on